吟遊詩人のDeep Learningその5〜CPUを買った話〜

どうも、僕です。

前回、GPUに引き続いてCPUが限界になりました。

https://ginyusizin.wordpress.com/2021/03/06/%e5%90%9f%e9%81%8a%e8%a9%a9%e4%ba%ba%e3%81%aedeep-learning%e3%81%9d%e3%81%ae4%e3%80%9c%e3%81%aa%e3%82%93%e3%81%ae%e6%88%90%e6%9e%9c%e3%82%82%e5%be%97%e3%82%89%e3%82%8c%e3%81%aa%e3%81%8b%e3%81%a3/

CPU買うのはボーナス出るまで待とうとしたんですが、我慢できなかったので買ってしましました。

買ったのはこちら

DSC_0448

CPU:AMD ATHLON 3000G 3.50 GHz

マザーボード:ASRock B450M Pro4

メモリ:DDR4 PC4-21300 CL19 16GB×2

……いや、Ryzenでもないんかい。

まあAVX2命令が使えればこっちはナンだっていいんですよ。

あとオーバークロックで性能も上がるみたいなので一応期待

(参考) https://ascii.jp/elem/000/001/977/1977161/

マザボ取り換えるのは初めてでしたが、テキトーにコードをぶっさしてやったら動きました。ケースのファンのコードは3ピンだったんですが、CPUファン用の4ピンに挿しましたが、なんか動いてる音がするのでいいでしょう。

最終的に変更前と変更後のスペックはこちら

びふぉーあふたー
CPUIntel(R) Core(TM) i7-2600CPU @3.40 GHzAMD ATHLON 3000G 3.50 GHz
メモリDDR3 RAM 8.00 GB (4.00 GB×2)DDR4 PC4-21300 CL19 16GB×2
SSDSeagate Barracuda 1000 GBSeagate Barracuda 1000 GB
GPUGeforce GT520Geforce GT1030
マザボH61H2-M5 v5.0ASRock B450M Pro4
電源FSP 300-60GHT(J) (300 W)FSP 300-60GHT(J) (300 W)

これでAVX2に対応したマシンになっているはずです。

また、dlshogiをビルドする前にせっかくなのでソフト類も最新の環境に合わせてインストールしなおしました。

その際こちらの記事に合わせてディレクトリを配置することで、インクルードパスとかを追加で指定しなくてもよくしました。

https://github.com/TadaoYamaoka/DeepLearningShogi/issues/12

各バージョンはこんな感じ

PythonpipVisual
Studio
GPU(本体)GPUドライバーCUDAcuDNNTensorRTboostpytorch
3.8.5212019GeForce GT1030456.7111.18.1.07.2.3.41.751.7.1

現時点のdlshogiと同じバージョンです。

https://github.com/TadaoYamaoka/DeepLearningShogi

ビルドも一発OKで、いざ将棋所へエンジン登録です。

はい、フツーに動きました。そして強い。

探索局面は他のAIに比べて極端に少ないですが、それでも強いのはさすがディープラーニングですね。

苦労した甲斐がありましたね(古いPCじゃなければしない苦労)

自己対局&学習

さて、エンジン登録もできるようになったので、せっかくなので1からAIを育てたいと思います。

dlshogiには自己対局による棋譜生成プログラムとしてmake_hcpe_by_self_playが、

生成した棋譜を使って学習するためにdlshogi(python)が含まれていますが、これらの使い方については詳細なマニュアルがついていないのでこちらの記事を参考にやってみました。

https://colab.research.google.com/drive/1IxOvYlQVCsdrg2zjKjXwf99vnsX8Fzr3#scrollTo=6mJ8JN3D3bXb

で、こんな感じのフォルダ構成で以下のコマンドを実行

>.\make_hcpe_by_self_play –mate_depth 9 –mate_nodes 10000 –threashold 1 for_learning\model-0000167.onnx E:\AI\kif\aperygenerateteacher_v1.15.0\bin\roots.hcp train0.hcpe 10000 800 0 16

赤字の数字は局面数で、250万とかにするそうだけど、とりあえず1万で、あと、テスト用の局面をtest0.hcpeとして1000局面程用意した。

で、できた局面を使って学習。

こんな感じのフォルダ構成で以下のコマンドを実行

>python ..\DeepLearningShogi\dlshogi\train_rl_policy_with_value_using_hcpe_bootstrap.py ..\make_kif\train0.hcpe ..\make_kif\test0.hcpe –model .\model\model_test_0 –state .\model\state_test_0 –lr 0.01 -b 128 –testbatchsize 64 –log .\log\log_test1.log –eval_interval 1

バッチサイズはデフォルトだとでかすぎてGPUのメモリがエラーになるので小さめの値にしてます。あと、iterationが少ないからeval_interval 1にしてます。

学習はものの数分で終了して、結果はこんな感じ。

よくわからないのは、前にpython版のdlshogiで学習したときはfloodgateの3万局ぐらいの棋譜を使って学習して、その時のiterationsが120000とかなのに、今回自己対局で生成した1万局面を使うと80程度になるというところ。

よくわからないけど、3万対局が1500万局面位に対応するってことなのかな。

とりあえず今100万局面くらい生成させてるけど1週間くらいかかりそう。

局面の生成をどれくらいのペースで行えば適切なのかよくわからんですね。

あと、学習は100エポックくらいまわしてみたけど4エポック目ぐらいで過学習になってそうなので、やっぱ局面数は増やさないといけないみたい。

記念対局

そんなわけであんまり学習できてないけど、せっかく学習はできるようになったので、C++版のdlshogi AIと記念対局。(ちなみにできたmodel_test_0をconvert_model_to_onnx.py使ってonnx形式にしてから将棋所のエンジン編集からモデルに指定した。)

KIF形式棋譜ファイル

Generated by Shogidokoro

手合割:平手
先手:GILBEY
後手:dlshogi_fm0
手数—-指手———消費時間–
1 7六歩(77) (00:07 / 00:00:07)
2 7二金(61) (00:10 / 00:00:10)
3 2六歩(27) (00:03 / 00:00:10)
4 4二玉(51) (00:10 / 00:00:20)
5 2五歩(26) (00:02 / 00:00:12)
6 8四歩(83) (00:10 / 00:00:30)
7 7八金(69) (00:05 / 00:00:17)
8 8五歩(84) (00:10 / 00:00:40)
9 7七角(88) (00:03 / 00:00:20)
10 8六歩(85) (00:10 / 00:00:50)
11 同 歩(87) (00:01 / 00:00:21)
12 3四歩(33) (00:10 / 00:01:00)
13 2四歩(25) (00:09 / 00:00:30)
14 同 歩(23) (00:10 / 00:01:10)
15 同 飛(28) (00:02 / 00:00:32)
16 4四歩(43) (00:10 / 00:01:20)
17 3四飛(24) (00:05 / 00:00:37)
18 3三歩打 (00:10 / 00:01:30)
19 3六飛(34) (00:02 / 00:00:39)
20 4五歩(44) (00:10 / 00:01:40)
21 1六歩(17) (00:05 / 00:00:44)
22 4六歩(45) (00:10 / 00:01:50)
23 同 飛(36) (00:03 / 00:00:47)
24 3二玉(42) (00:10 / 00:02:00)
25 2六飛(46) (00:16 / 00:01:03)
26 3四歩(33) (00:10 / 00:02:10)
27 2四歩打 (00:04 / 00:01:07)
28 7四歩(73) (00:10 / 00:02:20)
29 2三歩成(24) (00:04 / 00:01:11)
30 4二玉(32) (00:10 / 00:02:30)
31 2二と(23) (00:01 / 00:01:12)
32 7三金(72) (00:10 / 00:02:40)
33 2一と(22) (00:03 / 00:01:15)
34 6四歩(63) (00:10 / 00:02:50)
35 3一と(21) (00:03 / 00:01:18)
36 7五歩(74) (00:10 / 00:03:00)
37 4一と(31) (00:03 / 00:01:21)
38 3二玉(42) (00:10 / 00:03:10)
39 2一角打 (00:06 / 00:01:27)
40 4一玉(32) (00:10 / 00:03:20)
41 4三角成(21) (00:05 / 00:01:32)
42 投了 (00:05 / 00:03:25)
まで41手で先手の勝ち

まだまだ弱々ですが、ようやく普通にプログラムが動くようになって、やっとスタートラインに立てた感じですね。

頑張って強いAIを作っていきたいですね。

ではまた。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中