TadaoYamaokaの日記

山岡忠夫Homeで公開しているプログラムの開発ネタを中心に書いていきます。

水匠4とdlshogiのNPSの比較

ディープラーニング系の将棋AIは、従来の将棋AIと比べてNPSが低くても強いという特徴がある。
NPSがどれくらい違うのか質問を受けることがあるので、測定を行った。

NPSのカウント方法の違い

やねうら王(元はStockfishのソース)のNPSは、探索中にdo_moveを行った回数をノード数としてカウントしている
一方、dlshogiは、ノードをニューラルネットワークで評価した回数をノード数としてカウントしている。
そのため、NPSをそのまま比較するのは公平ではない。

そこで、やねうら王のノード数のカウント方法を、qsearchでevalを呼び出したタイミングでカウントするように変更したバージョンでも測定を行った。

測定条件

ハードウェア
CPU AMD EPYC 7742 64コア×2
GPU A100×8
ソフトウェア
ソフトウェア、バージョン 条件
水匠4 やねうら王V6.04、128スレッド、ハッシュ16GB
水匠4 NPS変更 やねうら王V6.04、128スレッド、ハッシュ16GB
dlshogi with GCT(WCSC31) ResNet10ブロック、8GPU、5スレッド/GPU
dlshogi dr2_exhi ResNet15ブロック、8GPU、4スレッド/GPU

※水匠4 NPS変更が、上記のNPSのカウント方法を変更したバージョン
※やねうら王はZEN2に最適化してビルド

思考時間

1秒/局面

測定結果

NPS
水匠4 水匠4 NPS変更 dlshogi with GCT dlshogi dr2_exhi
平均 99,890,518 23,917,691 320,066 295,643
中央値 100,784,164 23,112,924 320,377 300,384
最小値 66,594,384 15,496,863 218,794 219,697
最大値 121,220,480 40,340,437 389,231 344,105
比率
水匠4 NPS変更/水匠4 dlshogi with GCT/水匠4 dlshogi dr2_exhi/水匠4 dlshogi with GCT/水匠4 NPS変更 dlshogi dr2_exhi/水匠4 NPS変更
平均 23.94%(1/4.2) 0.32%(1/312) 0.30%(1/338) 1.34%(1/75) 1.24%(1/81)
中央値 22.93%(1/4.4) 0.32%(1/315) 0.30%(1/336) 1.39%(1/72) 1.30%(1/77)
最小値 23.27%(1/4.3) 0.33%(1/304) 0.33%(1/303) 1.41%(1/71) 1.42%(1/71)
最大値 33.28%(1/3.0) 0.32%(1/311) 0.28%(1/352) 0.96%(1/104) 0.85%(1/117)

考察

やねうら王のNPSのカウント方法をevalを呼び出した回数にすると、NPSは平均で約1/4.2になる。

dlshogiとNPSカウント方法変更前の水匠4と比較すると、
dshogi with GCT(ResNet10ブロック)は、NPSは平均で約1/312である。
dshogi dr2_exhi(ResNet15ブロック)は、NPSは平均で約1/338である。
なお、A100の場合、10ブロックと15ブロックでそれほどNPSが違わないが、V100だと大きな差がでる。

NPSカウント方法変更後の水匠4と比較すると、
dshogi with GCT(ResNet10ブロック)は、NPSは平均で約1/75である。
dshogi dr2_exhi(ResNet15ブロック)は、NPSは平均で約1/81である。

まとめ

従来の将棋AIとディープラーニング系で、NPSにどれだけ違いがあるかを調査した。
NPSのカウント方法を公平にして比較すると、平均で10ブロックで1/75、15ブロックで1/81であることがわかった。
やねうら王を使用して通常表示されるNPSでは、平均で10ブロックで1/312、15ブロックで1/338であることがわかった。

ということで、NPSはどれくらい違うのかという質問を受けたら、「公平な条件で比較すると約1/80(もしくは約1.3%)です」と答えることにする。

なお、測定環境のCPUとGPUにも依存するため、今回の測定条件での参考値である。