「将棋AIで学ぶディープラーニング」を読んでみての環境メモ
社会人になってからアプリで将棋をちょこちょこ遊んでいますが、最近将棋AIにも興味が出てきたので、こちらの本を買いました。
サンプルコード付きで載っているので、実装はサクサク進められましたし、将棋AIにおける考え方や手法が解説されていて非常に面白かったです。
2018年出版の本のため、色々新しいバージョンで載っているコードを再現してみようと一通り試してみて、環境設定に多少苦労したので備忘録を残しておきます。
本に載っているバージョン通りに環境を設定すればこういった苦労は発生しないものだと思います。
自分の実行環境
PC
- OS: Windows 10 Home(19042.1052)
- CPU: AMD Ryzen 5 3600 6-Core Processor 3.60 GHz
- GPU: NVIDIA GeForce GTX1660
- メモリ: 16GB
主要なパッケージ類
> nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2020 NVIDIA Corporation Built on Thu_Jun_11_22:26:48_Pacific_Daylight_Time_2020 Cuda compilation tools, release 11.0, V11.0.194 Build cuda_11.0_bu.relgpu_drvr445TC445_37.28540450_0 > conda -V conda 4.10.1 > python -V Python 3.7.10
cupy-cuda110==7.8.0 chainer==7.8.0
> python Python 3.7.10 (default, Feb 26 2021, 13:06:18) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import cupy >>> import cupy.cudnn >>> import chainer >>> chainer.print_runtime_info() Platform: Windows-10-10.0.19041-SP0 Chainer: 7.8.0 ChainerX: Not Available NumPy: 1.20.3 CuPy: CuPy Version : 7.8.0 CUDA Root : C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0 CUDA Build Version : 11000 CUDA Driver Version : 11030 CUDA Runtime Version : 11000 cuBLAS Version : 11100 cuFFT Version : 10200 cuRAND Version : 10201 cuSOLVER Version : (10, 5, 0) cuSPARSE Version : 11100 NVRTC Version : (11, 0) cuDNN Build Version : 8002 cuDNN Version : 8101 NCCL Build Version : None NCCL Runtime Version : None CUB Version : Enabled cuTENSOR Version : None iDeep: Not Available
注意点
CUDAとCuPyのバージョンを合わせる
下記サイトが非常に参考になりました。
int() argument must be a string, a bytes-like object or a number, not 'NoneType'
環境を整えて、 7.9 学習実行
でtrain_policy.py
を実行したら上記エラーになりました。
根本的なエラー原因はちゃんと確認していませんが、下記のように値がNoneだった場合に0に置き換えるという対応でひとまずエラーは出なくなりました。
※ 機械学習的にこれが問題ない処理なのかは未検証
def mini_batch(positions, i, batchsize): mini_batch_data = [] mini_batch_move = [] for b in range(batchsize): features, move, win = make_features(positions[i + b]) if features is None: features = 0 if move is None: move = 0 mini_batch_data.append(features) mini_batch_move.append(move)
Anaconda仮想環境で実行されるバッチ作成
Shogi GUIで作成したAIを実行するためにbatでプログラムを呼び出します。
Anaconda仮想環境を使って開発している場合は以下のようなbatにする必要があります。
@echo off call C:\Users\{ユーザー名}\anaconda3\Scripts\activate.bat call activate {仮想環境名} python -m pydlshogi.usi.usi_policy_player 2>NUL
雑感
将棋AIを実際に作成できて楽しかったです。作成したAIが四間飛車を指してきたときは結構感動しました。
次はもっと大量の棋譜を読み込ませての学習と高速化を試してみたい所存です。