要約
TensorRT(TRTorch)を導入したことでNPS約1.3倍、R+70ほど。
実装等
前回、同じデータについてMiacisとdlshogiの評価関数を比較した結果、そこまで精度に差がないのではないかという結果が得られた。この結果が正しいとすると、棋力の差は探索速度や効率に原因あるのではないかという仮説が立つ。
GCTの加納さんから情報提供をいただき、少なくとも探索効率以前にNPSで差があることは明らかになった。
dlshogi の探索部のバージョンにもよりますが、RTX 2080 Ti で30000〜40000 nps ぐらいです。RTX3090 で初期局面52000 nps 出るらしいです。gcttest_〜RTX2080ti は追加学習したシリーズですが、R4100〜ぐらいにはなりそうです。https://t.co/sxXB4AADlW
— k kanou (@k_kanou) 2021年1月30日
ニューラルネットワークの推論速度についてはTensorRTが速いらしいのでそれを導入することにした。
MiacisはPyTorch(およびそのC++APIであるLibTorch)を使っている。いくらか調べた結果、そこからTensorRTを用いたグラフのコンパイルをするためのライブラリとしてTRTorchというものが良さそうだったため、これを利用することにした。
このライブラリではTorchScriptという形式を入力とすることでTensorRTを用いたグラフを構築することができる。というわけでまず、今までのモデルをTorchScriptへと変換する必要がある。C++内でこれを行う手法はよくわからなかったため、多少汚いものになったがPythonスクリプトを実装した。
C++で定義しているニューラルネットワークと同じ構造のニューラルネットワークをPython内で定義し、パラメータを一つ一つ手動で読み込んでくるといったものになっている。
TorchScriptモデルが出力できれば、あとはTRTorchのチュートリアルが示すとおりに読み込み、コンパイルを行えば良い。以前強化学習によって得たパラメータをTensorRTでコンパイルし、全く同じ検証損失が得られることを確認できた。
NPSの測定
初期局面と中盤の局面(sfen l2+P4l/7s1/p2ppkngp/9/2p6/PG7/K2PP+r+b1P/1S5P1/L7L w RBGS2N5Pgsn2p 82
)の2つで計測を行った。それぞれ10秒の思考を10回行った平均値となる。
モデル | NPS(初期局面) | NPS(中盤局面) |
---|---|---|
LibTorch版(ランダムパラメータ) | 21260 | 17862 |
TRTorch版(ランダムパラメータ) | 26937 | 24745 |
LibTorch版(学習済みパラメータ) | 6626 | 5922 |
TRTorch版(学習済みパラメータ) | 24580 | 22299 |
LibTorchの学習済みパラメータだけ異様にNPSが低く、妙である。ランダムパラメータで比較した場合TRTorchの導入でNPSは1.27倍だが、学習済みパラメータで比較すると3.71倍となる。
完全に同じ学習済みパラメータではないが、1年ほど前に同じ関数で計測したNPSをツイートしており、そのときはもっと高かった。
初期局面について同じ設定で10回計測した結果が画像で、左がNPS、右が最善手(最大探索回数となった手)なんですけど、NPSはともかく最善手は結構ブレますね pic.twitter.com/MIhf3PUj1U
— t (@tokumini_ss) 2020年3月31日
そのときの詳細な結果が残っていたのでそれを見たところ、初期局面:18553, 中盤局面:15120であった。この結果で計算し直すとTRTorch版はLibTorch版の1.32倍であり、ランダムパラメータのときとだいたい同じくらいになる。
学習済みパラメータを用いたLibTorch版での対局が弱いことはないので、NPSの表示だけがおかしいと見なすのがもっとも収まりがよく思える。この点に関しては要調査。
対局
強化学習を経て得られたパラメータを用いて対局を行った。対戦相手は探索部:去年の5月時点Yaneuraou、評価関数パラメータ:Kristallweizenとなっている。Miacis側は1手0.25秒、Kristallweizen側はNodesLimit=400000。定跡はオフ。
モデル | 勝数 | 引分数 | 負数 | 勝率 | レート差 |
---|---|---|---|---|---|
LibTorch版 | 558 | 1 | 441 | 55.9% | 40.8 |
TRTorch版 | 655 | 0 | 345 | 65.5% | 111.4 |
R+70.6という結果になった。NPS約1.3倍にしてはレートの上がり方が大きいように思う。とはいえ伸びたので良し。
余談
環境を新しくしたことで、最初は間違えて対戦相手のYaneuraouの探索部を最新のバージョンにしてしまっていた。そのときの対局結果が以下の通り。
モデル | 勝数 | 引分数 | 負数 | 勝率 | レート差 |
---|---|---|---|---|---|
TRTorch版 | 451 | 0 | 549 | 45.1% | -34.2 |
先の結果と比べると-145.6であり、やねうら王の探索部は約1年でこれくらい上がっているようだ。