TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

将棋AIの進捗 その42(TensorRT対応)

TensorRTがdlshogiのDNNの推論においても効果があることがわかったので、TensorRTをdlshogiに組み込んだ。
Tensorコアを搭載したGPUでは、以前のcuDNN版に比べて推論が大幅に高速化される。

実装

ONNXから読み込んだネットワークのビルドには数十秒近く時間がかかるため、ONNXファイルと同じディレクトリに、ビルド済みのネットワークをシリアライズしキャッシュすることにした。
GPUごとバッチサイズごとに最適化が行われるため、拡張子に、「.<バッチサイズ>.serialized」を付与して保存を行う。
次回以降は、キャッシュしたファイルがある場合は、キャッシュを使用することで高速に起動できる。

NPS測定

floodgateの棋譜からサンプリングした100局面で探索を行い、NPSを測定した。

cuDNN(FP16)版と比較した結果は以下の通り。
局面によってNPSが異なるため、平均、中央値、最大、最小を示す。
バッチサイズは128とした。
GPUは、GeForce 2080Tiを使用した。

条件 平均 中央値 最大 最小
cuDNN(FP16) 19485.5 20226.0 24822 12954
TensorRT(FP16) 25866.2 26497.5 37477 14648
測定コード

https://github.com/TadaoYamaoka/DeepLearningShogi/blob/master/utils/benchmark.py
ハッシュ再利用を無効にしている。

考察

TensorRT(FP16)版が、cuDNN(FP16)版よりも平均値で1.33倍高速になっている。

推論速度のみを測定した場合の1.58倍に比べて効果が低くなっている。
これは、実際の探索時は、並列化したスレッドでノードが衝突した場合にその探索を破棄しているため、ゲーム木が浅い段階では少ないバッチサイズで推論を行っているためと考えられる。

初期局面と、NPSが低い局面*1で、バッチサイズごとの回数を計測した結果は以下の通りであった。
f:id:TadaoYamaoka:20200419113142p:plain

NPSが低い局面では、衝突が頻繁に起きており少ないバッチサイズで推論が実行されている。
バーチャルロスを上げる(現在は1)ことで衝突を減らすことができるが、以前にチューニングした結果ではバーチャルロスは1の方が勝率が高くなる。

ゲーム木が深くなると衝突が少なくなるため、実際の対局ではハッシュを再利用することでゲーム木はある程度の深さを保つため、今回の計測よりも高いNPSになるはずである。

強さの測定

NPSの向上が強さに反映されるかをApery(WCWS28)と1手3秒で100回対局して確認した。

条件 勝率 信頼区間
cuDNN(FP16) 57 36 7 61% 51.13%-70.55%
TensorRT(FP16) 63 32 5 66% 56.34%-75.02%

TensorRT(FP16)版の方が勝率が上がっているが、100局では有意差は計測できなかった。

Tesla V100での計測

Tesla V100×8枚でもNPSを計測した。

条件 平均 中央値 最大 最小
cuDNN(FP16) 96815.6 103290.5 132283 31217
TensorRT(FP16) 112523.2 120992.0 163265 29869

TensorRT(FP16)の方が、cuDNN(FP16)よりも平均で1.16倍NPSが上がっているが、2080Tiほど差がない。
8GPUで並列化を行っているため、より衝突が起きやすい状況になっているためと考えられる。
それでも8GPUによる並列化により、2080Ti単体よりも同じTensorRT(FP16)版で平均で4.35倍のNPSになっている。

floodgateで強さを測定

普段は2080Ti 1枚でfloodgateでテストしているが、昨日はTesla V100×8枚でどれくらいの強さになっているか確認するため、TensorRT(FP16)版をTesla V100×8枚で実行してテストしてみた。
f:id:TadaoYamaoka:20200419115424p:plain

R4200以上のソフト(Yashajin_Ai)に2回勝っており、強くなっていそうである。

まとめ

dlshogiをTensorRTに対応することで、NPSが大幅に向上した。
NPSが向上することで、(対局数が少なく有意差までは計測できていないが)勝率が上がることを確認した。


Tesla V100×8枚を使うことで、R4200以上のソフトにも勝てることがわかったので、世界コンピュータ将棋オンライン大会では決勝に残れるかもしれません。

*1:position startpos moves 2g2f 8c8d 7g7f 3c3d 2f2e 8d8e 6i7h 4a3b 2e2d 2c2d 2h2d 8e8f 8g8f 8b8f 2d3d 2b3c 3d3f 3a2b P*8g 8f8d 3f2f 8d3d 3i3h 5a6b 5i6h 7a7b 2f2h 6b7a 9g9f 5c5d 3g3f 7a8b 3h3g 3d2d P*2e 2d3d 4i4h 9c9d 8h6f 3c6f 6g6f 2a3c B*6g 3d4d 3g4f 6c6d 7h7g P*2f 4h3h 2b2c 4f3e B*5e 2i3g 6d6e 2h2f 6e6f 6g5f P*3d 3e4d 5e4d 2f2i 3d3e 3f3e 5d5e 5f7h P*3f 3g4e 3f3g+ 3h3g S*6g 7h6g 6f6g+ 6h6g 3c4e 3g4f 4e5g+ 6g5g N*6e 5g6g 6e7g+ 6g7g 5e5f S*5e 5f5g+ 5e4d 4c4d N*8d G*6g 7g8f 7b8c N*7e 8c7d P*6b 6a6b P*6c 9d9e B*9d P*8e 8f9g 9e9f 9g9f 9a9d P*9e 9d9e 9f9e P*9d