「将棋AIで学ぶディープラーニング」を読んでみての環境メモ

社会人になってからアプリで将棋をちょこちょこ遊んでいますが、最近将棋AIにも興味が出てきたので、こちらの本を買いました。

www.amazon.co.jp

サンプルコード付きで載っているので、実装はサクサク進められましたし、将棋AIにおける考え方や手法が解説されていて非常に面白かったです。
2018年出版の本のため、色々新しいバージョンで載っているコードを再現してみようと一通り試してみて、環境設定に多少苦労したので備忘録を残しておきます。
本に載っているバージョン通りに環境を設定すればこういった苦労は発生しないものだと思います。

自分の実行環境

PC

主要なパッケージ類

> 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のバージョンを合わせる

下記サイトが非常に参考になりました。

CuPy のインストール(Windows 上)

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が四間飛車を指してきたときは結構感動しました。
次はもっと大量の棋譜を読み込ませての学習と高速化を試してみたい所存です。