TadaoYamaokaの日記

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

将棋AIの進捗 その48(NPS改善)

ノード再利用の方式見直しを行った後、強くなっているかApery(WCSC28)と1手3秒100局で確認を行った。

結果、勝利は62%で、変更前は69%だったので、強くなっていないことがわかった。

考察

理由としては、以下が考えられる。

  • Ponderなしの秒読みではノード再利用が少なく時間がかかっていないこと、秒読みでも探索打ち切りを行っているので、探索ノード数変わらないことから、そもそもノード再利用の遅延の影響がない
  • 合流を処理しなくなった分、合流するノードの探索数が減っている。

秒読みでは、強さは測れなかった。
ただし、秒読みでの強さより、大会ルールでの強さを優先したいため、ノード再利用の変更は取り込む予定である。

また、探索打ち切りを行わずに、秒読みぎりぎりまで探索するようにすれば、おそらくノード再利用変更後が強くなるはずである。
次善手の訪問数が残り時間を費やしても最善手を超えない場合打ち切っているが、これは秒読みでは不利になるので行わない方が良い。
別途、探索打ち切りを行うかどうかをオプションで変更できるようにしたい。

NPSが安定しない問題点

合流を処理しなくなった分、NPSは全体的にあがると考えていたが、平均1万5000くらいのところ、4000くらいに極端に落ちるときがある。
同じ局面を何回か探索すると、毎回結果が異なる。

原因を調べたところ、現在、並列処理で同じ末端ノードに達した場合、探索を破棄するようにしているが、その際バーチャルロスも元に戻していたため、同じスレッドで次の探索を行った際に同じノードに達するため、バッチサイズが上がらない(NPSが上がらない)という問題があった。

同一スレッド内でも、一つのバッチ分の探索が完了するまでは、破棄した探索のバーチャルロスを戻さないように変更した。
それにより、一つのバッチ内でも探索ノードが分散されるようになり、NPSが安定するようになった。

1GPU、2スレッドで、floodgateからサンプリングした100局面での平均NPSは、

変更前 28652.4
変更後 31705.8

となり、平均で11%改善した。

8GPU、GPUあたり3スレッドでは、

変更前 158387.1
変更後 225794.9

となり、平均で43%改善した。
並列数が多いほど、改善の効果がでている。

ただし、並列数によるNPS増えても、強さが線形で伸びるわけではない。
NPSを上げようとすればさらに上げることはできるが、ゲーム木のバランス崩れるので、dlshogiではNPSを上げるよりゲーム木のバランスを優先している。

NPS改善後の強さの測定

NPSの改善を行った後、Apery(WCSC28)と1手3秒100局で確認を行った。
結果、勝率72%(信頼区間95%:62.2%-80.42%)となった。
NPS改善により、強くなっていそうである。

floodgateでのテスト

Tesla V100 8GPUでfloodgateでもテストを行った。
f:id:TadaoYamaoka:20200510182503p:plain

レーティング4283のsuisho2_xeonに2回勝っているが、レーティング3751のBlackCat_ts002_4cに1回負けている。
変更前でも読み筋は同じだったので、探索よりもモデルの精度の問題のようだ。
まだ中盤で読み抜けがありそうなので、強化学習を続けることでふさいでいく必要がある。

AobaZero_w1105_n_p800に1回負けているのはバグでTime outしたためだ。
スレッドプーリングに原因がありそうなので修正したが、本当にそれが原因だったかは再現性がなく確認できない。