雑記(ViT対局・INT8-FP16調査など)

ViT対局させた

 初期局面から100戦しかやってないので参考程度だが、明らかに弱かった。vs水匠5。

 Google Compute Engine環境での対局

Intel(R) Xeon(R) CPU @ 2.30GHz
4Thread
GPU : T4
time(Miacis) = 1000msec, time(水匠5) = 250msec

 結果

モデル Policy損失 Value損失 引分 勝率 相対レート
ResNet(20bl 256ch) 1.7833 0.4700 52 2 46 53.0% 20.9
ViT(6bl 256ch) 1.7184 0.4796 11 0 89 11.0% -363.2

INT8ダメじゃね?

 TransformerをTensorRT変換する場合、INT8変換があまり有効じゃないかもという話をしているページを見つけた。資料1資料2

 T4環境でも試してみた。

 ViTのNPS 2807(INT8)→6689(FP16) めっちゃ速くなった。

 先と同様のResNetでもFP16を試してみると以下の結果。

モデル NPS Policy損失 Value損失 引分 勝率 相対レート
ResNet(INT8) 9118 1.7833 0.4700 52 2 46 53.0% 20.9
ResNet(FP16) 6303 1.7598 0.4625 61 2 37 62.0% 85.0
ViT(INT8) 2807 1.7184 0.4796 11 0 89 11.0% -363.2
ViT(FP16) 6689 1.7184 0.4796 39 2 59 40.0% -70.4

 ResNetだとFP16では速度が落ちるが、精度が落ちないので結果的に強い。以前の結果ではINT8の方が強かったんだけど……。以前の記事。INT8での精度劣化が大きくなっている気がする。精度や速度について、エンジン作成時にいくらかランダム性、ブレがあることは把握しているので、そういうところがやや面倒だ。

 ViTではなぜかINT8でもFP16でも精度が変わらない。これViTのなんらかがTRTに対応してないのでFP32で計算されているとかそういうことになっていないか? あと精度が変わらないのにNPSの2.38倍くらいでレート差が300近く出るのはやや違和感がある。100戦程度ではブレが大きいので、まぁそういうだけのことかなとは思うけど。

 表全体を見ると、結局Value損失が小さいのが重要という説が相変わらず一貫していると思う。