DeepLearning系将棋AIのdlshogiのインストールの続きである。今回紹介するのはdlshogi C++版である。NVIDIA以外のGPU、CPU内蔵GPUでも動くOnnxRuntime版を使うことになる。
OnnxRuntimeとは
Microsoftがオープンソースで公開しているもので、ONNXモデルを使うことで様々なデバイスで推論ができるらしい。AMDのGPUでも動くのかと期待したが、Onnxのページで調べたところ、ROCmは非対応らしい。ここは潔く諦めてCPUでの動作を目指すことにする。
2024-02-12 追記 OnnxRuntimeがROCmに非対応というのは私の勘違い。将棋AI dlshogi(第3報)にて訂正済み。
インストール手順
dlshogi作者の山岡忠夫氏が書かれた「強い将棋ソフトの創り方」では、Google Colabというクラウド環境、またはNVIDIA社のGPUが搭載されたPCへの導入が前提となっているため、OnnxRuntime版のインストールについてはほとんど情報がない。作者の山岡氏ははてなブログでOnnxRuntime版のMNISTのサンプルプログラムを動かす方法を公開されている。私はこの手順を参考にした。Linuxの知識が前提となるが、手順自体はそれほど難しくないと思う。
公開されている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(Python版GPU動作)、後手をdlshogi(C++版CPU動作)として対局させてみた。将棋GUIはShogiGUIを使用した。
77手目で先手python-dlshogi2が投了。後手dlshogiの勝利となった。将棋AIでは先手有利が常識となっているが、そのハンデを覆してdlshogiが勝利したのは感動である。処理の速さとモデルの質の高さが結果に反映したのだと思う。GPUよりCPUの方が処理が早いという点には複雑な気持ちはあるが、とりあえず満足である。
まとめ
dlshogiがすんなり動いてくれた。python版ではCPUを使うかGPUを使うかを指定できたが、OnnxRuntime版ではそれが見当たらない点は少し不可解である。動いたので深く追求しないことにする。自動的に判断してCPUで動いているのだと思う。
ShogiGUIもMac miniでUbuntu20.0で試していた時は、将棋の駒が表示されないとか、将棋エンジンを追加しても再起動すると消えてしまうなどトラブルが多くて使えなかった。今回は何のトラブルもなく動いてくれたこともうれしい結果である。
次回は、dlshogiと双璧の最強将棋AI、やねうら王&水匠5のインストールについて書きたい。