2019/10/22 作成 2019/12/18 改定
・ベースとなるAMIを変更しました。これにより必要手順がすこし減りました
・cfgファイル、ネットワークファイルについての記述し、日本ルール対応方法を追記しました
Amazon EC2 p2.xlarge のサーバーで KataGo (CUDA版)をビルドするまでの手順メモです。
cmake とか KataGo をビルドする環境の準備がちょっとした手間でした。
ベースとなるAMI として各種GPUドライバの入ってるこれを選びました。
(Nvidia とか CUDA とかのドライバのインストールって、ググっていただければわかりますが、なかなかややこしいのです。今回の選択は賢明だったようで、そのへんの問題は全くありませんでした)
OS としてはなんとなく慣れてる感じの Ubuntu 18。

追記(2019/12/19):
Deep Learning Base AMI (Ubuntu 18.04) Version 21.0
を使えば初めから入っている cmake が使え、またストレージを50GBしか使わないとご指摘いただきました。
最新のcmakeのソースをダウンロードしてビルドしてインストール
wget https://github.com/Kitware/CMake/releases/download/v3.16.0-rc2/cmake-3.16.0-rc2.tar.gz
tar xzvf cmake-3.16.0-rc2.tar.gz
cd cmake-3.16.0-rc2/
./bootstrap
make
sudo make install
(↑wget と https:// の間に改行は入りません)
KataGo をゲットしてビルドの準備をします。
cd ~
git clone https://github.com/lightvector/KataGo.git
cd KataGo/cpp/
cmake . -DBUILD_MCTS=1 -DUSE_BACKEND=CUDA
ビルドの前に日本語ルール対応の改造をしておきます。
vi neuralnet/desc.cpp
編集内容はこちらの記事をご参照ください。
ファイルを保存してビルドします。
make
KataGoの設定ファイルとネットワークファイルは Lizzie 0.7.2 Windows版に同梱されているものを使用しました。
cd ~
wget https://github.com/featurecat/lizzie/releases/download/0.7.2/Lizzie.0.7.2.Windows.x64.GPU.zip
unzip Lizzie.0.7.2.Windows.x64.GPU.zip
(↑wget と https:// の間に改行は入りません)
追記(2019/12/19):
cfgファイルは KataGo/cpp/configs/gtp_example.cfg があるということと、ネットワークファイルはこちらから落とすのがよいとご指摘いただきました、
katago ディレクトリを作成して必要ファイルを集めます。
mkdir katago
cp KataGo/cpp/katago katago/
cp Lizzie/katago-gtp10.cfg katago/katago-gtp-ch.cfg
cp Lizzie/katago-gtp10.cfg katago/katago-gtp-jp.cfg
cp Lizzie/katanetwork.gz katago/
katago-gtp-jp.cfg についてこちらの記事を参考に書き換えてください。
手元のパソコンの Lizzie とクラウドの KataGo をつなげる設定については、LeelaZero についての情報、主としてaws guideを参考にしました。
Windows の場合は aws guide にある ssh.bat の中の
cd leela-zero; ./leelaz --gtp --lagbuffer 0 --weights elf.gz --threads 2
の部分を
cd katago; ./katago gtp -model katanetwork.gz -config katago-gtp-jp.cfg
に書き換えます。katago-gtp-jp.cfg のところを katago-gtp-ch.cfg にすれば中国ルールでの動作になります。
2019/12/19追記
plink に -no-antispoof を追加しないとまずいようです。山口さんはサーバー側で細工してるのかな
%plink_path% -no-antispoof -ssh -i %key_path% ubuntu@%server_ip% cd katago; ./katago gtp -model katanetwork.gz -config katago-gtp-jp.cfg
おまけのメモ
AWS CLI というコマンドラインツールがあって、自分が立ち上げた EC2 のインスタンスが1つだけなら下記で簡単に IP アドレスが返ります。(jq というのは aws から返った JSON を解析するために用いる別ソフト) --query を使えばjq不要ですね 10/23 追記・書き換え
aws ec2 describe-instances --filter "Name=instance-state-name,Values=running" --output text --query 'Reservations[].Instances[].PublicIpAddress'
これを使えば Lizzie から KataGo を起動するシェルスクリプトやバッチファイルのIPアドレス部分を(aws guide にあるように)手書きで書き換えない工夫もできるでしょう。
一例として私が作ったMac用のシェルスクリプトが下記。
Windows ではバッククォートの技が使えないでしょうからもうひと工夫がいるでしょうね。
(10/22 追記 Windows の PowerShell で $() が使えるようなのでその点の工夫は不要のようです)
なお、1行目の -l がないと、環境変数が読み込まれず、aws が起動できないなどの問題が生じました。
#!/bin/bash -l
IPADDRESS=`aws ec2 describe-instances --filter "Name=instance-state-name,Values=running" --output text --query 'Reservations[].Instances[].PublicIpAddress'`
ssh -oStrictHostKeyChecking=no -i ~/.ssh/katago-aws.pem ubuntu@$IPADDRESS "cd katago; ./katago gtp -model katanetwork.gz -config katago-gtp-jp.cfg"
MacBook の Lizzie で動かしてる様子がこちらです。さすが速いです。