dlshogiの棋力測定する際に、dlshogiの過去のバージョンとの対局だとレーティング差が実際よりも大きくなる傾向がある。
そこで、棋力測定では水匠5を加えてリーグ戦で連続対局している。
普段の棋力測定では、対局条件をフィッシャールールの持ち時間で対局を行っており、dlshogiの30ブロック(A100 1枚)と水匠5(32スレッド)を互角にするには、水匠5の持ち時間を10倍にするとだいたい互角になる。
参考:将棋AI実験ノート:30ブロックの学習 - TadaoYamaokaの開発日記
持ち時間を条件にすると、GPUやCPUが変わると、互角の条件が変わってしまうため、固定プレイアウト(固定ノード数)でも互角になる条件を調べた。
計測
水匠5を2500倍
まず、dlshogiのプレイアウト数(Const_Playout)を5万に固定して、水匠5のノード数(NodesLimit)を2500倍にして測定した。
dlshogiはV100 1枚、3スレッド
水匠5は、8スレッド、やねうら王 V7.0を使用した。
思考時間は、dlshogiは、1手約8秒、水匠5は、1手約30秒になる。
同一の棋譜になると棋力を正しく測定できないため、dlshogiは序盤32手まで、評価値にしきい値を設けた上でランダムにプレイするようにした。
これにより、dlshogiの棋力は少し下がる。
計測コマンド
python -u -m cshogi.cli /work/DeepLearningShogi/usi/bin/usi /work/YaneuraOu/bin/YaneuraOu-by-gcc --name1 pre33 --name2 suisho5-8thx2500 --options1 Const_Playout:50000,Random_Ply:32,Random_Cutoff:25,Random_Cutoff_Drop:1,PV_Mate_Search_Threads:1,C_init:127,C_base:27126,C_fpu_reduction:31,C_init_root:112,C_base_root:33311,Softmax_Temperature:140,Draw_Ply:320,UCT_NodeLimit:50000000,OwnBook:false,PV_Interval:0,DNN_Model:/work/model/model-pre33_resnet30x384_relu_b4096lr004-012.onnx,UCT_Threads:0,UCT_Threads8:3 --options2 NodesLimit:125000000,USI_Hash:10240,Threads:8,PvInterval:9999,ResignValue:10000,MaxMovesToDraw:320,NetworkDelay2:0 --draw 320 --games 1000 --pgn 20221209_pre33_vs_su5_po50k-01.pgn
測定結果
# PLAYER : RATING ERROR POINTS PLAYED (%) CFS(%) W D L D(%) 1 pre33 : 46.5 29.4 86.5 138 63 100 80 13 45 9 2 suisho5-8thx2500 : -46.5 29.4 51.5 138 37 --- 45 13 80 9 White advantage = 77.24 +/- 30.91 Draw rate (equal opponents) = 10.04 % +/- 2.67
dlshogiが、R+93.0になった。
水匠5を5000倍
次に、水匠5をdlshogiの5000倍にして測定した。
思考時間は、dlshogiは、1手約8秒、水匠5は、1手約80秒になる。
計測コマンド
python -u -m cshogi.cli /work/DeepLearningShogi/usi/bin/usi /work/YaneuraOu/bin/YaneuraOu-by-gcc --name1 pre33 --name2 suisho5-8thx5000 --options1 Const_Playout:50000,Random_Ply:32,Random_Cutoff:25,Random_Cutoff_Drop:1,PV_Mate_Search_Threads:1,C_init:127,C_base:27126,C_fpu_reduction:31,C_init_root:112,C_base_root:33311,Softmax_Temperature:140,Draw_Ply:320,UCT_NodeLimit:50000000,OwnBook:false,PV_Interval:0,DNN_Model:/work/model/model-pre33_resnet30x384_relu_b4096lr004-012.onnx,UCT_Threads:0,UCT_Threads8:3 --options2 NodesLimit:250000000,USI_Hash:10240,Threads:8,PvInterval:9999,ResignValue:10000,MaxMovesToDraw:320,NetworkDelay2:0 --draw 320 --games 1000 --pgn 20221210_pre33_vs_su5_po50k-01.pgn
測定結果
# PLAYER : RATING ERROR POINTS PLAYED (%) CFS(%) W D L D(%) 1 pre33 : 13.6 23.7 99.0 183 54 87 83 32 68 17 2 suisho5-8thx5000 : -13.6 23.7 84.0 183 46 --- 68 32 83 17 White advantage = 95.71 +/- 25.12 Draw rate (equal opponents) = 18.37 % +/- 3.01
dlshogiが、R+27.2になり、有意差なしとなった。
なお、序盤をランダムプレイありで対局しており、ランダムプレイなしの場合より誤差は大きくなる。
tanuki(Joyful Believer)とも対局
tanuki(Joyful Believer)が公開されたので、tanuki(Joyful Believer)とも7000倍の条件で対局してみた。
思考時間は、dlshogiは、1手約8秒、tanuki(Joyful Believer)は、1手約110秒になる。
# PLAYER : RATING ERROR POINTS PLAYED (%) CFS(%) W D L D(%) 1 pre33 : 6.8 43.6 33.5 63 53 62 29 9 25 14 2 tanuki-8thx7000 : -6.8 43.6 29.5 63 47 --- 25 9 29 14 White advantage = 139.72 +/- 46.11 Draw rate (equal opponents) = 15.70 % +/- 4.82
7000倍でほぼ互角になっている。
ノード数のカウント方法
dlshogiとやねうら王では、ノード数のカウント方法に違いがあり、やねうら王のノード数を約1/4.2にするとだいたい同じカウント数になる。
カウント方法を補正すると、約1190倍でほぼ互角になる。
まとめ
dlshogiの30ブロックと水匠5を固定プレイアウト(ノード)で対局した場合、水匠5(8スレッド)のノード数をdlshogi(1GPU、3スレッド)の5000倍にするとほぼ互角になることが分かった。
スレッド数が変わると条件も変わるので注意が必要である。
水匠5は少ないスレッド数で測定しているので、スレッド数を増やす場合は、スレッド数の平方根に比例して倍率を増やす必要がある。
なお、公開しているモデル(dr2_exhi)と水匠4が互角の強さの頃に、測定したときは、NPSの比は、約338倍であった。
dlshogiのNPSは、ブロック数を増やすごとに低下しているが、NPSが低くなると弱くなっていると思われることがあるが、この結果からそうではないことがわかる。