知らなかったが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でインストールできるはずだったがエラーとなったため上記コマンドを実行したらインストールできた。
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回電竜戦優勝モデル - 定跡 :未使用
- モデル:model-00167.onnx (29.4MB)
- 水匠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 MacのGPUで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と組み合わせてコンパイルして動かしてみたい。