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) | 囲碁ソフトのこと | 更新情報をチェックする

「Ubuntu 18.04 LTS 日本語 Remix」に「CUDA 10.0」+「TensorRT 7.0.0」をインストールする

コンピュータ囲碁プログラムの「GLOBIS-AQZ」が「GitHub」上でオープンソース化されたのを機に、自宅コンピュータの「CUDA」環境を一新することにしました。
Linux用およびWindows用の実行バイナリも配布されているので、基本的にはきちんと要件を満たす「CUDA」環境を構築できれば、問題なく「GLOBIS-AQZ」を動かすことができるはずです。

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. 構築すべき「CUDA」環境
まずは目標設定ですが、最終的には「GLOBIS-AQZ」とFacebook「ELF OpenGo」を動かしたいと思っているので、それらが動作する「CUDA」環境を構築するということになります。
まず、「GLOBIS-AQZ」GitHubレポジトリの記述によれば、「GLOBIS-AQZ」の動作条件は以下のとおりです。

・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

「ELF OpenGo」のほうは、「ELF Opengo」GitHubレポジトリの記載によれば、動作保証しているのは以下の条件です。

・Ubuntu 18.04
・Python 3.7
・GCC 7.3
・CUDA 10.0
・CUDNN 7.3
・NCCL 2.1.2

とりあえずこれで動かしていたので間違いないというだけで、リソースの制限もあるので互換性の検証はしていないそうなので、じっさいにはもっとゆるやかな条件で動作するはずです。
「GLOBIS-AZQ」を動かすためには「TensorRT 7.0.0」の動作要件を満たす必要があるので、「Ubuntu 18.04」に「CUDA 10.0」+「cuDNN 7.6.5」+「NCCL 2.6.4」をインストールして、そこにさらに「TensorRT 7.0.0」を導入するという方針でいきたいと思います。
いずれ試行錯誤することになるとは思いますが、とりあえず以下の構成を基本に、作業をはじめてみることにしました。

・Ubuntu 18.04 LTS
・CUDA 10.0
・cuDNN 7.6.5
・NCCL 2.6.4
・TensorRT 7.0.0

3. NVIDIA製GPU「GeForce MX150」ドライバのインストール
今回作業するコンピュータはNVIDIA製GPU「GeForce MX150」を搭載しているので、まずはこのGPUに対応する最新のドライバをインストールします。
じっさいの作業はむずかしくありませんが、基本的な考えかたを学ぶうえで、「Ubuntu 16.04 LTSにNVIDIA製ドライバーをインストールする3つの方法」がたいへん参考になりました。
「Ubuntu 18.04 LTS 日本語 Remix」で「GeForce MX150」用ドライバをインストールするには、「ソフトウェアとアップデート」を起動し、「追加のドライバー」タブを開きます。
すこし時間がかかって、使用できるドライバの一覧が表示されます。
型式が「NVIDIA Corporation: GP108M [GeForce MX150]」と表示されているのを確認して、いくつか選択肢が示されたら基本的に最新のものを選択します。
2020年5月14日現在の最新バージョンは「440」なので、「NVIDIA driver metapackageをnvidia-driver-440から使用します(プロプライエタリ、検証済み)」ボタンにチェックをいれます。
その状態で「変更の適用」をクリックすると、インストール処理がはじまりますが、終わるまでじゃっかん時間がかかります。
インストール処理が終わったら、「閉じる」をクリックして「ソフトウェアとアップデート」ウインドウを閉じてからシステムを再起動すると、標準の「Nouveau」ドライバではなくNVIDIA製「nvidia-440」ドライバで立ちあがります。
ターミナルをひらいて、「$ nvidia-smi」コマンドをたたいてみて、ドライバのバージョンやGPUの型式が正しく表示されることを確認しておきます。

$ nvidia-smi


デスクトップ関連の設定は、「$ nvidia-settings」コマンドを使って、グラフィカルにおこなうことができます。

$ nvidia-settings


設定内容は「⁠~/.nvidia-settings-rc」に保存され、ログインのたびに「/etc/xdg/autostart/nvidia-settings-autostart.desktop」がこの設定内容を読みこんで、反映させる仕組みです。
NVIDIA製「nvidia-440」ドライバのドキュメント類は、「⁠/usr/share/doc/nvidia-driver-440/index.html」に保管されています。
インストールしたNVIDIA製ドライバのバージョンは、以下のコマンドで確認できます。

$ cat /proc/driver/nvidia/version


4. 「CUDA 10.0」インストールまえの準備作業
「CUDA 10.0」をインストールする方法はいくつかありますが、NVIDIAウェブサイト「CUDA Toolkit 10.0 Archive」ページからUbuntu18.04用runファイル「cuda_10.0.130_410.48_linux.run」をダウンロードして、手動で「CUDA 10.0」をインストールすることにしました。
やってみてからの感想ですが、いろいろなところで互換性の問題がおこりやすい「CUDA」関連ライブラリについては、結果的にrunファイルでインストールして手動でバージョンを管理するのが一番いいと思います。
パッケージの競合という問題がないので、複数のバージョンをインストールしたうえで、パスとショートカットでバージョンを切りかえて使う、ということができるのもおおきなメリットといえます。
GPUドライバのみ別途Ubuntuパッケージで管理したうえで、ツールキットをrunファイルからインストールするだけなら、すべての処理をグラフィカルログイン状態で完了でき、システムに致命的なダメージをあたえかねないむずかしいプロセスもありません。

NVIDIA CUDA Installation Guide for Linux」ページの指示にしたがって、「CUDA 10.0」をインストールするまえに必要な確認作業、準備作業をおこないます。

「CUDA 10.0」に対応したGPUの確認。
$ lspci | grep -i nvidia
01:00.0 3D controller: NVIDIA Corporation GP108M [GeForce MX150] (rev a1)


Linux OSの対応状況確認。「Ubuntu 18.04 LTS」は対応ディストリビューションのリストにはいっているので、このまますすめていきます。
$ uname -m && cat /etc/*release
x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic


コンパイラの存在およびバージョンを確認。「CUDA 10.0」は「Ubuntu 18.04 LTS」に対応していて、「gcc-7」と 互換性があるので問題ありません。
$ gcc --version
gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Linuxカーネルのバージョン確認。
$ uname -r
4.15.0-99-generic


Linuxカーネルのヘッダと開発キットをインストール。
$ sudo apt-get install linux-headers-$(uname -r)


5. 「CUDA 10.0」のインストール
CUDA Toolkit 10.0 Archive」ページで「Linux」「x86_64」「Ubuntu」「18.04」「runfile (local)」を選択し、「Download Installers for Linux Ubuntu 18.04 x86_64」タブを開きます。
「Base Installer」「Patch 1 (Released May 10, 2019)」それぞれの「Download」ボタンを押して、「cuda_10.0.130_410.48_linux.run」「cuda_10.0.130.1_linux.run」をダウンロードします。
ファイルをダウンロードしたディレクトリへ移動し、ベースインストーラのrunファイルに実行権限を付与してから、「sudo」で実行します。
長い使用許諾書を「Enter」キーを押して全部表示してから「accept」し、「Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?」には、すでに最新ドライバ「440」をインストールしているので「no」と回答します。
「Install the CUDA 10.0 Toolkit?」に「yes」と回答し、「/usr/local/cuda-10.0」にライブラリをインストールのうえ「/usr/local/cuda」からシンボリックリンクをはり、動作確認のためのサンプルファイルは「~/NVIDIA_CUDA-10.0_Samples」にコピーする設定にします。

$ chmod +x cuda_10.0.130_410.48_linux.run
$ sudo ./cuda_10.0.130_410.48_linux.run

Do you accept the previously read EULA?
accept/decline/quit: accept

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: no

Install the CUDA 10.0 Toolkit?
(y)es/(n)o/(q)uit: yes

Enter Toolkit Location
[ default is /usr/local/cuda-10.0 ]:

Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: yes

Install the CUDA 10.0 Samples?
(y)es/(n)o/(q)uit: yes

Enter CUDA Samples Location
[ default is /home/username ]:

Installing the CUDA Toolkit in /usr/local/cuda-10.0 ...
Installing the CUDA Samples in /home/username ...
Copying samples to /home/username/NVIDIA_CUDA-10.0_Samples now...
Finished copying samples.

===========
= Summary =
===========

Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-10.0
Samples: Installed in /home/username

Please make sure that
- PATH includes /usr/local/cuda-10.0/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-10.0/lib64, or, add /usr/local/cuda-10.0/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-10.0/bin

Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.0/doc/pdf for detailed information on setting up CUDA.

***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 10.0 functionality to work.
To install the driver using this installer, run the following command, replacing with the name of this run file:
sudo .run -silent -driver

Logfile is /tmp/cuda_install_4325.log


ベースインストーラのインストール処理が終わったら、パッチをあてていきます。
「CUDA 10.0 Toolkit」をインストールしたディレクトリ「/usr/local/cuda-10.0」をターゲットに、パッチファイルを実行するだけです。

chmod +x cuda_10.0.130.1_linux.run
$ sudo ./cuda_10.0.130.1_linux.run

Do you accept the previously read EULA?
accept/decline/quit: accept

Enter CUDA Toolkit installation directory
[ default is /usr/local/cuda-10.0 ]:

Installation complete!
Installation directory: /usr/local/cuda-10.0


ここまでの作業が終わったら、「~/.bashrc」に以下二行を追加して、パスをとおしておきます。

export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}


あるいは、以下のようなかたちで「CUDA_HOME」変数を使ってもO.K.です。

# CUDA 10.0 path
export CUDA_HOME="/usr/local/cuda-10.0"
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_HOME/lib64:/usr/lib/x86_64-linux-gnu/
export CPATH=$CPATH:$CUDA_HOME/include


いったんターミナルを閉じるか、「$ source ~/.bachrc」コマンドを実行して、パスの変更を反映させます。
いくつかライブラリがたりない(「libGLU.so」「libX11.so」「libXi.so」「libXmu.so」「libGL.so」など)ことがあるので、必要な場合はあとで該当パッケージをインストールし、パスのとおった「/usr/lib」からライブラリファイルへシンボリックリンクをはっておけば問題ありません。

$ sudo apt install g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev


ここまででインストール作業は完了です。
以下のコマンドを実行して、インストールした「CUDA 10.0」のバージョンが正しく表示されることを確認します。

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130


問題なければ、サンプルのビルドを実行します。
$ cd ~/NVIDIA_CUDA-10.0_Samples
$ make


ビルド処理が終わったら、「~/NVIDIA_CUDA-10.0_Samples/bin/x86_64/linux/release/」以下に「deviceQuery」が生成するので、それを実行してみます。

$ ~/NVIDIA_CUDA-10.0_Samples/bin/x86_64/linux/release/deviceQuery


デバイスが検出され、「Result = PASS」と表示されていれば、インストールは正常に完了しています。

NVIDIA公式インストール手順書にも記載がありますが、「CUDA Toolkit 10.0」をrunfileを使ってインストールしたときは、以下のスクリプトを実行することでアンインストールできます。

$ sudo /usr/local/cuda-10.0/bin/uninstall_cuda_10.0.pl


なお、今回のインストール方法では必要ありませんが、NVIDIA製ドライバをrunfileを使ってインストールしたときのアンインストールコマンドは以下のとおりです。

$ sudo /usr/bin/nvidia-uninstall


6. 「cuDNN 7.6.5」のインストール
基本的には、NVIDIA公式の「cuDNN Installation Guide」の指示にしたがって、インストール作業をすすめていきます。
まず「cuDNN Download」ページへいき、必要におうじてログインしたうえで、「I Agree To the Terms of the cuDNN Software License Agreement」にチェックをいれます。
ここで「Download cuDNN」をクリックして、「cuDNN Download」ページへ飛び、「Download cuDNN v7.6.5 (November 5th, 2019), for CUDA 10.0」をクリックしてタブをひらきます。
一覧表のなかから「cuDNN Library for Linux」をクリックして、「cudnn-10.0-linux-x64-v7.6.5.32.tgz」をダウンロードします。
ダウンロードしたディレクトリへ移動してファイルを解凍のうえ、「CUDA 10.0」ライブラリをインストールした「/usr/local/cuda-10.0」ディレクトリ以下に配置し、読み込み権限をあたえておきます。

$ tar -xzvf cudnn-10.0-linux-x64-v7.6.5.32.tgz
cuda/include/cudnn.h
cuda/NVIDIA_SLA_cuDNN_Support.txt
cuda/lib64/libcudnn.so
cuda/lib64/libcudnn.so.7
cuda/lib64/libcudnn.so.7.6.5
cuda/lib64/libcudnn_static.a
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*


「cuDNN」ライブラリの配置が完了したら、以下のコマンドで正しく配置されているかどうか確認します。

$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 5
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

#include "driver_types.h"


インストールしたバージョン「7.6.5」が正しく表示されれば、問題ありません。
最後に、debian package「cuDNN Code Samples and User Guide for Ubuntu18.04 (Deb)」をクリックしてダウンロードした「libcudnn7-doc_7.6.5.32-1+cuda10.0_amd64.deb」からサンプルを抽出、ビルドしてみます。

$ dpkg-deb -x libcudnn7-doc_7.6.5.32-1+cuda10.0_amd64.deb ./
$ cp -r usr/src/cudnn_samples_v7/ ~/
$ cd ~/cudnn_samples_v7/mnistCUDNN
$ make clean && make
$ ./mnistCUDNN

.....
Test passed!


「Test passed!」と表示が出れば、「cuDNN 7.6.5」のインストール作業は完了しています。

7. 「NCCL 2.6.4」のインストール
「NCCL 2.6.4」をインストールするには、NVIDIA公式の「NCCL 2.6.4 Installation Guide」にしたがって、作業をすすめます。

まず「NVIDIA Collective Communications Library (NCCL) Download Page」へいき、必要におうじてログインしたうえで、「I Agree To the Terms of the Software License Agreement」にチェックをいれます。
「Download NCCL v2.6.4, for CUDA 10.0, March 26,2020」をクリックしてタブをひらき、「O/S agnostic local installer」をクリックして、「nccl_2.6.4-1+cuda10.0_x86_64.txz」をダウンロードします。
ダウンロードしたディレクトリに移動したら、ファイルを解凍のうえ、「/usr/local/nccl-2.6」ディレクトリ以下へ配置します。

$ tar xvf nccl_2.6.4-1+cuda10.0_x86_64.txz
nccl_2.6.4-1+cuda10.0_x86_64/include/
nccl_2.6.4-1+cuda10.0_x86_64/include/nccl_net.h
nccl_2.6.4-1+cuda10.0_x86_64/include/nccl.h
nccl_2.6.4-1+cuda10.0_x86_64/lib/
nccl_2.6.4-1+cuda10.0_x86_64/lib/pkgconfig/
nccl_2.6.4-1+cuda10.0_x86_64/lib/pkgconfig/nccl.pc
nccl_2.6.4-1+cuda10.0_x86_64/lib/libnccl.so
nccl_2.6.4-1+cuda10.0_x86_64/lib/libnccl.so.2
nccl_2.6.4-1+cuda10.0_x86_64/lib/libnccl_static.a
nccl_2.6.4-1+cuda10.0_x86_64/lib/libnccl.so.2.6.4
nccl_2.6.4-1+cuda10.0_x86_64/LICENSE.txt
$ sudo cp -r nccl_2.6.4-1+cuda10.0_x86_64 /usr/local/nccl-2.6


最後に、「.bashrc」に以下の行を追加し、「/usr/local/nccl-2.6」へパスをとおしておきます。

export NCCL_ROOT="/usr/local/nccl-2.6"
export CPATH=$CPATH:$NCCL_ROOT/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NCCL_ROOT/lib/
export LIBRARY_PATH=$LIBRARY_PATH:$NCCL_ROOT/lib/


いったんターミナルを閉じるか、「$ source ~/.bachrc」コマンドを実行して、パスの変更を反映させます。

8. 「TensorRT 7.0.0」インストール
「GLOBIS-AZQ」では「TensorRT 7.0.0」がサポートされています。

NVIDIA TensorRT 7.x Download
」ページへいき、必要におうじてログインしたうえで、「I Agree To the Terms of the Software License Agreement」にチェックをいれます。
「Tar File Install Packages」リストのなかの「TensorRT 7.0.0.11 for Ubuntu 18.04 and CUDA 10.0 tar package」をクリックして、「TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz」ファイルをダウンロードします。
ダウンロードしたディレクトリへ移動して、ファイルを解凍のうえ、適当なディレクトリ(ここでは「/usr/local/TensorRT-7.0.0」)に配置します。

$ tar xzvf TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz
$ sudo cp -r TensorRT-7.0.0.11 /usr/local/TensorRT-7.0.0


「.bashrc」に以下の行を追加し、「TensorRT-7.0.0」ディレクトリへパスをとおしておきます。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/TensorRT-7.0.0/lib


あとは、NVIDIA公式の「TensorRT 7.0.0 Installation Guide」の手順どおり、「Python TensorRT」「Python UFF」「Python graphsurgeon」パッケージをインストールします。
「TensorRT 7.0.0」をインストールしたディレクトリの「samples/sampleMNIST/」へいき、サンプルをmakeしてみます。
「TensorRT 7.0.0」をインストールしたディレクトリの「bin」に「sample_mnist」ができているので、これを実行して「TensorRT 7.0.0」が正しくインストールされていることを確認します。
この生成したサンプルファイルをきちんと動かすためには、あらかじめ「data/mnist/download_pgms.py」を実行しておく必要があるかもしれません。

9. 「CUPTI」パス登録
「CUPTI」は「CUDA 10.0 Toolkit」にふくまれているため、あらためてインストールする必要はありませんが、パスをとおしておく必要はあります。
「.bashrc」に以下の一行を追加し、いったんターミナルを閉じるか「$ source ~/.bachrc」コマンドを実行するかして、パスの変更を反映させます。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.0/extras/CUPTI/lib64


以上で、「Ubuntu 18.04 TLS」上に「CUDA 10.0」+「TensorRT 7.0.0」環境を構築する作業は完了し、「GLOBIS-AQZ」を導入する準備がととのったことになります。
最初から「GLOBIS-AZQ」を動かすことが目的なので、動作要件となっている「CUDA 10.0」+「TensorRT 7.0.0」環境の構築をめざした記述になっていますが、 より広い意味で現時点で一般性の高い「Ubuntu 18.04 LTS」+「CUDA 10.0」+「cuDNN 7.6.5」+「NCCL 2.6.4」という環境を構築するための手引きとしてもご参照いただければ幸甚です。
上記手順にしたがってインストールすれば、だいたいうまくいくと思いますが、「CUDA」の動作に問題が発生するときは以下のパス設定(上記手順のなかで設定した「CUDA」関連ライブラリに関係する部分のみ)を再確認してみてください。
$ printenv
LD_LIBRARY_PATH=:/usr/local/cuda-10.0/lib64:/usr/local/cuda-10.0/extras/CUPTI/lib64:/usr/local/nccl-2.6/lib/:/usr/local/TensorRT-7.0.0/lib
CPATH=:/usr/local/cuda-10.0/include:/usr/local/nccl-2.6/include
PATH=/usr/local/cuda-10.0/bin



参考ウェブページ一覧表(順不同)
posted by hatakazu at 17:32| Comment(0) | Linuxとか | 更新情報をチェックする

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) | 囲碁ソフトのこと | 更新情報をチェックする

2020年05月16日

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

グロービスからオープンソース化のアナウンスが出た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: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
--

「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」をインストールするにあたっては、あらかじめ「Windows 10上に囲碁勉強環境を構築する - 準備編」の記述のとおりに「CUDA 10.2」+「cuDNN 7.6.5」+「TensorRT 7.0.0」環境が構築されていることを前提としています。
なお、「AQ」として公開されているのはGUIをもたない囲碁思考エンジン部分のみなので、グラフィカルに対局や棋譜分析をおこなうためにはGTPを解釈できる囲碁GUIと連携させる必要があります。

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

3. 「AQ」のインストール
ダウンロードした「AQ_windows.zip」ファイルを右クリックして「すべて展開」を選ぶと、「AQ_windows」フォルダができて、さらにそのなかに「AQ」フォルダがあります。
この「AQ」フォルダのなかにGTP思考エンジン本体である「AQ.exe」や設定ファイル「config.txt」などがふくまれているので、この「AQ」フォルダをそのまましかるべき場所(たとえば「C:\Users\username\AQ」など)に設置すれば、インストール作業は終了です。

4. 「AQ」の設定
「AQ」フォルダのなかにGTP思考エンジン本体「AQ.exe」といっしょに設定ファイル「config.txt」が置かれており、この設定ファイル「config.txt」の内容を編集することで、次回起動時以降「AQ」のふるまいを変更することができます。
グロービスのオープンソース化アナウンスのなかで大橋拓文六段の「今回オープンソース化されるGLOBIS-AQZは日本ルールでの自己対戦を1千万局以上行いました。これまでほとんどの囲碁AIは中国ルール、コミ7目半でトレーニングされていたので、日本ルール特有のケースとコミ6目半に対応したGLOBIS-AQZは画期的です」というコメントが出ていましたが、「日本ルール」と「コミ六目半」への設定変更は、このファイルにいくつかの変更をほどこすことで実現します。
(じっさいには設定ファイル「config.txt」はいじらず、思考エンジン「AQ.exe」を呼び出すときに、そのつどオプションで指定することもできます。方法は連携する囲碁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」フォルダをたとえば「C:\Users\username\AQ」(「username」はお使いのユーザ名)に設置したとして、「C:\Users\username\AQ\AQ.exe」が、囲碁GUIに登録するべきGTP思考エンジンへの絶対パスになります。

5-1. GTP対応囲碁GUI「GoGui」への思考エンジン登録
メニューバーの「プログラム」から「新規プログラム」を選び、あらわれた画面の「コマンド:」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「AQ」フォルダを「C:\Users\username\AQ」に設置した場合、「コマンド:」欄に入力する絶対パスは「C:\Users\username\AQ\AQ.exe」のようになります。
オプションを指定するときは、「C:\Users\username\AQ\AQ.exe --rule=1 --komi=6.5 --byoyomi=10 --use_ponder=off」のように、一行でつづけて書きます。
上記は「日本ルール、コミ六目半、一手10秒で着手、ponder機能無効」設定の例ですが、「AQ」フォルダにある設定ファイル「config.txt」のほうでおなじように設定していれば、「コマンド:」欄への入力は「AQ.exe」の絶対パスだけで問題ありません。
「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」フォルダを「C:\Users\username\AQ」に設置した場合、「(Unnamed Engine)」欄にカーソルをもっていって「AQ」と入力、「Path」欄に絶対パス「C:\Users\username\AQ\AQ.exe」を指定します。
「(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」のエンジン登録画面で「{your_aq_folder}/AQ.exe --lizzie」コマンドを指定すればO.K.ということになっているが、「--lizzie」オプションをつけてもつけなくても「Lizzie」とはうまく通信できていない。


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

「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 13:49| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

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

「Lizzie」はいろいろな要素を自分なりに設定して自由に楽しめる設計になっていますが、なかでもおもしろいのが「設定」 -> 「エンジン」で「Leela Zero」や「KataGo」にべつのネットワークファイルを読みこませたり、「Leela Zero」とおなじ方法で「Lizzie」と情報をやりとりできるほかのコンピュータ囲碁プログラムを登録したりできるところです。
つまり、ネットワークを変更したり(「Lizzie」と通信できる機能をそなえているかぎりにおいて)ほかのコンピュータ囲碁プログラムを登録したりすることで、自分の好みの棋風をもつコンピュータ囲碁プログラムを「Lizzie」のフレンドリーなインタフェースを介して利用できるということです。
「Lizzie」に最初からふくまれている「Leela Zero」および「KataGo」についても、すこしだけ設定を変更するだけで、いろいろな使いかたがを実現することができます。
ここでは「Leela Zero」のネットワークファイルを変更する方法から、「KataGo」でネットワークファイルのみならずプログラム本体まで置きかえて、日本ルールで囲碁を勉強するのに最適な環境をととのえるところまでを記述していきます。

1. 「Leela Zero」の設定
「Lizzie」をインストールすると、「Lizzie」とのやりとりのために特別に設計された「Leela Zero」と、「Leela Zero」が利用するネットワークファイルがついてきます。
このネットワークファイルは「lznetwork.gz」という名前で「lizzie」フォルダに置かれており、標準エンジン設定「エンジン0: ./leelazero/leelaz --gtp --lagbuffer 0 --weights lznetwork.gz」の「--weights lznetwork.gz」部分によって、呼び出される仕組みになっています。
ということは、「lznetwork.gz」という名前はそのままに中身をべつのネットワークファイルに置きかえてしまうか、あるいはべつの名前のネットワークファイルを用意してそれを呼び出すようにエンジンを設定すれば、「Leela Zero」はいろいろなネットワークファイルを利用して思考することができるわけです。
いくつか特徴的なものを紹介しておきます。

・常に最新=最強の学習ずみネットワークを使う
たとえば「Leela Zero」プロジェクトでは「https://leela.online-go.com/networks/」に歴代のネットワークファイルが保管されており、ここから最新のネットワークファイル「best-network.gz」をダウンロードできるので、それを「lizzie」フォルダに置いて「エンジンX: ./leelazero/leelaz --gtp --lagbuffer 0 --weights best-network.gz」と設定すれば「エンジンX:」は「best-network.gz」を呼び出すことになります。
定期的に「best-network.gz」ファイルを更新するだけで、「Lizzie」を立ち上げれば常に最新=最強の「Leela Zero」で対局および棋譜分析を楽しむことができる、と考えただけでもわくわくしてきませんか。

・人間の棋譜から学んで人間にちかい打ちかたをするネットワーク
人間の対局データを使って学習したネットワーク「best_v1.txt.zip」ファイルを取得し、展開してえられる「weights.txt」ファイルを「lizzie」フォルダに移動して、「human-network」などのわかりやすい名前に変更しておきます。
「エンジンX: ./leelazero/leelaz --gtp --lagbuffer 0 --weights human-network」のように設定すれば、より人間に打ちかたに近い打ちかたをする「Leela Zero」と対局できることになります。
Leela Master Weight」のどれかを使ってみるのもおもしろいでしょう。

・Facebook「ELF OpenGo」プロジェクトで公開されているネットワーク
Facebook「ELF OpenGo」のGitHubレポジトリから学習ずみネットワークをダウンロード、公開されているpythonスクリプトで処理して「Leela Zaro」で読み込めるネットワークファイルに変換し、「ELF-network-v2」などのわかりやすい名前に変更しておきます。
歴史的な意味のある「v0」「v1」「v2」の三つが公開されており、強い弱い以前にそれぞれかなり棋風がちがうようなのですが、ふつうはいちばん新しい「v2」を使えば問題ありません。

pretrained-go-19x19-v0.bin」 -> ファイル名の例「ELF-network-v0」
pretrained-go-19x19-v1.bin」 -> ファイル名の例「ELF-network-v1」
pretrained-go-19x19-v2.bin」 -> ファイル名の例「ELF-network-v2」

「ELF-network-v2」ファイルを「lizzie」フォルダに置いて、「エンジンX: ./leelazero/leelaz --gtp --lagbuffer 0 --weights ELF-network-v2」と設定すれば、「Lizzie」は「Leela Zero」経由で「ELF OpenGo」のネットワークファイルを使って思考します。

「ELF OpenGo」のネットワークは「Leela Zero」のネットワークファイル保管庫にも取りこまれているので、それをダウンロードしてくるだけでおなじことを実現することもできます。
「v0」を「Leela Zero」で利用できるように変換したもの -> ファイル名の例「ELF-network-v0.gz」
「v1」を「Leela Zero」で利用できるように変換したもの -> ファイル名の例「ELF-network-v1.gz」
「v2」を「Leela Zero」で利用できるように変換したもの -> ファイル名の例「ELF-network-v2.gz」


2. 「KataGo」の設定
「KataGo」はコンピュータ囲碁プログラムとしては比較的新しいプロジェクトで、プログラムの完成度においても囲碁の強さという点においても、急速に改善を重ねてきたといっていいでしょう。
プログラムについていえば2019年10月の時点で「KataGo」のバージョンは「v1.2」で、「Lizzie 0.7.2」にはOpenCLバージョン「KataGo v1.2」が採用されているわけですが、利用できるネットワーク形式に制限があったり、このあとに追加された機能(なかでも日本ルール対応は重要)を使えない不便があったりします。
また、そのときに同梱されたネットワークファイルはまだそれほど学習を経ておらず、それから半年たったいま公開されている最新ネットワークのほうがはるかに強くなっています。

Warning: the version of KataGo packaged directly with Lizzie is fairly OLD. The net is quite weak compared to the latest nets, and the executable may not support the latest models or features. Download a newer version of both the net and executable from the releases page.


そこでここではまず、「KataGo」プログラムじたいを新しいものと交換することで機能の強化をはかったうえで、ネットワークファイルを置きかえてかんたんに「KataGo」を強くする作業をおこないます。
「Leela Zero」のときのようにとっととネットワークファイルを置きかえてしまわないのは、前述したとおり古い「KataGo」では利用できるネットワーク形式に制限があり、そのままでは現在提供されている最新=最強のネットワークファイルを使えないからです。

2.1 「KataGo」プログラムの更新
作者がすすめにしたがって素直に「Releases」ページへいき、最新バージョン「v1.4.2」を探して、OpenCLバージョンの圧縮ファイル「katago-v1.4.2-opencl-windows-x64.zip」をダウンロードします。
ダウンロードしたファイルを展開すると、「katago-v1.4.2-opencl-windows-x64」フォルダができるので、このフォルダをそのまま「lizzie」フォルダに移動します。
ここからすこし注意を要する作業になりますが、現時点で「lizzie」フォルダには、①最初からはいっていた「katago」フォルダと②たったいま移動してきた「katago-v1.4.2-opencl-windows-x64」フォルダが存在します。
この状態でまず、もう使わない古い「KataGo v1.2」の①「katago」フォルダを「katago-old」のような別名に変えてしまい、そのあとで、これから使う新しい「KataGo v1.4.2」の②katago-v1.4.2-opencl-windows-x64」フォルダを「katago」に変更します。

①「katago」フォルダ -> 「katago-old」フォルダ
②「katago-v1.4.2-opencl-windows-x64」フォルダ -> 「katago」フォルダ

これによって「KataGo v1.2」が「KataGo v1.4.2」に置きかえられ、それ以外の変更はないので、次に「Lizzie」を起動したときから「エンジン1: ./katago/katago gtp -model katanetwork.gz -config katago-gtp10.cfg」は「KataGo v1.4.2」を呼び出すことになります。
問題なく動作するようなら、古い「KataGo v1.2」をふくむ「katago-old」フォルダは、そのうち削除してしまってもかまいません。

2.2 「KataGo」ネットワークの更新
ようやく準備がととのったので、次は「KataGo」にべつのネットワークを利用して思考させる設定をすすめます。
「KataGo」でも「Leela Zero」の場合とおなじように「katanetwork.gz」という名前の標準ネットワークファイルが「lizzie」フォルダに置かれており、標準エンジン設定「エンジン1: ./katago/katago gtp -model katanetwork.gz -config katago-gtp10.cfg」の「-model katanetwork.gz」部分によって、呼び出されています。
「katanetwork.gz」という名前はそのままに中身をべつのネットワークファイルに置きかえてしまうか、あるいはべつの名前のネットワークファイルを用意してそれを呼び出すようにエンジンを設定すれば、「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」を「lizzie」フォルダへ移動し、エンジン設定で「KataGo」がこのネットワークを呼び出すように、以下のように登録しておきます。

「エンジンx: ./katago/katago gtp -model kata20x256.bin.gz -config ./katago/default_gtp.cfg」
「エンジンy: ./katago/katago gtp -model kata30x320.bin.gz -config ./katago/default_gtp.cfg」
「エンジンz: ./katago/katago gtp -model kata40x256.bin.gz -config ./katago/default_gtp.cfg」


もともとの標準エンジン設定標準エンジン設定「エンジン1: ./katago/katago gtp -model katanetwork.gz -config katago-gtp10.cfg」と比べると、「-confg ./katago/default_gtp.cfg」部分も同時に変更していますが、それについては次の日本ルールのところで説明します。

2.3 「KataGo」に日本ルールを適用
最新のネットワークファイルを使うために最新の「KataGo」をインストールしましたが、「KataGo」では「v1.3」で日本ルールへの対応を打ち出し、「lizzie」フォルダにある「katago-gtp10.cfg」でその挙動を制御できるようになっています。
すばらしい!
設定ファイルはエンジン設定の「-config katago-gtp10.cfg」部分で指定していますが、「Lizzie」標準のこの設定ファイルは古い(つまり日本ルール対応以前の)「KataGo v1.2」用のものなので、ここを「-config katago/default_gtp.cfg」のように変更することで新しい(つまり日本ルール対応可能な)「KataGo v1.4.2」についてくる設定ファイルを使えるようになります。
基本ルールにかかわる設定ファイルの変更は以下の赤字部分で、日本ルールの適用はデフォルトの「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).


設定ファイルを上記のように変更したあとで「Lizzie」から「KadoGo」を起動し、対局するなら「n」キーを押して新規対局を設定する画面、棋譜分析するなら「i」キーを押して棋譜情報を設定する画面を開いて、コミを「6.5」に指定してやります。

3. 「KataGo」をOpenCLバージョンからCUDAバージョンに切り替える
Windows 10上に囲碁勉強環境を構築する - 準備編」の記述のとおりに「CUDA 10.2」+「cuDNN 7.6.5」+「TensorRT 7.0.0」環境が構築されていれば、「KataGo」については「Lizzie」に標準添付されているOpenCLバージョンだけではなくて、あらたにCUDAバージョンをインストールして「Lizzie」から利用することができます。
ダウンロードできる「KataGo」の実行ファイルは、「CUDA 10.1」+「CUDNN 7.6.1」環境でコンパイルされたようですが、より新しい「CUDA 10.2」+「cuDNN 7.6.5」環境で問題なく動作することは確認ずみです。
CUDAバージョン「KataGo」のインストールは、「2.1 『KataGo』プログラムの更新」でまとめた手順をそのまま、「katago-v1.4.2-opencl-windows-x64」をすべて「katago-v1.4.2-cuda10.1-windows-x64」に読みかえて実行するだけです。
ネットワーク更新については「2.2」で、日本ルール適用についても「2.3」で記述した手順が、そのまま使えます。
posted by hatakazu at 08:30| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2020年05月15日

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

もともとはコンピュータ囲碁プログラム「Leela Zero」専用のGTP対応囲碁GUIとして開発された「Lizzie」ですが、インタフェースの使いやすさが非常に高く評価されて、さまざまなコンピュータ囲碁プログラムとの組み合わせて利用できるよう工夫されてきました。
現行のバージョンでは、「KataGo」が同梱されており、はじめから「Leela Zero」と「KataGo」の二つの思考エンジンを選択して使えるようになっています。

「Lizzie」GitHubレポジトリ
・Windowsバイナリ配布あり。
・64bit対応。
・GPUバージョンおよびCPUバージョン。
・現時点の最新バージョンは「0.7.2」。

とくに棋譜を分析するということにかけては優秀で、勝率の推移はもちろんのこと、複数の候補手とそれぞれの勝率、そのあとの読み筋などをグラフィカルにわかりやすく表示させることが可能で、hatakazuのようにコンピュータで囲碁の勉強をするひとにとってはたいへん役にたつツールです。
「Leela Zero」の思考エンジンを経由するかたちで、「ELF OpenGo」などのネットワークを使って棋譜を分析することもできるのも、「Lizzie」の魅力のひとつといえるでしょう。

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

「Lizzie」をインストールするさいの動作要件ですが、ハードウェア的には特別な要請はなく、64bit版Windowsが動いているコンピュータならたいてい問題なく動かせるはずです。
ただし「Lizzie」はようするに、「Leela Zero」や「KataGo」などのコンピュータ囲碁プログラムの思考を人間にわかりやすい方法で表現するインタフェースなので、そのコンピュータ囲碁プログラムを動かすのに要求される条件を考慮する必要があります。
メインの「Leela Zero」でいえば、NVIDIA製もしくはAMD製の外部GPUを搭載したコンピュータであればGPUバージョンを動かすことができますが、それ以外の場合はCPUバージョンしか使えません。
なのでそれに合わせて、NVIDIA製もしくはAMD製の外部GPUを搭載したコンピュータであればGPUバージョン「Lizzie」を、それ以外の場合はCPUバージョン「Lizzie」をインストールすることになります。
「KataGo」のほうはCPUバージョンはなく、基本的にOpenCL対応GPU(CPU組込型ふくむ)以上のコンピュータでしか動きませんが、「Lizzie」のGPUバージョンかCPUバージョンかを問わず、パッケージにふくまれているのは「CUDA」環境をあてにするCUDAバージョンではなく、より幅広いハードウェアに対応するOpenCLバージョンのほうです。
ここではとりあえず「Lizzie」をインストールして標準の状態のまま、「Leela Zero」や「KataGo」を使って対局や棋譜分析をできるようにするところまでを、基本編として記述します。
GPUだのCPUだのCUDAだのOpenCLだのにまったく興味がなく、よくわからないという場合は、以下の手順にしたがってCPUバージョン「Lizzie」(=CPUバージョン「Leela Zero」+OpenCLバージョン「KataGo」)をインストールすることをおすすめします。
「Leela Zero」や「KataGo」にべつのネットワークファイルを読みこませたり、ほかのコンピュータ囲碁プログラムと連携させたりして、「Lizzie」をより便利に利用する設定方法については、あらためて応用編でまとめていきます。

*****「Java」ランタイムインストール*****
ソフトウェア的には、「Lizzie」は「Java」ランタイムをあてにしているので、「Java」ランタイムをあらかじめインストールしておく必要があります。
Windows 10上に囲碁勉強環境を構築する - 準備編」のなかに必要な手順が記述されていますが、「CUDA」とかはどうでもいいので、とにかく「Lizzie」をインストールして「Leela Zero」を動かせればいいというむきのために、以下に「Java」ランタイムのインストール方法だけ再掲しておきます。
(必要な環境がすでに構築されている場合は、このセクションは無視して先へすすんでください。)

1) 「Java」ランタイムのインストール
無料Javaソフトウェアをダウンロード」ページから、「無料Javaのダウンロード」 -> 「同意して無料ダウンロードを開始」とすすんで、Windows版Javaの推奨バージョン(Version 8 Update 251)インストールファイル「JavaSetup8u251.exe」をダウンロードします。
ダウンロードに問題がある場合は、「全オペレーティング・システム用のJavaのダウンロード」ページから、明示的に必要なファイル「jre-8u251-windows-x64.exe」を選択してダウンロードしてみてください。
ダウンロードしたインストールファイルをダブルクリックすると、セットアップがはじまって「Javaへようこそ」画面が開くので、(必要におうじて「宛先フォルダを変更する」にチェックをいれて)「インストール」ボタンをクリックします。
ファイルのダウンロードがはじまって、最終確認を求められるので、問題なければそのまま「インストール」ボタンを押してすすめます。
古いバージョンの「Java」ランタイムがインストールされていた場合、この段階で検出されるので、かならずアンインストールしておきましょう。
デフォルトのインストール先は「C:\Program Files (x86)\Java\jre1.8.0_251」で、インストール完了時点でパスはとおって、すでに使えるようになっているはずです。
インストール処理が終わったら、完了画面があらわれるので、「閉じる」ボタンをクリックして終了します。


2. 「Lizzie」インストールファイルのダウンロード
「Lizzie」の現行バージョンは「v0.7.2」で、「Lizzie」GitHubレポジトリの「Releases」ページから「Lizzie.0.7.2.Windows.x64.GPU.zip」をクリックして、GPUバージョンの64bit版Windows用インストールファイル「Lizzie.0.7.2.Windows.x64.GPU.zip」を取得します。
CPUバージョンを使う場合は、「Lizzie.0.7.2.Windows.x64.CPU.zip」のほうをクリックして、CPUバージョンの64bit版Windows用インストールファイル「Lizzie.0.7.2.Windows.x64.CPU.zip」を取得します。

3. 「Lizzie」のインストール
ダウンロードしたGPUバージョン「Lizzie.0.7.2.Windows.x64.GPU.zip」ファイルもしくはCPUバージョン「Lizzie.0.7.2.Windows.x64.CPU.zip」ファイルを右クリックして「すべて展開」を選ぶと、「Lizzie.0.7.2.Windows.x64.GPU」フォルダもしくは「Lizzie.0.7.2.Windows.x64.CPU」フォルダが生成し、そのなかに「lizzie」フォルダができているはずです。
この「lizzie」フォルダをそのまましかるべき場所、たとえば「C:\Users\username\lizzie」(「username」はお使いのユーザ名)などに設置すれば、インストール作業は終了です。

4. 「Lizzie」の設定
「lizzie」フォルダ直下には「Lizzie」囲碁GUI機能を提供する「Lizzie.jar」のほか、「Lizzie」の動作を制御する設定ファイル「config.txt」や、「Leela Zero」が利用する学習ずみネットワーク「lznetwork.gz」、「KataGo」のネットワーク「katanetwork.gz」などが置かれています。
「Lizzie」と連携して動く「Leela Zero」の囲碁思考エンジン本体である「leelaz.exe」は「leelazero」フォルダ内に、「KataGo」の囲碁思考エンジン本体である「katago.exe」は「katago」フォルダ内に、独立に格納されています。
動作要件どおり「Java」ランタイムがインストールされた環境であれば、「Lizzie.jar」をダブルクリックすることで、「Lizzie」が起動するはずです。
はじめて「Lizzie」を起動する場合は、連携する「Leela Zero」が「OpenCL」チューニングを設定する必要があるため、じゃっかん時間がかかります。
左下に「Leela Zero is loading...」というメッセージが表示された状態で、しばらく待たされますが、このメッセージが消えたら「Lizzie」は問題なく起動しています。
上部メニューバーに「ファイル」「表示」「対局」「設定」「エンジン0: lznetwork.gz」と表示されていますが、この「エンジン0: lznetwork.gz」部分をクリックすると「エンジン0: lznetwork.gz」「エンジン1: katanetwork.gz」の二つの選択肢が見え、「エンジン1: katanetwork.gz」をクリックすると「Leela Zero」の代わりに「KataGo」を用いた対局や棋譜分析ができるようになります。
「KataGo」を初めて起動するときもおなじように、画面が動き出すまでにかなり時間がかかります。
かつては設定ファイル「config.txt」を直接編集して「Lizzie」の動作を制御していましたが、現在ではほとんどの項目を「Lizzie」上でグラフィカルに設定できるようになっています。

5. 「Lizzie」の使いかた
デフォルトであらわれるのは、白黒両方を手動入力するかたちで、「Leela Zero」エンジンの思考内容を表示させていく画面です。
「x」キーを押すことで、入力できるコマンドの一覧表が表示されます。
「Leela Zero」との対局を開始するためには、「n」キーを押下します。
対局条件としては手番と置石のほか、コミも六目半に設定できるようになっていますが、日本ルールに対応できるのは「KataGo」のみですこし設定の変更も必要になります(「Lizzie」応用編であつかいます)。
「Leela Zero」に棋譜分析させるためには、「o」キーを押して、分析したいSGFファイルを読みこみます。
「s」キーで保存、「i」キーで棋譜情報編集(ここでコミも変更できる)、「m」キーで手順番号表示、「.」キーで地を数えて形勢判断します。
形勢判断は「KataGo」では標準の「katago形勢」を使います(画面下部ツールバーの「katago形勢」ボタンをクリックしても同じ)が、「Leela Zero」での形勢判断(画面下部ツールバーの「形勢」ボタンをクリックしても同じ)を機能させるためには、ここから「YAZenGtp.exe」および「Zen.dll」をダウンロードして「lizzie」フォルダに置いておく必要があります。
上下矢印キーで手順操作、左右矢印キーで分岐ツリーを移動、「home」キーで棋譜の最初へ、「end」キーで棋譜の最後へ飛びます。
棋譜分析では、考えられる候補手が勝率および思考深さ(「KataGo」では目数差も)とともに表示され、候補手のどれかにカーソルを重ねるとそのあとの読み筋が表示される仕組みになっています。
「space」キーで「Leela Zero」の思考開始/停止をコントロールできるほか、「enter」キーで「Leela Zero」に次の手を打たせてみることもできます。
そのあたりの操作も、画面上部メニューバーと画面下部ツールバーからマウスで操作できるようになっています。
「Leela Zero」や「KataGo」の挙動に問題がある場合は、画面上部メニューバー「表示」 -> 「パネル表示」 -> 「Gtpコンソール」にチェックをいれて通信内容を見てみると、解決のためのヒントがつかめるかもしれません。
posted by hatakazu at 20:10| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

Windows 10上に囲碁勉強環境を構築する - 準備編

コンピュータ囲碁プログラムの「GLOBIS-AQZ」が「GitHub」上でオープンソース化されたのを機に、Windows 10コンピュータの「CUDA」環境を一新し、できるだけの囲碁勉強環境をととのえていくことにしました。
使っているコンピュータの仕様は以下のとおりで、非力ながらいちおうNVIDIA製GPUが搭載されていて、GPUバージョンのコンピュータ囲碁プログラムを走らせることができます。

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

とりあえずの目標は「GLOBIS-AQZ」を「Lizzie」から利用できる環境を構築することですが、それと整合するかぎりで、現在利用可能ななるべく多くの選択肢をとりこんでいきたいと思います。
まずは、「GLOBIZ-AQZ」などのコンピュータ囲碁プログラムや「Lizzie」などのGTP対応囲碁GUIをインストールするまえの、準備的な作業をすませておきましょう。
ここでやっておくことは、以下のとおりです。
最終的に利用するプログラムの選択によっては不要となる作業もありますが、「GLOBIS-AQZ」を「Lizzie」から利用できる環境を構築するには、この段階ですべての準備をすませておいたほうがめんどうがありません。

・「Java」ランタイムのインストール
(必要な環境がすでに構築されている場合は、このセクションは無視して先へすすんでください。)

・「Visual C++」ライブラリのインストール
(必要な環境がすでに構築されている場合は、このセクションは無視して先へすすんでください。)

・「CUDA 10.2」+「cuDNN 7.6.5」+「TensorRT 7.0.0」環境を構築する
「GLOBIS-AQZ」の動作要件は、以下のように記述されています。

2. Requirements

・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

It has been tested in the following environment.

・Ubuntu 18.04 / RTX2080Ti / CUDA10.0 / TensorRT7.0.0
・Windows 10 Pro (64bit) / RTX2080Ti / CUDA10.2 / TensorRT7.0.0


「CUDA 10.2」+「TensorRT 7.0.0」ということだと、必然的に「cuDNN 7.6.5」が求められるので、ここではこの組み合わせに限定してすすめていきます。
以下の3)~5)の手順どおりに「CUDA 10.2」+「cuDNN 7.6.5」+「TensorRT 7.0.0」環境を構築しておけば、「GLOBIS-AQZ」のほかにもFacebook「ELF OpenGo」や「KataGo」も、配布されているGPUバージョンの実行バイナリをそのまま走らせることができます。
しかし「PhoenixGo」だけは「CUDA 9.0」のみの対応、それにともなって「cuDNN 7.1」が必要となりますので、この環境では動かせません。
どうしても「PhoenixGo」を使いたいときは、このページの一番下のコラムにまとめた方法で、「CUDA 9.0」+「cuDNN 7.1.4」をインストールしてください。

1) 「Java」ランタイムのインストール
無料Javaソフトウェアをダウンロード」ページから、「無料Javaのダウンロード」 -> 「同意して無料ダウンロードを開始」とすすんで、Windows版Javaの推奨バージョン(Version 8 Update 251)インストールファイル「JavaSetup8u251.exe」をダウンロードします。
ダウンロードに問題がある場合は、「全オペレーティング・システム用のJavaのダウンロード」ページから、明示的に必要なファイル「jre-8u251-windows-x64.exe」を選択してダウンロードしてみてください。
ダウンロードしたインストールファイルをダブルクリックすると、セットアップがはじまって「Javaへようこそ」画面が開くので、(必要におうじて「宛先フォルダを変更する」にチェックをいれて)「インストール」ボタンをクリックします。
ファイルのダウンロードがはじまって、最終確認を求められるので、問題なければそのまま「インストール」ボタンを押してすすめます。
古いバージョンの「Java」ランタイムがインストールされていた場合、この段階で検出されるので、かならずアンインストールしておきましょう。
デフォルトのインストール先は「C:\Program Files (x86)\Java\jre1.8.0_251」で、インストール完了時点でパスはとおって、すでに使えるようになっているはずです。
インストール処理が終わったら、完了画面があらわれるので、「閉じる」ボタンをクリックして終了します。

2) 「Visual C++」ライブラリのインストール
(必要な環境がすでに構築されている場合は、このセクションは無視して先へすすんでください。)

Visual Studio 2019 for Windows および Macのダウンロード」ページから、「Visual Studio Community 2019」の「無料ダウンロード」ボタンを押して、インストールファイル「vs_community__1420685118.1583889769.exe」をダウンロードします。
ダウンロードしたファイルをダブルクリックしてインストーラを起動し、「C++によるデスクトップ開発」カテゴリの「Windows 10 SDK」コンポーネントにチェックをいれてから、インストールを実行します。
コンピュータを再起動するよう指示されるので、それにしたがって再起動すれば、作業は完了です。

あるいは、Windows 10上に囲碁勉強環境を構築するという今回の目的の範囲でいえば、「Visual Studio 2019」そのものをインストールする必要はありません。
おなじページのずっと下までいって「その他のツールとフレームワーク」をクリック、「Visual Studio 2019 の Microsoft Visual C++ 再頒布可能パッケージ」の「x64」にチェックがはいっているのを確認してから、「ダウンロード」ボタンをクリックして「VC_redist.x64.exe」をダウンロードします。
ダウンロードしたファイルをダブルクリックするとインストールがはじまり、デフォルトのままなにも変更することなくインストール作業を終えれば、それだけでこのあと必要になる環境はすでにととのっています。


3) 「CUDA 10.2」インストール
NVIDIA DEVELOPER」サイトの「CUDA Toolkit 10.2 Download」ページで「Windows」「x86_64」「10」「exe (local)」を選択して、該当する「CUDA 10.2」インストールファイル「cuda_10.2.89_441.22_win10.exe」をダウンロードします。
ファイルのダウンロードが終わったら、ダブルクリックしてインストーラを起動して、あらかじめ推奨チェックがはいっているとおりにインストールを実行していけばだいじょうぶです。
インストーラは「CUDA 10.2」ライブラリを「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2」以下にインストールし、環境変数「CUDA_PATH」に「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2」を、環境変数「Path」に「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin」「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\libnvvp」を自動的に追加しているはずです。

4) 「cuDNN 7.6.5」インストール
NVIDIA cuDNN」ページで「DOWNLOAD cuDNN」ボタンを押し、「cuDNN Download」ページへすすみます(必要におうじてアカウント作成のうえログインしてください)。
「I Agree To the Terms of the cuDNN Software License Agreement 」にチェックをいれ、「Download cuDNN v7.6.5 (November 18th, 2019), for CUDA 10.2」を選択、開いたタブのなかから「cuDNN Library for Windows 10」をクリックして「cudnn-10.2-windows10-x64-v7.6.5.32.zip」ファイルをダウンロードします。
ダウンロードしたファイルを展開すると、「cuda」フォルダが生成しますが、そのなかに「bin」「include」「lib」の三つのフォルダがあるはずです。
この三つのフォルダをそのまま、「CUDA 10.2」ライブラリをインストールしたフォルダ「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2」にコピーしてやります。
解凍してできた「cuda」フォルダのなかの「bin」「include」「lib」の三つのフォルダにふくまれていたファイルが、「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2」フォルダのなかの「bin」「include」「lib」の三つのフォルダのなかに、それぞれ移動されたことになります。
ここまでの作業が終わったら、環境変数「CUDNN_PATH」に「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2」を登録しておきます。

5) 「TensorRT 7.0.0」インストール
NVIDIA TensorRT」ページで「DOWNLOAD Now」ボタンを押して、「TensorRT Download」ページへすすみます(必要におうじてアカウント作成のうえログインしてください)。
「Available Versions」のリストから「TensorRT 7」をクリックして、「TensorRT 7.x Download」ページを開きます。
「I Agree To the Terms of the cuDNN Software License Agreement 」にチェックをいれ、「TensorRT 7.0」をクリックして開いた一覧表から「Windows10 and CUDA 10.2 zip package」を探してクリック、「TensorRT-7.0.0.11.Windows10.x86_64.cuda-10.2.cudnn7.6.zip」ファイルをダウンロードします。
ダウンロードしたファイルを展開すると、「TensorRT-7.0.0.11」フォルダが生成します。
このフォルダをわかりやすい場所へ移動して、環境変数「Path」にそのフォルダのなかの「lib」フォルダへのフルパスを追加します。
たとえば解凍してできたフォルダを「C:\Program Files\NVIDIA GPU Computing Toolkit\TensorRT-7.0.0」に移動したとすれば、環境変数「Path」に登録するのは、「C:\Program Files\NVIDIA GPU Computing Toolkit\TensorRT-7.0.0\lib」になります。
要するに「C:\Program Files\NVIDIA GPU Computing Toolkit\TensorRT-7.0.0\lib」へバスがとおっていればいいということなので、別法としては環境変数「Path」の設定などはせず、「lib」フォルダの中身をすべてパスのとおった場所(たとえば「CUDA 10.2」ライブラリをインストールしたときに「Path」登録されている「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin」フォルダなど)にコピーするだけでもO.K.です。

*****「CUDA 9.0」+「cuDNN 7.1.4」環境構築*****
「PhoenixGo」を動かすためには、バージョンの異なる「CUDA」環境が必要なので、ここの手順にしたがってじゃっかん古いライブラリをインストールしてください。

a) 「CUDA 9.0」インストール
NVIDIA DEVELOPER」サイトの「CUDA Toolkit Archive」から「CUDA Toolkit 9.0 Downloads」ページへすすみ、「Windows」「x86_64」「10」「exe (local)」用の「CUDA 9.0」インストールファイル「cuda_9.0.176_win10.exe」をダウンロードする。
ダウンロードしたファイルをダブルクリックしてインストーラを起動、あらかじめ推奨チェックがはいっているとおりにインストールを実行する。

b) 「cuDNN 7.1.4」インストール
NVIDIA cuDNN」ページで「DOWNLOAD cuDNN」ボタンを押し、「cuDNN Download」ページへすすむ(必要におうじてアカウント作成のうえログインする)。
「I Agree To the Terms of the cuDNN Software License Agreement 」にチェックをいれ、開いたタブの一番下にある「Archived cuDNN Releases」をクリックして「cuDNN Archive」ページへ飛ぶ。
「Download cuDNN v7.1.4 (May 16, 2018), for CUDA 9.0」を選択、「cuDNN v7.1.4 Library for Windows 10」をクリックして「cudnn-9.0-windows10-x64-v7.1.zip」ファイルをダウンロードする。
ダウンロードしたファイルを展開、生成した「cuda」フォルダのなかの「bin」「include」「lib」の三フォルダを、「CUDA 9.0」インストールフォルダ「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0」にコピーする。



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

2020年05月06日

「Ubuntu 18.04 LTS 日本語 Remix」でBluetoothマウスを使う

Ubuntu Forum」に以下のスレッドが立っていて、そこに記載されているとおりの手順を実行することで、電源オン/オフやログイン/アウト後も問題なくBluetoothマウスが使えるようになりました。

Bluetooth Mouse Won't Connect after Reboot - Ubuntu 18.04 LTS

じっさいに入力したコマンドと、そのコマンドの動作を確認するために重要なメッセージだけ、以下に書き出しておきます。


username@machinename $ bluetoothctl

[bluetooth]# list
Controller XX:XX:XX:XX:XX:XX machinename [default]

[bluetooth]# select XX:XX:XX:XX:XX:XX

[bluetooth]# show
Controller XX:XX:XX:XX:XX:XX (public)
......

[bluetooth]# power on
Changing power on succeeded

[bluetooth]# scan on
Discovery started
[CHG] Controller XX:XX:XX:XX:XX:XX Discovering: yes
[NEW] Device YY:YY:YY:YY:YY:YY Bluetooth Mouse
......

[bluetooth]# scan off
[CHG] Controller XX:XX:XX:XX:XX:XX Discovering: no
Discovery stopped

[bluetooth]# agent on
Agent registered
......

[bluetooth]# pair YY:YY:YY:YY:YY:YY
Pairing successful
......

[bluetooth]# connect YY:YY:YY:YY:YY:YY
Connection successful
......

[bluetooth]# trust YY:YY:YY:YY:YY:YY
Trust succeeded
......

[bluetooth]# exit

posted by hatakazu at 07:37| Comment(0) | Linuxとか | 更新情報をチェックする