TadaoYamaokaの開発日記

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

将棋AIの進捗 その60(固定プレイアウトで水匠5と互角になる条件)

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が低くなると弱くなっていると思われることがあるが、この結果からそうではないことがわかる。