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) | 囲碁ソフトのこと | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください