今回「GLOBIS-AQZ」を動かすためにWindows 10上に「CUDA 10.2」+「cuDNN 7.6.5」+「TensorRT 7.0.0」環境を構築したのですが、ついでに「ELF OpenGo」も動作確認、あらためてインストールや設定の方法をまとめておくことにしました。
1. 前提となる環境
インストールするコンピュータの仕様は以下のとおり。
--
Dell Inspiron 14 7472 Core i7モデル 18Q42P
OS:Windows10 Home 64bit
CPU:インテル Core i7-8550U (4Mキャッシュ、最大4.0GHz)
GPU:NVIDIA GeForce MX150 GDDR5 2GB
メモリー:8GB DDR4 2400MHz(最大16GB)
保存装置:128GB SSD + 1TB 5400rpm HDD
--
「ELF OpenGo」Windows用バイナリについて、Facebookは以下のように紹介しています。
ELF OpenGo public binary, allowing anyone with a CUDA-enabled GPU to play against the final ELF OpenGo model.
ようは、GPU搭載コンピュータにCUDA環境を構築してあれば、このWindows用バイナリを使ってだれでも「ELF OpenGo」最終バージョンで遊べるよ、と。
これから「ELF OpenGo」をインストールするにあたっては、あらかじめ「Windows 10上に囲碁勉強環境を構築する - 準備編」の記述のとおりに「CUDA 10.2」+「cuDNN 7.6.5」+「TensorRT 7.0.0」環境が構築されていることを前提としています。
CUDA環境はライブラリどうしの互換性問題などむずかしいことが多いのですが、結論からいうとこの公開されている「ELF OpenGo」Windows用バイナリは、「CUDA 10.2」+「cuDNN 7.6.5」環境でまったく問題なく動きました。
しかしじつは、これから入手する圧縮ファイルのなかにはこのGPUバージョンだけではなく、GPUをもたないコンピュータでも動作するCPUバージョンも同梱されています。
なのでじっさいには、「ELF OpenGo」と打ってみたいけど、機械学習だのGPUだのCUDAだのにはまったく興味がない、なんのことやらさっぱりわからないというひとでもトライしてみる価値はあります。
なお、「ELF OpenGo」として公開されているのはGUIをもたない囲碁思考エンジン部分のみなので、グラフィカルに対局や棋譜分析をおこなうためにはGTPを解釈できる囲碁GUIと連携させる必要があります。
「GoGui」と「Sabaki」への導入方法を、下のほうで紹介しています。
2. 「ELF OpenGo」インストールファイルのダウンロード
「ELF OpenGo」ページを開き、ちょっとスクロールしていってちょうど真ん中あたりの「Play a game with ELF OpenGo」と書いてある部分を探します。
そこに「ELF OpenGo Windows binary」リンクがあるので、このリンクをクリックして、「ELF OpenGo」Windows用バイナリをふくむ圧縮ファイル「play_opengo_v2.zip」をダウンロードしてください。
3. 「ELF OpenGo」のインストール
ダウンロードした「play_opengo_v2.zip」ファイルを右クリックして「すべて展開」を選ぶと、「play_opengo_v2」フォルダができて、さらにそのなかに「Play ELF OpenGo」フォルダがあります(それ以外のフォルダは無視してください)。
この「Play ELF OpenGo」フォルダのなかに、CUDA環境で走るGPUバージョンと、GPUをもたないコンピュータでも動かすことのできるCPUバージョンが含まれています。
この「Play ELF OpenGo」フォルダをわかりやすい名前(ここでは「ELF-OpenGo」とします)に変えて、しかるべき場所に設置すれば、インストール作業は終了です。
ここでは、ホームディレクトリ「C:\Users\username\」直下に「ELF-OpenGo」フォルダを設置したとするので、「ELF-OpenGo」フォルダへのパスは「C:\Users\username\ELF-OpenGo」となります。
4. 「ELF OpenGo」の設定
「ELF-OpenGo」フォルダをひらくと「README.pdf」ファイルがあるので、そこに書いてあるとおりに設定をすすめていけば、必要な環境さえととのっていれば問題なく「ELF OpenGo」を動かすことができるはずです。
いまどきWindows 10で動いているコンピュータならたいていCPUバージョンは動かせるし、GPUを搭載したコンピュータにCUDA環境を構築している場合は、GPUバージョンのほうも使える可能性があります。
これからさきGPUバージョンの設定方法にもとづいて記述していきますが、CPUバージョンを設定するさいに差異が出るのは、フォルダの名前だけです。
GPUバージョンは「elf_gpu」フォルダに格納されているのに対して、CPUバージョンでは「elf_cpu」フォルダが使われているので、「elf_gpu」の部分をすべて「elf_cpu」に読みかえるだけで、まったくおなじ手順でCPUバージョンを設定することができます。
なお、「ELF OpenGo」の挙動を制御する設定ファイルのようなものは存在しないため、基本的に「ELF OpenGo」のふるまいは囲碁GUIに登録するコマンドによって指定していくことになります。
5. GTP対応囲碁GUIとの連携方法
「ELF OpenGo」として公開されているのはGUIをもたない囲碁思考エンジン部分のみなので、グラフィカルに対局や棋譜分析をおこなうためにはGTPを解釈できる囲碁GUIと連携させる必要があります。
「ELF-OpenGo」フォルダを「C:\Users\username\ELF-OpenGo」(「username」はお使いのユーザ名)に設置したとして、囲碁GUIに登録するべきGTP思考エンジンへの絶対パスは、「C:\Users\username\ELF-OpenGo\elf_gpu\df_console.exe」になります。
確認ですが、この「C:\Users\username\ELF-OpenGo\elf_gpu\df_console.exe」はGPUバージョンを使う場合の絶対パスなので、CPUバージョンでは「elf_gpu」を「elf_cpu」に読みかえた「C:\Users\username\ELF-OpenGo\elf_cpu\df_console.exe」になります。
以下、すべておなじように解釈してください。
5-1. GTP対応囲碁GUI「GoGui」への思考エンジン登録
メニューバーの「プログラム」から「新規プログラム」を選び、あらわれた画面の「コマンド:」欄に囲碁思考エンジンの絶対パスを入力します。
「ELF-OpenGo」フォルダを「C:\Users\username\ELF-OpenGo」に設置した場合、「コマンド:」欄に入力する絶対パスは「C:\Users\username\ELF-OpenGo\elf_gpu\df_console.exe」のようになります。
これに「README.pdf」の指示どおりネットワークファイルへのパスを追加するのですが、それも明示的に絶対パスで指定したほうがいいようなので、「--load C:\Users\username\ELF-OpenGo\elf_gpu\model-v2.bin」となります。
最終的に「コマンド欄:」には、これをすべて一行でつなげて、「C:\Users\username\ELF-OpenGo\elf_gpu\df_console.exe --load C:\Users\username\ELF-OpenGo\elf_gpu\model-v2.bin」と入力します。
「OK」ボタンを押下して何度か「待機」をクリックしながら待っていると、ステイタスバーに表示されていた「プログラムの開始中」メッセージが消えて新規プログラム登録画面が開くので、「ラベル:」欄にたとえば「ELF OpenGo」などと入力して「OK」ボタンを押下します。
これで登録完了となるので、次回以降はメニューバーの「プログラム」 -> 「プログラムの起動」とすすんで「ELF OpenGo」を選ぶと、「ELF OpenGo」が起動して対局や棋譜分析に利用できるようになります。
登録した囲碁思考エンジン「ELF OpenGo」と対局するには、「ELF OpenGo」を起動した状態で、メニューバーの「対局」から「碁盤サイズ」「置石」「コンピュータの手番」を指定したうえで、「新規対局」をクリックします。
検討したい局面を指定して、そこで「ELF OpenGo」がどう打つかをみることもできます。
「ELF OpenGo」を起動したあと、メニューバーから「コンピュータの手番」を「なし」にして、どんどん石を置いていって対象となる局面をつくり、黒番の局面なら「ELF OpenGoに黒を打たせる」、白番の局面なら「ELF OpenGoに白を打たせる」アイコンをクリックします。
そのさい「GTPシェル」を開いておけば、「GoGui」と「ELF OpenGo」との通信内容が表示されるので、なにか問題がある場合は問題解決の手がかりを得ることができます。
なお、「ELF OpenGo」の強さ(=探索の深さ=着手にかかる時間)を制御する、「GoGui」と「Sabaki」に共通の方法を「6. 着手時間の制御」にまとめましたのでご参照ください。
5-2. 「Sabaki」への思考エンジン登録
メニューバーの「Engines」から「Manage Engines」を選び、あらわれた画面で「Add」をクリックします。
「(Unnamed Engine)」と表示されている欄にカーソルをもっていって、わかりやすい表示名を、そして「Path」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「ELF-OpenGo」フォルダを「C:\Users\username\ELF-OpenGo」に設置した場合、「(Unnamed Engine)」欄にカーソルをもっていって「ELF OpenGo」と入力、「Path」欄に絶対パス「C:\Users\username\ELF-OpenGo\elf_gpu\df_console.exe」を指定します。
「(No arguments)」欄には「README.pdf」の指示どおりネットワークファイルへのパスを記述するので、「--load model-v2.bin」と入力します。
登録した「ELF OpenGo」と対局するには、メニューバーの「File」から「New」をクリックします。
開いた画面で「Board Size」「Handicap」「Komi」を指定のうえ、黒番と白番それぞれの担当者を選択します。
自分が担当する手番は「Manual」を選択、「ELF OpenGo」に担当させる手番は登録されている思考エンジンの表示名から「ELF OpenGo」を選んで、「OK」ボタンを押下します。
「Sabaki」にほかの囲碁思考エンジンを登録しておいて、「ELF OpenGo」をほかの思考エンジンと対局させることもできます。
GPUバージョンを使えるひとは、CPUバージョンと両方をエンジン登録して、「ELF OpenGo GPU」と「ELF OpenGo CPU」を対戦させてみるのもおもしろいかもしれません。
なお、「ELF OpenGo」の強さ(=探索の深さ=着手にかかる時間)を制御する、「GoGui」と「Sabaki」に共通の方法を「6. 着手時間の制御」にまとめましたのでご参照ください。
6. 着手時間の制御
「GoGui」や「Sabaki」を使って「ELF OpenGo」と対局を楽しむ場合、「ELF OpenGo」の着手にかかる時間を直接指定することはできません。
しかし「ELF OpenGo」がどれだけたくさんの可能性を探索するかを数字で指定することができ、コンピュータ囲碁プログラムの場合はそれがそのまま強さの差、そして着手にかかる時間の差としてあらわれてきます。
この探索の深さは「--mcts_rollout_per_thread 800」のようなかたちで指定、最後の数字が大きければ大きいほど強くなる、ひいては着手に時間がかかるということになります。
GPUバージョンでは「--mcts_rollout_per_thread 800」が、CPUバージョンの場合は「--mcts_rollout_per_thread 80」が初期設定値となっているそうで、明示的にほかの数字を指定しないかぎり「ELF OpenGo」はそれぞれの初期設定値にしたがってふるまいます。
なので、この数字を指定するオプションを最初から追加しておき、それを増減させることで着手にかかる時間を制御できるようにしておくといいでしょう。
それを考慮した場合、最終的に「GoGui」の「コマンド欄:」は「C:\Users\username\ELF-OpenGo\elf_gpu\df_console.exe --load C:\Users\username\ELF-OpenGo\elf_gpu\model-v2.bin --mcts_rollout_per_thread 800」に、「Sabaki」の「(No arguments)」欄は「--load model-v2.bin --mcts_rollout_per_thread 800」になります。
何度か数字を増減させながら対局してみて、ちょうどいい時間で着手してくれるよう、コンピュータの性能にあう適切な値を見つけてください。