bullet-shogiの話

コンピュータ将棋界にNNUEがリリースされたのが2018年です。

第28回世界コンピュータ将棋選手権

この件で野田さんのチームが独創賞となっています。

 

同年中に様々な改良を試みて独自の推論エンジン、学習器を作成した件は以前も書きました。学習器はどうやら稚拙だったらしく初代Ryzen8コアをもってしても30分で500万局面程度の学習速度しか出ていなかった記録があります。

これが二桁違ったら景色は変わっていたかもしれません。

 

その後、野田さんの移植によりNNUEがチェス界に持ち込まれ、そこで花開きます。

nnue-pytorchという学習器がStockfishの標準的な学習器となっています。これを再度、野田さんが将棋界に逆輸入したのが今のNNUEの標準的な学習器です。

nnue-pytorchのメモ - 48's diary

 

NNUE自体は小さな隠れ層三層のニューラルネットワークですのでCPUでの高速推論が持ち味ですが、学習器としては軽すぎてほぼデータローダがボトルネックになります。

ということでこの将棋用にデータローダを書き換えた点が素晴らしい貢献と言うことです。手持ちのRTX3080搭載ゲーミングノートPCで10億局面を1時間で学習できるくらいの高速化です。

 

で、タイトルのbullet-shogiの話です。

bulletはチェス界でnnue-pytochに変わろうとする学習器でRustで開発されています。

それを将棋界に持ち込まれたのがbullet-shogiですね。

https://github.com/SH11235/bullet-shogi

https://github.com/jw1912/bullet

 

結論から言いますと圧倒的に速いです。ボトルネックが大幅解消されたのか、上記PCで100億局面でも2時間かからないペースです。nnue-pytorchではあまり負荷がかからなかったCPUおよびGPUが熱々になります。

 

では使い方の概要。

Rustインストールは普通の64ビットWindowsのデフォルトでOK。間違えてもMSYS2などとの互換性のあるGNU版を入れてはいけません。CUDAが叩けなくなります。

CUDA_PATHやPATHなどの環境変数は適当に整えておきましょう。VisualStudioは2022でも2026でも大丈夫のようです。nvccなども必要ですのでCUDA Toolkitも必須。

Rustのライブラリであるcudarcが幅広いCUDAバージョンに対応しているのでCUDAのバージョンはあまり気にしなくて良さそうです。

 

現時点での本体はexampleフォルダにあるshogi_simple.rsのようですのでビルドに必要なコマンドは

cargo build --release --example shogi_simple

となります。

releaseフォルダ以下にshogi_simple.exeが出来ますので適当なオプションをつけて実行しましょう。

 

デフォルトの入力型がhalfka-hmだそうですので以下のようにするとhalf-kpになります。スレッド数はCPUのスレッド数限界まで使うのが速そうです。

shogi_simple.exe --features half-kp --data data.bin --scale 508 --threads 16

 

ソースや-hのオプションでオプションの説明が出るので適当にモデル型など変えて遊べそうですね。

最後に野田さん移植のnnue-pytorchとの大きな差異として、学習器部分のオプティマイザやスケジューラがあります。

オプティマイザのデフォルトがRanger(RAdamの改良版)だそうです。

オプション設定なども可能なので弄りどころのひとつでしょう。

 

ーーー

おまけ:

ボトルネックになる部分があると劇的に遅くなります。SSDはNVMe必須ですし、GPU接続はx16でしょう。GPUはRTX3060くらいでもデータローダが足を引っ張る感じですので8コア以上のCPUを使いましょう。

ストレージやバスがボトルネックになるため、ハイエンドは無駄なので多数実験するならミドル級を複数用意する方が捗ると思われます。