2018年05月24日

Facebook「ELF OpenGo」を動かしてみる

1. 前提となる環境の整備
「ELF OpenGo」を走らせるためには以下の環境が前提となっているので、それぞれ確認のうえ、不足がある場合はあらかじめインストールしておきます。
ただし、今回はGPUのない古いラップトップで走らせることを目的としているため、CUDA関連環境については無視してすすめます。

Ubuntu 18.04
Python 3.6
GCC 7.3
CUDA 9.0
CUDNN 7.0
NCCL 2.1.2

今後の作業をすすめていくために必要となるパッケージを、事前にインストールします。

$ sudo apt-get install git cmake g++ gcc libboost-all-dev libzmq3-dev


2. 「Anaconda」インストール
「Pytorch」ライブラリなどをインストールするため、「Anaconda」環境を構築します。
「Anaconda」サイト「Download」ボタンを押してダウンロードページへすすみ、「Python 3.6 version」の「64-Bit (x86) Linux Installer」をダウンロードします。
ダウンロードしたディレクトリに移動のうえ、以下のコマンドを実行して、「Anaconda」のインストールを開始します。
インストール手順ページの記述にしたがいますが、なにか問題が発生した場合はFAQページにヒントがあるかもしれません。

$ chmod +x Anaconda3-5.1.0-Linux-x86_64.sh
$ bash ./Anaconda3-5.1.0-Linux-x86_64.sh


ライセンス条項への同意を求められるので、全文を表示してから「yes」と回答すると、インストールがはじまります。
途中で「~/.bashrcにPATHを追加するかどうか」確認を求められるので、そこは確実に「yes」と回答します。
もし「No」ですすめてしまった場合は、あとから「~/.bashrc」をエディタで開き、ファイルの最後に「export PATH="/home/username/anaconda3/bin:$PATH"」という行を追加してやればO.K.です。
インストールが完了したら、いったんターミナルを閉じてあらためて開き(もしくは「$ source ~/.bashrc」コマンドを実行)、「$ anaconda-navigator」コマンドを実行してみます。
「ANACONDA NAVIGATOR」が起動すれば、ちゃんと「Anaconda」がインストールされている、ということです。
「Anaconda」環境で必要なパッケージを追加します。

$ conda install numpy zeromq pyzmq


3. 「Pytorch」インストール
ソースからインストールするには、「Pytorch」GitHubレポジトリにあるインストラクションにしたがって、以下のコマンドを実行していきます。
GPUをもたない古いラップトップで動かすため、環境変数「NO_CUDA=1」をエクスポートしてから、インストールスクリプトを実行します。

$ export NO_CUDA=1
$ export CMAKE_PREFIX_PATH="/home/username/anaconda3/"

$ conda install numpy pyyaml mkl mkl-include setuptools cmake cffi typing
$ conda install -c intel mkl-dnn

$ cd
$ git clone --recursive https://github.com/pytorch/pytorch
$ cd pytorch
$ python setup.py install


もしくは、上記ソースからのインストールに代えて、「pythorch nightly build」をインストールすることもできます。

$ conda install -c pytorch pytorch-nightly


4. 「ELF OpenGo」のビルド
ここまでの環境整備が終わったら、「ELF OpenGo」のソースを取得し、ビルド処理にすすみます。

$ cd
$ git clone https://github.com/pytorch/ELF
$ cd ELF
$ git submodule sync && git submodule update --init --recursive
$ make


ビルド処理が完了したら、「$ make test」コマンドを実行して、問題がないことを確認しておきます。

5. 「ELF OpenGo」の実行
「ELF OpenGo」を走らせるためには、あらかじめ「~/ELF」ディレクトリから「source scripts/devmode_set_pythonpath.sh」を実行したうえで、「~/ELF/scripts/elfgames/go」ディレクトリから「gtp.sh」を走らせることになります。
推奨される設定値は以下のとおりで、「mcts_rollout_per_thread」値を変更することで思考時間を調節できます。

./gtp.sh path/to/modelfile.bin --verbose --gpu 0 --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 8192 --resign_thres 0.05 --mcts_virtual_loss 1


まずは「ELF OpenGo」リリースページから、学習ずみモデル「pretrained-go-19x19-v0.bin」をダウンロードし、それをたとえば「~/ELF/bin/pretrained-go-19x19-v0.bin」などに設置します。
そのあと、以下のようなコマンドを実行していくと、「ELF OpenGo」がGTPコマンドを受けつける画面が開くはずです。
GPUをもたない非力なラップトップで動かすため、GPU指定「--gpu 0」をはずしたうえで、「mcts_rollout_per_thread」値をとてもちいさくしてあります。

$ cd /home/username/ELF/
$ source scripts/devmode_set_pythonpath.sh
$ cd /home/username/ELF/scripts/elfgames/go/
$ ./gtp.sh /home/username/ELF/bin/pretrained-go-19x19-v0.bin --verbose --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 100 --resign_thres 0.05 --mcts_virtual_loss 1


「genmove b」で黒の着手、「genmove w」で白の着手を「ELF OpenGo」に思考させて、ゲームをすすめていくことができます。
どちらかを自分で担当したい場合は、黒番なら「play b d4」、白番なら「play w q16」のように着点を指定します。
現状では、ターミナル上でGTPコマンドを打ち込むことでしか「ELF OpenGo」を動かせないので、「Sabaki」や「GoGui」などの囲碁GUIから対局ができるように設定する方法を模索していくつもりです。


参考ウェブページ一覧表(順不同)

https://www.digitalocean.com/community/tutorials/how-to-install-the-anaconda-python-distribution-on-ubuntu-16-04
posted by hatakazu at 20:45| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。