2020年05月25日

Windows 10上に囲碁勉強環境を構築する - 「PhoenixGo」編

Tencent「PhoenixGo」についてはだいぶまえのことになりますが、「コンピュータ囲碁プログラム「PhoenixGo」のインストールと使いかた - Windows編」という記事にて、当時実行したインストール方法についてくわしくまとめました。
しかし、今回の「Windows 10上に囲碁勉強環境を構築する」プロジェクトでは「GLOBIS-AQZ」を使えるようにすることが最優先課題であったため、当時使っていた「CUDA 9.0」ベースの環境から「CUDA 10.0」+「TensorRT 7.0.0」という「GLOBIS-AQZ」動作要件を満たす環境へとシフトすることになりました。
たいていの囲碁プログラムのGPUバージョンは動作要件として特定バージョンの「CUDA」ライブラリを例示していますが、それはあくまでも動作検証をおこなった環境について言及しているだけで、じっさいにはほかのバージョンの「CUDA」ライブラリとも互換性をもって動作します。
しかしながら、「PhoenixGo」だけは明示的に以下のように「CUDA 9.0」+「cuDNN 7.1」環境に特定されており、今回プロジェクトで構築した「CUDA 10.0」をベースとする環境では動作させることができません。

・CUDA 9.0 only
・cudnn 7.1.x (x is any number) or lower for CUDA 9.0
・no AVX, AVX2, AVX512 instructions supported in this release (so it is currently much slower than the linux version)
・there is no TensorRT support on Windows


じっさいにあらたな「CUDA 10.0」環境でこれまでとおなじように「PhoenixGo」を起動しようとすると、いくつかの「CUDA 9.0」ライブラリが見つからないため起動できないむね、エラーが出てそのまま終了してしまいます。
ということは逆にいえば、このエラーメッセージで要求されているライブラリファイルだけ「CUDA 9.0」からもってきて、それをパスがとおっている場所(いちばんわかりやすいのは「PhoenixGo」の実行ファイルそのものがあるフォルダ)に置いて見つかるようにしてやれば、動かせるのではないかという考えにたどりつきます。
バックアップしてあった「CUDA 9.0」環境からさっそく「cublas64_90.dll」「cudart64_90.dll」「cudnn64_7.dll」「cufft64_90.dll」「curand64_90.dll」「cusolver64_90.dll」をとりだしてきて、「PhoenixGo」の実行ファイルが置かれている「C:\Users\username\PhoenixGo\bin」フォルダに設置してから起動してみると、はたして問題なく動作することが確認できました。

そこまでやってみてから気づいたというのがなんとも間のぬけた話なのですが、じつは「PhoenixGo」GPUバージョンには二種類のバイナリ配布があり、そのうちのひとつがまさに上記したように「CUDA 9.0」ライブラリを同梱したものになっていました。
「PhoenixGo」Windowsバイナリのダウンロードページへいくと、「PhoenixGo-win-x64-gpu-v1」と「PhoenixGo-win-x64-gpu-with-cuda-v1.zip」の二種類が公開されています。
「CUDA 9.0」+「cuDNN 7.1」環境が構築されている場合は前者をダウンロードしてインストールすればいいのですが、NVIDIA製「CUDA」対応GPUを搭載したコンピュータであれば、じつはCUDA環境が構築されていなくても(あるいは今回のhatakazuのケースのように、べつのバージョンの「CUDA」環境が構築されていても)後者をダウンロードしてインストールすることで「PhoenixGo」をよりかんたんに動かすことができるのです。
コンピュータ囲碁プログラム「PhoenixGo」のインストールと使いかた - Windows編」で記述したうち、「1. 前提となる環境」でまとめてある「CUDA 9.0」+「cuDNN 7.1」をインストールする準備作業は、スキップしてしまってかまいません。
それから「2. 「PhoenixGo」インストールファイルのダウンロード」の部分では、GPUバージョンのWindows用インストールファイルとして、「PhoenixGo-win-x64-gpu-v1」ではなくて「PhoenixGo-win-x64-gpu-with-cuda-v1.zip」のほうをダウンロードしてきます。
そのあとのインストール方法、設定方法、囲碁GUIとの連携方法は「コンピュータ囲碁プログラム「PhoenixGo」のインストールと使いかた - Windows編」に書いてあるのとまったくおなじです。
コミ六目半日本ルールで学習したネットワークをもつ「GLOBIS-AQZ」や日本ルール対応を打ち出した「KataGo」に対して、「Leela Zero」や「ELF OpenGo」は(七目半でしか学習してないので)棋譜ごとのコミ設定にかかわらず七目半でしか思考できないようにみえますが、「PhoenixGo」はそもそもの話として七目半以外のコミ設定を受けつけないので、どんな条件の棋譜であってもとにかくコミを七目半に設定しないと動かないという部分は注意が必要です。
posted by hatakazu at 21:53| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

コンピュータ囲碁プログラム「KataGo」をソースからビルドする - Ubuntu編

1. 前提となる環境
インストールするコンピュータの仕様は以下のとおり。

--
Dell Inspiron 14 7472 Core i7モデル 18Q42P
OS:Ubuntu 18.04 LTS 日本語 Remix
CPU:インテル Core i7-8550U (4Mキャッシュ、最大4.0GHz)
GPU:NVIDIA GeForce MX150 GDDR5 2GB
メモリー:8GB DDR4 2400MHz(最大16GB)
保存装置:128GB SSD (Windows10 Home 64bit) + 1TB 5400rpm HDD (Ubuntu 18.04 LTS 日本語 Remix)
--

2. 「KataGo」インストールの準備とソースコードの取得
「KataGo」のソースコードは「KataGo」GitHubレポジトリでソースコードが公開されており、現時点での最新バージョンは「v1.4.2」となっています。
このソースコードをLinuxでビルドするための要件は、「KataGo」GitHubレポジトリの説明によれば、以下のとおりです。

--
Requirements
・CMake with a minimum version of 3.10.2 - for example sudo apt install cmake on Debian, or download from https://cmake.org/download/ if that doesn't give you a recent-enough version.
・Some version of g++ that supports at least C++14.
・If using the OpenCL backend, a modern GPU that supports OpenCL 1.2 or greater, or else something like this for CPU. (Of course, CPU implementations may be quite slow).
・If using the CUDA backend, CUDA 10.1 and CUDNN 7.6.1 (https://developer.nvidia.com/cuda-toolkit) (https://developer.nvidia.com/cudnn) and a GPU capable of supporting them. I'm unsure how version compatibility works with CUDA, there's a good chance that later versions than these work just as well, but they have not been tested.
・zlib, libzip, boost filesystem. With Debian packages (i.e. apt or apt-get), these should be zlib1g-dev, libzip-dev, libboost-filesystem-dev.
・If you want to do self-play training and research, probably Google perftools libgoogle-perftools-dev for TCMalloc or some other better malloc implementation. For unknown reasons, the allocation pattern in self-play with large numbers of threads and parallel games causes a lot of memory fragmentation under glibc malloc that will eventually run your machine out of memory, but better mallocs handle it fine.
--

これから「KataGo」をソースコードからビルドするにあたっては、あらかじめ「「Ubuntu 18.04 LTS 日本語 Remix」に「CUDA 10.0」+「TensorRT 7.0.0」をインストールする」の記述のとおりに「CUDA 10.0」+「TensorRT 7.0.0」環境が構築されていることを前提としています。
この手順にしたがって「CUDA」をインストールした場合、最終的には「CUDA」関連ライブラリは以下のように配置されています。

・Ubuntu 18.04 LTS 日本語 Remix
・CUDA 10.0 -> /usr/local/cuda-10.0
・cuDNN 7.6.5 -> /usr/lcoal/cuda-10.0
・NCCL 2.6.5 -> /usr/local/nccl-2.6
・TensorRT 7.0.0 -> /usr/local/TensorRT-7.0.0

ここまでの準備が終わったら、ホームディレクトリ直下の「~/KataGo」ディレクトリにインストールすることにして、「KataGo」のソースコードを取得します。

$ cd
$ git clone https://github.com/lightvector/KataGo


これで、「~/KataGo」に「KataGo」のソースコードが取得され、ビルド作業をすすめる準備がととのいました。

3. 「KataGo」のインストール

「Makefile」ファイルの編集がおわったら、ビルド作業にすすみます。
$ cd KataGo/cpp
$ cmake . -DUSE_BACKEND=CUDA

(OpenCLバージョンをビルドしたいときは「$ cmake . -DUSE_BACKEND=OPENCL」に変更のこと)

$ make


ビルド処理は問題なく完了し、「~/KataGo/cpp」ディレクトリのなかに実行バイナリ「katago」が生成しています。
このあとの作業にさいしてわかりやすいように、この生成した実行バイナリ「katago」を「KataGo」ディレクトリへ移動しておきます。

$ mv katago ../


つづいてネットワークファイルを取得します。
「KataGo」の歴代ネットワークファイルは「katago-public/g170/neuralnets」に保管されているので、そこからダウンロードしてきたネットワークファイルを自由に使うことができます。
ここでは、最近「KataGo v1.4.0」と同時に公開された、117日間トレーニングずみの最新ネットワークファイルを使ってみることにします。
それぞれことなる設計の三種類のネットワークファイルがあり、コンピュータの性能によっても強さに差が出てくるので、試してみて自分の環境に合いそうなものを採用するといいでしょう(基本的にはGPU性能が上がるほど下のものが強くなるはず)。

g170-b20c256x2-s4384473088-d968438914.bin.gz - The latest and final semi-zero 20-block net (continuing extended training on games from the bigger nets). -> ファイル名の例「kata20x256.bin.gz」
g170-b30c320x2-s3530176512-d968463914.bin.gz - The latest and final semi-zero 30-block net. -> ファイル名の例「kata30x320.bin.gz」
g170-b40c256x2-s3708042240-d967973220.bin.zp - The latest and final semi-zero 40-block net. -> ファイル名の例「kata40x256.bin.gz」

こうしてダウンロードした「kata20x256.bin.gz」「kata30x320.bin.gz」「kata40x256.bin.gz」を「katago」フォルダへ移動しておきます。

4. 「KataGo」の設定
以上の作業が完了したら、「~/KataGo」ディレクトリにGTP思考エンジンの実行ファイル「katago」と設定ファイル「default_gtp.cfg」、そして三種類のネットワークファイル「kata20x256.bin.gz」「kata30x320.bin.gz」「kata40x256.bin.gz」が置かれている状態になります。
このあとは「コンピュータ囲碁プログラム「KataGo」のインストールと使いかた - Ubuntu編」のLinux用バイナリ配布ファイルを利用するときとまったくおなじように、「default_gtp.cfg」を編集して「KataGo」の設定(日本ルール対応を忘れずに)をおこない、「Lizzie」「GoGui」「Sabaki」などGTP対応囲碁GUIへの登録作業をすすめればO.K.です。

5. 問題点
じっさいに上記インストール手順を実行するにさいしては、「$ cmake . -DUSE_BACKEND=CUDA」コマンドのところでエラーが出てしまうことがあります。
これは「cmake」と「CUDA」のバージョンの関係で発生する問題で、「Ubuntu 18.04 LTS」標準の「cmake version 3.10.2」では「CUDA 10.0」以降のライブラリを使用したコンパイルはできない、らしい。

この「cmake」でエラーが出るケースは、基本的にライブラリが見つからない問題なので、該当ライブラリが見つかるように探しにいく場所を指定してやればいい。
「OpenCL」ライブラリが見つからない場合は、「/usr/share/cmake-3.10/Modules/FindOpenCL.cmake」ファイルの「OpenCL_INCLUDE_DIR」「OpenCL_LIBRARY」あたりの変数を、「CUDA」ライブラリが見つからない場合は、「/usr/share/cmake-3.10/Modules/FindCUDA.cmake」の「CUDA_cublas_device_LIBRARY」あたりの変数を確認すること。


この環境でコンパイル作業をすすめるためには「cmake version 3.12.2」以降が必要ということなので、「CMake Download」ページ へいき、ページの下のほうにある「Older Releases」から「https://cmake.org/files/」をクリックします。
v3.12/」ディレクトリを開いて、そこから「cmake-3.12.2-Linux-x86_64.sh」をダウンロードします。
現在のバージョンをアンインストールしたうえで、「sh ./cmake-3.12.2-Linux-x86_64.sh」を実行して「cmake version 3.12.2」をインストールすれば、さきほどの「$ cmake . -DUSE_BACKEND=CUDA」コマンドが問題なくとおるようになっているはずです。
posted by hatakazu at 19:29| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2020年05月22日

コンピュータ囲碁プログラム「KataGo」のインストールと使いかた - Ubuntu編

KataGo」はコンピュータ囲碁プログラムとしては比較的あたらしいプロジェクトで、「AlphaZero」方式の自己学習を基本としながらもさまざまな工夫をこらして学習効率を高め、ほかの類似のコンピュータ囲碁プログラムよりも短期間で強くなってきたところにアピール点があります。
「KataGo」をインストールしたコンピュータのGPU性能におうじて、適切にリソースを設定するための方法を提供し、具体的にいろいろ説明しているのもおもしろいところです。
まあそのあたりはhatakazuのようなただの囲碁愛好家にはあまり関係ないのですが、コンピュータ囲碁プログラムの思考を囲碁GUIに表示させて遊んでいる身からすれば、①「KataGo」が独自の形勢判断機能を搭載していて、形勢を目数差で表示することができること、②標準で「Lizzie」との連携が可能で、「Lizzie」でも「KataGo」独自の形勢判断機能をサポートしていること、③「v1.3」以降で日本ルールへの対応を打ち出したことはうれしいポイントです。

「KataGo」GitHubレポジトリ
・Linux用およびWindows用バイナリ配布あり。
・CUDAバージョンおよびOpenCLバージョン。
・現時点の最新バージョンは「v1.4.2」。

1. 前提となる環境
インストールするコンピュータの仕様は以下のとおり。

--
Dell Inspiron 14 7472 Core i7モデル 18Q42P
OS:Ubuntu 18.04 LTS 日本語 Remix
CPU:インテル Core i7-8550U (4Mキャッシュ、最大4.0GHz)
GPU:NVIDIA GeForce MX150 GDDR5 2GB
メモリー:8GB DDR4 2400MHz(最大16GB)
保存装置:128GB SSD (Windows10 Home 64bit) + 1TB 5400rpm HDD (Ubuntu 18.04 LTS 日本語 Remix)
--

「KataGo」を動かすには「CUDA」もしくは「OpenCL」に対応したGPUが必要で、ここではあらかじめ「「Ubuntu 18.04 LTS 日本語 Remix」に「CUDA 10.0」+「TensorRT 7.0.0」をインストールする」の記述のとおりに「CUDA 10.2」+「cuDNN 7.6.5」環境が構築されていることを前提として、CUDAバージョンのインストール方法を説明していきます。
「KataGo」GitHubレポジトリの記述では「CUDA 10.1」+「CUDNN 7.6.1」環境への言及がありますが、「CUDA」関連ライブラリのバージョン間における互換性などの制約は検証されておらず、今回「CUDA 10.2」+「cuDNN 7.6.5」環境でもまったく問題なく動作することが検証できました。
OpenCLバージョンをインストールする場合は、たいてい特別な準備をする必要はありませんが、OpenCLライブラリが見つからないときは警告が出るので追加インストールしてください。
以下のCUDAバージョンのインストール方法の記述のうち、「katago-v1.4.2-cuda10.1-linux-x64」の部分をすべて「katago-v1.4.2-opencl-linux-x64」に読みかえるだけで、まったくおなじ手順を実行してもらえればOpenCLバージョンをインストールできます。
なお、「KataGo」として公開されているのはGUIをもたない囲碁思考エンジン部分のみなので、グラフィカルに対局や棋譜分析をおこなうためにはGTPを解釈できる囲碁GUIと連携させる必要があります。

2. 「KataGo」インストールファイルのダウンロード
「KataGo」の現行バージョンは「v1.4.2」で、「KataGo」GitHubレポジトリの「Releases」ページから「katago-v1.4.2-cuda10.1-linux-x64.zip」をクリックして、Linux用バイナリファイル「katago-v1.4.2-cuda10.1-linux-x64.zip」を取得します。

3. 「KataGo」のインストール
ダウンロードした「katago-v1.4.2-cuda10.1-linux-x64.zip」ファイルを解凍すると、「katago-v1.4.2-cuda10.1-linux-x64」フォルダができるので、フォルダ名をわかりやすく「katago」に変更しておきます。
この「katago」フォルダのなかにGTP思考エンジン本体である「katago」や設定ファイル「default_gtp.cfg」などがふくまれているので、この「katago」フォルダをそのまましかるべき場所(たとえば「/home/username/katago」など)に設置します。
つづいてネットワークファイルを取得します。
「KataGo」の歴代ネットワークファイルは「katago-public/g170/neuralnets」に保管されているので、そこからダウンロードしてきたネットワークファイルを自由に使うことができます。
ここでは、最近「KataGo v1.4.0」と同時に公開された、117日間トレーニングずみの最新ネットワークファイルを使ってみることにします。
それぞれことなる設計の三種類のネットワークファイルがあり、コンピュータの性能によっても強さに差が出てくるので、試してみて自分の環境に合いそうなものを採用するといいでしょう(基本的にはGPU性能が上がるほど下のものが強くなるはず)。

g170-b20c256x2-s4384473088-d968438914.bin.gz - The latest and final semi-zero 20-block net (continuing extended training on games from the bigger nets). -> ファイル名の例「kata20x256.bin.gz」
g170-b30c320x2-s3530176512-d968463914.bin.gz - The latest and final semi-zero 30-block net. -> ファイル名の例「kata30x320.bin.gz」
g170-b40c256x2-s3708042240-d967973220.bin.zp - The latest and final semi-zero 40-block net. -> ファイル名の例「kata40x256.bin.gz」

こうしてダウンロードした「kata20x256.bin.gz」「kata30x320.bin.gz」「kata40x256.bin.gz」を「katago」フォルダへ移動しておきます。

4. 「KataGo」の設定
「KataGo」フォルダのなかにGTP思考エンジン本体「katago」といっしょに設定ファイル「default_gtp.cfg」が置かれており、この設定ファイル「default_gtp.cfg」の内容を編集することで、次回起動時以降「KataGo」のふるまいを変更することができます。
ここでは現時点で最新のバージョンである「KataGo v1.4.2」をインストールしましたが、「KataGo」では「v1.3」で日本ルールへの対応を打ち出し、「katago」フォルダにある「default_gtp.cfg」でその挙動を制御できるようになっています。
基本ルールにかかわる設定ファイルの変更は以下の赤字部分で、日本ルールの適用はデフォルトの「rules = tromp-taylor」をコメントアウトして、「rules = japanese」と宣言するだけです。
個別に指定するなら、青字で示した三行のコメントをはずし、指定を有効化する方法もあります。

# Default rules------------------------------------------------------------------------------------
# See https://lightvector.github.io/KataGo/rules.html for a description of the rules.
# These rules are defaults and can be changed mid-run by several custom GTP commands.
# See https://github.com/lightvector/KataGo/blob/master/docs/GTP_Extensions.md for those commands.

# Some other legal values are: "chinese", "japanese", "korean", "aga", "chinese-ogs", "new-zealand".
# KataGo does not claim to exactly match any particular human ruleset, but KataGo will try to behave
# as closely as possible given the rules it has implemented.
# rules = tromp-taylor
rules = japanese

# Use the below instead to specify an arbitrary combination of individual rules.

# koRule = SIMPLE # Simple ko rules (triple ko = no result)
# koRule = POSITIONAL # Positional superko
# koRule = SITUATIONAL # Situational superko

# scoringRule = AREA # Area scoring
# scoringRule = TERRITORY # Territory scoring (uses a sort of special computer-friendly territory ruleset)

# taxRule = NONE # All surrounded empty points are scored
# taxRule = SEKI # Eyes in seki do NOT count as points
# taxRule = ALL # All groups are taxed up to 2 points for the two eyes needed to live

# multiStoneSuicideLegal = true #Is multiple-stone suicide legal? (Single-stone suicide is always illegal).


5. GTP対応囲碁GUIとの連携方法
「KataGo」として公開されているのはGUIをもたない囲碁思考エンジン部分のみなので、グラフィカルに対局や棋譜分析をおこなうためにはGTPを解釈できる囲碁GUIと連携させる必要があります。
「katago」フォルダをたとえば「/home/username/katago」(「username」はお使いのユーザ名)に設置したとして、「/home/username/katago/katago」が、囲碁GUIに登録するべきGTP思考エンジンへの絶対パスになります。

5-1. 「Lizzie」との連携
なんといっても標準で「Lizzie」と連携するGTP出力をそなえていることが、「KataGo」の特徴のひとつでもあります。
それもあって「Lizzie」のWindows用バイナリ現行バージョンには「KataGo」が同梱されていますが、これは「v1.2」で日本ルールに対応しておらず、いっしょについてくるネットワークもかなり古い(最新版ネットワークと比べるとかなり弱い)ものです。
そのため、同梱されている「KataGo v1.2」とはべつに最新版「KataGo v1.4.2」をエンジン登録し、ネットワークも最新版を導入する方法を紹介しておきましょう。
まず「Lizzie」を立ち上げ、上部メニュバーの「設定」から「エンジン」を選択し、エンジン登録画面を開きます。
この画面で、任意のエンジン番号「エンジンx」の欄に、「KataGo」思考エンジンへの絶対パス「/home/username/katago/katago」を入力します。
それにつづけてGTP通信のための「gtp」オプション、最新ネットワークファイルを指定する「-model kata20x256.bin.gz」オプション、 設定ファイルを指定する「-config default_gtp.cfg」オプションをいっしょに指定する必要があります。
最終的には一行でまとめて「/home/username/katago/katago gtp -model kata20x256.bin.gz -config default_gtp.cfg」のようになります。
「kata20x256.bin.gz」の代わりに「kata30x320.bin.gz」や「kata40x256.bin.gz」を使いたいときは、「-model」のあとのファイル名を変更すればO.K.です。
ここまでの設定が終わったら、「Lizzie」の上部メニューバー「エンジン」からを開くと、いま設定したエンジンが「エンジンx: kata20x256.bin.gz」と表示されています。
この「エンジンx: kata20x256.bin.gz」を選択すれば、日本ルール対応の最新版「KataGo」が最新版ネットワークで起動し、「KataGo」の実力をじゅうぶんに発揮させることができます。

5-2. GTP対応囲碁GUI「GoGui」への思考エンジン登録
メニューバーの「プログラム」から「新規プログラム」を選び、あらわれた画面の「コマンド:」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「katago」フォルダを「/home/username/katago」に設置した場合、「コマンド:」欄に入力する絶対パスは「/home/username/katago/katago」のようになります。
これにオプションを追加しますが、GTP通信のための「gtp」オプションのほか、「-config default_gtp.cfg」のような設定ファイル指定、「-model kata20x256.bin.gz」のようなネットワークファイル指定が使えます。
「kata20x256.bin.gz」の代わりに「kata30x320.bin.gz」や「kata40x256.bin.gz」を使いたいときは、「-model」のあとのファイル名を変更すればO.K.です。
最終的に「コマンド欄:」には、これをすべて一行でつなげて、「/home/username/katago/katago gtp -config default_gtp.cfg -model kata20x256.bin.gz」と入力します。
「OK」ボタンを押下して何度か「待機」をクリックしながら待っていると、ステイタスバーに表示されていた「プログラムの開始中」メッセージが消えて新規プログラム登録画面が開くので、「ラベル:」欄にたとえば「KataGo」などと入力して「OK」ボタンを押下します。
これで登録完了となるので、次回以降はメニューバーの「プログラム」 -> 「プログラムの起動」とすすんで「KataGo」を選ぶと、「KataGo」が起動して対局や棋譜分析に利用できるようになります。
登録した囲碁思考エンジン「KataGo」と対局するには、「KataGo」を起動した状態で、メニューバーの「対局」から「碁盤サイズ」「置石」「コンピュータの手番」を指定したうえで、「新規対局」をクリックします。
検討したい局面を指定して、そこで「KataGo」がどう打つかをみることもできます。
「KataGo」を起動したあと、メニューバーから「コンピュータの手番」を「なし」にして、どんどん石を置いていって対象となる局面をつくり、黒番の局面なら「KataGoに黒を打たせる」、白番の局面なら「KataGoに白を打たせる」アイコンをクリックします。
そのさい「GTPシェル」を開いておけば、「GoGui」と「KataGo」との通信内容が表示されるので、なにか問題がある場合は問題解決の手がかりを得ることができます。

5-3. GTP対応囲碁GUI「Sabaki」への思考エンジン登録
メニューバーの「Engines」から「Manage Engines」を選び、あらわれた画面で「Add」をクリックします。
「(Unnamed Engine)」と表示されている欄にカーソルをもっていって、わかりやすい表示名を、そして「Path」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「katago」フォルダを「/home/username/katago」に設置した場合、「(Unnamed Engine)」欄にカーソルをもっていって「KataGo」と入力、「Path」欄に絶対パス「/home/username/katago/katago」を指定します。
「(No arguments)」欄にはオプションを追加しますが、GTP通信のための「gtp」オプションのほか、「-config default_gtp.cfg」のような設定ファイル指定、「-model kata20x256.bin.gz」のようなネットワークファイル指定が使えます。
「kata20x256.bin.gz」の代わりに「kata30x320.bin.gz」や「kata40x256.bin.gz」を使いたいときは、「-model」のあとのファイル名を変更すればO.K.です。
最終的に「(No arguments)」欄には、「gtp -config default_gtp.cfg -model kata20x256.bin.gz」のように入力することになります。
登録した「KataGo」と対局するには、メニューバーの「File」から「New」をクリックします。
開いた画面で「Board Size」「Handicap」「Komi」を指定のうえ、黒番と白番それぞれの担当者を選択します。
自分が担当する手番は「Manual」を選択、「KataGo」に担当させる手番は登録されている思考エンジンの表示名から「KataGo」を選んで、「OK」ボタンを押下します。
「Sabaki」にほかの囲碁思考エンジンを登録しておいて、「KataGo」をほかの思考エンジンと対局させることもできます。
その場合は、対局させる思考エンジンの両方について「ponder」機能を無効化するように設定し、互いの思考をさまたげないかたちで対局をおこなう必要があります。
「KataGo」では、設定ファイル「default_gtp.cfg」に記述されている「ponderingEnabled = false」の部分が該当します。
「Sabaki」では、「KataGo」をもちいて記譜解析を(SGF記譜を読みこみながら、もしくはリアルタイムで入力しながら)おこなうことができます。
「F4」キーで解析モードにうつった画面で、「KataGo」の特徴のひとつである目数差での形勢表示は可能ですが、「勝率+探索数」か「目数差+探索数」の選択となり、「Lizzie」のように「勝率」「探索数」「目数差」の三つを同時に表示させることはできないようです。

6. そのほかのポイント

6-1. GPUチューニング
「KataGo」では、GPUを制御するパラメータを適切に設定するための、さまざまな方法が提供されています。
GitHubレポジトリの「How to use」や「Tuning for performance」を参考に、GPUパフォーマンスの最適化に取りくんでいきます。


参考ウェブページ一覧表(順不同)
posted by hatakazu at 20:48| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

Windows 10上に囲碁勉強環境を構築する - 「q5Go」編

コンピュータ囲碁プログラムとよばれるものは一般的に、現在の盤面の状況を分析して次の着手を導き出す囲碁思考エンジンそのものを指すことがおおく、それじたいは対局や棋譜分析に適した操作画面をそなえてないのがふつうです。
そうした操作画面は囲碁GUI(Graphical User Interface)とよばれるべつのソフトウェアで、囲碁思考エンジンを囲碁GUIと連携させることによって、グラフィカルな碁盤画面をつうじて囲碁思考エンジンとやりとりできるようになるわけです。
そして、囲碁思考エンジンと囲碁GUIとは、GTP(Go Text Protocol)という共通の言葉によってむすびつけられています。
囲碁GUIは現在の盤面の状況をGTP経由で囲碁思考エンジンに伝え、次の着手を導き出すよう命令し、囲碁思考エンジンも計算によって導き出された着手をGTP経由で囲碁GUIに返し、それを囲碁GUIがグラフィック画面の碁盤上に表示するという方法で、ユーザと囲碁思考エンジンとの対局や思考エンジンによる棋譜分析が可能になっているのです。
そのため、いろいろな囲碁思考エンジンを対局や棋譜分析に使うためには、GTPに対応した囲碁GUIをインストールして囲碁思考エンジンと連携させ、GTP対応囲碁GUIをとおして囲碁思考エンジンを制御してやる必要があることになります。
GTPに対応した囲碁GUIとしては「Leela Zero」専用GUIとして開発された「Lizzie」が、「Leela Zero」経由で「ELF OpenGo」のネットワークを使えることや操作性のよさもあいまって広く利用されていますが、ほかにも「GoGui」「Sabaki」「q5Go」などはよく使われていると思います。
ここでは、「q5Go」をWindowsにインストールする方法と、基本的な使いかたについて記述していきます。

「Lizzie」プロジェクトページ
「GoGui」プロジェクトページ
「Sabaki」プロジェクトページ
「q5Go」プロジェクトページ

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
--

「q5Go」をインストールするさいの動作要件ですが、ハードウェア的にもソフトウェア的にも特別な要請はなく、比較的あたらしいOSが動いているコンピュータならたいてい問題なく動かせるはずです。
ただし、「q5Go」をどれだけ使えるかはけっきょく「q5Go」から利用できる囲碁思考エンジンの性能に依存するので、最低限自分が利用したいコンピュータ囲碁プログラムを動かせる環境でないと意味がありません。

2. 「q5Go」インストールファイルのダウンロード
「q5Go」の最新バージョンは「1.1.1」で、「q5Go」GitHubレポジトリの「Releases」ページから、Windows用バイナリファイルをダウンロードすることができます。
「Releases」ページに表示されている最新バージョン「1.1.1」の「Assets」タブから「q5go-1.1.1-win.zip」をクリックして、「Windows用バイナリファイル「q5go-1.1.1-win.zip」を取得します。

3. 「q5Go」のインストール
ダウンロードした「q5go-1.1.1-win.zip」を右クリックして「すべて展開」を選ぶと、「q5go-1.1.1-win」フォルダができるので、フォルダ名をわかりやすく「q5go」に変更しておきます。
この「q5go」フォルダのなかに囲碁GUI本体である「q5go.exe」や動作に必要なライブラリなどがふくまれているので、この「q5go」フォルダをそのまましかるべき場所(たとえば「C:\Users\username\q5go」など)に設置します。
必要におうじてデスクトップにショートカットを作成しておけば、今後はこのショートカットをダブルクリックするだけでかんたんに「q5go」を起動できるようになります。

4. 「q5Go」の設定
「q5Go」を起動したら、まずは「q5Go」から呼び出すコンピュータ囲碁プログラムを登録します。
起動画面真ん中下の「Settings」をクリックし、設定画面が開いたら「Gomputer Go」タブをクリックして、エンジン登録画面を開きます。
「New」をクリックして「Name:」欄にわかりやすい表示名を、そして「Executable:」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「AQ」フォルダを「C:\Users\username\AQ」に設置した場合、「Name:」欄に「AQ」と入力、「Executable:」欄に絶対パス「C:\Users\username\AQ\AQ」を指定します。
「Arguments:」欄には「--rule=1 --komi=6.5 --byoyomi=10 --use_ponder=off」のようにオプションを指定しますが、「AQ」の場合は「AQ」フォルダにある設定ファイル「config.txt」から設定を読みこむスタイルなので、基本的にここは空欄のままで問題ありません。
「config.txt」の内容を上書きして、「AQ」の動作を変更したい場合だけ、ここにその内容を記述すればO.K.です。
「Fixed Komi:」欄にデフォルトのコミ(「AQ」や「KataGo」なら「6.5」が有効に作用します)を指定、「Board size:」欄には「19」と入力しておきます。
「Lizzie」と通信できるエンジンであれば記譜解析に利用できるので「Use for analysis」ボタンにチェックをいれてから、それ以外のエンジンであればチェックがはずれた状態のままで、「OK」をクリックすればエンジンの登録は完了です。
「AQ v4.0.0」は「--lizzie」スイッチを指定することで「Lizzie」での出力が可能になっていますが、「q5Go」でおなじ設定をためしてみたところ、現時点では動かせませんでした。
そのため、記譜解析に使えるのは基本的には「Leela Zero」および「KataGo」のみ、ということになりそうです。

5. 「q5Go」の基本的な使いかた
「q5Go」はGTP対応囲碁GUIとしては比較的あたらしいもので、そのぶん「Leela Zero」のもつ「Leela Zero」や「KataGo」と連携した棋譜分析機能や「KataGo」の目数差による形勢判断表示などのあたらしいトレンドにも対応しており、非常に多機能かつ使いやすい囲碁GUIとなっています。
コンピュータ囲碁プログラム相手の対局、思考エンジンどうしの対局、「Leela Zero」および「KataGo」を利用した記譜解析、SGFファイルの編集や他形式ファイルへの変換など、囲碁GUIに期待されることはひととおりできるうえに、いくつか便利な機能も追加されています。

5-1. 思考エンジンとの対局
登録した囲碁思考エンジン(たとえば「AQ」)と対局するには、起動画面で「Play against the machine」ボタンをクリック、もしくは「Play online」ボタンをクリックして開いた画面のメニューバー「File」から「Play with program」を選択します。
開いた画面の「Engine:」欄で登録ずみの思考エンジンから対局したいエンジン(たとえば「AQ」)を選択、「Computer plays:」の右の石アイコンをクリックして、コンピュータに黒番を打たせるか白番を打たせるかを指定します。
「Board size: 19」「Komi: 6.5」「Hnadicap:」を指定し、「Main time (minutes):」および「Overtime」を設定して、「OK」ボタンを押下すれば対局開始です。

5-2. 思考エンジンどうしの対局
起動画面で「Play online」ボタンをクリックして開いた画面で、メニューバー「File」から「Computer vs. computer play」を選択します。
「Engine (white):」欄に白番を担当させたいエンジンを、「Engine (black):」欄に黒番を担当させたいエンジンを指定し、「Board size: 19」「Komi: 6.5」などの条件と時間を設定して「OK」ボタンをクリックします。
思考エンジンどうしの対局では、対局させる思考エンジンの両方について「ponder」機能を無効化するように設定し、互いの思考をさまたげないように設定しておく必要があります。

5-3. 記譜分析
新規入力する記譜を分析するためには、起動画面で「Create a board」ボタンをクリック、もしくは「Play online」ボタンをクリックして開いた画面のメニューバー「File」から「New board 19x19」を選択します。
碁盤が表示されるので、メニューバー「Edit」から「Game information」を選択し、各種情報を入力していきますが、「Komi: 6.5」を忘れずに設定しておきます。
つづいてメニューバー「Analysis」から「Choose analysis engine」へすすんで、解析に使用する思考エンジンにチェックをいれます。
ふたたびメニューバー「Analysis」から、今度は「Connect analysis engine」を選択すると、さきほど選択したエンジンが起動します。
あとは、リアルタイムで進行する分析を参照しながら、着手を入力していくことができます。
保存してあるSFG記譜を分析する場合は、起動画面で「Load SGF file」ボタンをクリック、もしくは「Play online」ボタンをクリックして開いた画面のメニューバー「File」から「Opne」を選択します。
表示された画面からディレクトリをたどって解析したいSGFファイルを見つけ、それを選択して「Open」ボタンをクリックします。
あとは新規記譜の場合とおなじように解析用エンジンを指定、立ち上げてから、カーソルキーの左右を使って記譜を分析しながら手順をすすめていきます。
候補手の色分け表示や、候補手をカーソルでポイントすることによる読み筋表示など、操作方法はほかの囲碁GUIとおなじく直感的にわかりやすくなっています。
石の上に表示されるのは勝率のみ、探索数や「KataGo」の目数形勢判断などは、右下の枠内に別途表示される仕組みになっています。

5-4. 事前記譜解析のバッチ処理
ちょっとめずらしい、「q5Go」に特徴的な機能として、思考エンジンにあらかじめ記譜を解析させて結果を書き込んだSFGファイルを出力する、バッチ処理があります。
hatakazuのコンピュータはなんとか「CUDA」環境でGPUを動かせるぎりぎりの性能しかもっておらず、「Lizzie」から思考エンジンを立ち上げてGPUをぶんぶん回していると、正直なところ負荷が大きくて操作に支障をきたしたり最悪しばらく入力を受けつけなくなったりします。
しかしたとえば寝ているあいだや外出中にこの事前記譜解析バッチ処理を走らせておけば、コンピュータにむかうときにはすでに解析を終えてデータが書き込まれたSFGファイルが準備されており、「q5Go」からそれを開いて手順を追っていくと(その時点では思考エンジンを動かす必要はなく、GPUを回してコンピュータに負担をかけることなく)解析結果を見ることができるのです。
強力なGPUを搭載しているコンピュータであれば、同時進行で解析しながらでも問題ないのでしょうが、hatakazuのようにとぼしいGPU資源しかもたないコンピュータを使っている場合はたいへん助かります。
たとえば寝ているあいだに、同時進行なら待ってられないほどの時間をかけて深く解析させておいて、それをあとから短時間でパラパラと軽快に追っていくことができるということです。
hatakazuがこの囲碁GUI「q5Go」を使っている理由、ここであらためて紹介する理由は、おもにこのバッチ処理機能が便利で重宝しているところにあります。
事前記譜解析のバッチ処理を実行するためには、起動画面で「Batch analysis」ボタンをクリック、もしくは「Play online」ボタンをクリックして開いた画面のメニューバー「File」から「Batch analysis」を選択します。
「Batch computer analysis」画面が表示されるので、「Choose:」欄で解析に使用する思考エンジンを指定、メニューバー「Analysis」から「Choose analysis engine」へすすんで、解析に使用する思考エンジンにチェックをいれます。
左側の「Number of seconds per move:」と「Maximum number of lines to add:」は、一手ごとにどれだけ時間をかけて読ませ、その読んだなかからどれだけの情報を解析結果として出力するかを指定するパラメータです。
数が大きいほど情報量は増えますが、そのぶん解析にかかる時間も長くなります。
「If fixed engine komi:」では、たとえば「PhoenixGo」のように七目半以外のコミを受けつけないエンジンに、たとえばコミ六目半の碁を解析させるときの振る舞いを制御します。
このあたりの設定を終えたら、「File to analysis」欄で解析したいSGFファイルを選んでは「Add to queue」ボタンを押して「Job queue」へ追加していきます。
解析したいSFGファイルをすべて登録したら、「Start engine」ボタンをクリックします。
「Choose:」欄で設定した解析用エンジンが立ち上がり、SFGファイルを順番に解析にかけて、その結果(候補手、読み筋、勝率の推移など)を各SFGファイルへ追加していきます。
作業が終わったSFGファイルを「q5Go」で開くと、あらかじめ思考エンジンによって解析した結果が書き込まれているので、思考エンジンを起動することなく手順を追っていくことができるというわけです。
そのさいは、まさにリアルタイムで解析しながら手順を再生するときとおなじように、候補手が勝率におうじて色分け表示され、気になる候補手をポイントすれば読み筋があらわれ、勝率の推移や探索深さのデータ、「KataGo」で解析させた場合は目数形勢判断もすべて見ることができます。


参考ウェブページ一覧表(順不同)
posted by hatakazu at 18:50| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2020年05月21日

GTP対応囲碁GUI「q5Go」のインストールと使いかた - Ubuntu編

コンピュータ囲碁プログラムとよばれるものは一般的に、現在の盤面の状況を分析して次の着手を導き出す囲碁思考エンジンそのものを指すことがおおく、それじたいは対局や棋譜分析に適した操作画面をそなえてないのがふつうです。
そうした操作画面は囲碁GUI(Graphical User Interface)とよばれるべつのソフトウェアで、囲碁思考エンジンを囲碁GUIと連携させることによって、グラフィカルな碁盤画面をつうじて囲碁思考エンジンとやりとりできるようになるわけです。
そして、囲碁思考エンジンと囲碁GUIとは、GTP(Go Text Protocol)という共通の言葉によってむすびつけられています。
囲碁GUIは現在の盤面の状況をGTP経由で囲碁思考エンジンに伝え、次の着手を導き出すよう命令し、囲碁思考エンジンも計算によって導き出された着手をGTP経由で囲碁GUIに返し、それを囲碁GUIがグラフィック画面の碁盤上に表示するという方法で、ユーザと囲碁思考エンジンとの対局や思考エンジンによる棋譜分析が可能になっているのです。
そのため、いろいろな囲碁思考エンジンを対局や棋譜分析に使うためには、GTPに対応した囲碁GUIをインストールして囲碁思考エンジンと連携させ、GTP対応囲碁GUIをとおして囲碁思考エンジンを制御してやる必要があることになります。
GTPに対応した囲碁GUIとしては「Leela Zero」専用GUIとして開発された「Lizzie」が、「Leela Zero」経由で「ELF OpenGo」のネットワークを使えることや操作性のよさもあいまって広く利用されていますが、ほかにも「GoGui」「Sabaki」「q5Go」などはよく使われていると思います。
ここでは、「q5Go」を「Ubuntu 18.04 LTS」にインストールする方法と、基本的な使いかたについて記述していきます。

「Lizzie」プロジェクトページ
「GoGui」プロジェクトページ
「Sabaki」プロジェクトページ
「q5Go」プロジェクトページ

1. 前提となる環境
インストールするコンピュータの仕様は以下のとおり。

--
Dell Inspiron 14 7472 Core i7モデル 18Q42P
OS:Ubuntu 18.04 LTS 日本語 Remix
CPU:インテル Core i7-8550U (4Mキャッシュ、最大4.0GHz)
GPU:NVIDIA GeForce MX150 GDDR5 2GB
メモリー:8GB DDR4 2400MHz(最大16GB)
保存装置:128GB SSD (Windows10) + 1TB 5400rpm HDD (Ubuntu18.04)
--

「q5Go」をインストールするさいの動作要件ですが、ハードウェア的にもソフトウェア的にも特別な要請はなく、比較的あたらしいOSが動いているコンピュータならたいてい問題なく動かせるはずです。
ただし、「q5Go」をどれだけ使えるかはけっきょく「q5Go」から利用できる囲碁思考エンジンの性能に依存するので、最低限自分が利用したいコンピュータ囲碁プログラムを動かせる環境でないと意味がありません。

2. 「q5Go」インストールファイルのダウンロード
「q5Go」の最新バージョンは「1.1.1」で、「Ubuntu 18.04 LTS」にインストールするには、「q5Go」GitHubレポジトリからソースをダウンロードする必要があります。
最終的には「~/q5Go」ディレクトリに実行ファイルをインストールするとして、作業用フォルダ「~/q5Go-tmp」にソースをダウンロードすることにしましょう。

$ cd
$ git clone https://github.com/bernds/q5Go q5Go-tmp


これによってホームフォルダに「~/q5Go-tmp」ディレクトリを作成のうえ、そこに必要なソースをダウンロードして、「q5Go」をインストールする準備がととのったことになります。

3. 「q5Go」のインストール
ソースをダウンロードした「~/q5Go-tmp」ディレクトリ内にビルド作業に使うサブディレクトリを作り、そこでコンパイルをおこなって実行ファイルを生成し、そして生成した実行ファイルを「~/q5Go」にインストールしてやる手順です。

$ cd q5Go-tmp
$ mkdir build
$ cd build
$ qmake ../src/q5go.pro PREFIX=/home/username/q5Go
$ make
$ make install


「qmake」コマンドが見つからない場合は「$ sudo apt install qt5-qmake」でインストールしますが、「qmake」を実行するにあたって「qt5」関連のライブラリが足りないというエラーが出るかもしれません。
hatakazuの場合は「multimedia」と「svg」のライブラリがはいってなかったので、追加でインストールする必要がありました。
最後に「q5Go」の実体である「~/q5Go/bin/q5go」ファイルをターゲットに、パスのとおった場所(たとえば「~/bin」など)からリンクを張っておきます。

$ ln -s ~/q5Go/bin/q5go ~/bin


これで「q5Go」のインストール作業は完了し、「$ q5go」コマンド一発で「q5Go」を起動できるようになりました。

4. 「q5Go」の設定
「q5Go」を起動したら、まずは「q5Go」から呼び出すコンピュータ囲碁プログラムを登録します。
起動画面真ん中下の「Settings」をクリックし、設定画面が開いたら「Gomputer Go」タブをクリックして、エンジン登録画面を開きます。
「New」をクリックして「Name:」欄にわかりやすい表示名を、そして「Executable:」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「AQ」フォルダを「/home/username/AQ」に設置した場合、「Name:」欄に「AQ」と入力、「Executable:」欄に絶対パス「/home/username/AQ/AQ」を指定します。
「Arguments:」欄には「--rule=1 --komi=6.5 --byoyomi=10 --use_ponder=off」のようにオプションを指定しますが、「AQ」の場合は「AQ」フォルダにある設定ファイル「config.txt」から設定を読みこむスタイルなので、基本的にここは空欄のままで問題ありません。
「config.txt」の内容を上書きして、「AQ」の動作を変更したい場合だけ、ここにその内容を記述すればO.K.です。
「Fixed Komi:」欄にデフォルトのコミ(「AQ」や「KataGo」なら「6.5」が有効に作用します)を指定、「Board size:」欄には「19」と入力しておきます。
「Lizzie」と通信できるエンジンであれば記譜解析に利用できるので「Use for analysis」ボタンにチェックをいれてから、それ以外のエンジンであればチェックがはずれた状態のままで、「OK」をクリックすればエンジンの登録は完了です。
「AQ v4.0.0」は「--lizzie」スイッチを指定することで「Lizzie」での出力が可能になっていますが、「q5Go」でおなじ設定をためしてみたところ、現時点では動かせませんでした。
そのため、記譜解析に使えるのは基本的には「Leela Zero」および「KataGo」のみ、ということになりそうです。

5. 「q5Go」の基本的な使いかた
「q5Go」はGTP対応囲碁GUIとしては比較的あたらしいもので、そのぶん「Leela Zero」のもつ「Leela Zero」や「KataGo」と連携した棋譜分析機能や「KataGo」の目数差による形勢判断表示などのあたらしいトレンドにも対応しており、非常に多機能かつ使いやすい囲碁GUIとなっています。
コンピュータ囲碁プログラム相手の対局、思考エンジンどうしの対局、「Leela Zero」および「KataGo」を利用した記譜解析、SGFファイルの編集や他形式ファイルへの変換など、囲碁GUIに期待されることはひととおりできるうえに、いくつか便利な機能も追加されています。

5-1. 思考エンジンとの対局
登録した囲碁思考エンジン(たとえば「AQ」)と対局するには、起動画面で「Play against the machine」ボタンをクリック、もしくは「Play online」ボタンをクリックして開いた画面のメニューバー「File」から「Play with program」を選択します。
開いた画面の「Engine:」欄で登録ずみの思考エンジンから対局したいエンジン(たとえば「AQ」)を選択、「Computer plays:」の右の石アイコンをクリックして、コンピュータに黒番を打たせるか白番を打たせるかを指定します。
「Board size: 19」「Komi: 6.5」「Handicap:」を指定し、「Main time (minutes):」および「Overtime」を設定して、「OK」ボタンを押下すれば対局開始です。

5-2. 思考エンジンどうしの対局
起動画面で「Play online」ボタンをクリックして開いた画面で、メニューバー「File」から「Computer vs. computer play」を選択します。
「Engine (white):」欄に白番を担当させたいエンジンを、「Engine (black):」欄に黒番を担当させたいエンジンを指定し、「Board size: 19」「Komi: 6.5」などの条件と時間を設定して「OK」ボタンをクリックします。
思考エンジンどうしの対局では、対局させる思考エンジンの両方について「ponder」機能を無効化するように設定し、互いの思考をさまたげないように設定しておく必要があります。

5-3. 記譜分析
新規入力する記譜を分析するためには、起動画面で「Create a board」ボタンをクリック、もしくは「Play online」ボタンをクリックして開いた画面のメニューバー「File」から「New board 19x19」を選択します。
碁盤が表示されるので、メニューバー「Edit」から「Game information」を選択し、各種情報を入力していきますが、「Komi: 6.5」を忘れずに設定しておきます。
つづいてメニューバー「Analysis」から「Choose analysis engine」へすすんで、解析に使用する思考エンジンにチェックをいれます。
ふたたびメニューバー「Analysis」から、今度は「Connect analysis engine」を選択すると、さきほど選択したエンジンが起動します。
あとは、リアルタイムで進行する分析を参照しながら、着手を入力していくことができます。
保存してあるSFG記譜を分析する場合は、起動画面で「Load SGF file」ボタンをクリック、もしくは「Play online」ボタンをクリックして開いた画面のメニューバー「File」から「Opne」を選択します。
表示された画面からディレクトリをたどって解析したいSGFファイルを見つけ、それを選択して「Open」ボタンをクリックします。
あとは新規記譜の場合とおなじように解析用エンジンを指定、立ち上げてから、カーソルキーの左右を使って記譜を分析しながら手順をすすめていきます。
候補手の色分け表示や、候補手をカーソルでポイントすることによる読み筋表示など、操作方法はほかの囲碁GUIとおなじく直感的にわかりやすくなっています。
石の上に表示されるのは勝率のみ、探索数や「KataGo」の目数形勢判断などは、右下の枠内に別途表示される仕組みになっています。

5-4. 事前記譜解析のバッチ処理
ちょっとめずらしい、「q5Go」に特徴的な機能として、思考エンジンにあらかじめ記譜を解析させて結果を書き込んだSFGファイルを出力する、バッチ処理があります。
hatakazuのコンピュータはなんとか「CUDA」環境でGPUを動かせるぎりぎりの性能しかもっておらず、「Lizzie」から思考エンジンを立ち上げてGPUをぶんぶん回していると、正直なところ負荷が大きくて操作に支障をきたしたり最悪しばらく入力を受けつけなくなったりします。
しかしたとえば寝ているあいだや外出中にこの事前記譜解析バッチ処理を走らせておけば、コンピュータにむかうときにはすでに解析を終えてデータが書き込まれたSFGファイルが準備されており、「q5Go」からそれを開いて手順を追っていくと(その時点では思考エンジンを動かす必要はなく、GPUを回してコンピュータに負担をかけることなく)解析結果を見ることができるのです。
強力なGPUを搭載しているコンピュータであれば、同時進行で解析しながらでも問題ないのでしょうが、hatakazuのようにとぼしいGPU資源しかもたないコンピュータを使っている場合はたいへん助かります。
たとえば寝ているあいだに、同時進行なら待ってられないほどの時間をかけて深く解析させておいて、それをあとから短時間でパラパラと軽快に追っていくことができるということです。
hatakazuがこの囲碁GUI「q5Go」を使っている理由、ここであらためて紹介する理由は、おもにこのバッチ処理機能が便利で重宝しているところにあります。
事前記譜解析のバッチ処理を実行するためには、起動画面で「Batch analysis」ボタンをクリック、もしくは「Play online」ボタンをクリックして開いた画面のメニューバー「File」から「Batch analysis」を選択します。
「Batch computer analysis」画面が表示されるので、「Choose:」欄で解析に使用する思考エンジンを指定、メニューバー「Analysis」から「Choose analysis engine」へすすんで、解析に使用する思考エンジンにチェックをいれます。
左側の「Number of seconds per move:」と「Maximum number of lines to add:」は、一手ごとにどれだけ時間をかけて読ませ、その読んだなかからどれだけの情報を解析結果として出力するかを指定するパラメータです。
数が大きいほど情報量は増えますが、そのぶん解析にかかる時間も長くなります。
「If fixed engine komi:」では、たとえば「PhoenixGo」のように七目半以外のコミを受けつけないエンジンに、たとえばコミ六目半の碁を解析させるときの振る舞いを制御します。
このあたりの設定を終えたら、「File to analysis」欄で解析したいSGFファイルを選んでは「Add to queue」ボタンを押して「Job queue」へ追加していきます。
解析したいSFGファイルをすべて登録したら、「Start engine」ボタンをクリックします。
「Choose:」欄で設定した解析用エンジンが立ち上がり、SFGファイルを順番に解析にかけて、その結果(候補手、読み筋、勝率の推移など)を各SFGファイルへ追加していきます。
作業が終わったSFGファイルを「q5Go」で開くと、あらかじめ思考エンジンによって解析した結果が書き込まれているので、思考エンジンを起動することなく手順を追っていくことができるというわけです。
そのさいは、まさにリアルタイムで解析しながら手順を再生するときとおなじように、候補手が勝率におうじて色分け表示され、気になる候補手をポイントすれば読み筋があらわれ、勝率の推移や探索深さのデータ、「KataGo」で解析させた場合は目数形勢判断もすべて見ることができます。


参考ウェブページ一覧表(順不同)
posted by hatakazu at 21:46| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2020年05月20日

Windows 10上に囲碁勉強環境を構築する - 「Sabaki」編

コンピュータ囲碁プログラムとよばれるものは一般的に、現在の盤面の状況を分析して次の着手を導き出す囲碁思考エンジンそのものを指すことがおおく、それじたいは対局や棋譜分析に適した操作画面をそなえてないのがふつうです。
そうした操作画面は囲碁GUI(Graphical User Interface)とよばれるべつのソフトウェアで、囲碁思考エンジンを囲碁GUIと連携させることによって、グラフィカルな碁盤画面をつうじて囲碁思考エンジンとやりとりできるようになるわけです。
そして、囲碁思考エンジンと囲碁GUIとは、GTP(Go Text Protocol)という共通の言葉によってむすびつけられています。
囲碁GUIは現在の盤面の状況をGTP経由で囲碁思考エンジンに伝え、次の着手を導き出すよう命令し、囲碁思考エンジンも計算によって導き出された着手をGTP経由で囲碁GUIに返し、それを囲碁GUIがグラフィック画面の碁盤上に表示するという方法で、ユーザと囲碁思考エンジンとの対局や思考エンジンによる棋譜分析が可能になっているのです。
そのため、いろいろな囲碁思考エンジンを対局や棋譜分析に使うためには、GTPに対応した囲碁GUIをインストールして囲碁思考エンジンと連携させ、GTP対応囲碁GUIをとおして囲碁思考エンジンを制御してやる必要があることになります。
GTPに対応した囲碁GUIとしては「Leela Zero」専用GUIとして開発された「Lizzie」が、「Leela Zero」経由で「ELF OpenGo」のネットワークを使えることや操作性のよさもあいまって広く利用されていますが、ほかにも「GoGui」「Sabaki」「q5Go」などはよく使われていると思います。
ここでは、「Sabaki」をWindowsにインストールする方法と、基本的な使いかたについて記述していきます。

「Lizzie」プロジェクトページ
「GoGui」プロジェクトページ
「Sabaki」プロジェクトページ
「q5Go」プロジェクトページ

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
--

「Sabaki」をインストールするさいの動作要件ですが、ハードウェア的にもソフトウェア的にも特別な要請はなく、Windowsが動いているコンピュータならたいてい問題なく動かせるはずです。

2. 「Sabaki」インストールファイルのダウンロード
「Sabaki」の最新バージョンは「v0.51.1」で、「Releases」ページから64bit版Windows用インストーラファイルをダウンロードできます。
いまならポータブル版「sabaki-v0.51.1-win-x64-portable.exe」がいいと思いますが、通常のインストール版「sabaki-v0.51.1-win-x64-setup.exe」を使ってもまったく問題ありません。

3. 「Sabaki」のインストール
ポータブル版「sabaki-v0.51.1-win-x64-portable.exe」をダウンロードした場合は、適当な場所にファイルを置いて、ダブルクリックして起動するだけです。
たとえば「C:\Users\username\Sabaki」フォルダを作ってそこに「sabaki-v0.51.1-win-x64-portable.exe」ファイルを設置し、右クリックしてデスクトップにショートカットを送っておけば、今後かんたんに起動できるようになります。
インストール版「sabaki-v0.51.1-win-x64-setup.exe」を使うときは、ダウンロードした「sabaki-v0.51.1-win-x64-setup.exe」ファイルをダブルクリックすると、インストール処理がはじまります。
デフォルトのインストール先は「C:\Program Files\Sabaki」ですが、必要におうじて「C:\Users\username\sabaki」(「username」はお使いのユーザ名)などわかりやすい場所に変更のうえ、「インストール」ボタンを押します。
デスクトップに「Sabaki」のショートカットがつくられるので、それをダブルクリックすれば、「Sabaki」が起動して碁盤が表示されるはずです。

4. 「Sabaki」の設定
あたらしい「Sabaki」では日本語表示できるようになっているので、最初に起動したらまず上部メニューバー「File」から「Preferences」ヘすすんで設定画面を開き、左下の「Language: English (English)」欄の右矢印をクリックして「日本語 (Japanese)」に変更します。
再起動後に変更が有効になるよというメッセージが表示されるので「OK」を押下、右下の「Close」をクリックして設定画面を閉じたら、右上の赤色「x」ボタンを押していったん「Sabaki」を終了させてからあらためて起動しなおします。
今度はメニューバーが日本語で表示されているはずなので、なにはともあれエンジン設定にすすみます。
「Sabaki」はあくまでも囲碁GUIなので、対局や棋譜分析をおこなうためには、GTP経由で囲碁思考エンジンとやりとりする必要があります。
囲碁思考エンジンが考え、囲碁GUIがそれを画面に表現する、私たちは囲碁GUIをとおして囲碁思考エンジンと対局しているということです。
そのため、あらかじめ「Sabaki」にGTP対応囲碁思考エンジンを登録し、それとやりとりできるように設定しておかないといけません。
メニューバーの「エンジン」 -> 「エンジンサイドバーを開く」にチェックがはいっていると思いますが、「ファイル」の下に「▶」印と「⚡」マークが表示されているのがそれになります。
「▶」じるしをクリックして開いたメニューから「エンジンを管理」を選び、下からあらわれた画面で「追加」をクリックします。
「(無名のエンジン)」と表示されている欄にカーソルをもっていって、わかりやすい表示名を、そして「パスを入力してください」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば囲碁思考エンジン「AQ」を「C:\Users\username\AQ」フォルダにインストールしている場合、「(無名のエンジン)」欄にカーソルをもっていって「AQ」と入力、「パスを入力してください」欄に絶対パス「C:\Users\username\AQ\AQ.exe」を指定します。
「AQ」の場合は「AQ.exe」とおなじ場所に設定ファイル「config.txt」が存在し、そこで各種パラメータを指定する方法ですが、使用する思考エンジンによってはその下の「引数なし」と表示されている欄にパラメータ(読みこむネットワークファイルの指定など)を記入してやる必要があります(「AQ」の場合もここに記入することで初期設定値を上書きして起動できます)。
さらにその下の「初期化コマンド (;-separated)」欄にコマンドを追加するケースもあります(思考時間の設定など)。
このエンジンサイドバー(メニューバーの「エンジン」から「エンジンサイドバーを表示」であらわれる)はつねに表示するようにしておくと、上部に起動した思考エンジン(たとえば「AQ」)の状態が表示されるとともに、その下には囲碁GUI「Sabaki」と思考エンジンとのGTPによるやりとりが流れていくのをみれて便利です。
なにか問題があってエンジンが起動しなかったり、GTP通信がうまくいかなかったりしたときは、ここに表示されるメッセージから解決の手がかりを得ることができます。
各種思考エンジンの「Sabaki」への登録方法については、それぞれのインストール方法を紹介するページに項目をもうけて、記述していきたいと思っています。

5. 「Sabaki」の基本的な使いかた

5-1. 思考エンジンとの対局
登録した囲碁思考エンジン(たとえば「AQ」)と対局するには、メニューバーの「ファイル」から「新規」をクリックします。
開いた画面で「コミ」「置き碁」「碁盤サイズ」を指定のうえ、黒番と白番それぞれの担当者を選択します。
自分が担当する手番は「マニュアル」を選択、コンピュータに担当させる手番は登録されている思考エンジンの表示名から選んで、「OK」ボタンを押下します。

5-2. 思考エンジンどうしの対局
便利な使いかたとしては、「Sabaki」に複数の囲碁思考エンジンを登録しておいて、思考エンジンどうし対局させることができます。
その場合は、対局させる思考エンジンの両方について「ponder」機能を無効化するように設定し、互いの思考をさまたげないように設定しておく必要があります。
エンジンサイドバーの「▶」印から対局させたい二つのエンジンを開始し、それぞれの表示行を右クリックして「黒番に指定」「白番に指定」にチェックをいれて手番を決めてから、「⚡」マークをクリックすると対局がはじまります。
メニューバーの「ファイル」から「新規」をクリックして開いた画面で、「マニュアル』ではなくて黒番と白番の両方し思考エンジンを指定することでも、おなじように思考エンジンどうしの対局になります。

5-3. 記譜分析
ある思考エンジンを開始してエンジンサイドバーに表示されている状態で、その表示行を右クリックして「解析器に指定」にチェックをいれるか、そのエンジンが選択されて青色行で表示されている状態で上部メニューバー「エンジン』から「解析モードを切替」を選択する(あるいは「F4」キーを押下する)と、その思考エンジンを使って記譜解析をおこなうことができます。
「Lizzie」とおなじように勝率と探索数が表示されて、勝率におうじて色分けされ、色のついた好捕手部分にカーソルをもっていくと読み筋が現れる仕組みです。
形勢を目数差で表示する独自の形勢判断機能をもつ「KataGo」に解析させる場合は、上部メニューバーの「表示」から「ヒートマップを表示」にすすんで、「勝率を表示」か「地合を表示」かを選択することができます。
「Lizzie」で「KataGo」を使うときのように、「勝率」「探索数」「目数差」の三つを同時表示させることはできませんが、それでも「KataGo」の特徴を生かした使いかたはできるということです。
現時点で解析器として指定できるのは「Leela Zero」と「KataGo」のみで、SGF記譜を読みこんで手順を追いながら解析させることも、黒番と白番の両方をマニュアルにした対局モードを使ってリアルタイムで解析をかけることもできます。

5-4. そのほかの注意事項
接続したエンジンはエンジンサイドバーに表示され、停止中は「□」マークが、動作中は「▷」マークがエンジン名の左に表示されています。
動作中はメモリを予約している状態なので、使わないときはかならず右クリックして「停止」を選んで「□」マークの状態にもどし、ほかのエンジンのためにメモリを開放するようにします。
べつの作業に移るため不要になったら、おなじく右クリックから「接続解除」しておきます。
「Sabaki」メニューバーの「View」から「Toggle Menu Bar」をクリックすると、メニューバーが消えてしまいますが、「Alt」キーを押すことでメニューバーが表示されるようになります。
「Sabaki」の設定ファイルはポータブル版ならインストールしたそのフォルダに生成する「Sabaki」フォルダに、インストール版なら「C:\Users\username\AppData\Roaming\Sabaki」フォルダに保管されているので、コンピュータを交換して「Sabaki」をインストールしなおすときなど、エンジン設定などを引っ越ししたい場合は「settings.json」ファイルを救出してください。


参考ウェブページ一覧表(順不同)
posted by hatakazu at 21:22| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2020年05月18日

Windows 10上に囲碁勉強環境を構築する - 「KataGo」編

KataGo」はコンピュータ囲碁プログラムとしては比較的あたらしいプロジェクトで、「AlphaZero」方式の自己学習を基本としながらもさまざまな工夫をこらして学習効率を高め、ほかの類似のコンピュータ囲碁プログラムよりも短期間で強くなってきたところにアピール点があります。
「KataGo」をインストールしたコンピュータのGPU性能におうじて、適切にリソースを設定するための方法を提供し、具体的にいろいろ説明しているのもおもしろいところです。
まあそのあたりはhatakazuのようなただの囲碁愛好家にはあまり関係ないのですが、コンピュータ囲碁プログラムの思考を囲碁GUIに表示させて遊んでいる身からすれば、①「KataGo」が独自の形勢判断機能を搭載していて、形勢を目数差で表示することができること、②標準で「Lizzie」との連携が可能で、「Lizzie」でも「KataGo」独自の形勢判断機能をサポートしていること、③「v1.3」以降で日本ルールへの対応を打ち出したことはうれしいポイントです。

「KataGo」GitHubレポジトリ
・Linux用およびWindows用バイナリ配布あり。
・CUDAバージョンおよびOpenCLバージョン。
・現時点の最新バージョンは「v1.4.2」。

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
--

「KataGo」を動かすには「CUDA」もしくは「OpenCL」に対応したGPUが必要で、ここではあらかじめ「Windows 10上に囲碁勉強環境を構築する - 準備編」の記述のとおりに「CUDA 10.2」+「cuDNN 7.6.5」環境が構築されていることを前提として、CUDAバージョンのインストール方法を説明していきます。
「KataGo」GitHubレポジトリの記述では「CUDA 10.1」+「CUDNN 7.6.1」環境への言及がありますが、「CUDA」関連ライブラリのバージョン間における互換性などの制約は検証されておらず、今回「CUDA 10.2」+「cuDNN 7.6.5」環境でもまったく問題なく動作することが検証できました。
OpenCLバージョンをインストールする場合は、必要な関連ライブラリは配布されているバイナリパッケージに同梱されているので、特別な準備をする必要はありません。
以下のCUDAバージョンのインストール方法の記述のうち、「katago-v1.4.2-cuda10.1-windows-x64」の部分をすべて「katago-v1.4.2-opencl-windows-x64」に読みかえるだけで、まったくおなじ手順を実行してもらえればOpenCLバージョンをインストールできます。
なお、「KataGo」として公開されているのはGUIをもたない囲碁思考エンジン部分のみなので、グラフィカルに対局や棋譜分析をおこなうためにはGTPを解釈できる囲碁GUIと連携させる必要があります。

2. 「KataGo」インストールファイルのダウンロード
「KataGo」の現行バージョンは「v1.4.2」で、「KataGo」GitHubレポジトリの「Releases」ページから「katago-v1.4.2-cuda10.1-windows-x64.zip」をクリックして、Windows用インストールファイル「katago-v1.4.2-cuda10.1-windows-x64.zip」を取得します。

3. 「KataGo」のインストール
ダウンロードした「katago-v1.4.2-cuda10.1-windows-x64.zip」ファイルを右クリックして「すべて展開」を選ぶと、「katago-v1.4.2-cuda10.1-windows-x64」フォルダができるので、フォルダ名をわかりやすく「katago」に変更しておきます。
この「katago」フォルダのなかにGTP思考エンジン本体である「katago.exe」や設定ファイル「default_gtp.cfg」などがふくまれているので、この「katago」フォルダをそのまましかるべき場所(たとえば「C:\Users\username\katago」など)に設置します。
つづいてネットワークファイルを取得します。
「KataGo」の歴代ネットワークファイルは「katago-public/g170/neuralnets」に保管されているので、そこからダウンロードしてきたネットワークファイルを自由に使うことができます。
ここでは、最近「KataGo v1.4.0」と同時に公開された、117日間トレーニングずみの最新ネットワークファイルを使ってみることにします。
それぞれことなる設計の三種類のネットワークファイルがあり、コンピュータの性能によっても強さに差が出てくるので、試してみて自分の環境に合いそうなものを採用するといいでしょう(基本的にはGPU性能が上がるほど下のものが強くなるはず)。

g170-b20c256x2-s4384473088-d968438914.bin.gz - The latest and final semi-zero 20-block net (continuing extended training on games from the bigger nets). -> ファイル名の例「kata20x256.bin.gz」
g170-b30c320x2-s3530176512-d968463914.bin.gz - The latest and final semi-zero 30-block net. -> ファイル名の例「kata30x320.bin.gz」
g170-b40c256x2-s3708042240-d967973220.bin.zp - The latest and final semi-zero 40-block net. -> ファイル名の例「kata40x256.bin.gz」

こうしてダウンロードした「kata20x256.bin.gz」「kata30x320.bin.gz」「kata40x256.bin.gz」を「katago」フォルダへ移動しておきます。

4. 「KataGo」の設定
「KataGo」フォルダのなかにGTP思考エンジン本体「KataGo.exe」といっしょに設定ファイル「default_gtp.cfg」が置かれており、この設定ファイル「default_gtp.cfg」の内容を編集することで、次回起動時以降「KataGo」のふるまいを変更することができます。
ここでは現時点で最新のバージョンである「KataGo v1.4.2」をインストールしましたが、「KataGo」では「v1.3」で日本ルールへの対応を打ち出し、「katago」フォルダにある「default_gtp.cfg」でその挙動を制御できるようになっています。
基本ルールにかかわる設定ファイルの変更は以下の赤字部分で、日本ルールの適用はデフォルトの「rules = tromp-taylor」をコメントアウトして、「rules = japanese」と宣言するだけです。
個別に指定するなら、青字で示した三行のコメントをはずし、指定を有効化する方法もあります。

# Default rules------------------------------------------------------------------------------------
# See https://lightvector.github.io/KataGo/rules.html for a description of the rules.
# These rules are defaults and can be changed mid-run by several custom GTP commands.
# See https://github.com/lightvector/KataGo/blob/master/docs/GTP_Extensions.md for those commands.

# Some other legal values are: "chinese", "japanese", "korean", "aga", "chinese-ogs", "new-zealand".
# KataGo does not claim to exactly match any particular human ruleset, but KataGo will try to behave
# as closely as possible given the rules it has implemented.
# rules = tromp-taylor
rules = japanese

# Use the below instead to specify an arbitrary combination of individual rules.

# koRule = SIMPLE # Simple ko rules (triple ko = no result)
# koRule = POSITIONAL # Positional superko
# koRule = SITUATIONAL # Situational superko

# scoringRule = AREA # Area scoring
# scoringRule = TERRITORY # Territory scoring (uses a sort of special computer-friendly territory ruleset)

# taxRule = NONE # All surrounded empty points are scored
# taxRule = SEKI # Eyes in seki do NOT count as points
# taxRule = ALL # All groups are taxed up to 2 points for the two eyes needed to live

# multiStoneSuicideLegal = true #Is multiple-stone suicide legal? (Single-stone suicide is always illegal).


5. GTP対応囲碁GUIとの連携方法
「KataGo」として公開されているのはGUIをもたない囲碁思考エンジン部分のみなので、グラフィカルに対局や棋譜分析をおこなうためにはGTPを解釈できる囲碁GUIと連携させる必要があります。
「katago」フォルダをたとえば「C:\Users\username\katago」(「username」はお使いのユーザ名)に設置したとして、「C:\Users\username\katago\katago.exe」が、囲碁GUIに登録するべきGTP思考エンジンへの絶対パスになります。

5-1. 「Lizzie」との連携
なんといっても標準で「Lizzie」と連携するGTP出力をそなえていることが、「KataGo」の特徴のひとつでもあります。
それもあって「Lizzie」のWindows用バイナリ現行バージョンには「KataGo」が同梱されていますが、これは「v1.2」で日本ルールに対応しておらず、いっしょについてくるネットワークもかなり古い(最新版ネットワークと比べるとかなり弱い)ものです。
そのため「Windows 10上に囲碁勉強環境を構築する - 「Lizzie」応用編」ページにて、「Lizzie」の設定を変更しながら「KataGo v1.2」を「KataGo v1.4.2」に置きかえると同時に、最新版のネットワークを導入する方法を紹介しています。
「KataGo」を単独でインストールした場合でも、これとまったくおなじ手順で「KataGo」を「Lizzie」と連携させ、「KataGo」最新ネットワークの利用のみならず、日本ルールへの対応や独自の形勢判断といった「KataGo」の強みをじゅうぶん発揮させることができます。
もともと「Lizzie」についてくるOpenCLバージョンだけではなく、(動作環境がととのっていて単独で動かせている状態なら)CUDAバージョンも、この方法で「Lizzie」と連携させることができます。

5-2. GTP対応囲碁GUI「GoGui」への思考エンジン登録
メニューバーの「プログラム」から「新規プログラム」を選び、あらわれた画面の「コマンド:」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「katago」フォルダを「C:\Users\username\katago」に設置した場合、「コマンド:」欄に入力する絶対パスは「C:\Users\username\katago\katago.exe」のようになります。
これにオプションを追加しますが、GTP通信のための「gtp」オプションのほか、「-config default_gtp.cfg」のような設定ファイル指定、「-model kata20x256.bin.gz」のようなネットワークファイル指定が使えます。
「kata20x256.bin.gz」の代わりに「kata30x320.bin.gz」や「kata40x256.bin.gz」を使いたいときは、「-model」のあとのファイル名を変更すればO.K.です。
最終的に「コマンド欄:」には、これをすべて一行でつなげて、「C:\Users\username\katago\katago.exe gtp -config default_gtp.cfg -model kata20x256.bin.gz」と入力します。
「OK」ボタンを押下して何度か「待機」をクリックしながら待っていると、ステイタスバーに表示されていた「プログラムの開始中」メッセージが消えて新規プログラム登録画面が開くので、「ラベル:」欄にたとえば「KataGo」などと入力して「OK」ボタンを押下します。
これで登録完了となるので、次回以降はメニューバーの「プログラム」 -> 「プログラムの起動」とすすんで「KataGo」を選ぶと、「KataGo」が起動して対局や棋譜分析に利用できるようになります。
登録した囲碁思考エンジン「KataGo」と対局するには、「KataGo」を起動した状態で、メニューバーの「対局」から「碁盤サイズ」「置石」「コンピュータの手番」を指定したうえで、「新規対局」をクリックします。
検討したい局面を指定して、そこで「KataGo」がどう打つかをみることもできます。
「KataGo」を起動したあと、メニューバーから「コンピュータの手番」を「なし」にして、どんどん石を置いていって対象となる局面をつくり、黒番の局面なら「KataGoに黒を打たせる」、白番の局面なら「KataGoに白を打たせる」アイコンをクリックします。
そのさい「GTPシェル」を開いておけば、「GoGui」と「KataGo」との通信内容が表示されるので、なにか問題がある場合は問題解決の手がかりを得ることができます。

5-3. GTP対応囲碁GUI「Sabaki」への思考エンジン登録
メニューバーの「Engines」から「Manage Engines」を選び、あらわれた画面で「Add」をクリックします。
「(Unnamed Engine)」と表示されている欄にカーソルをもっていって、わかりやすい表示名を、そして「Path」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「katago」フォルダを「C:\Users\username\katago」に設置した場合、「(Unnamed Engine)」欄にカーソルをもっていって「KataGo」と入力、「Path」欄に絶対パス「C:\Users\username\katago\katago.exe」を指定します。
「(No arguments)」欄にはオプションを追加しますが、GTP通信のための「gtp」オプションのほか、「-config default_gtp.cfg」のような設定ファイル指定、「-model kata20x256.bin.gz」のようなネットワークファイル指定が使えます。
「kata20x256.bin.gz」の代わりに「kata30x320.bin.gz」や「kata40x256.bin.gz」を使いたいときは、「-model」のあとのファイル名を変更すればO.K.です。
最終的に「(No arguments)」欄には、「gtp -config default_gtp.cfg -model kata20x256.bin.gz」のように入力することになります。
登録した「KataGo」と対局するには、メニューバーの「File」から「New」をクリックします。
開いた画面で「Board Size」「Handicap」「Komi」を指定のうえ、黒番と白番それぞれの担当者を選択します。
自分が担当する手番は「Manual」を選択、「KataGo」に担当させる手番は登録されている思考エンジンの表示名から「KataGo」を選んで、「OK」ボタンを押下します。
「Sabaki」にほかの囲碁思考エンジンを登録しておいて、「KataGo」をほかの思考エンジンと対局させることもできます。
その場合は、対局させる思考エンジンの両方について「ponder」機能を無効化するように設定し、互いの思考をさまたげないかたちで対局をおこなう必要があります。
「KataGo」では、設定ファイル「default_gtp.cfg」に記述されている「ponderingEnabled = false」の部分が該当します。
「Sabaki」では、「KataGo」をもちいて記譜解析を(SGF記譜を読みこみながら、もしくはリアルタイムで入力しながら)おこなうことができます。
「F4」キーで解析モードにうつった画面で、「KataGo」の特徴のひとつである目数差での形勢表示は可能ですが、「勝率+探索数」か「目数差+探索数」の選択となり、「Lizzie」のように「勝率」「探索数」「目数差」の三つを同時に表示させることはできないようです。

6. そのほかのポイント

6-1. GPUチューニング
「KataGo」では、GPUを制御するパラメータを適切に設定するための、さまざまな方法が提供されています。
GitHubレポジトリの「How to use」や「Tuning for performance」を参考に、GPUパフォーマンスの最適化に取りくんでいきます。


参考ウェブページ一覧表(順不同)
posted by hatakazu at 20:24| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2020年05月17日

コンピュータ囲碁プログラム「GLOBIS-AQZ」をソースからビルドする - Ubuntu編

1. 前提となる環境
インストールするコンピュータの仕様は以下のとおり。

--
Dell Inspiron 14 7472 Core i7モデル 18Q42P
OS:Ubuntu 18.04 LTS 日本語 Remix
CPU:インテル Core i7-8550U (4Mキャッシュ、最大4.0GHz)
GPU:NVIDIA GeForce MX150 GDDR5 2GB
メモリー:8GB DDR4 2400MHz(最大16GB)
保存装置:128GB SSD (Windows10 Home 64bit) + 1TB 5400rpm HDD (Ubuntu 18.04 LTS 日本語 Remix)
--

2. 「AQ」インストールの準備とソースコードの取得
「GLOBIS-AQZ」は「AQ」のバージョンとしては「v4.0.0」ということになり、「AQ」GitHubレポジトリでソースコードが公開されています。
このソースコードをLinuxでビルドするための要件は、「AQ」GitHubレポジトリの日本語の説明によれば、以下のとおりです。

--
5-1. Linux

Requirements
・gcc
・make
・CUDA Toolkit 10.x
・TensorRT 7.0.0

Makefile内のCUDA・TensorRTのインクルードパス・ライブラリパスを確認し、makeしてください。
make
--

これから「AQ」をソースコードからビルドするにあたっては、あらかじめ「「Ubuntu 18.04 LTS 日本語 Remix」に「CUDA 10.0」+「TensorRT 7.0.0」をインストールする」の記述のとおりに「CUDA 10.0」+「TensorRT 7.0.0」環境が構築されていることを前提としています。
この手順にしたがって「CUDA」をインストールした場合、最終的には「CUDA」関連ライブラリは以下のように配置されています。

・Ubuntu 18.04 LTS 日本語 Remix
・CUDA 10.0 -> /usr/local/cuda-10.0
・cuDNN 7.6.5 -> /usr/lcoal/cuda-10.0
・NCCL 2.6.5 -> /usr/local/nccl-2.6
・TensorRT 7.0.0 -> /usr/local/TensorRT-7.0.0

ここまでの準備が終わったら、ホームディレクトリ直下の「~/AQ」ディレクトリにインストールすることにして、「AQ」のソースコードを取得します。

$ cd
$ git clone https://github.com/ymgaq/AQ AQ


これで、「~/AQ」に「AQ」のソースコードが取得され、ビルド作業をすすめる準備がととのいました。

3. 「AQ」のインストール
hatakazuは「CUDA」環境を構築するにあたってdebパッケージを使ってないので、「ubuntu 18.04 LTS」に標準的なdebパッケージを使ってインストールした場合とくらべると、「CUDA」関連ライブラリのインストール場所が異なっている部分があります。
そこで、「Makefile内のCUDA・TensorRTのインクルードパス・ライブラリパスを確認し、makeしてください。」という指示にしたがって、「AQ」ディレクトリにある「Makefile」を編集します。
ようは「CUDA」および「TensorRT」のインクルードパスを「-I」接頭辞をつけて、「CUDA」および「TensorRT」のライブラリパスを「-L」接頭辞をつけて、そして「cudart」「nvparsers」「nvonnxparser」「nvinfer」各ライブラリを「-l」接頭辞をつけて指定してやればいいわけなので、Linux用のパス指定部分を以下のように変更しました。
# TensorRT
LDFLAGS += -L/usr/local/cuda-10.0/lib64 -L/usr/local/TensorRT-7.0.0/lib -lpthread -lcudart -lnvinfer -lnvonnxparser -lnvparsers
INCLUDES += -I/usr/local/cuda-10.0/include -I/usr/local/TensorRT-7.0.0/include
OUTFILE = AQ


「Makefile」ファイルの編集がおわったら、ビルド作業にすすみます。
$ cd AQ
$ make


ビルド処理は問題なく完了し、「~/AQ」ディレクトリのなかに実行バイナリ「AQ」が生成しています。

4. 「AQ」の設定
以上の作業が完了したら、「~/AQ」ディレクトリにGTP思考エンジンの実行ファイル「AQ」と、設定ファイル「config.txt」が置かれている状態になります。
このあとは「コンピュータ囲碁プログラム「GLOBIS-AQZ」のインストールと使いかた - Ubuntu編」のLinux用バイナリ配布ファイルを利用するときとまったくおなじように、「config.txt」を編集して「AQ」の設定をおこない、「GoGui」や「Sabaki」などGTP対応囲碁GUIへの登録作業をすすめればO.K.です。

5. 問題点
じっさいには、「AQ」を上記手順にしたがってソースコードからビルドしたあと「GoGui」や「Sabaki」と連携させて呼び出そうとすると、「building engine ... UFFParser: Could not open /home/username/AQ/engine/model_jp.uff」というエラーが発生して起動できません。
これは、「AQ」GitHubレポジトリの日本語の説明の以下の部分に書かれている「UFF(Universal File Format)形式のファイル」が見つからない、といっているわけです。
3-2. エンジンファイルの生成

初回起動時に、UFF(Universal File Format)形式のファイルからお手持ちの環境に最適化されたネットワークエンジンを生成します。
このエンジン生成には数分程度かかることがあります。
シリアライズ化されたエンジンファイルがengineフォルダに保存されるので、2回目以降はすぐに起動します。


ほんらいは「AQ」ディレクトリのなかの「engine」ディレクトリに、元になる中国ルール用「model_cn.uff」ファイルおよび日本ルール用「model_jp.uff」ファイルが格納されており、設定内容によってそれぞれ中国ルール用「model_cn.engine」エンジンファイルおよび日本ルール用「model_jp.engine」エンジンファイルを、初回起動時に生成する仕組みになっています。
しかし、現在「AQ」GitHubレポジトリからダウンロードできるソースコードには、これらのUFF形式ファイルがふくまれていません。
なのでhatakazuは、Linux用バイナル配布ファイルを解凍して、そこからこのUFFファイル二つ(中国ルール用「model_cn.uff」および日本ルール用「model_jp.uff」)を抜き出して、「~/AQ/engine」ディレクトリにコピーしました。
それから再度呼び出してみると、今度は「~/AQ/engine」ディレクトリにエンジンファイル(中国ルール用「model_cn.engine」および日本ルール用「model_jp.engine」)が生成され、正常に起動することが確認できました。
posted by hatakazu at 20:47| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

コンピュータ囲碁プログラム「GLOBIS-AQZ」のインストールと使いかた - Ubuntu編

グロービスからオープンソース化のアナウンスが出たGLOBIS-AQZ」、「AQ」GitHubレポジトリの日本語の説明によれば、

--
「GLOBIS-AQZ」はDeep Learning技術を利用した囲碁の思考エンジンです。
日本ルール6目半と中国ルール7目半の両方に対応していることが特徴です。

このプログラムはGLOBIS-AQZプロジェクトの成果を利用しています。

GLOBIS-AQZは、開発:株式会社グロービス、山口祐氏、株式会社トリプルアイズ、開発環境の提供:国立研究開発法人 産業技術総合研究所、協力:公益財団法人日本棋院のメンバーによって取り組んでいる共同プロジェクトです。このプログラムは、GLOBIS-AQZでの試算を活用しています。


オープンソース・ソフトウェアですので、どなたでも無料で使用することができます。
対局・解析のためのプログラムですので、「Lizzie」「Sabaki」「GoGui」といったGUIソフトに設定して利用してください。
--

とのこと。
「AQ」のバージョンとしては「v4.0.0」というあつかいになるようなので、ここでは「AQ v4.0.0」として話をすすめていくことにします。
NVIDIA製GPUを搭載したコンピュータに「CUDA」環境を構築して、コンピュータ囲碁プログラムを動かすというのはとても楽しい作業で、いろいろ動かしてはみるんだけど、やっぱりhatakazuはなかでも「AQ」がいちばん好きでずっと応援しています。
開発者が日本人ということで当初より日本ルールに対する親和性が感じられましたが、今回ははっきりと「日本ルール+コミ六目半」対応を打ち出しており、こんなに強いコンピュータ囲碁プログラムが完全日本仕様で動作するというだけでも、日本の囲碁を楽しむすべてのひとにとってかぎりなく大きなプレゼントのようなものだと思っています。

1. 前提となる環境
インストールするコンピュータの仕様は以下のとおり。

--
Dell Inspiron 14 7472 Core i7モデル 18Q42P
OS:Ubuntu 18.04 LTS 日本語 Remix
CPU:インテル Core i7-8550U (4Mキャッシュ、最大4.0GHz)
GPU:NVIDIA GeForce MX150 GDDR5 2GB
メモリー:8GB DDR4 2400MHz(最大16GB)
保存装置:128GB SSD (Windows10 Home 64bit) + 1TB 5400rpm HDD (Ubuntu 18.04 LTS 日本語 Remix)
--

「AQ」をインストールするさいの動作要件は、以下のように記述されています。

・OS : Windows 10, Linux (64-bit)
・GPU : Nvidia's GPU (Compute Capability >3.0)
・CUDA Toolkit 10.0 or 10.2
・TensorRT 7.0.0

64bit版のWindows 10およびLinuxに対応、Compute Capability 3.0以上のNVIDIA製GPUをそなえたコンピュータで、「CUDA 10.0 or 10.2」+「TensorRT 7.0.0」環境が必要とのこと。
これから「AQ v4.0.0」をインストールするにあたっては、あらかじめ「「Ubuntu 18.04 LTS 日本語 Remix」に「CUDA 10.0」+「TensorRT 7.0.0」をインストールする」の記述のとおりに「CUDA 10.0」+「cuDNN 7.6.5」+「TensorRT 7.0.0」環境が構築されていることを前提としています。
なお、「AQ」として公開されているのはGUIをもたない囲碁思考エンジン部分のみなので、グラフィカルに対局や棋譜分析をおこなうためにはGTPを解釈できる囲碁GUIと連携させる必要があります。

2. 「AQ」インストールファイルのダウンロード
「AQ」の現行バージョンは「v4.0.0」で、「AQ」GitHubレポジトリの「Releases」ページから「AQ_linux.tar.gz」をクリックして、Linux用バイナリファイル「AQ_linux.tar.gz」を取得します。

3. 「AQ」のインストール
ダウンロードした「AQ_linux.tar.gz」ファイルを解凍すると、「AQ」ディレクトリが生成します。
この「AQ」ディレクトリのなかにGTP思考エンジン本体である「AQ」や設定ファイル「config.txt」などがふくまれているので、この「AQ」ディレクトリをそのまましかるべき場所(たとえば「~/AQ」など)に設置すれば、インストール作業は終了です。
$ tar zxvf AQ_linux.tar.gz
$ mv AQ ~/


4. 「AQ」の設定
「AQ」フォルダのなかにGTP思考エンジン本体「AQ」といっしょに設定ファイル「config.txt」が置かれており、この設定ファイル「config.txt」の内容を編集することで、次回起動時以降「AQ」のふるまいを変更することができます。
グロービスのオープンソース化アナウンスのなかで大橋拓文六段の「今回オープンソース化されるGLOBIS-AQZは日本ルールでの自己対戦を1千万局以上行いました。これまでほとんどの囲碁AIは中国ルール、コミ7目半でトレーニングされていたので、日本ルール特有のケースとコミ6目半に対応したGLOBIS-AQZは画期的です」というコメントが出ていましたが、「日本ルール」と「コミ六目半」への設定変更は、このファイルにいくつかの変更をほどこすことで実現します。
(じっさいには設定ファイル「config.txt」はいじらず、思考エンジン「AQ」を呼び出すときに、そのつどオプションで指定することもできます。方法は連携する囲碁GUIごとに後述。)
以下に、編集する可能性のある項目だけ抜き出して、各項目の意味と設定方法を記述します。

#### --- Rule --- ####

# Rule of game.
# 0: Chinese, 1: Japanese, 2: Tromp-Tralor
# --rule=0
--rule=1 # 基本ルールを日本式に設定する。

# Komi. Use 6.5 for the Japanese rule.
# --komi=7.5
--komi=6.5 # 日本ルールを選択した場合は、コミも六目半に設定する。

#### --- Time control --- ####

# Main time. (in seconds)
--main_time=0.0 # 秒読みにはいるまえのいわゆる持ち時間を秒単位で入力。秒読みのみの場合は「0」に設定する。

# Japanese byoyomi time. (in seconds)
--byoyomi=3.0 # 持ち時間が切れたあとの秒読みの長さを秒単位で入力。秒読みなし切れ負けの場合は「0」に設定する。

# Threshold of remaining time that AQ returns
# a move without search. (in seconds)
# Used in 'sudden death' time setting.
--emergency_time=15.0 # 秒読みなしの場合に、持ち時間がここで指定した秒数より短くなると、ノータイムで打ちはじめる。

#### --- Search --- ####

# Whether using pondering.
# --use_ponder=on
--use_ponder=off # 相手の手番でも考慮する「ponder」機能を使う場合は「on」に(「Lizzie」で利用する場合は必須)、使わない場合は「off」に設定する。


5. GTP対応囲碁GUIとの連携方法
「AQ」として公開されているのはGUIをもたない囲碁思考エンジン部分のみなので、グラフィカルに対局や棋譜分析をおこなうためにはGTPを解釈できる囲碁GUIと連携させる必要があります。
「AQ」ディレクトリをたとえば「~/AQ」に設置したとして、「/home/username/AQ/AQ」(「username」はお使いのユーザ名)が、囲碁GUIに登録するべきGTP思考エンジンへのパスになります。

5-1. GTP対応囲碁GUI「GoGui」への思考エンジン登録
メニューバーの「プログラム」から「新規プログラム」を選び、あらわれた画面の「コマンド:」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「AQ」フォルダを「/home/username/AQ」に設置した場合、「コマンド:」欄に入力する絶対パスは「/home/username/AQ/AQ」のようになります。
オプションを指定するときは、「/home/username/AQ/AQ --rule=1 --komi=6.5 --byoyomi=10 --use_ponder=off」のように、一行でつづけて書きます。
上記は「日本ルール、コミ六目半、一手10秒で着手、ponder機能無効」設定の例ですが、「AQ」フォルダにある設定ファイル「config.txt」のほうでおなじように設定していれば、「コマンド:」欄への入力は「AQ」の絶対パスだけで問題ありません。
「OK」ボタンを押下して何度か「待機」をクリックしながら待っていると、ステイタスバーに表示されていた「プログラムの開始中」メッセージが消えて新規プログラム登録画面が開くので、「ラベル:」欄にたとえば「AQ」などと入力して「OK」ボタンを押下します。
これで登録完了となるので、次回以降はメニューバーの「プログラム」 -> 「プログラムの起動」とすすんで「AQ」を選ぶと、「AQ」が起動して対局や棋譜分析に利用できるようになります。
登録した囲碁思考エンジン「AQ」と対局するには、「AQ」を起動した状態で、メニューバーの「対局」から「碁盤サイズ」「置石」「コンピュータの手番」を指定したうえで、「新規対局」をクリックします。
検討したい局面を指定して、そこで「AQ」がどう打つかをみることもできます。
「AQ」を起動したあと、メニューバーから「コンピュータの手番」を「なし」にして、どんどん石を置いていって対象となる局面をつくり、黒番の局面なら「AQに黒を打たせる」、白番の局面なら「AQに白を打たせる」アイコンをクリックします。
そのさい「GTPシェル」を開いておけば、「GoGui」と「AQ」との通信内容が表示されるので、なにか問題がある場合は問題解決の手がかりを得ることができます。

5-2. 「Sabaki」への思考エンジン登録
メニューバーの「Engines」から「Manage Engines」を選び、あらわれた画面で「Add」をクリックします。
「(Unnamed Engine)」と表示されている欄にカーソルをもっていって、わかりやすい表示名を、そして「Path」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「AQ」フォルダを「/home/username/AQ」に設置した場合、「(Unnamed Engine)」欄にカーソルをもっていって「AQ」と入力、「Path」欄に絶対パス「/home/username/AQ/AQ」を指定します。
「(No arguments)」欄には「--rule=1 --komi=6.5 --byoyomi=10 --use_ponder=off」のようにオプションを指定しますが、「AQ」フォルダにある設定ファイル「config.txt」のほうでおなじように設定していれば、ここは空欄のままで問題ありません。
登録した「AQ」と対局するには、メニューバーの「File」から「New」をクリックします。
開いた画面で「Board Size」「Handicap」「Komi」を指定のうえ、黒番と白番それぞれの担当者を選択します。
自分が担当する手番は「Manual」を選択、「AQ」に担当させる手番は登録されている思考エンジンの表示名から「AQ」を選んで、「OK」ボタンを押下します。
「Sabaki」にほかの囲碁思考エンジンを登録しておいて、「AQ」をほかの思考エンジンと対局させることもできます。
その場合は、対局させる思考エンジンの両方について「ponder」機能を無効化するように設定し、互いの思考をさまたげないかたちで対局をおこなう必要があります。

6. 問題点
インストールして動かしてみて、いくつかうまくいかないところがあるので、備忘として列記しておきます。
解決したら追記します。

6-1. 「Lizzie」への対応
「AQ v4.0.0」から「Lizzie」との連携が可能になり、「Lizzie」のエンジン登録画面で思考エンジン「AQ」へのパスを「--lizzie」スイッチをつけて指定すればO.K.ということになっているが、「--lizzie」オプションをつけてもつけなくても「Lizzie」とはうまく通信できていない。
5月19日追記:「Lizzie」のエンジン登録画面で思考エンジン「AQ」へのパスを「--lizzie」をスイッチをつけて指定することで、「AQ v4.0.0」を「Lizzie」を連携させて、「Lizzie」での棋譜分析に「AQ v4.0.0」を使うことができるようになります。
最初何度やっても通信が確立されなかったのですが、「Lizzie」で先に起動していた「Leela Zero」や「KataGo」がメモリを予約する影響で、「AQ」が必要なメモリを確保できなかったのが原因のようです。
現時点では「AQ」をデフォルトで起動する「エンジン0:」に登録しており、「Lizzie」を立ち上げると同時に「AQ」エンジンが開始されてメモリを割り当ててしまうので、問題は回避できているようです。


参考ウェブページ一覧表(順不同)

「AQ」開発者である山口祐さんのtwitter「https://twitter.com/ymg_aq」
https://github.com/ymgaq/AQ
https://github.com/ymgaq/AQ/releases
https://github.com/ymgaq/AQ/blob/master/README_JP.md
posted by hatakazu at 18:46| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

Windows 10上に囲碁勉強環境を構築する - 「ELF OpenGo」編

FACEBOOK Artificial Intelligence」サイトに「ELF OpenGo」ページがあり、そこで二年くらいまえにFacebookが開発してオープンソース化したことで話題になったコンピュータ囲碁プログラム「ELF OpenGo」のWindows用バイナリが公開されています。
今回「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」になります。
何度か数字を増減させながら対局してみて、ちょうどいい時間で着手してくれるよう、コンピュータの性能にあう適切な値を見つけてください。
posted by hatakazu at 11:37| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする