ディープラーニング系の将棋AIは、従来の将棋AIと比べてNPSが低くても強いという特徴がある。
NPSがどれくらい違うのか質問を受けることがあるので、測定を行った。
NPSのカウント方法の違い
やねうら王(元はStockfishのソース)のNPSは、探索中にdo_moveを行った回数をノード数としてカウントしている。
一方、dlshogiは、ノードをニューラルネットワークで評価した回数をノード数としてカウントしている。
そのため、NPSをそのまま比較するのは公平ではない。
そこで、やねうら王のノード数のカウント方法を、qsearchでevalを呼び出したタイミングでカウントするように変更したバージョンでも測定を行った。
測定条件
ソフトウェア
ソフトウェア、バージョン | 条件 |
---|---|
水匠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に最適化してビルド
対象局面
floodgateの棋譜からサンプリングした100局面
DeepLearningShogi/benchmark.py at 5026dfa1b0ba3180f57757a0b83461dfc33cc444 · TadaoYamaoka/DeepLearningShogi · GitHub
思考時間
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である。