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

2018年08月09日

コンピュータ囲碁プログラム「FLE OpenGo」のインストールと使いかたの変更点

Facebookがオープンソース化しているコンピュータ囲碁プログラム「ELF OpenGo」について、インストール手順と使いかたにいくつか変更がありました。

a) 「PyTorch」バイナリインストール環境で動作可能に
「ELF OpenGo」はおなじFacebookが開発している機械学習ライブラリ「PyTorch」に依存していますが、「ELF OpenGo」がオープンソース化された当時の最新版「PyTorch 0.4.0」バイナリには必要な機能がふくまれていなかったため、「ELF OpenGo」を動作させるためには「PyTorch」をソースからインストールするか、あるいは「PyTorch Nightly Build」をインストールするかしないといけませんでした。
しかしこのたび、「PyTorch 0.4.1」以降の「PyTorch」バイナリをインストールすることで、「ELF OpenGo」を動作させることが可能になりました。
そのため、別途「PyTorch」をソースからインストールするか「 Nightly Build」バイナリをインストールするかしていた作業が不要になり、今後は標準の「PyTorch」バイナリインストール環境でそのまま「ELF OpenGo」を走らせることができるようになりました。

b) 「ELF OpenGo」学習ずみネットワークの更新
「ELF OpenGo」学習ずみネットワーク更新版が、オープンソース化された当初いっしょに公開されたオリジナルの「v0」におよそ25万ミニバッチを追加してじゃっかんの微調整をくわえたかたちで、「v1」として公開されていました。
そのため、これまで「pretrained-go-19x19-v0.bin」と記述していた部分を「pretrained-go-19x19-v1.bin」に変更することで、学習ずみネットワーク更新版を使って「ELF OpenGo」を動かすことができるようになります。

上記の変更点を反映すると、現時点で「ELF OpenGo」をインストールのうえ、GTP対応囲碁GUI「GoGui」で動かす方法は、以下のように記述されることになります。
これまでの「ELF OpenGo」を動作させるのとおなじ要件(「CUDA 9.0」+「cuDNN 7.0」+「NCCL 2.1」、「Anaconda3」環境)は、あらかじめ満たしているものとします。

1. 「ELF OpenGo」インストールの準備
「Python 3.6」仮想環境「pytorch」を作成、有効化したうえで、「ELF OpenGo」インストールのために必要とされるライブラリをインストールしていきます。

$ sudo apt-get install cmake g++ gcc libboost-all-dev libzmq3-dev
$ conda create --name pytorch python=3.6
$ conda activate pytorch
(pytorch) $ conda install numpy zeromq pyzmq


別途「PyTorch」バイナリをインストールします。

・CPU版「PyTorch」バイナリのインストール
(pytorch) $ conda install --channel pytorch pytorch-cpu


・GPU版「PyTorch」バイナリのインストール
(pytorch) $ conda install --channel pytorch pytorch cuda90


2. 「ELF OpenGo」ソースの取得とビルド
ここでは、「~/ELF」ディレクトリにソースを取得のうえ、ビルドしていきます。

(pytorch) $ cd
(pytorch) $ git clone https://github.com/pytorch/ELF
(pytorch) $ cd ELF
(pytorch) $ git submodule sync && git submodule update --init --recursive
(pytorch) $ make
(pytorch) $ make test


3. 学習ずみネットワーク更新版の取得
あらかじめパスをとおすためのスクリプトを実行したうえで、「gtp.sh」スクリプトがある「~ELF/scripts/elfgames/go」ディレクトリへ移動し、そこに学習ずみネットワーク更新版をダウンロードします。

(pytorch) $ source scripts/devmode_set_pythonpath.sh
(pytorch) $ cd scripts/elfgames/go
(pytorch) $ wget https://github.com/pytorch/ELF/releases/download/pretrained-go-19x19-v0/pretrained-go-19x19-v1.bin


4. 「ELF OpenGo」起動
ここまでの準備が終わったら、以下のコマンドをたたいて、「ELF OpenGo」を走らせてみます。

・CPUバージョン
(pytorch) $ ./gtp.sh ./pretrained-go-19x19-v1.bin --verbose --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 256 --resign_thres 0.05 --mcts_virtual_loss 1


・GPUバージョン
(pytorch) $ ./gtp.sh ./pretrained-go-19x19-v1.bin --verbose --gpu 0 --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 1024 --resign_thres 0.05 --mcts_virtual_loss 1


5. 「GoGui」と連携させる設定
以下の内容を記述したスクリプトを作成してそれを「~/ELF/scripts/elfgames/go/ELF-OpenGo.sh」として保存、実行権限を付与したうえで「GoGui」の新規プログラム画面で「/home/username/ELF/scripts/elfgames/go/ELF-OpenGo.sh」コマンドを指定してやれば、「ELF OpenGo」学習ずみネットワーク更新版を「GoGui」経由で利用できるようになります。
この場合でも、「PyTorch」がインストールされている仮想環境から「GoGui」を起動する、という点には注意が必要です。
「ELF OpenGo」のふるまいを変更したい場合、この「ELF-OpenGo.sh」スクリプトの「--mcts_rollout_per_thread」の値を編集することで、考慮時間を調節したりできるようになります。

#!/bin/bash
cd /home/username/ELF/
source scripts/devmode_set_pythonpath.sh
cd /home/username/ELF/scripts/elfgames/go/
./gtp.sh ./pretrained-go-19x19-v1.bin --verbose --gpu 0 --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 1024 --resign_thres 0.05 --mcts_virtual_loss 1

※CPUバージョン「ELF OpenGo」の場合は、「--gpu 0」を削除し、考慮時間短縮のために「--mcts_rollout_per_thread」の値を非常にちいさく(たとえば「256」など)設定します。


参考:「ELF OpenGo」学習ずみネットワーク更新版を「Leela Zero」で使う
作業用ディレクトリに「ELF OpenGo」学習ずみネットワーク更新版と変換スクリプトをダウンロードし、「ELF OpenGo」学習ずみネットワーク更新版を「Leela Zero」で利用できる形式に変換します。

$ wget https://github.com/pytorch/ELF/releases/download/pretrained-go-19x19-v0/pretrained-go-19x19-v1.bin
$ wget https://github.com/gcp/leela-zero/blob/master/training/elf/elf_convert.py
$ ./elf_convert.py pretrained-go-19x19-v1.bin


上記の処理により作業用ディレクトリに「elf_converted_weights.txt」が生成しているので、「ELF-network-v1」のようにわかりやすい名前をつけて、「Leela Zero」から利用しやすい場所(たとえば「~/leela-zero」ディレクトリなど)へ移動しておきます。
あとは、「Leela Zero」起動時に「--weights ~/leela-zero/ELF-network-v1」のようにして、この学習ずみネットワークを使うようにパラメータ指定すればO.K.です。
posted by hatakazu at 20:26| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年07月26日

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

五月初頭のこと、Facebookがあらたなコンピュータ囲碁プログラム「EFF OpenGo」を開発、テストを終えてオープンソース化したということで、おもしろいニュースがはいってきました。

「ELF OpenGo」GitHubレポジトリ:学習ずみネットワークや棋譜なども公開。
・Linuxバイナリ配布なし、ソースからコンパイル。
・64bit対応。
・GPUバージョンおよびCPUバージョン。

関連記事
Facebookが囲碁AI「ELF OpenGo」をオープンソース化
BSDライセンスで公開された「ELF OpenGo」
オリジナルの「ELF」GitHubレポジトリ

世界ランキング30位にはいる韓国棋士四人と十四局打って全勝した、という話ですから、これはGoogle DeepMindの「AlphaGo」や日本最強の「DeepZenGo」のほうの領域にいるあらたなコンピュータ囲碁プログラムの登場ということになります。
hatakazuの棋力なら「Leela」との対局でじゅうぶんすぎるほど勉強になっているわけで、囲碁の勉強という観点だけからみれば、はっきりいって無用の長物であることはまちがいありません。
それでもまあ、これを動かしてみたいなと思って、なんとか動作条件をみたした(非力とはいえNVIDIA製GPU「GeForce MX150」を搭載した)ラップトップを購入してしまいました。

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

「ELF OpenGo」の動作要件は、「ELF OpenGo」GitHubレポジトリの記述によれば、以下のようになっています。

・Ubuntu 18.04
・Python 3.6
・GCC 7.3
・CUDA 9.0
・CUDNN 7.0
・NCCL 2.1.2

64bit OSのみの対応、そしてGPUバージョンを動かすためには、「CUDA 9.0」+「cuDNN 7.0」+「NCCL 2.1」環境が必要です。
この条件を満たしていればGPUバージョンの「ELF OpenGo」を、GPUをもたない環境ではCPUバージョンの「ELF OpenGo」を、使うことになります。
「ELF OpenGo」はFacebook開発の機械学習フレームワーク「PyTorch」に依存しており、GPU版「PyTorch」がインストールされていればGPUバージョン「ELF OpenGo」が、CPU版「PyTorch」がインストールされていればCPUバージョン「ELF OpenGo」が使えるようになります。

・「Anaconda」インストール
「PyTorch」をインストールするにあたって、パッケージ管理ツールとして、「Anaconda」を利用することが推奨されています。
ここでは、「Python 3.6」用の最新バージョンである「Anaconda3 5.2.0」が、あらかじめインストールされているものとします。

・GPUサポート
ここでは、「CUDA 9.0」+「cuDNN 7.0」が「/usr/local/cuda-9.0」ディレクトリへ、「NCCL 2.1」が「/usr/local/nccl-2.1」ディレクトリへインストールされ、そこへのパスがとおっているものとします。

・「PyTorch Nightly Build」インストール
現時点での最新バージョンである「PyTorch 0.4.0」バイナリをインストールしても、「ELF OpenGo」を動かすために必要な機能はカバーされてないらしく、「PyTorch」をソースからインストールするか、あるいは「PyTorch Nightly Build」バイナリをインストールするかしないといけません。
ここでは、「Python 3.6」仮想環境「pytorch」を作成のうえ、その仮想環境に「PyTorch Nightly Build」をインストールすることにします。
GPUバージョン「ELF OpenGo」を動かせる環境をととのえるためには、以下のコマンドを実行します。

$ conda create --name pytorch python=3.6
$ conda activate pytorch
(pytorch) $ conda install --channel pytorch pytorch-nightly cuda90


CPUバージョンの場合は、「cuda90」パッケージをインストールする必要はないので、最後の行だけ以下のように変更します。

(pytorch) $ conda install --channel pytorch pytorch-nightly


仮想環境「pytorch」を有効化した状態で、「Python 3.6」シェルをひらいていくつかコマンドをたたき、GPU版「PyTorch」が正しくインストールされていることを確認します。

(pytorch) $ python


「Python 3.6」シェルで、たとえば以下のようなコマンドをたたいてみて適切な出力をえられれば、GPU版「PyTorch Nightly Build」のインストールは正常に完了しています。

(input)>>> import torch
(input)>>> print(torch.__version__)
(output)2018.05.07
(input)>>> torch.cuda.is_available()
(output)True
(input)>>> torch.cuda.device_count()
(output)1
(input)>>> torch.cuda.current_device()
(output)0
(input)>>> torch.cuda.device(0)
(output)torch.cuda.device object at 0x7f6816184828
(input)>>> torch.cuda.get_device_name(0)
(output)'GeForce MX150'


*****CPU版「PyTorch」をソースからインストール*****
現時点では、「PyTorch」のソースを取得して、「CUDA 9.0」と連携させてビルドすることはできていません。
しかし、CPU版であれば問題なく、現行の「PyTorch」ソースからインストールすることができます。
CPU版を使う場合、「PyTorch Nightly Build」を使うよりもソースからインストールしたほうが、「ELF OpenGo」がはるかに早く動作するようです。
以下に、「~/pytorch」ディレクトリに「PyTorch」ソースをダウンロードし、CPU版「PyTorch」をインストールする手順を記述します。

$ conda activate pytorch
(pytorch) $ export CMAKE_PREFIX_PATH="/home/username/anaconda3/"
(pytorch) $ conda install numpy pyyaml mkl mkl-include setuptools cmake cffi typing
(pytorch) $ conda install -c mingfeima mkldnn
(pytorch) $ cd
(pytorch) $ git clone --recursive https://github.com/pytorch/pytorch
(pytorch) $ cd pytorch
(pytorch) $ NO_CUDA=1 python setup.py install


インストール処理が終わったら、「Python 3.6」シェルをひらいて、「PyTorch」のバージョンを確認しておきます。

(pytorch) $ python
(input) >>> import torch
(input) >>> print(torch.__version__)
(output) 0.5.0a0+4b61760
(input) >>> torch.cuda.is_available()
(output) False


ソースからインストールした「PyTorch」をアンインストールするには、以下のコマンドが機能します。

(pytorch) $ pip uninstall torch


2. 「ELF OpenGo」インストールの準備とソースの取得
「ELF OpenGo」は五月初頭にオープンソース化され、GitHubレポジトリでソースが公開されています。
「ELF OpenGo」のCPUバージョンをビルドするなら、CPU版「PyTorch」がソースからインストールされていること、GPUバージョンをビルドするなら、GPU対応として「CUDA 9.0」+「cuDNN 7.0」+「NCCL 2.1」環境が構築されたうえで、「PyTorch Nightly Build」がインストールされていていることを確認します。
今回はホームディレクトリに「ELF」ディレクトリを作成し、そこに「ELF OpenGo」のソースをダウンロードして、「ELF OpenGo」インストール作業をすすめることにします。
まずは、「PyTorch」をインストールした「Python 3.6」仮想環境「pytorch」を有効化し、必要なライブラリをインストールしていきます。

$ sudo apt-get install cmake g++ gcc libboost-all-dev libzmq3-dev
$ conda activate pytorch
(pytorch) $ conda install numpy zeromq pyzmq


つづいて、ホームディレクトリ直下の「~/ELF」ディレクトリに、ソースをダウンロードします。
いまのところ、最新のソースでは「ELF OpenGo」を走らせることはできないようなので、きちんと動作した六月ころのバージョンを利用します。

(pytorch) $ cd
(pytorch) $ git clone https://github.com/pytorch/ELF
(pytorch) $ cd ELF
(pytorch) $ git checkout 4257b3962c839f912501708cc3abb99f3a198a80
(pytorch) $ git submodule sync && git submodule update --init --recursive


3. 「ELF OpenGo」のインストール
つづいてビルド作業にすすみ、ビルド処理が終わったらテストしておきます。

(pytorch) $ make
(pytorch) $ make test


問題ないことを確認したら、「ELF OpenGo」を動かしてみます。
あらかじめパスをとおすためのスクリプトを実行したうえで、「gtp.sh」スクリプトがある「~ELF/scripts/elfgames/go」ディレクトリへ移動し、そこに学習ずみネットワークをダウンロードします。

(pytorch) $ source scripts/devmode_set_pythonpath.sh
(pytorch) $ cd scripts/elfgames/go
(pytorch) $ wget https://github.com/pytorch/ELF/releases/download/pretrained-go-19x19-v0/pretrained-go-19x19-v0.bin


ここまでの準備が終わったら、以下のコマンドをたたいて、「ELF OpenGo」を走らせてみます。

・CPUバージョン
(pytorch) $ ./gtp.sh ./pretrained-go-19x19-v0.bin --verbose --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 256 --resign_thres 0.05 --mcts_virtual_loss 1


・GPUバージョン
(pytorch) $ ./gtp.sh ./pretrained-go-19x19-v0.bin --verbose --gpu 0 --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 1024 --resign_thres 0.05 --mcts_virtual_loss 1


GPUの検出などがおこなわれていろいろメッセージが出ますが、問題なく起動していれば、GTPコマンドを受けつける状態になっているはずです。
「genmove black」「genmove white」などのGTPコマンドを与えてみて、正しく着手を返してくるようなら、インストールは正常に完了しています。
自分が担当する手番のほうもGTPコマンドを使って、「play black q4」「play white d16」などのように着手入力していけば、ターミナル上で「ELF OpenGo」と対局することもできます。

4. 「ELF OpenGo」の設定
推奨されている実行コマンドは、以下のとおりです。

./gtp.sh path/to/modelfile.bin --verbose --gpu 0 --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 8192 --resign_thres 0.05 --mcts_virtual_loss 1


いまのところ、考慮時間をパラメータで直接制御することはできないので、「--mcts_rollout_per_thread」の値を変更することで考慮時間をコントロールします。
hatakazuの環境では、ソースからインストールした「PyTorch 0.5.0a0」でCPUバージョンを走らせる場合は「--mcts_rollout_per_thread 256」で、バイナリインストールした「PyTorch Nightly Build」でGPUバージョンを走らせる場合は「--mcts_rollout_per_thread 1024」で、一手あたりだいたい20〜30秒で打ってくれるようです。
CPUバージョンは、ソースからインストールした「PyTorch 0.5.0a0」で動かすほうが、「PyTorch Nightly Build」バイナリで動かすよりも、二倍以上速いスピードで(半分以下の時間で)着手するように見えます。
おなじ比率で単純計算すれば、ソースからインストールした「PyTorch 0.5.0a0」でGPUバージョンを動かせれば、推奨されている「--mcts_rollout_per_thread 8192」で60秒前後で打ってくれるようになる、と期待できるのではないかと思っています。

5. GTP対応囲碁GUI「GoGui」への思考エンジン登録
「ELF OpenGo」をGTP対応囲碁GUIに連携させて、グラフィカルに利用できるようにしたいと思い、いろいろためしてみましたが、現在のところ「Sabaki」で動かすことはできていません。
そのため、ここでは「ELF OpenGo」を「GoGui」から利用できるよう、設定する方法について記述していきます。
まずは、「ELF OpenGo」をビルドするに先だって「PyTorch」をインストールした「Python 3.6」仮想環境「pytorch」を有効化し、パスをとおすスクリプトを実行したうえで、そのおなじ仮想環境から囲碁GUI「GoGui」を起動します。

$ conda activate pytorch
(pytorch) $ source ~/ELF/scripts/devmode_set_pythonpath.sh
(pytorch) $ gogui &


メニューバーの「プログラム」から「新規プログラム」を選び、あらわれた画面の「コマンド:」欄に囲碁思考エンジンの絶対パスと、起動時にわたすパラメータを一行でつづけて入力します。
たとえば「ELF」ディレクトリを「~/ELF」に設置した場合、「コマンド:」欄に入力する絶対パスは「/home/username/ELF/scripts/elfgames/go/gtp.sh」のようになります。
それにつづけて、考慮時間などの観点から採用するパラメータ、たとえば「/home/username/ELF/scripts/elfgames/go/pretrained-go-19x19-v0.bin --verbose --gpu 0 --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 1024 --resign_thres 0.05 --mcts_virtual_loss 1」を入力します。
最終的に、入力するコマンドは以下の例のようになり、これを一行でつづけて「コマンド:」欄に入力します。

/home/username/ELF/scripts/elfgames/go/gtp.sh /home/username/ELF/scripts/elfgames/go/pretrained-go-19x19-v0.bin --verbose --gpu 0 --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 1024 --resign_thres 0.05 --mcts_virtual_loss 1

※CPUバージョン「ELF OpenGo」の場合は、「--gpu 0」を削除し、考慮時間短縮のために「--mcts_rollout_per_thread」の値を非常にちいさく設定します。


「OK」ボタンを押下して何度か「待機」をクリックしながら待っていると、「[名前のないプログラム]が不正な応答を送りました」というエラーが出ますが、「警告を再表示しない」にチェックをいれて「閉じる」をクリックしてしまいます。
すると、ステイタスバーに表示されていた「プログラムの開始中」メッセージが消えて新規プログラム登録画面が開くので、「ラベル:」欄にたとえば「ELF OpenGo」などと入力して「OK」ボタンを押下します。
これで登録完了となるので、次回以降はメニューバーの「プログラム」 -> 「プログラムの起動」とすすんで「ELF OpenGo」を選ぶと、「ELF OpenGo」が起動して対局や棋譜分析に利用できるようになります。
登録した囲碁思考エンジン「ELF OpenGo」と対局するには、「ELF OpenGo」を起動した状態で、メニューバーの「対局」から「碁盤サイズ」「置石」「コンピュータの手番」を指定したうえで、「新規対局」をクリックします。
検討したい局面を指定して、そこで「ELF OpenGo」がどう打つかをみることもできます。
「ELF OpenGo」を起動したあと、メニューバーから「コンピュータの手番」を「なし」にして、どんどん石を置いていって対象となる局面をつくり、黒番の局面なら「ELF OpenGoに黒を打たせる」、白番の局面なら「ELF OpenGoに白を打たせる」アイコンをクリックします。
そのさい「GTPシェル」を開いておけば、読み筋や評価値も表示されるので、着手の意味を考えるときに参考になります。

以下の内容を記述したスクリプトを作成してそれを「~/ELF/scripts/elfgames/go/ELF-OpenGo.sh」として保存、実行権限を付与したうえで「GoGui」の新規プログラム画面で「/home/username/ELF/scripts/elfgames/go/ELF-OpenGo.sh」コマンドを指定してやれば、この「ELF-OpenGo.sh」スクリプトを編集することで「ELF OpenGo」の起動パラメータを調整できるようになります。
この場合でも、「PyTorch」がインストールされている仮想環境から「GoGui」を起動する、という点には注意が必要です。

#!/bin/bash
cd /home/username/ELF/
source scripts/devmode_set_pythonpath.sh
cd /home/username/ELF/scripts/elfgames/go/
./gtp.sh ./pretrained-go-19x19-v0.bin --verbose --gpu 0 --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 1024 --resign_thres 0.05 --mcts_virtual_loss 1

※CPUバージョン「ELF OpenGo」の場合は、「--gpu 0」を削除し、考慮時間短縮のために「--mcts_rollout_per_thread」の値を非常にちいさく設定します。



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

https://github.com/pytorch/ELF
https://github.com/pytorch/pytorch
https://pytorch.org/
https://github.com/pytorch/ELF/issues/27
https://github.com/pytorch/ELF/issues/30
https://github.com/pytorch/ELF/issues/33
posted by hatakazu at 22:53| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年07月25日

コンピュータ囲碁プログラム「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) + 1TB 5400rpm HDD (Ubuntu18.04)
--

「AQ」の動作要件は、「AQ」GitHubレポジトリの記述によれば、以下のようになっています。

・OS: 64-bit Linux
・GPU: Nvidia GPU with CUDA capability of >=3.0
・CPU: CPU with SSE 4.2

64bit OSのみの対応、そしてGPUバージョンを動かすためには、Compute Capability 3.0以上のNVIDIA製GPUが必要です。
この条件を満たしていれば、公開されているソースをダウンロードして、GPU版「AQ」をビルドすることができます。
GPUをもたない環境では、CPUバージョンをビルドして使うことになります。
「AQ」はGoogle開発の機械学習フレームワーク「TensorFlow」を利用しており、おなじくGoogle開発のビルドツール「Bazel」をもちいて、「TensorFlow」ソースからビルドする仕組みになっています。
「TensorFlow」を「CUDA」と連携させることで、GPUバージョン「AQ」をビルドすることができます。
ここでは、「Bazel 0.11.1」インストールずみ、GPU対応としては「CUDA 9.0」+「cuDNN 7.0」+「NCCL 2.1」環境構築ずみとして、「Ubuntu 18.04 LTS 日本語 Remix」で「AQ」をソースからビルドする手順について記述していきます。

*****「gcc-4.8」「g++4.8」の準備*****
(必要な環境がすでに構築されている場合、もしくはCPUバージョンを使う場合は、このセクションは無視して先へすすんでください。)

Ubuntu18.04標準の「gcc-7」では、GPU版「TensorFlow」をソースからビルドすることはできず、かわりに「gcc-4.8」を使う必要があります。
そのため、「gcc-4.8」「g++-4.8」をインストールのうえ「update-alternatives」コマンドを使って「gcc-7」「g++-7」より優先順位をあげて、一時的に自動モードで「gcc-4.8」「g++-4.8」が使われるように設定します。

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 70

$ sudo apt-get install gcc-4.8 g++-4.8

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 80
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 80


なお「gcc-4.8」でビルドするさいには、エディタで「/usr/include/x86_64-linux-gnu/c++/4.8/bits/c++config.h」ファイルをひらいて、以下の二行を追加しておきます。

#define _GLIBCXX_USE_C99 1
#define _GLIBCXX_USE_C99_MATH 1


上記はGPU版「TensorFlow」をソースからインストールするさいに必要な特殊設定なので、「AQ」のビルド作業が終わったら「gcc-4.8」「g++-4.8」の優先順位をさげて、自動モードでシステム標準の「gcc-7」「g++-7」が使われるように設定をもどしておきます。

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 48
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 48


最終的に、「AQ」をソースからビルドするまえにととのえた環境は、以下のようになっています。

・Ubuntu 18.04 LTS 日本語 Remix
・CUDA 9.0 -> /usr/local/cuda-9.0
・cuDNN 7.0.5 -> /usr/lcoal/cuda-9.0
・NCCL 2.1.15 -> /usr/local/nccl-2.1
・Bazel 0.11.1
・TensorFlow 1.8.0 -> 「1.9.0」以降のバージョンをビルドするには「Bazel 0.13」以降が必要になるため、ここでは「Bazel 0.11」と互換性のある「1.8.0」を使う。
・GCC 4.8

2. 「AQ」インストールの準備とソースの取得
「AQ」の現行バージョンは「v2.1.1」で、「AQ」GitHubレポジトリでソースが公開されています。
「AQ」のCPUバージョンをビルドするなら、「TensorFlow」をソースからビルドするための「Bazel」ツールがインストールされていること、GPUバージョンをビルドするなら、それにくわえてGPU対応として「CUDA 9.0」+「cuDNN 7.0」+「NCCL 2.1」環境構築、「gcc-4.8」設定が完了していることを確認します。
今回はホームディレクトリに「tensorflow」ディレクトリを作成し、そこに「TensorFlow」および「AQ」のソースをダウンロードしてビルド作業をおこない、生成した「AQ」実行ファイルをホームディレクトリ直下の「AQ」ディレクトリにインストールすることにします。
まずは「~/tensorflow」ディレクトリに「TensorFlow 1.8.0」のソースをダウンロードし、「TensorFlow」の設定をおこないます。

$ cd
$ git clone --recursive https://github.com/tensorflow/tensorflow
$ cd ~/tensorflow
$ git checkout v1.8.0 # これよりあたらしいバージョンは「Bazel 0.11.1」ではビルドできない。
$ git submodule update --init --recursive
$ ./configure


Pythonのバージョンとライブラリのパスを指定したあと、たくさん質問がつづきますが、以下の項目だけはしっかりと確認してください。

・CPUバージョン:「jemalloc」と「XLA」を有効化する。
・GPUバージョン:「CUDA」サポートを有効化し、「CUDA 9.0 /usr/local/cuda-9.0」「cuDNN 7.0 /usr/local/cuda-9.0」「NCCL 2.1 /usr/local/nccl-2.1」のバージョンとパスを指定する。

上記の設定が終わったら、「AQ」のソースを取得し、ビルド作業をおこなう「~/tensorflow/tensorflow/AQ/src」ディレクトリへ移動します。

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


以上で、「TensorFlow」ソースツリーのなかに「AQ」ソースを設置し、ビルド作業をすすめる準備がととのいました。

3. 「AQ」のインストール
CPUバージョンをビルドする場合は、「search.h」ファイルのなかにCPUモードを有効にするスイッチがふくまれているので、ソースに変更をくわえます。
テキストエディタで「search.h」を開き、現行バージョンでは18行目にあたる「//#define CPU_ONLY」行のコメント符号「//」を削除し、「#define CPU_ONLY」に変更してCPUモードを有効にします。
GPUバージョンの場合は、なにもする必要はないので、そのまま以下のビルド作業へすすみます。

・CPUバージョン:「--config=opt」「--config=monolithic」スイッチを指定してビルド。
$ bazel build -c opt --config=monolithic :AQ


・GPUバージョン:「--config=opt」「--config=monolithic」「--config=cuda」スイッチを指定してビルド。
$ bazel build -c opt --config=monolithic --config=cuda :AQ


ビルド処理が終わったら、「~/tensorflow/bazel-bin/tensorflow/AQ/src/」ディレクトリに実行ファイル「AQ」が生成しているので、それを「~/tensorflow/tensorflow/AQ」ディレクトリへコピーします。
そのほかにもいくつかファイルを動かしたら、「~/tensorflow/tensorflow/AQ」ディレクトリ内で実行ファイル「AQ」を動かす準備が完了します。
ホームディレクトリからリンクをはって、「~/AQ/AQ」コマンドで実行ファイルを呼び出せるようにします。

$ cd ~/
$ cp ~/tensorflow/bazel-bin/tensorflow/AQ/src/AQ ~/tensorflow/tensorflow/AQ/AQ
$ cp ~/tensorflow/tensorflow/AQ/prob/* ~/tensorflow/tensorflow/AQ/
$ ln -s ~/tensorflow/tensorflow/AQ ~/AQ # あるいは「mv ~/tensorflow/tensorflow/AQ ~/AQ」で移動しても可。


4. 「AQ」の設定
以上の作業が完了したら、「~/AQ」ディレクトリにGTP思考エンジンの実行ファイル「AQ」と、設定ファイル「aq_config.txt」が置かれている状態になります。
このあとは、「AQ」のGPU版Linuxバイナリを利用するときとまったくおなじように、「AQ」の設定とGTP対応囲碁GUIへの登録をすすめればO.K.です。


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

「AQ」開発者である山口祐さんのtwitter「https://twitter.com/ymg_aq」
https://www.tensorflow.org/install/install_linux
https://www.tensorflow.org/install/install_sources
https://github.com/ymgaq/AQ/issues/85
https://github.com/ymgaq/AQ/issues/68
https://github.com/ymgaq/AQ/issues/9
https://github.com/ymgaq/AQ/issues/33
https://github.com/ymgaq/AQ/issues/12
https://github.com/ymgaq/Pyaq/blob/master/README.md
https://medium.com/jim-fleming/loading-a-tensorflow-graph-with-the-c-api-4caaff88463f
http://www.python36.com/install-tensorflow141-gpu/
http://www.python36.com/how-to-install-tensorflow-gpu-with-cuda-9-2-for-python-on-ubuntu/
posted by hatakazu at 21:55| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年07月22日

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

「PhoenixGo」は、Tencent社が開発しオープンソース化した、自己対戦による深層学習の手法にもとづくコンピュータ囲碁プログラムです。
2018年1月にTencent社の囲碁対局プラットフォーム「野狐」で「BensonDarrz」という名前で打ちはじめましたが、同4月に「世界囲碁AIトーナメント2018」で優勝してより広く知られるようになった、とのことです。

「PhoenixGo」GitHubレポジトリ
・Linuxバイナリ配布なし、ソースからコンパイル必須。
・64bit対応。
・GPUバージョンおよびCPUバージョン。

関連記事
Tencent unveils China's first open source Go AI, made on spare WeChat server processing power

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

「PhoenixGo」の動作要件は、「PhoenixGo」GitHubレポジトリの記述によれば、以下のようになっています。

・GCC with C++11 support
・Bazel (0.11.1 is known-good)
・(Optional) CUDA and cuDNN (for GPU support)
・(Optional) TensorRT (for accelerating computation on GPU, 3.0.4 is known-good)

「PhoenixGo」はGoogle開発の機械学習フレームワーク「TensorFlow」を利用しており、おなじくGoogle開発のビルドツール「Bazel」をもちいて、「TensorFlow」ソースからビルドする仕組みになっています。
「TensorFlow」を「CUDA」と連携させることで、GPUバージョン「PhoenixGo」をビルドすることができ、GPU演算の高速化のために「TensorRT」を使うオプションもあります。
ここでは、推奨されている「Bazel 0.11.1」インストールずみ、GPU対応としては「CUDA 9.0」+「cuDNN 7.0」+「NCCL 2.1」環境構築ずみ、推奨されている「TensorRT 3.0.4」インストールずみ(オプション)として、「Ubuntu 18.04 LTS 日本語 Remix」に「PhoenixGo」をインストールする手順について記述していきます。
「TensorFlow」ソースについては、「PhoenixGo」ビルド処理のなかで「TensorFlow 1.8.0」が自動的にダウンロードされるので、特別になにか準備する必要はありません。

*****「gcc-4.8」「g++4.8」の準備*****
(必要な環境がすでに構築されている場合、もしくはCPUバージョンを使う場合は、このセクションは無視して先へすすんでください。)

Ubuntu18.04標準の「gcc-7」では、GPU版「TensorFlow」をソースからビルドすることはできず、かわりに「gcc-4.8」を使う必要があります。
そのため、「gcc-4.8」「g++-4.8」をインストールのうえ「update-alternatives」コマンドを使って「gcc-7」「g++-7」より優先順位をあげて、一時的に自動モードで「gcc-4.8」「g++-4.8」が使われるように設定します。

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 70

$ sudo apt-get install gcc-4.8 g++-4.8

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 80
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 80


なお「gcc-4.8」でビルドするさいには、エディタで「/usr/include/x86_64-linux-gnu/c++/4.8/bits/c++config.h」ファイルをひらいて、以下の二行を追加しておきます。

#define _GLIBCXX_USE_C99 1
#define _GLIBCXX_USE_C99_MATH 1


上記はGPU版「TensorFlow」をソースからインストールするさいに必要な特殊設定なので、「PhoenixGo」のインストール作業が終わったら「gcc-4.8」「g++-4.8」の優先順位をさげて、自動モードでシステム標準の「gcc-7」「g++-7」が使われるように設定をもどしておきます。

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 48
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 48


最終的に、「PhoenixGo」インストールまえにととのえた環境は、以下のようになっています。

・Ubuntu 18.04 LTS 日本語 Remix
・CUDA 9.0 -> /usr/local/cuda-9.0
・cuDNN 7.0.5 -> /usr/lcoal/cuda-9.0
・NCCL 2.1.15 -> /usr/local/nccl-2.1
・TensorRT 3.0.4 -> /usr/local/TensorRT-3.0.4(オプション)
・Bazel 0.11.1
・TensorFlow 1.8.0 -> 「PhoenixGo」インストール過程で自動的にダウンロードされる。
・GCC 4.8

2. 「PhoenixGo」インストールの準備とソースの取得
「PhoenixGo」の現行バージョンは「v1」で、「PhoenixGo」GitHubレポジトリでソースが公開されています。
「PhoenixGo」のCPUバージョンをビルドするなら、「TensorFlow」をソースからビルドするための「Bazel」ツールがインストールされていること、GPUバージョンをビルドするなら、それにくわえてGPU対応として「CUDA 9.0」+「cuDNN 7.0」+「NCCL 2.1」環境構築、GPU演算高速化のため「TensorRT 3.0.4」インストール(オプション)、「gcc-4.8」設定が完了していることを確認します。
今回はホームディレクトリに「PhoenixGo」ディレクトリを作成し、そこにソースをダウンロードして、インストール作業をすすめることにします。

$ cd
$ git clone https://github.com/Tencent/PhoenixGo
$ cd PhoenixGo


以上で、「PhoenixGo」のソースを「PhoenixGo」ディレクトリにダウンロードし、インストール作業をすすめる準備がととのいました。

3. 「PhoenixGo」のインストール
まずは「TensorFlow」の設定を実行します。

$ ./configure


Pythonのバージョンとライブラリのパスを指定したあと、たくさん質問がつづきますが、以下の項目だけはしっかりと確認してください。

・CPUバージョン:「jemalloc」と「XLA」を有効化する。
・GPUバージョン:「CUDA」サポートを有効化し、「CUDA 9.0 /usr/local/cuda-9.0」「cuDNN 7.0 /usr/local/cuda-9.0」「NCCL 2.1 /usr/local/nccl-2.1」「TensorRT 3.0.4 /usr/local/TensorRT-3.0.4」のバージョンとパスを指定する。

上記の設定が終わったら、「PhoenixGo」ビルド処理にすすみます。

・CPUバージョン:「--config=opt」スイッチを指定してビルド。
$ bazel build --config=opt //mcts:mcts_main


・GPUバージョン:「--config=opt」「--config=cuda」スイッチを指定してビルド。
$ bazel build --config=opt --config=cuda //mcts:mcts_main


ビルド処理が終わったら、公開されている学習ずみネットワークを「PhoenixGo」ディレクトリにダウンロードのうえ解凍してから、「PhoenixGo」を走らせてみます。

$ wget https://github.com/Tencent/PhoenixGo/releases/download/trained-network-20b-v1/trained-network-20b-v1.tar.gz
$ tar xvzf trained-network-20b-v1.tar.gz
$ scripts/start.sh


CPUバージョン起動時に出るメッセージ。
current directory: '/home/username/PhoenixGo'
mcts_main wasn't built with CUDA support
mcts_main wasn't built with TensorRT support
use config file 'etc/mcts_cpu.conf'
log to '/home/username/PhoenixGo/log'
start mcts_main
XXXX-XX-XX XX:XX:XX.XXXXXX: I model/zero_model.cc:72] Read checkpoint state succ
XXXX-XX-XX XX:XX:XX.XXXXXX: I model/zero_model.cc:80] Read meta graph succ
XXXX-XX-XX XX:XX:XX.XXXXXX: I model/zero_model.cc:100] Create session succ
XXXX-XX-XX XX:XX:XX.XXXXXX: I model/zero_model.cc:107] Create graph succ
XXXX-XX-XX XX:XX:XX.XXXXXX: I model/zero_model.cc:119] Load checkpoint succ


GPUバージョン起動時に出るメッセージ。「CUDA」「TensorRT」が有効化され、GPUが検出されている。
mcts_main was built with CUDA support
mcts_main was built with TensorRT support
found 1 GPU(s)
use config file 'etc/mcts_1gpu.conf'
log to '/home/username/PhoenixGo/log'
start mcts_main


上のようなメッセージが出れば、ビルドは正常に完了しています。

4. 「PhoenixGo」の設定
GPUを一個搭載したコンピュータでGPUバージョン(「TensorRT」有効)を動かす場合は「PhoenixGo」ディレクトリの「etc/mcts_1gpu.conf」ファイルが、CPUバージョンの場合は「PhoenixGo」ディレクトリの「etc/mcts_cpu.conf」ファイルが、「PhoenixGo」の動作条件を制御する設定ファイルとなっています。
「PhoenixGo」起動コマンドを「$ scripts/start.sh etc/mcts_1gpu.conf」のようにして、明示的に設定ファイルを渡すこともできるし、各種パラメータを指定して直接「bazel-bin/mcts/mcts_main」を起動してもO.K.です。
以下に、編集する可能性のある項目だけ抜き出して、各項目の意味と設定方法を記述します。

num_eval_threads: 1 # 使用するGPUの個数。
num_search_threads: 4 # 「num_eval_threads」と「eval_batch_size」をかけた値よりもちょっと大きい値に設定するらしい。
timeout_ms_per_step: 10000 # 一手ごとの考慮時間をミリ秒で指定。
max_simulations_per_step: 0 # 一手ごとのシミュレーション数。「0」で無指定。
gpu_list: "0" # 使用するGPUの認識番号をコンマで区切って登録。CPUバージョンの設定ファイルには行じたい存在しない。
model_config -> train_dir: "pkct" # 学習ずみネットワークが保管されているフォルダを指定。
max_search_tree_size: # ツリーノードの最大サイズ。メモリ容量によって指定する。
max_children_per_node: # 各ノードがもてる子ノードの最大サイズ。メモリ容量によって指定する。
enable_background_search: 0 # 「ponder」機能を使うときは「1」、使わないときは「0」に設定。
early_stop -> enable: 0 # 勝敗が確定してしまったあとはすぐに打つ。一定ペースで打たせたいときは「0」に設定。
unstable_overtime -> enable: 0 # 次の手が確定しないときは余計に考える。一定ペースで打たせたいときは「0」に設定。
behind_overtime -> enable: 0 # 形勢がよくないときは余計に考える。一定ペースで打たせたいときは「0」に設定。
time_control -> enable: 0 # GTPコマンド「time_settings」への対応。一定ペースで打たせたいときは「0」に設定。


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

5-1. GTP対応囲碁GUI「GoGui」への思考エンジン登録
メニューバーの「プログラム」から「新規プログラム」を選び、あらわれた画面の「コマンド:」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「PhoenixGo」ディレクトリを「~/PhoenixGo」に設置した場合、「コマンド:」欄に入力する絶対パスは「/home/username/PhoenixGo/scripts/start.sh」のようになります。
「OK」ボタンを押下して何度か「待機」をクリックしながら待っていると、ステイタスバーに表示されていた「プログラムの開始中」メッセージが消えて新規プログラム登録画面が開くので、「ラベル:」欄にたとえば「PhoenixGo」などと入力して「OK」ボタンを押下します。
これで登録完了となるので、次回以降はメニューバーの「プログラム」 -> 「プログラムの起動」とすすんで「PhoenixGo」を選ぶと、「PhoenixGo」が起動して対局や棋譜分析に利用できるようになります。
登録した囲碁思考エンジン「PhoenixGo」と対局するには、「PhoenixGo」を起動した状態で、メニューバーの「対局」から「碁盤サイズ」「置石」「コンピュータの手番」を指定したうえで、「新規対局」をクリックします。
検討したい局面を指定して、そこで「PhoenixGo」がどう打つかをみることもできます。
「PhoenixGo」を起動したあと、メニューバーから「コンピュータの手番」を「なし」にして、どんどん石を置いていって対象となる局面をつくり、黒番の局面なら「PhoenixGoに黒を打たせる」、白番の局面なら「PhoenixGoに白を打たせる」アイコンをクリックします。
そのさい「GTPシェル」を開いておけば、読み筋や評価値も表示されるので、着手の意味を考えるときに参考になります。

5-2. 「Sabaki」への思考エンジン登録
メニューバーの「Engines」から「Manage Engines」を選び、あらわれた画面で「Add」をクリックします。
「(Unnamed Engine)」と表示されている欄にカーソルをもっていって、わかりやすい表示名を、そして「Path」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「PhoenixGo」ディレクトリを「~/PhoenixGo」に設置した場合、「(Unnamed Engine)」欄にカーソルをもっていって「PhoenixGo」と入力、「Path」欄に絶対パス「/home/username/PhoenixGo/scripts/start.sh」を指定します。
登録した「PhoenixGo」と対局するには、メニューバーの「File」から「New」をクリックします。
開いた画面で「Board Size」「Handicap」「Komi」を指定のうえ、黒番と白番それぞれの担当者を選択します。
自分が担当する手番は「Manual」を選択、「PhoenixGo」に担当させる手番は登録されている思考エンジンの表示名から「PhoenixGo」を選んで、「OK」ボタンを押下します。
「Sabaki」にほかの囲碁思考エンジンを登録しておいて、「PhoenixGo」をほかの思考エンジンと対局させることもできます。
その場合は、対局させる思考エンジンの両方について「ponder」機能を無効化するように設定し、互いの思考をさまたげないかたちで対局をおこなう必要があります。


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

https://github.com/Tencent/PhoenixGo
https://github.com/Tencent/PhoenixGo/releases
https://qiita.com/take-iwiw/items/0bf12bec9c3bade2e331
https://stackoverflow.com/questions/50213089/linking-error-with-gcc-g-7-3-0-on-ubuntu-18-04/50232797
posted by hatakazu at 15:32| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年07月19日

棋譜分析専用ツール「GoReviewPartner」のインストールと使いかた - Ubuntu編

SGF棋譜ファイルを分析するためのツールとして、「GoReviewPartner」というものがあります。
SGFファイルを指定したエンジンに分析させて、その結果をRSGFファイルへ出力し、RSGFファイルにふくまれた分析結果を表示するツールです。

「GoReviewPartner」プロジェクトページ
GitHubレポジトリ
Documentation Page

棋譜分析に使えるエンジンとして、いまのところ「AQ」「Leela」「Leela Zero」などを指定することができます。
「Leela Zero」エンジンを指定のうえ、「ELF OpenGo」の学習ずみネットワークを読みこませれば、「ELF OpenGo」による分析結果を見ることもできます。

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

「GoReviewPartner」をインストールするにあたって必要とされる動作要件は、ハードウェア的には、棋譜分析に利用するGTP囲碁思考エンジンの動作要件に準じます。
ソフトウェア的には、「Python 2」および「TkInter」に依存しているので、以下のコマンドを実行してあらかじめインストールしておきます。

$ sudo apt install python python-tk python-wxgtk3.0


2. 「GoReviewPartner」のダウンロードとインストール
「GoReviewPartner」の現行バージョンは「v0.13」です。
「GoReviewPartner」のインストール方法としては、ソースを配置のうえソースから起動することが推奨されているので、それにしたがってソースをダウンロードします。

$ cd
$ git clone https://github.com/pnprog/goreviewpartner


以上で、「RoReviewPartner」のソースが「~/goreviewpartner」にインストールされました。

3. 「GoReviewPartner」の起動

「GoReviewPartner」を起動するには、ターミナルを開いて、以下のコマンドを実行します。

$ cd ~/goreviewpartner
$ python main.py
3系のpythonがデフォルトになっている場合は、2系のpythonで起動するため、「$ python2 main.py」コマンドを使う必要があるかもしれません。


問題なく「GoReviewPartner」が起動できるようになったら、今後のために、かんたんな起動スクリプトを作成しておきます。

#!/bin/bash
cd ~/goreviewpartner
python main.py


上記の内容を記述したファイルを「goreviewpartner.sh」とでも名づけて保存し、「chmod +x goreviewpartner.sh」で実行権限を付与しておきます。
たとえばこのファイルをデスクトップにおいておけば、デスクトップへ移動して「./goreviewpartner.sh」コマンドを実行すれば、「GoReviewPartner」が起動するようになります。

4. 「GoReviewPartner」の設定
「GoReviewParter」で棋譜分析をおこなうにさいして、どの思考エンジンを使うかによって、設定内容がかわってきます。
以下では、「AQ」「Leela」「Leela Zero」のそれぞれについて、思考エンジンを登録するさい必要になる作業を記述します。

4-1. 「AQ」との連携
「~/goreviewpartner」ディレクトリへ移動し、「$ python main.py」を実行して「GoReviewPartner」を起動すると、メイン画面が表示されます。
なんらかの思考エンジンを登録しないと、「GoReviewPartner」で棋譜分析をおこなうことはできないので、「Settings」画面を開いて左のタブから「AQ」を選びます。
ここで「Command」欄に「AQ」実行ファイルのパスを、「Parameters」欄に「AQ」起動時に読みこませる設定ファイルを指定するオプションを、それぞれ入力します。
「Slow profile」「Fast profile」それぞれに対応する設定ファイル「aq_config_slow.txt」「aq_config_fast.txt」を、思考エンジン「AQ」があるのとおなじ「~/AQ」ディレクトリに用意し、「-byoyomi[sec] =15」「-byoyomi[sec] =5」のように、考慮時間に差をつけておきます。

Slow profile parameters
Command: /home/username/AQ/AQ
Parameters: --config=/home/username/AQ/aq_config_slow.txt

Fast profile parameters
Command: /home/username/AQ/AQ
Parameters: --config=/home/username/AQ/aq_config_fast.txt


「Test」ボタンを押してGTP通信を開始し、「genmove black」「genmove white」などのGTPコマンドをためしてみてうまく動作するようなら、忘れずに「Save settings」ボタンを押して設定を保存します。

4-2. 「Leela」との連携
「~/goreviewpartner」ディレクトリへ移動し、「$ python main.py」を実行して「GoReviewPartner」を起動すると、メイン画面が表示されます。
なんらかの思考エンジンを登録しないと、「GoReviewPartner」で棋譜分析をおこなうことはできないので、「Settings」画面を開いて左のタブから「Leela」を選びます。
ここで「Command」欄に「Leela」実行ファイルのパスを、「Parameters」欄にGTPモードで起動するのに必要となるオプションを、それぞれ入力します。
「Time per move (s)」欄には、「Slow profile」「Fast profile」それぞれに、一手ごとの分析にかける秒数を指定します。

Slow profile parameters
Command: /home/username/Leela0110GTP/leela_0110_linux_x64_opencl
Parameters: --gtp --noponder
Time per move (s): 15

Fast profile parameters
Command: /home/username/Leela0110GTP/leela_0110_linux_x64_opencl
Parameters: --gtp --noponder
Time per move (s): 5


「Test」ボタンを押してGTP通信を開始し、「genmove black」「genmove white」などのGTPコマンドをためしてみてうまく動作するようなら、忘れずに「Save settings」ボタンを押して設定を保存します。

4-3. 「Leela Zero」との連携
「~/goreviewpartner」ディレクトリへ移動し、「$ python main.py」を実行して「GoReviewPartner」を起動すると、メイン画面が表示されます。
なんらかの思考エンジンを登録しないと、「GoReviewPartner」で棋譜分析をおこなうことはできないので、「Settings」画面を開いて左のタブから「Leela Zero」を選びます。
ここで「Command」欄に「Leela Zero」実行ファイルのパスを、「Parameters」欄にGTPモードで起動するのに必要となるオプションを、それぞれ入力します。
「Time per move (s)」欄には、「Slow profile」「Fast profile」それぞれに、一手ごとの分析にかける秒数を指定します。

Slow profile parameters
Command: /home/username/leela-zero/leelaz
Parameters: --gtp --noponder --weights best-network
Time per move (s): 15

Fast profile parameters
Command: /home/username/leela-zero/leelaz
Parameters: --gtp --noponder --weights best-network
Time per move (s): 5


「Leela Zero」の特徴として、自己対戦データを集積して学習を重ねることで強くなりつづけている、ということがあえられます。
定期的に「http://zero.sjeng.org/best-network」をおとづれて、あたらしい学習ずみネットワークを取得することによって、その特徴を楽しむことができます。
ダウンロードしたファイルを「best-network」という名前に変更し、「/home/username/leela-zero」ディレクトリに設置すればO.K.です。
学習ずみネットワークを指定する「--weights best-network」部分で、「ELF OpenGo」の学習ずみネットワークを指定すれば、「ELF OpenGo」による棋譜分析結果を利用することもできます。
「Test」ボタンを押してGTP通信を開始し、「genmove black」「genmove white」などのGTPコマンドをためしてみてうまく動作するようなら、忘れずに「Save settings」ボタンを押して設定を保存します。

5. 「GoReviewPartner」の使いかた
GTP囲碁思考エンジンと連携させる設定が完了したら、いよいよ「GoReviewPartner」を使ってSGFファイルを分析することができるようになります。
「GoReviewPartner」を起動したあと、メイン画面から「Run a SFG file analysis」ボタンを押下し、分析にかけたいSGFファイルを指定します。
複数の思考エンジンを設定してある場合は、「Bot to use for analysis:」欄でじっさいの分析に使用するエンジンを選択することができます。
「Start」ボタンを押下すると、指定したエンジンを起動して棋譜分析がはじまりますが、けっこう時間がかかるのでゆっくりまちます。
棋譜分析が完了したら、分析したSGFファイルとおなじ場所に、おなじ名前で拡張子が「RSGF」になったファイルが生成されます。
「GoReviewPartner」メイン画面から「Open a RSGF file for review」を押下し、生成されたRSGFファイルを選択すれば、思考エンジンによって考察された内容を追跡していくことができるようになります。
左側の碁盤上でじっさいの手順を再現していくと、右側の碁盤上に思考エンジンが検討した候補手が表示され、候補手のどれかにカーソルを重ねることで変化手順を追いかけていくこともできます。


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

http://yuntingdian.com/goreviewpartner
https://github.com/pnprog/goreviewpartner
http://yuntingdian.com/goreviewpartner/grp-documentation/doc.htm
posted by hatakazu at 22:57| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年07月16日

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

「AQ」は、山口祐さんが独力で開発しオープンソース化したコンピュータ囲碁プログラムで、自己対戦による深層学習の手法にもとづいています。
日本棋院ネット対局「幽玄の間」に導入されてプロ棋士の練習相手をつとめ、最初の一週間で「118勝8敗」、およそ一ケ月のあいだに「420勝23敗」という驚異的な成績を残したことでも知られています。

「AQ」GitHubレポジトリ
・ソースからビルド(GPUバージョンはLinuxバイナリ配布あり)。
・64bit対応。
・GPUバージョンおよびCPUバージョン。

関連記事
ネット対局「幽玄の間」に囲碁ソフト「AQ」を導入
囲碁AI「AQ」が驚異の118勝8敗
プロ練習に新囲碁AI 個人で開発、日本棋院導入

「AQ」の強さについては山口さんご自身が「トッププロ級」とおっしゃっていますが、これは高性能GPUを利用して高速演算できる場合の話で、GPUをもたない環境で動作するCPUバージョン「AQ-mini」は「大変弱く、アマチュア2~3段程度」とのことです。
hatakazuが囲碁を学ぶうえで「AQ」を利用したいのは、オープンソース化されているコンピュータ囲碁プログラムのなかで「コミ六目半の互先の碁」に最適化されているのは「AQ」だけ、だと思うからです。
逆にそのせいで、コミ七目半の中国ルールでは黒番半目負けになる可能性があることについて、山口さんご自身が以下のように注意を喚起されているほどです。

!!!Caution!!! This version was trained in Komi = 6.5 for the Japanese rule. So, AQ often loses 0.5 point at Black, but that is inevitable.


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: 64-bit Linux
・GPU: Nvidia GPU with CUDA capability of >=3.0
・CPU: CPU with SSE 4.2

64bit OSのみの対応、そしてGPUバージョンを動かすためには、Compute Capability 3.0以上のNVIDIA製GPUが必要です。
この条件を満たしていれば、配布されているLinux用バイナリをダウンロードして、かんたんに使いはじめることができます。
GPUをもたない環境では、CPUバージョンをビルドして使うことになりますが、これについてはまたべつの記事を作成します。
なお、「AQ」として公開されているのはGUIをもたない囲碁思考エンジン部分のみなので、グラフィカルに対局や棋譜分析をおこなうためにはGTPを解釈できる囲碁GUIと連携させる必要があります。

2. 「AQ」インストールファイルのダウンロード
「AQ」の現行バージョンは「v2.1.1」で、「AQ」GitHubレポジトリの「Releases」ページから「AQ_linux.tar.gz」をクリックして、GPUバージョンのLinux用インストールファイル「AQ_linux.tar.gz」を取得します。
CPUバージョンを使う場合は、ソースをダウンロードのうえビルドする必要があり、これについてはまたべつの記事を作成します。

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

$ tar zxvf AQ_linux.tar.gz
$ mv AQ ~/


4. 「AQ」の設定
「AQ」ディレクトリのなかにGTP思考エンジン本体「AQ」といっしょに設定ファイル「aq_config.txt」が置かれており、この設定ファイル「aq_config.txt」の内容を編集することで、次回起動時以降「AQ」のふるまいを変更することができます。
以下に、編集する可能性のある項目だけ抜き出して、各項目の意味と設定方法を記述します。

### Hardware setting ###
# Set number of 1-8 for 'gpu count'.
# 'thread count' is number of the total usable threads.
-gpu count =1 # 利用できるGPUの数。CPUバージョンの場合は「0」になります。
-thread count =4 # 利用できるCPUスレッド数ですが、GPU一個の場合は「5」ていどまで、GPU二個なら「8」以上が有効になるようです。

### Time contorol setting ###
-main time[sec] =0 # 秒読みにはいるまえのいわゆる持ち時間を秒単位で入力。秒読みのみの場合は「0」に設定する。
-byoyomi[sec] =10 # 持ち時間が切れたあとの秒読みの長さを秒単位で入力。秒読みなし切れ負けの場合は「0」に設定する。
-emergency time[sec] =15 # 秒読みなしの場合に、持ち時間がここで指定した秒数より短くなると、ノータイムで打ちはじめる。

### Thinking setting ###
-japanese rule =on # 日本ルールの場合は「on」に、中国ルールの場合は「off」に設定する。
-komi =6.5 # 日本ルールの場合は「6.5」に、中国ルールの場合は「7.5」に設定する。
-use pondering =off # 相手の手番でも考慮する「ponder」機能を使う場合は「on」に、使わない場合は「off」に設定する。


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

5-1. GTP対応囲碁GUI「GoGui」への思考エンジン登録
メニューバーの「プログラム」から「新規プログラム」を選び、あらわれた画面の「コマンド:」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「AQ」ディレクトリを「~/AQ」に設置した場合、「コマンド:」欄に入力する絶対パスは「/home/username/AQ/AQ」のようになります。
そしてその下の「ワーキングディレクトリ:」欄に、「AQ」実行ファイルをインストールしているディレクトリのパス、ここではたとえは「/home/username/AQ/」を入力します。
「OK」ボタンを押下して何度か「待機」をクリックしながら待っていると、ステイタスバーに表示されていた「プログラムの開始中」メッセージが消えて新規プログラム登録画面が開くので、「ラベル:」欄にたとえば「AQ」などと入力して「OK」ボタンを押下します。
これで登録完了となるので、次回以降はメニューバーの「プログラム」 -> 「プログラムの起動」とすすんで「AQ」を選ぶと、「AQ」が起動して対局や棋譜分析に利用できるようになります。
登録した囲碁思考エンジン「AQ」と対局するには、「AQ」を起動した状態で、メニューバーの「対局」から「碁盤サイズ」「置石」「コンピュータの手番」を指定したうえで、「新規対局」をクリックします。
検討したい局面を指定して、そこで「AQ」がどう打つかをみることもできます。
「AQ」を起動したあと、メニューバーから「コンピュータの手番」を「なし」にして、どんどん石を置いていって対象となる局面をつくり、黒番の局面なら「AQに黒を打たせる」、白番の局面なら「AQに白を打たせる」アイコンをクリックします。
そのさい「GTPシェル」を開いておけば、読み筋や評価値も表示されるので、着手の意味を考えるときに参考になります。

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


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

「AQ」開発者である山口祐さんのtwitter「https://twitter.com/ymg_aq」
https://github.com/ymgaq/AQ
https://github.com/ymgaq/AQ/releases
https://github.com/ymgaq/AQ/wiki/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95%EF%BC%88Windows%EF%BC%89
posted by hatakazu at 22:55| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする