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

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

将棋AI dlshogi(C++&OnnxRuntime版)を1000ドルPCで動かす

DeepLearning系将棋AIのdlshogiのインストールの続きである。今回紹介するのはdlshogi C++版である。NVIDIA以外のGPU、CPU内蔵GPUでも動くOnnxRuntime版を使うことになる。

OnnxRuntimeとは

Microsoftオープンソースで公開しているもので、ONNXモデルを使うことで様々なデバイスで推論ができるらしい。AMDGPUでも動くのかと期待したが、Onnxのページで調べたところ、ROCmは非対応らしい。ここは潔く諦めてCPUでの動作を目指すことにする。

OnnxRuntime

2024-02-12 追記 OnnxRuntimeがROCmに非対応というのは私の勘違い。将棋AI dlshogi(第3報)にて訂正済み。

インストール手順

dlshogi作者の山岡忠夫氏が書かれた「強い将棋ソフトの創り方」では、Google Colabというクラウド環境、またはNVIDIA社のGPUが搭載されたPCへの導入が前提となっているため、OnnxRuntime版のインストールについてはほとんど情報がない。作者の山岡氏ははてなブログでOnnxRuntime版のMNISTのサンプルプログラムを動かす方法を公開されている。私はこの手順を参考にした。Linuxの知識が前提となるが、手順自体はそれほど難しくないと思う。

tadaoyamaoka.hatenablog.com

公開されているdlshogiをダウンロードする。/home/Shogiというディレクトリを作成し、ここにインストールする場合は以下のようになる。

$ cd /home/Shogi
$ git clone https://github.com/TadaoYamaoka/DeepLearningShogi.git

DeepLearningShogiというディレクトリが作成され、ソースがダウンロードされる。OnnxRuntime版のソースはusi_onnxruntime配下にある。

次にGitHubのReleaseからOnnxRuntimeのLinux向けバイナリonnxruntime-linux-x64-1.16.3.tgzをダウンロードし、/home/Shogi/onnxruntime-linux-x64-1.16.3 に展開する。

環境変数LD_LIBRARY_PATHにパスを追加する。

$ export LD_LIBRARY_PATH=/home/Shogi/onnxruntime-linux-x64-1.16.3/lib:$LD_LIBRARY_PATH

usi_onnxruntimeにあるMakefikeのincludeとlibのパス名を/home/Shogi/onnxruntime-linux-x64-1.16.3に修正してコンパイルする。

$ cd /home/Shogi/DeepLearningShogi/usi_onnxruntime
$ make

しばらく待ち、エラーが無ければbinの下に実行プログラムdlshogi_onnxruntimeが作成される。起動して動作確認する。コマンド入力待ちとなったらisreadyコマンドを入力する

$ cd bin
$ ./dlshogi_onnxruntime
isready
model.onnx file not found

ONNXモデルがないと怒られる。そこで、世界将棋AI 電竜戦バージョン(「GCT電竜」同梱)をダウンロードする。

$ wget https://github.com/TadaoYamaoka/DeepLearningShogi/releases/download/denryu2020/gct-dlshogi-denryu2020.zip

解凍してモデルをフォルダへコピーする。モデル名はコマンド引数で指定できるがデフォルトはmodel.onnxなのでこの名前にしてコピーする。

$ unzip -o gct-dlshogi-denryu2020.zip
$ cp model-0000167.onnx /home/Shogi/DeepLearningShogi/usi_onnxruntime/bin/model.onnx

再び動作確認する。

$ ./dlshogi_onnxruntime
isready
info nps 138 time 216 nodes 30 hashfull 0 score cp 94 depth 2 pv 1g1f 1c1d
readyok
position startpos
go byoyomi 1000
info nps 784 time 806 nodes 632 hashfull 0 score cp 66 depth 5 pv 1g1f 1c1d 2g2f 3c3d 1f1e
info nps 667 time 1319 nodes 880 hashfull 0 score cp 85 depth 6 pv 1g1f 1c1d 2g2f 3c3d 7g7f 1d1e
bestmove 1g1f

私はこれで無事動作した。NPS値は784という数値が出ている。

将棋GUIでdlshogi同士の対局

先手をpython-dlshogi2(PythonGPU動作)、後手をdlshogi(C++版CPU動作)として対局させてみた。将棋GUIはShogiGUIを使用した。

dlshogi同士の対局

77手目で先手python-dlshogi2が投了。後手dlshogiの勝利となった。将棋AIでは先手有利が常識となっているが、そのハンデを覆してdlshogiが勝利したのは感動である。処理の速さとモデルの質の高さが結果に反映したのだと思う。GPUよりCPUの方が処理が早いという点には複雑な気持ちはあるが、とりあえず満足である。

まとめ

dlshogiがすんなり動いてくれた。python版ではCPUを使うかGPUを使うかを指定できたが、OnnxRuntime版ではそれが見当たらない点は少し不可解である。動いたので深く追求しないことにする。自動的に判断してCPUで動いているのだと思う。

ShogiGUIもMac miniでUbuntu20.0で試していた時は、将棋の駒が表示されないとか、将棋エンジンを追加しても再起動すると消えてしまうなどトラブルが多くて使えなかった。今回は何のトラブルもなく動いてくれたこともうれしい結果である。

次回は、dlshogiと双璧の最強将棋AI、やねうら王&水匠5のインストールについて書きたい。