シンギュラリティ実験ノート

購入した1000ドルPCで何がどこまでできるのか実験した記録です。

M4 Mac miniでDeepLearning系将棋AIを動かす(python-dlshogi2編)

知らなかったが2年ほど前にONNXがCoreMLに対応し、onnxruntimeを導入すればONNXモデルファイルでdlshogiをApple SilliconのMacで動かすことができるようになっていたようだ。

今回はCoreMLでGPUを使用してONNXモデルファイルでPython-dlshogi2を動かし、NPS値と水匠5とのレーティング差を計測した。

 

python-dlshogi2のインストール

必要なライブラリをインストールする。私はminicondaで環境名python10を使用しているのでpython10をアクティベートしてからライブラリをインストールした。

conda activate python10
pip install git+https://github.com/TadaoYamaoka/cshogi
pip install cython
pip install onnxruntime

cshogiはpip install cshogiでインストールできるはずだったがエラーとなったため上記コマンドを実行したらインストールできた。

 

python-dlshogi2のソースコードを取得する。

git clone https://github.com/TadaoYamaoka/python-dlshogi2.git

 

python-dlshjogi2をインストールする。

cd python-dlshogi2
pip install -e .

 

onnx_player.pyのproviderをCUDAExecutionProviderからCoreMLExecutionProviderに変更する。

- self.session = onnxruntime.InferenceSession(self.modelfile, providers=['CUDAExecutionProvider'])
+ self.session = onnxruntime.InferenceSession(self.modelfile, providers=['CoreMLExecutionProvider'])

 

起動シェルのonnx_player.shを以下のように記述する。

 #!/bin/sh
source ~/miniconda3/etc/profile.d/conda.sh
conda activate python10
python -m pydlshogi2.player.onnx_player

 

シェルに実行権を与え、ShogiHomeにエンジン追加する。

パラメタ設定デフォルト値ではGPU IDが「-1」(CPU動作)となっているので「0」(GPU動作)とすること。

 

水匠5との対局

以下の条件で秒読み3秒で50回連続対局させてみた。

  • python-dlshogi2
    • モデル:model-00167.onnx (29.4MB)
          2020年第1回電竜戦優勝モデル
    • 定跡 :未使用
  • 水匠5
    • モデル:2021年第2回電竜戦バージョン
    • 使用(standard_book)

結果は以下のようになった。

連続対局終了

- YaneuraOu NNUE V8.30Git 64APPLEM1 TOURNAMENT
  - 勝ち数: 47
  - 勝ち数(先手): 23
  - 勝ち数(後手): 24
- python-dlshogi-onnx
  - 勝ち数: 2
  - 勝ち数(先手): 1
  - 勝ち数(後手): 1
- 引き分け: 1
- 有効対局数: 50
- 無効対局数: 0
- レーティング差 (引き分け無効)
  - 548.43
  - 95% CI: [389.1, NaN]
- 二項検定
  - np > 5: True
  - Z値: 6.43
  - 有意水準5%: True
  - 有意水準1%: True

今回も全然勝てない

NPS値は初期局面で1700程度の値が出ていた。

本当にGPUで動いているのか確認のためアクティビティモニタGPUの履歴を確認した。表示メニューに「GPUの履歴」があるはずだが見つからなかった。コマンドキー+4で「GPUの履歴」ウインドウを開くことができた。確かにGPUで動いている。

 

 

考察

onnxruntime+CoreMLの組み合わせでM4 MacGPUでdlshogiを動かした。残念ながらdlshogiの本来の性能を引き出すレベルには至らなかった。

2年前にUM790 Proで試した時には、onnxruntimeがUbuntu環境で動かなかったのでpython-dlshogi2はCPUでしか動かなかった。その時は厳密に強さを計測しなかったので改めてpython-dlshogi2(CPU版)と水匠5を連続対局させた。確認したところUM790 Proでも同様の結果であった。GPUの性能はUM790 ProとM4 Mac miniはほぼ同じなのでこんなものかもしれない。

 

dlshogiにはC++版もあるので次はC++版をonnxruntimeと組み合わせてコンパイルして動かしてみたい。