Amazon EC2でDarkForestを動かしてみた

Amazon EC2のg2.2xlargeでDarkForestを動かしてみました。G2はGPUなインスタンスファミリーです。基本的にドキュメントどおりで、あまり中身のある内容ではありませんが、以下、簡単に手順を書いていきたいと思います。

まずはともあれ、DarkForestのドキュメントに目を通しておきます(g2.2xlargeはそんなに安くありませんので(笑)、インスタンス立ち上げる前に準備をしっかりしとかないとね!)。

darkforestGo/README.md at master ・ facebookresearch/darkforestGo ・ GitHub
https://github.com/facebookresearch/darkforestGo/blob/master/README.md

EC2は初めて使ったのですが、インスタンスの使用数に制限があって、私の場合は、なんとg2.2xlarge0(!)でした。制限緩和のリクエストは可能ですが、承認されるのに私の場合で半日ほど掛かりましたので、使用の予定がある時は、早めに確認しておくことをお勧めします。

OSは、Ubuntu 16.04で今回はいきたいと思います。Ubuntu初めて触りました。初めてだらけです。こちらのページで、Version16.04 LTSを選び、Instanch Typehvm:ebs-ssdを選びして(他との違いがよく分かりませんが…)、最後にZoneus-west-2(オレゴン)なami-191fd379に決定しました。

インスタンスを起動したら、まず最初にこちらに書かれていることを全部やります。ただし、cuDNNはcudnn-7.5-linux-x64-v5.1-rc.tgzを使用してみました。cuDNNのダウンロードには、NVIDIAのAccelerated Computing Developer Programへの登録が必要です。

Ubuntu 16.04へのCUDAインストール方法 – Qiita
http://qiita.com/yukoba/items/3692f1cb677b2383c983

次にTorchです。こちらを参考にします。

Torch | Getting started with Torch
http://torch.ch/docs/getting-started.html

言われるようにやっていきます。

$ git clone https://github.com/torch/distro.git ~/torch --recursive
$ cd ~/torch
$ bash install-deps
$ ./install.sh
$ source ~/.bashrc
$ luarocks install class
$ luarocks install image
$ luarocks install tds
$ luarocks install cudnn

そして、本題のDarkForest。まずはコンパイル。

$ git clone https://github.com/facebookresearch/darkforestGo.git ~/darkforest --recursive
$ cd ~/darkforest
$ sh ./compile.sh

次に、モデルファイルを用意します。

$ mkdir ~/darkforest/models

作ったmodelsディレクトリにこちらのファイルを(よく分からんから全部)入れておきます。

Dropbox – df_models
https://www.dropbox.com/sh/6nm8g8z163omb9f/AABQxJyV7EIdbHKd9rnPQGnha?dl=0

次に、pipeファイル用のディレクトリをどこか適当な場所に作ります。

$ mkdir ~/df_pipe

ここまでで、準備は完了です。そして、実際にDarkForestを動かすためには、まずGPUサーバを動かします。ここで、先ほどのpipeファイル用のディレクトリを指定してください。

$ cd ~/darkforest/local_evaluator
$ sh cnn_evaluator.sh 1 ~/df_pipe

そして、本体を動かします。再度、先ほどのpipeファイル用のディレクトリを指定してください。

$ cd ~/darkforest/cnnPlayerV2
$ th cnnPlayerMCTSV2.lua --pipe_path ~/df_pipe

これでGTPコマンドを受け付けてくれるようになります。cnnPlayerMCTSV2.luaにはオプションがいろいろあるので確認してみてください。ただ、MCTSではないPure-DCNN playerCNNPlayerV3.luaっていうのもあるのですが、こいつが動いてくれません(本当は、こっちに興味があったのですが…)。df.binは、代わりにdf2.binとかを使えばいいのかもしれませんが、value_model.binっていうのがどこにも見当たりません。残念です。

最後に、gogui-twogtpで取った棋譜を3局載せておきます。3局とも、黒が--time_limit 10で、白が--time_limit 20です(実際の消費時間は、白が黒の約1.37倍)。


Sorry, your browser doesn’t support WGo.js.

Sorry, your browser doesn’t support WGo.js.

Sorry, your browser doesn’t support WGo.js.

はっきりとは棋力が分かりませんが、とりあえず私よりは間違いなく強そう…(笑) とはいえ、私はこの3局以外にも何局か棋譜を確認しましたが、あきらかにおかしな手が結構あります。一種の攻め合いのような時が多いように思えますが、例えば、3局目の291手目(同じく292手目、293手目、ついでに295手目!)とかやばすぎる… 「MCTSは攻め合いが…」とかそんなレベルではないと思うし、というか、これはもうただのアタリアタリですしね。なんか致命的なのが、コードに残っているような気がします。

あと、部分部分でDarkForestがものすごく好む形っていうのがいろいろありますね。いくつかの棋譜を続けて見ていたら、「あれっ、これ今さっき見たやつじゃない?」ってなるぐらい、部分的に同じような形のオンパレードになります。ひとつだけ例をあげると、星に小ゲイマに掛かられた時、ほぼ例外なくケイマか一間に受けて、周りの状況がどうであれ、ハサミ返すことはしません(私がざっと見たかぎり、約20回中0回でした)。モデル、ひいてはそれを作成するのに使った棋譜によるところが大きいのだろうし、これをDarkForestの特徴とは言っていいのかよく分かりませんが、Fuegoなどでは、あまり感じない傾向だと思います。

先ほどの3局は、並列ではなく一局ずつ打たせてて、全部で3時間以上掛かっています。そして、あまりよく分からないですが、GPUはだいたい使い切っているように見えます。もちろん、消費リソースをもっと絞って打たせることはできますが、やっぱりお金が掛かりますね。「DarkForestを、なんらかの形でCOSUMIで使えたら…」と思ったのですが、簡単ではないなあ… また、しばらく考えておきます。

/proc/loadavgの謎

CentOS 5.5なCOSUMIのサーバでcat /proc/loadavgとすると、ごくまれに最後の改行が1つではなく2つになっていることがあります。どうでもいいような細かい話ではありますが(笑)、しかしたぶんこれは意図されていない出力形式だと思います。

$ cat /proc/loadavg
5.02 4.74 4.32 4/245 6023
$ cat /proc/loadavg
5.02 4.74 4.32 9/257 6072

$ cat /proc/loadavg
5.02 4.74 4.32 12/267 6146

そもそもなぜこれに気づいたかというと、この出力内容をログに取り続けているからなんですが、最近、そのログを見ていた時に、偶然、改行が2つの時だけに見られる奇妙な規則性に気がつきました。その規則性とは、「4カラム目のスラッシュの左側(実行中のプロセス数)が9」ということです(ほんとよく気がついたと思う(笑))。

5.02 4.74 4.32 9/257 6072

簡単なスクリプトを書いてさらにもう少し詳しく調べたところ、分かったのは、

  • 89の時しか改行が2つにならない
  • 8の時に改行が2つになる確率は、だいたい1%ぐらい。ごくまれ
  • 9の時に改行が2つになる確率は、だいたい50%ぐらい。こっちは多い

ということです。さらにさらに、以前使ってたサーバのログなども調べてみると、同じような条件で同じく改行2つになっている時があるのはあるのですが、発生頻度が今より少なかったです。初代、二代目、三代目(現在)となるにつれて、改行2つになる確率が増えていきます。ついでにいうと、簡単にしか調べてませんが、手元のPCでは改行2つが再現しませんでした。

一体なぜこういうことになるんでしょうか? 皆さんの環境でも同じことが起こりますか? とにかく不思議で不思議でしかたありません…

さくら専用サーバエントリープランの使用感

COSUMIは、さくらの専用サーバエントリープランで現在運営しています。このサーバを借り始めてから半年近く経ったので、このあたりで使ってみた感想を記事にしておきたいと思います。と言っても、ごく単純なウェブサーバとして使っているだけなので、高度な内容の話はなにもありません。

専用サーバ|エントリー:月額7800円ではじめられるさくらの専用レンタルサーバ
http://server.sakura.ad.jp/dedicated/entry/

ハードウェアはCeleron 215、メモリ 1GB、HDD 80GBとかなりミニマムなスペックです(なんて言ったら贅沢か(笑))。Celeron 215ってのが調べてもあまりよく分かりませんが、一応こんな感じのCPUです。

$ cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 14
model name	: Intel(R) Celeron(R) CPU          215  @ 1.33GHz
stepping	: 8
cpu MHz		: 1333.439
cache size	: 512 KB
fdiv_bug	: no
hlt_bug		: no
f00f_bug	: no
coma_bug	: no
fpu		: yes
fpu_exception	: yes
cpuid level	: 10
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat clflush
 dts acpi mmx fxsr sse sse2 ss tm pbe nx constant_tsc up pni monitor tm2 xtpr
bogomips	: 2667.65

なにを見てそう勘違いしたのか、借りる前はデュアルコアのCPUだと思ってたのですが、ではないです(泣)。ただしこちらからダウンロードしてきたSuperπでベンチとってみると、そこそこ速そう。

Start of PI calculation up to 1048576 decimal digits
 End of initialization. Time=       0.651 Sec.
 I= 1 L=       0        Time=       2.072 Sec.
 I= 2 L=       0        Time=       2.379 Sec.
 I= 3 L=       1        Time=       2.381 Sec.
 I= 4 L=       2        Time=       2.378 Sec.
 I= 5 L=       5        Time=       2.383 Sec.
 I= 6 L=      10        Time=       2.377 Sec.
 I= 7 L=      21        Time=       2.381 Sec.
 I= 8 L=      43        Time=       2.377 Sec.
 I= 9 L=      87        Time=       2.380 Sec.
 I=10 L=     174        Time=       2.377 Sec.
 I=11 L=     349        Time=       2.380 Sec.
 I=12 L=     698        Time=       2.376 Sec.
 I=13 L=    1396        Time=       2.379 Sec.
 I=14 L=    2794        Time=       2.374 Sec.
 I=15 L=    5588        Time=       2.371 Sec.
 I=16 L=   11176        Time=       2.358 Sec.
 I=17 L=   22353        Time=       2.324 Sec.
 I=18 L=   44707        Time=       2.266 Sec.
 I=19 L=   89415        Time=       2.104 Sec.
 End of main loop
 End of calculation.    Time=      46.937 Sec.
 End of data output.    Time=       0.195 Sec.
 Total calculation(I/O) time=      47.132(       1.321) Sec.

COSUMIはCPUがボトルネックなので、このあたりの数字が結構気になるのですが、とりあえずOKかな? ただ、今現在さくらのサイトでは、CPUはIntel CeleronまたはIntel Atomってなっていますので注意してください。Atomにもいろいろ種類があると思うのですが、どうなんでしょうか?

OSはCentOS 5のみです。上位のプランだともっとたくさんの種類の中から選べるのですが、個人的には他の選択肢があったとしてもCentOS 5を選ぶと思うので、別に構いません。

OSは選択できませんが、パッケージ構成は、「標準構成」と「最小構成」の二つから選べます。うちは最小構成なんですが、今さくらのサイト見てみると、最初はウェブサーバも入ってなかったんですね。自分で入れた記憶がちょっと無いんですが…(笑) 参考までに今現在こんな感じ。

$ rpm -qa | wc -l
478

自分で入れたパッケージはそんなにたくさんはないはずです。

それから、標準サービスとしてトラフィックレポートを見ることができるのがGood! サーバでの設定等は一切必要ありません。

専用サーバ|トラフィックレポート – さくらインターネット
http://server.sakura.ad.jp/dedicated/service/traffic.html

全体的な感想としてはかなり満足です。とりあえず今までのところ安定して動いてますし、サーバのレスポンスも悪くないと思うので。価格もまあ妥当ではないでしょうか? 初期費用が0っていうのは、気軽に始められるのですごくいいです! だめならだめでどこかに乗り換えればいいだけですしね。月額10,000円以下の専用サーバを探している時は、候補に入れてみてはいかがでしょうか?

[追記]
他の方が書かれたこちらの記事も参考にしてみてください。

さくらの専用サーバーエントリープランが良かった6つの理由(+嫌な点3つ)
http://p0t.jp/archives/2008/10/post-35.html

Linuxでファイルサイズを0にする

2008.06.09  |  Linux  |  Comments (0)

今回は、最近いろいろとさわる機会の多かったLinuxの話です。

大きくなったログファイルなどを、一旦クリアしてしまいたい時ってありますよね。rmしてtouchとかでもできなくはないですが、パーミッションを設定し直したりしないといけなかったりするので、あまりスマートな方法ではなさそうです。こういう時、普通はどうするのかなと思って調べていたら、こんなページが見つかりました。

ファイルを空にする – 揮発性のメモ
http://d.hatena.ne.jp/iww/20071007/cat

$ :> foo.log

おお、こんなやり方があるんですね。知りませんでした。しかし、このスマイリーみたいな:>の意味が分かりません。とりあえず、試しに目と口の間に(笑)スペースを入れてみます。

$ : > foo.log

これも先ほどと同じ結果になりました。ということは:>は別々のようです。>はリダイレクトですが、では一体:ってなんなのでしょうか? 記号ってほんと検索しにくいのですが(笑)がんばって調べてみると、こちらのページ曰く、何もせず,0を返すということだそうです。ということは、こんなのと一緒でしょうか?

$ echo > foo.log

と思ったら、ファイルサイズが1バイトになってしまいます。テキストエディタで開くと、改行が一つ入っていました。こういう時は

$ echo -n > foo.log

-nオプションを付けるといいようです。このあたりで気づいたのですが、これでもいいようです。

$ > foo.log

シンプル! 勉強になりました。ちなみに普通はこうするらしい。

$ cp /dev/null foo.log

まあそうですよね。たぶんこれが一番安全です。

[追記]
こちらのサイトも参考になると思います。