やねうら王をLinuxで動かそう

やねうら王

やねうら王とは超有名な将棋ソフトで、派生したソフトがいくつも出ていることで有名。しかもその殆どが競合ソフトだというのだから驚くべきことである。

基本アプローチはやねうら王ベースで、そこから各自いろいろ学習方法を変えたりパラメータを変えたりでしのぎを削っています。

現在のところ、やねうら王の探索エンジンを改良したdolphinと評価関数としてorqhaを組み合わせるのが最強だと言われています。

評価関数はただのバイナリなのでどのOSでも読み込むことができるのだが、dolphinはWindows向けにビルドされているのでそのままではLinuxでは動かすことができない。

というわけで、dolphinをLinux向けにビルドするのが本記事の目的となる。

なお、今回はLinuxとして最もメジャーなUbuntu 18.04を対象として検証を行いました。

dolphin4.01

最新の4.01がGoogle Driveで公開されているのでダウンロードしましょう。

dolphin4.01_source.zipがそれにあたります。

解凍したらディレクトリを移動します。

ビルド

clang++かg++に対応しているので好きな方をインストールしてください。

sudo apt install clang++ g++ make

CPUがSSE4.2かAVX2に対応しているかでビルドオプションが変わってくるので確認しましょう。

# g++, avx2
make avx2 COMPILER=g++
# g++, sse4.2
make sse42 COMPILER=g++
# clang, avx2
make avx2
# clang, sse4.2
make sse42

デフォルトでclang++が選択されているのでclangの場合は特に気にしなくてもよいです。

YaneuraOu-by-gccが作成されていたら成功です。

コンパイラをclang++を指定しても何故か生成される実行ファイルはYaneuraOu-by-gccになるんですが、仕様なんでしょうか?

実際に動かしてみた

評価関数であるnn.binをEvalディレクトリにコピーしておかないとエラーで起動しないので注意してください。

評価関数はorqhaのものを使用していますが、やねうら王系統のNNUE型であれば多分何でも使えます。

試しに局面を指定して解析してみたところ、こんな感じになりました。

60秒で探索したのですが、ノード数が5000万程度でもそこそこ正確に評価できているのが良いですね。

CPUNPSノード数評価値深さ
6700K4230kN/sec249,084,728-58324/35
G3900834kN/sec49,117,243-59622/36

CPUコア数は2倍なのですが、NPSは5倍くらいでているのがいいですね。

AWSで接続すれば20000kNPSくらいでるらしいのでオススメです。

あとがき

さて、とりあえず探索部エンジンをLinuxで動かすことには成功しました。

あとはUSIプロトコルを送るプログラムを書いてそれをブラウザから実行できるような仕組みを作ればブラウザからsfenで局面図を送信するだけで評価値と最善手を返すページが作れるはずです。

もちろん、ブラウザで一分や二分も待つわけにはいかないので1秒程度の探索にはなるのですが、1000kNPSもあれば1秒の探索でもアマチュア高段者クラスは十分にあると思うのでアマチュアの簡易的な解析としては十分でしょう。