2018年05月30日

NHK杯テレビ囲碁トーナメントの棋譜をSGF形式で管理できるようにする

NHK杯テレビ囲碁トーナメントでおこなわれた対局の棋譜は、すべてウェブサイトで公開されているのですが、ブラウザで碁盤を表示させてその碁盤上に着手を再現していく仕組みになっています。

NHK杯テレビ囲碁トーナメント公式ウェブサイト

2018年5月27日(日)に放送された「第66回NHK杯テレビ囲碁トーナメント一回戦第9局 伊田篤史八段対藤沢里菜女流立葵杯」戦の場合、トップページから該当する対局の「棋譜を見る」ボタンをクリックすると、「http://cgi2.nhk.or.jp/goshogi/kifu/igs.cgi?d=20180527」というURLで棋譜を見ることができます。
最後の八桁番号が放送日をあらわしており、たとえば2018年3月18日(日)に放送された前回第65回の決勝戦だったら、「http://cgi2.nhk.or.jp/goshogi/kifu/igs.cgi?d=20180318」というURLになります。
ただたんに棋譜を追いかけるだけならこれでもいいのですが、じっさいに検討してみたいと思った場合は、やはりSGF形式に変換して棋譜管理ソフトにかけられたほうがはるかに便利です。
棋譜管理ソフトで一手一手入力していくわけにもいきませんから、なんらかのかたちで棋譜データを取得のうえ、SGF形式に変換できるツールがあればなあと思っていたところ・・・。
NHK 杯囲碁トーナメントの棋譜ファイルを SGF 形式で入手する:Part 1. 棋譜データの取得」「NHK 杯囲碁トーナメントの棋譜ファイルを SGF 形式で入手する:Part 2. SGF 形式への変換」に情報があり、棋譜データの取得用とSGF形式への変換用に、それぞれRubyスクリプトも公開されていました。
もしRuby環境がない場合は、たとえばUbuntuなら以下のコマンドを実行して、あらかじめRubyをインストールしておく必要があります。

$ sudo apt install ruby


棋譜データの取得は、「NHK 杯囲碁トーナメントの棋譜ファイルを SGF 形式で入手する:Part 1. 棋譜データの取得」に記載されているとおりの「get-score.rb」スクリプトを作成し、第xx回の棋譜であれば「$ ruby get-score.rb xx」を実行するだけ。
ただし、事前に「./date/date-xx.txt」ファイルを作成し、そこに棋譜データを取得したい対局の放送日を列記しておく必要があります。
このファイルの内容は、たとえば第65回の準決勝戦二局+決勝戦の計三局を対象とするなら、以下のようにその三局の放送日を列記するかたちです。

3月4日
3月11日
3月18日


棋譜データをうまく取得できれば、「./score/score-xx」ディレクトリが作成され、そのなかに取得した棋譜データが「xxxxxxxx.txt」形式で保管されます。
取得した棋譜データをSGF形式へ変換するには、「NHK 杯囲碁トーナメントの棋譜ファイルを SGF 形式で入手する:Part 2. SGF 形式への変換」に記載されているとおりの「score2sgf.rb」スクリプトを作成し、「$ ruby score2sgf.rb ./score/score-xx/xxxxxxxx.txt」を実行します。
もともとのNHK杯独自形式の棋譜データ「xxxxxxxx.txt」がSGFファイル「xxxxxxxx.sgf」に変換され、お好みの棋譜管理ソフトから管理できるようになります。
なお、取得した第xx回の棋譜データを一括してSGF形式に変換するには、Ubuntu上のbashターミナルから以下のコマンドを実行すればO.K.です。

$ for f in ./score/score-xx/*.txt; do
> ruby score2sgf.rb $f
> done
$


これまではテレビを見ながら一手一手入力してSGFファイルをつくったりもしていたのですが、上記の方法を導入することによってhatakazuの人生からひとつの困難が取りのぞかれ、すこし幸せになることができました。
記して感謝もうしあげます。


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

http://cgi2.nhk.or.jp/goshogi/gotou/
https://ochaochaocha3.hateblo.jp/entry/2013/01/31/getting-score-files-of-go-nhk-cup-in-sgf-format-part-1
https://ochaochaocha3.hateblo.jp/entry/2013/02/09/getting-score-files-of-go-nhk-cup-in-sgf-format-part-2
posted by hatakazu at 21:31| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年05月25日

「GoGui」で「ELF OpenGo」を思考エンジンとして使う

「ELF OpenGo」を「~/ELF」以下にインストールし、「pretrained-go-19x19-v0.bin」を「~/ELF/bin/pretrained-go-19x19-v0.bin」に設置したとして、けっきょくのところ以下の方法で「GoGui」から「ELF OpenGo」を思考エンジンとして使うことができるようになりました。

$ cd /home/username/ELF/
$ source scripts/devmode_set_pythonpath.sh
$ cd /home/username/ELF/scripts/elfgames/go/
$ gogui


そうして起動した「GoGui」メニューバーから「プログラム」 -> 「新規プログラム」とすすんで、「コマンド:」欄に以下のコマンドを入力します。

/home/username/ELF/scripts/elfgames/go/gtp.sh /home/username/ELF/bin/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 100 --resign_thres 0.05 --mcts_virtual_loss 1


「OK」ボタンを押すと、しばらくして警告メッセージが表示されますが、それは今後表示されないようにして閉じてしまいます。
すると今度は、「プログラムが反応していません、待ちますか、それともプログラムを終了しますか」という画面があらわれます。
ここで「待つ」を選択すると、新規プログラムのラベルを編集する画面になるので、「OK」を押して画面を閉じます。
ここまでで、「GoGui」から呼びだす思考エンジンとして、「ELF OpenGo」が登録されています。
あとは「GoGui」から「ELF OpenGo」を起動、プログラムの手番や置石などの条件を決めて新規対局を開始すれば、「ELF OpenGo」との対局を楽しめるようになります。

「GoGui」をランチャーなどから起動した場合でも「ELF OpenGo」を使えるようにしたい場合は、以下の内容を記述したスクリプトを作成してそれを「~/ELF/ELF-OpenGo.sh」として保存、実行権限を付与したうえで「GoGui」の新規プログラム画面で「/home/username/ELF/ELF-OpenGo.sh」コマンドを指定してやればO.K.です。

#!/bin/bash
cd /home/username/ELF/
source scripts/devmode_set_pythonpath.sh
cd /home/username/ELF/scripts/elfgames/go/
./gtp.sh /home/username/ELF/bin/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 100 --resign_thres 0.05 --mcts_virtual_loss 1


「ELF OpenGo」と対局してみたいとはいっても、ターミナル上でGTPコマンドを打ち込むのはたいへんなので(というかまったくやる気になれないので)、なんとかGUIで打てるようになってよかったです。


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

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

2018年05月24日

Facebook「ELF OpenGo」を動かしてみる

1. 前提となる環境の整備
「ELF OpenGo」を走らせるためには以下の環境が前提となっているので、それぞれ確認のうえ、不足がある場合はあらかじめインストールしておきます。
ただし、今回はGPUのない古いラップトップで走らせることを目的としているため、CUDA関連環境については無視してすすめます。

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

今後の作業をすすめていくために必要となるパッケージを、事前にインストールします。

$ sudo apt-get install git cmake g++ gcc libboost-all-dev libzmq3-dev


2. 「Anaconda」インストール
「Pytorch」ライブラリなどをインストールするため、「Anaconda」環境を構築します。
「Anaconda」サイト「Download」ボタンを押してダウンロードページへすすみ、「Python 3.6 version」の「64-Bit (x86) Linux Installer」をダウンロードします。
ダウンロードしたディレクトリに移動のうえ、以下のコマンドを実行して、「Anaconda」のインストールを開始します。
インストール手順ページの記述にしたがいますが、なにか問題が発生した場合はFAQページにヒントがあるかもしれません。

$ chmod +x Anaconda3-5.1.0-Linux-x86_64.sh
$ bash ./Anaconda3-5.1.0-Linux-x86_64.sh


ライセンス条項への同意を求められるので、全文を表示してから「yes」と回答すると、インストールがはじまります。
途中で「~/.bashrcにPATHを追加するかどうか」確認を求められるので、そこは確実に「yes」と回答します。
もし「No」ですすめてしまった場合は、あとから「~/.bashrc」をエディタで開き、ファイルの最後に「export PATH="/home/username/anaconda3/bin:$PATH"」という行を追加してやればO.K.です。
インストールが完了したら、いったんターミナルを閉じてあらためて開き(もしくは「$ source ~/.bashrc」コマンドを実行)、「$ anaconda-navigator」コマンドを実行してみます。
「ANACONDA NAVIGATOR」が起動すれば、ちゃんと「Anaconda」がインストールされている、ということです。
「Anaconda」環境で必要なパッケージを追加します。

$ conda install numpy zeromq pyzmq


3. 「Pytorch」インストール
ソースからインストールするには、「Pytorch」GitHubレポジトリにあるインストラクションにしたがって、以下のコマンドを実行していきます。
GPUをもたない古いラップトップで動かすため、環境変数「NO_CUDA=1」をエクスポートしてから、インストールスクリプトを実行します。

$ export NO_CUDA=1
$ export CMAKE_PREFIX_PATH="/home/username/anaconda3/"

$ conda install numpy pyyaml mkl mkl-include setuptools cmake cffi typing
$ conda install -c intel mkl-dnn

$ cd
$ git clone --recursive https://github.com/pytorch/pytorch
$ cd pytorch
$ python setup.py install


もしくは、上記ソースからのインストールに代えて、「pythorch nightly build」をインストールすることもできます。

$ conda install -c pytorch pytorch-nightly


4. 「ELF OpenGo」のビルド
ここまでの環境整備が終わったら、「ELF OpenGo」のソースを取得し、ビルド処理にすすみます。

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


ビルド処理が完了したら、「$ make test」コマンドを実行して、問題がないことを確認しておきます。

5. 「ELF OpenGo」の実行
「ELF OpenGo」を走らせるためには、あらかじめ「~/ELF」ディレクトリから「source scripts/devmode_set_pythonpath.sh」を実行したうえで、「~/ELF/scripts/elfgames/go」ディレクトリから「gtp.sh」を走らせることになります。
推奨される設定値は以下のとおりで、「mcts_rollout_per_thread」値を変更することで思考時間を調節できます。

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


まずは「ELF OpenGo」リリースページから、学習ずみモデル「pretrained-go-19x19-v0.bin」をダウンロードし、それをたとえば「~/ELF/bin/pretrained-go-19x19-v0.bin」などに設置します。
そのあと、以下のようなコマンドを実行していくと、「ELF OpenGo」がGTPコマンドを受けつける画面が開くはずです。
GPUをもたない非力なラップトップで動かすため、GPU指定「--gpu 0」をはずしたうえで、「mcts_rollout_per_thread」値をとてもちいさくしてあります。

$ cd /home/username/ELF/
$ source scripts/devmode_set_pythonpath.sh
$ cd /home/username/ELF/scripts/elfgames/go/
$ ./gtp.sh /home/username/ELF/bin/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 100 --resign_thres 0.05 --mcts_virtual_loss 1


「genmove b」で黒の着手、「genmove w」で白の着手を「ELF OpenGo」に思考させて、ゲームをすすめていくことができます。
どちらかを自分で担当したい場合は、黒番なら「play b d4」、白番なら「play w q16」のように着点を指定します。
現状では、ターミナル上でGTPコマンドを打ち込むことでしか「ELF OpenGo」を動かせないので、「Sabaki」や「GoGui」などの囲碁GUIから対局ができるように設定する方法を模索していくつもりです。


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

https://www.digitalocean.com/community/tutorials/how-to-install-the-anaconda-python-distribution-on-ubuntu-16-04
posted by hatakazu at 20:45| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年05月22日

Windows 10上のVirtualBoxにUbuntuをインストールして「AQ」をコンパイルしてみる

1. Windowsホストへの「VirtualBox」のインストール
Oracle VM VirtualBox - Downloads」から「64-bit Windows Installer」をダウンロードし、ダブルクリックしてインストールを開始します。
基本的にはデフォルトの設定のまま「Next」「Yes」でO.K.ですが、ショートカットの作成やスタートメニューへの登録、ファイルの関連づけなどは好みにおうじてチェックをはずしてすすめます。

2. 仮想マシンの作成
インストールが完了したら「VirtualBox」を起動しますが、その時点で最初から日本語で立ちあがるようです。
「Oracle VM VirtualBox マネージャー」メイン画面で、「新規」ボタンを押すと「仮想マシンの作成」ボックスが開き、最初の「名前とオペレーティングシステム」ページでは仮想マシンに名前をつけてインストールするOSを選択します。
今回は「Ubuntu 18.04 LTS Japanese Remix」をインストールしようとしていますが、タイプ欄で「Linux」を選んでもバージョン欄に「Ubuntu (64-bit)」が表示されていない場合、BIOSの設定で「Intel Virtualization Technology」が無効になっているのが原因です。
BIOS画面を開いて、「Advanced」や「CPU」や「Virtualization」の項目に「Intel Virtualization Technology」があるのでそれを有効化、BIOSの変更を保存のうえコンピュータを再起動します。
「VirtualBox」を起動して「新規」ボタンを押すと、今度は「名前とオペレーションシステム」ページで、「Ubuntu (64-bit)」が選択できるようになっているはずです。
仮想マシンの作成は基本的にはすべてデフォルトの設定のまま「次へ」を押下していけばO.K.ですが、「ファイルの場所とサイズ」ページでハードディスクの上限サイズを決める部分は要注意、一度設定したらあとからサイズを増やすことはできないので、目的におうじてあらかじめじゅうぶんな容量を割りあてておく必要があります。

3. ゲストOS「Ubuntu 18.04 LTS Japanese Remix」のインストール
仮想マシンを作成して「Oracle VM VirtualBox マネージャー」メイン画面にもどったら、いま作成した仮想マシンをクリックして選択、「設定」ボタンを押下します。
つづいて「ストレージ」タブで最初から登録されている仮想光学ドライブを選択、「属性 光学ドライブ」欄の右にあるCDのアイコンをクリックして、「仮想光学ディスクファイルを選択」を選びます。
ここで、あらかじめダウンロードしておいた「Ubuntu 18.04 LTS Japanese Remix」のインストールイメージを選択、「OK」ボタンを押して「設定」画面を閉じます。
そのまま該当仮想マシンが選択された状態で「起動」ボタンを押せば、インストールイメージをUSBメモリに書きこんで、そのUSBメモリからブートしたときとおなじように、「Ubuntu 18.04 LTS Japanese Remix」のインストールがはじまります。

4. 「VirtualBox Guest Additions」のインストール
インストールが終了したらインストールメディアを抜いて再起動という手順になりますが、なにせ仮想マシンなのでインストールメディアが自動的に解除された状態で再起動され、Ubuntuのログイン画面があらわれます。
そのままログインして作業できるようになっていますが、画面解像度が低いなど、たいへん使いづらい状態です。
それを改善するために、「VirtualBox Guest Additions」パッケージをインストールします。
仮想マシンを起動した状態で「VirtualBox」メニューバーから「デバイス」→「Guest Additions CDイメージの挿入」を選択します。
「VBox_GAS_5.2.12」などという名前でマウントされたCDがデスクトップに現れ、ソフトウェアの自動起動をうながしてくるので、そのまま「実行する」ボタンをクリックしてインストールします。
自動起動されない場合は、「/media/username/VBox_GAS_5.2.12/VBoxLinuxAdditions.run」を手動で実行してやればO.K.です。
「VirtualBox Guest Additions」パッケージのインストールによって、ホストOS(Windows 10)とゲストOS(Ubuntu 18.04 LTS Japanese Remix)との連携がよりシームレスになり、利便性が格段に向上します。
仮想マシンの設定としては、「一般」→「高度」タブで「クリップボードの共有」「ドラッグ&ドロップ」を有効化、「ネットワーク」→「アダプター1」タブで「ネットワークアダプターを有効化」をチェック、「共有フォルダー」タブでゲストOSから見えるようにしたいホストがわのフォルダを新規追加、くらいをやっておけばそうとう便利にゲストOSを運用できます。
ネットワークについては、特別な使いかたをしなければデフォルトの「NAT」のままでO.K.ですが、割り当てを「ブリッジアダプター」にしてネットワークに接続しているデバイスを選択すればブリッジ接続も可能です。

5. 仮想ディスクの実体
「VirtualBox」はユーザのホームディレクトリ直下に「VirtualBox VMs」フォルダをつくり、仮想ディスクのVDIファイルを仮想マシンごとのフォルダにまとめて、「\VirtualBox VMs\仮想マシン名\仮想ディスク名.vdi」というかたちで格納しています。

6. 仮想マシン上でできたこと、できなかったこと
Ubuntuをインストールしている古いラップトップで「AQ」をコンパイルしようとしたところ、負荷がかかりすぎるのかビルド処理の途中で制御不能となってしまい、「AQ」の実行バイナリファイルを生成することができませんでした。
今回「VirtualBox」上のゲストOS「Ubuntu 18.04 LTS Japanese Remix」にておなじ手順を実行してみたところ、コンパイル処理は問題なく終了、「AQ」の実行ファイルの生成に成功しました。
あとは、これをそのまま古いラップトップにコピーして、動作するかどうか確認してみることにします。
ただし、この仮想「Ubuntu 18.04 LTS Japanese Remix」では、「Leela」のUbuntuパッケージをインストールしてもGUI版が起動しませんでした。


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

https://www.virtualbox.org/
http://www.oracle.com/technetwork/server-storage/virtualbox/overview/index.html
posted by hatakazu at 20:14| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年05月21日

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

SGF棋譜ファイルを分析するためのツールとして、「GoReviewPartner」というものがあります。
SGFファイルを指定したエンジンに分析させて、その結果をRSGFファイルへ出力し、RSGFファイルにふくまれた分析結果を表示するツールです。
棋譜分析に使えるエンジンとして、いまのところ「AQ」「Leela」「Leela Zero」などを指定することができます。
「Leela Zero」エンジンを指定のうえ、「ELF OpenGo」の学習ずみweightsファイルを読みこませれば、「ELF OpenGo」による分析結果を見ることもできます。

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

1. 「GoReviewPartner」のインストール
まずは、「GoReviewPartner」を動かすのに必要なライブラリを、あらかじめインストールしておきます。

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


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

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


以上でインストール作業は終了です。

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

$ cd goreviewpartner
$ python main.py


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

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

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


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

4. 「GoReviewPartner」の設定
くわしい設定方法は「GoReviewPartner Documentation」ページに記述されていますが、ここではかんたんにエンジンを登録する方法だけ紹介します。

4-1. 「AQ」の設定
「GoReviewPartner」を起動したあと、メイン画面から「Settings」→「AQ」とすすみます。
ここで「Command」欄に「AQ」実行ファイルのパスを、「Parameters」欄に「AQ」起動時に読みこませる設定ファイルを指定するオプションを、それぞれ入力します。
「Slow profile」「Fast profile」それぞれに設定ファイルを用意し、「-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」を起動したあと、メイン画面から「Settings」→「Leela」とすすみます。
ここで「Command」欄に「Leela」実行ファイルのパスを、「Parameters」欄にGTPモードで起動するのに必要となるオプションを、それぞれ入力します。
「Time per move (s)」欄には、「Slow profile」「Fast profile」それぞれに、一手ごとの考慮時間を指定します。

Slow profile parameters
Command: /home/username/Leela-0.11.0/leela_0110_linux_x64
Parameters: --gtp --noponder
Time per move (s): 15

Fast profile parameters
Command: /home/username/Leela-0.11.0/leela_0110_linux_x64
Parameters: --gtp --noponder
Time per move (s): 5


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

4-3. 「Leela Zero」の設定
「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/src/leelaz
Parameters: --gtp --noponder --weights best-network
Time per move (s): 15

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


「--weights best-network」部分で、「ELF OpenGo」の学習ずみweightsファイルを指定すれば、「ELF OpenGo」による棋譜分析結果を利用できるようになります。
「Test」ボタンを押してGTP通信を開始し、「genmove black」「genmove white」などのGTPコマンドをためしてみてうまく動作するようなら、忘れずに「Save settings」ボタンを押して設定を保存します。

5. 「GoReviewPartner」による棋譜分析
思考エンジンの設定が完了したら、いよいよ「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ファイルを選択すれば、思考エンジンによって考察された内容を追跡していくことができるようになります。
左側の碁盤上でじっさいの手順を再現していくと、右側の碁盤上に思考エンジンが検討した候補手が表示され、候補手のどれかにカーソルを重ねることで変化手順を追いかけていくこともできます。
posted by hatakazu at 19:10| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年05月19日

「AQ」を動かしたくてやってみたこと

GPUをもたない古いラップトップで「AQ」を動かしたくて、いろいろやってみたことを記録しておきます。
結果として手順どおりすすんではいったのですが、このラップトップにとって負荷が大きすぎるのか、ビルド作業の途中でハングしてしまいました。
そのため、たいへん残念ながら、現時点では「AQ」を動かすことには成功していません。

「AQ」GitHubレポジトリ

1. 「Bazel」のインストール
Bazel」サイトにUbuntuへのインストール方法が記述されているので、推奨されているバイナリからのインストール手順にしたがってインストールしていきます。
GitHub上のBazel releasesページからLinux用インストールスクリプト「bazel-0.13.0-installer-linux-x86_64.sh」をダウンロードし、ダウンロードしたディレクトリで以下の作業をおこないます。

$ sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python
$ chmod +x bazel-0.13.0-installer-linux-x86_64.sh
$ ./bazel-0.13.0-installer-linux-x86_64.sh --user
$ export PATH="$PATH:$HOME/bin"


3行めで「--user」オプションをつけて「~/bin」にインストールしたため、4行めでパスをとおしておく必要がありますが、同時に「~/.bashrc」ファイルに「export PATH="$PATH:$HOME/bin"」を追加しておけば次回以降は自動的にパスがとおります。


2. 「TensorFlow」のインストールと「AQ」のビルド
「AQ」は機械学習フレームワークとして「TensorFlow」を使っているので、「TensorFlow」をインストールします。
「AQ」作者の「CPU Only」環境でのビルド方法についての記述「Bazel」と「TensorFlow」を使ったビルド方法についてのインストラクションを参考に、以下のようにすすめていきました。

$ cd ~
$ git clone --recursive https://github.com/tensorflow/tensorflow
$ cd ~/tensorflow
$ ./configure
$ cd tensorflow
$ git clone https://github.com/ymgaq/AQ
$ cd AQ/src


ここで「search.h」ファイルをテキストエディタで開き、「#define CPU_ONLY」と記述されている行のコメントをはずしてから、ファイルを保存します。

$ bazel build -c opt --config=monolithic :AQ
$ cp ~/tensorflow/bazel-bin/tensorflow/AQ/src/AQ ~/tensorflow/tensorflow/AQ/AQ
$ cp ~/tensorflow/tensorflow/AQ/prob/* ~/tensorflow/tensorflow/AQ/
$ cp ~/tensorflow/tensorflow/AQ ~/


上記手順を完了すれば、「~/AQ/AQ」に「CPU Only」バージョンの実行ファイルが、「~/AQ/aq_config.txt」に起動時に読みこむ設定ファイルが格納されます。
エディタで設定ファイルを開いて、「-gpu count =0」「-thread count =4」「-byoyomi[sec] =5」「-japanese rule =on」「-komi =6.5」あたりの項目を調整のうえ保存、「~/AQ/AQ」を実行すればO.K.です。
TensorFlowをインストールしてはじめてビルドする場合、あらかじめWORKSPACEを作成しておかないと、上記手順どおりにすすめてもエラーが出てビルドできないことがあります。

$ cd ~/tensorflow/tensorflow
$ touch WORKSPACE
posted by hatakazu at 22:15| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年05月10日

「Leela Zero」を使って「ELF OepnGo」体験

「ELF」のGitHubレポジトリで公開された「ELF OpenGo」の学習ずみweightsファイル「pretrained-go-19x19-v0.bin」(世界ランキング30位にはいる韓国棋士四人と十四局打って全勝したというバージョンのようです)が、「Leela Zero」で利用できるように変換されたかたちで、「http://zero.sjeng.org/networks/62b5417b64c46976795d10a6741801f15f857e5029681a42d02c9852097df4b9.gz」にて公開されています。
これを「Leela Zero」に読みこませることで、「Leela Zero」が「ELF OpenGo」のようにふるまうことが期待できます。

1. 「ELF OpenGo」と対局する
「Leela Zero」とGTP通信できる囲碁GUIはいくつかあるので、「ELF OpenGo」そのものを動かせない環境でも、「Leela Zero」をつうじて疑似的に「ELF OpenGo」と対局することができます。
作業はかんたんで、上記ファイルをダウンロードして、「Leela Zero」にあたえるweightsファイルとして指定するだけです。

$ cd ~/leela-zero
$ wget -O weights-ELF http://zero.sjeng.org/networks/62b5417b64c46976795d10a6741801f15f857e5029681a42d02c9852097df4b9.gz


この状態で「Sabaki」などの囲碁GUIから「Leela Zero」を呼びだすさいのオプションを「--weights /home/username/leela-zero/weights-ELF」とし、「ELF OpenGo」の学習ずみweightsファイルを指定してやれば、「Leela Zero」は「ELF OpenGO」の学習ずみweightsファイルにもとづいて思考するので、疑似的に「ELF OpenGo」との対局を体験していることになるというわけです。

2. 「ELF OpenGo」で棋譜分析する
対局だけではなく、棋譜の分析にも疑似「ELF OpenGo」を使うことができます。
おなじく「ELF OpenGo」の学習ずみweightsファイルをダウンロードして、「Lizzie」から呼びだす「Leela Zero」のweightsファイルとして指定してやる、という作業になります。

$ cd ~/lizzie
$mv network network.org
$ wget -O network http://zero.sjeng.org/networks/62b5417b64c46976795d10a6741801f15f857e5029681a42d02c9852097df4b9.gz


この状態で「Lizzie」を起動すれば、画面に表示される「Leela Zero」の思考は「ELF OpenGo」の学習ずみweightsファイルにもとづいたものなので、「Leela Zero」をつうじて「Lizzie」上に「ELF OpenGo」が考えていることを表現することができるわけです。
posted by hatakazu at 21:03| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年05月09日

「Leela Zero」の思考を可視化する専用GUI「Lizzie」のインストールと使いかた

※※※以下2018年8月7日追記※※※
コンピュータ囲碁プログラム「Leela Zero」のインストールと使いかた、および「Leela Zero」を便利に使える専用囲碁GUI「Lizzie」と連携させる方法について、LinuxむけとWindowsむけにべつべつの記事を書きました。

Linuxむけ記事
コンピュータ囲碁プログラム「Leela Zero」のインストールと使いかた - Ubuntu編
「Leela Zero」専用囲碁GUI「Lizzie」のインストールと使いかた - Ubuntu編

Windowsむけ記事
コンピュータ囲碁プログラム「Leela Zero」のインストールと使いかた - Windows編
「Leela Zero」専用囲碁GUI「Lizzie」のインストールと使いかた - Windows編

あわせてご参照ください。
※※※以上2018年8月7日追記※※※


せっかく「Leela Zero」をインストールしても、対局しかできないのは残念なことで、できることならこのどんどん強くなっていく囲碁AIが考えていることを学んで棋力向上につなげたいものです。
そうした目的にぴったりな「Leela Zero」専用GUIとして、「Lizzie - Leela Zero Interface」が公開されています。
「Lizzie」を使うことで、「Leela Zero」と対局できるだけではなく、「Leela Zero」のエンジンを利用して棋譜を分析することもできます。
棋譜分析では勝率の推移はもちろん、候補手とそれぞれの勝率、そのあとの読み筋を表示させることが可能で、hatakazuのように囲碁の勉強に「Leela Zero」を使ってみたい場合はたいへん役にたちます。
なお、「Lizzie」を動かすには「Java 8」以降が要件となっているため、必要におうじてあらかじめ「Oracle Java 8」をインストールしておきます。
1行めは、バージョンのちがうJavaがはいっていて、あらかじめそれを削除する場合のみ実行します。

$ sudo apt-get purge openjdk*
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer


「Lizzie」を起動したときに、「canberra-gtk-moduleをロードできない」というようなエラーが出るときは、該当するモジュールをインストールしておきます。

$ sudo apt install libcanberra-gtk-module


1. 「Lizzie」用特別仕様「Leela Zero」の準備
棋譜分析のために必要な情報を「Leela Zero」から取得するため、思考している内容を常時出力する機能をもつように、「Leela Zero」をコンパイルしてやる必要があります。
具体的には、「Leela Zero」レポジトリの「UCTSearch.cpp」ファイル「Lizzie」サイドから提供されているものに依拠して変更のうえ、コンパイルを実行するということです。
ほとんどの部分がくりかえしになりますが、「Lizzie」で利用できるように「Leela Zero」をコンパイルする手順は、以下のように記述されます。

$ sudo apt install clinfo && clinfo
$ git clone https://github.com/gcp/leela-zero leelaz-for-lizzie
$ cd leelaz-for-lizzie/src
$ sudo apt install libboost-dev libboost-program-options-dev libopenblas-dev opencl-headers ocl-icd-libopencl1 ocl-icd-opencl-dev zlib1g-dev


*1 ここでテキストエディタで「config.h」を開き、現行バージョンでは74行めにあたる「#define USE_OPENCL」行を削除します。
「https://github.com/gcp/leela-zero#requirements」の「If you do not have a GPU, modify config.h in the source and remove the line that says "#define USE_OPENCL".」という記述にしたがった処置です。
*2 「Leela Zero」オリジナルの「UCTSearch.cpp」ファイルを、「Lizzie」提供のものを参考に編集します。
「Lizzie」提供の「UCTSearch.cpp」の最後のほうに、「// lizzie」コメントのついた行が10行ほどあるので、それを「Leela Zero」オリジナルの「UCTSearch.cpp」の該当する場所(前後の行を比べていけば容易に判別可能)に埋めこんでやればO.K.です。
「UCTSearch.cpp」の変更を保存したうえで、コンパイル作業をすすめます。

$ make
$ cd ..
$ wget http://zero.sjeng.org/best-network


上記手順どおりにインストールを実行した場合、「Lizzie」用特別仕様の「Leela Zero」エンジン本体は「~/leelaz-for-lizzie/src/leelaz」に、ダウンロードした学習データは「~/leelaz-for-lizzie/best-network」に格納されています。
ここまでの準備が完了したら、「Lizzie」のインストールにすすみます。

2. 「Lizzie」のインストール
https://github.com/featurecat/lizzie/releases」から「lizzie-mac-linux.zipをダウンロードして、ホームディレクトリに展開します。
そうして生成する「~/lizzie」ディレクトリに、あらかじめ準備しておいた思考エンジンと学習データをコピーします。

$ cd
$ wget https://github.com/featurecat/lizzie/releases/download/0.4/lizzie-mac-linux.zip
$ unzip lizzie-mac-linux.zip
$ cp ~/leelaz-for-lizzie/src/leelaz ~/lizzie
$ cp ~/leelaz-for-lizzie/best-network ~/lizzie/network


3. 「Lizzie」の使いかた
「Lizzie」を起動するためには、ターミナルから「$ cd ~/lizzie」 -> 「$ java -jar Lizzie.jar」コマンドを実行します。
はじめて起動するときにじゃっかん時間がかかりますが、「Lizzie」の碁盤画面があらわれたら、すべての作業がうまく完了したということです。
デフォルトであらわれるのは、白黒両方を手動入力するかたちで、「Leela Zero」エンジンの思考内容を表示させていく画面です。
「x」キーを押すことで、入力できるコマンドの一覧表が表示されます。
「Leela Zero」との対局を開始するためには「n」キー、「Leela Zero」に分析させるsgfファイルを読みこむためには「o」キーを押下します。
「Leela Zero」との対局では、手番と置石は設定できますがコミは七目半固定で、日本ルールでの対局はできなそうなのが残念なところです。
棋譜分析では、考えられる候補手が勝率および思考深さとともに表示され、候補手のどれかにカーソルを重ねるとそのあとの読み筋が表示される仕組みになっています。

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

#!/bin/bash
cd ~/lizzie
java -jar Lizzie.jar


上記の内容を記述したファイルを「lizzie.sh」とでも名づけて保存し、「chmod +x lizzie.sh」で実行権限を付与しておきます。
たとえばこのファイルをデスクトップにおいておけば、デスクトップへ移動して「./lizzie.sh」コマンドを実行すれば、「Lizzie」が起動するようになります。
posted by hatakazu at 21:24| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

「Leela Zero」のインストールと使いかた

※※※以下2018年8月7日追記※※※
コンピュータ囲碁プログラム「Leela Zero」のインストールと使いかた、および「Leela Zero」を便利に使える専用囲碁GUI「Lizzie」と連携させる方法について、LinuxむけとWindowsむけにべつべつの記事を書きました。

Linuxむけ記事
コンピュータ囲碁プログラム「Leela Zero」のインストールと使いかた - Ubuntu編
「Leela Zero」専用囲碁GUI「Lizzie」のインストールと使いかた - Ubuntu編

Windowsむけ記事
コンピュータ囲碁プログラム「Leela Zero」のインストールと使いかた - Windows編
「Leela Zero」専用囲碁GUI「Lizzie」のインストールと使いかた - Windows編

あわせてご参照ください。
※※※以上2018年8月7日追記※※※


「Leela」開発者がGoogleによって公開された「AlphaGo Zero」論文に触発されて、人間を教師とした導入なしで自己対戦のみで学習していくコンセプトの実験として、囲碁AI「Leela Zero」を開発し育てています。
そうはいってもGoogleのようにお金を使って強力なマシン上で自己対戦を重ねることはできないので、ユーザがリソースを提供し、自分のコンピュータ上で「Leela Zero」を対戦させてそのデータをサーバへ送る(すべての処理はスクリプトで自動化されているので、基本的にはバックグラウンドで走らせておくだけ)というかたちで「Leela Zero」の成長に寄与できる、というユーザ参加型のプロジェクトが立ち上がっています。
このプロジェクトは2017年11月に開始され、ほぼ半年たった2018年5月現在までに700万回をこえる自己対戦を積みかさねた「Leela Zero」はかなり成長し、人間を教師とした初期学習ありの既存「Leela」(現在のバージョンは「0.11.0」)より強くなっているという話もあります。
hatakazuは古いラップトップを使っているので、GPU環境を前提としているこのプロジェクトに参加するのはむずかしいのですが、そうやって成長してきた「Leela Zero」の囲碁の内容には興味があります。
打ちまわしにどのような特徴があるのか、現時点でどのていどの強さで、今後どのくらいの期間でどこまで強くなるのか。

「Leela Zero」プロジェクトのサイト
GitHubレポジトリ

1. Ubuntu 18.04 LTSへのインストール
上記GitHubレポジトリに、以下のとおり、公式インストール手順が記載されています。

--
# Test for OpenCL support & compatibility
sudo apt install clinfo && clinfo

# Clone github repo
git clone https://github.com/gcp/leela-zero
cd leela-zero/src
sudo apt install libboost-dev libboost-program-options-dev libopenblas-dev opencl-headers ocl-icd-libopencl1 ocl-icd-opencl-dev zlib1g-dev
make
cd ..
wget http://zero.sjeng.org/best-network
src/leelaz --weights best-network
--

しかし、hatakazuの場合はGPUをもたない古いラップトップで動かすため、OpenCLをもちいないかたちでコンパイルします。

$ sudo apt install clinfo && clinfo
$ git clone https://github.com/gcp/leela-zero
$ cd leela-zero/src
$ sudo apt install libboost-dev libboost-program-options-dev libopenblas-dev opencl-headers ocl-icd-libopencl1 ocl-icd-opencl-dev zlib1g-dev


* ここでテキストエディタで「config.h」を開き、現行バージョンでは74行めにあたる「#define USE_OPENCL」行を削除します。
「https://github.com/gcp/leela-zero#requirements」の「If you do not have a GPU, modify config.h in the source and remove the line that says "#define USE_OPENCL".」という記述にしたがった処置です。

$ make
$ cd ..
$ wget http://zero.sjeng.org/best-network


上記手順どおりにインストールを実行した場合、「Leela Zero」エンジン本体は「~/leela-zero/src/leelaz」に、ダウンロードした学習データは「~/leela-zero/best-network」に格納されています。

2. GTP対応囲碁GUIの設定
Sabaki」などのGTPを解釈する囲碁GUIから利用する場合は、思考エンジンを「/home/username/leela-zero/src/leelaz」のようにフルバスで、オプションとして学習データを「--weights /home/username/leela-zero/best-network」のようにフルパスで指定してやる必要があります。
オプションとしてはGTP出力のための「--gtp」が必須となっており、プレイアウト数を指定する「-p xxxx」(大きいほど強い、指定しない場合は無制限)や、ponderの有無なども必要におうじて設定できます。
オプションは一行で記述するので、全体は「--gtp --weights /home/username/leela-zero/best-network -p 1600 --noponder」のようになります。
CPU版だと動作がおそくて思考にかなり時間がかかるので、「time_settings 0 20 1;」(持ち時間なし、一手20秒以内で着手)のような時間指定を使って、強さと考慮時間のバランスをさぐる必要があるかもしれません。
対局や分析にさいして、「Leela Zero」の機能をどれだけ利用できるかは、GUIのほうの実装によります。
posted by hatakazu at 20:10| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年05月08日

「Leela」のインストールと使いかた

ベルギーの開発者が無料で公開している囲碁ソフトウェア「Leela」は、現在のところバージョン「0.11.0」が最新版で、19路盤での強さは(使用するハードウェアの性能に大きく依存しますが)九段をこえるところまできているとのことです。

「Leela」サイト: SJENG.ORG - chess, go, audio and misc. software

1. Ubuntu 18.04 LTSへのインストール
上記サイトからUbuntu用インストールパッケージ「Leela 0.11.0 for Ubuntu (deb package)」をダウンロードし、「$ sudo apt-get install leela_0.11.0_amd64.deb」コマンドでインストールします。
インストールが完了したらアプリケーションメニューに「Leela」と「Leela OpenCL」が登録されていますが、「Leela OpenCL」はGPUを利用して高速動作するものなので、GPU非搭載の古いラップトップを使っているhatakazuは「Leela」のほうを起動します。
グラフィックインタフェースつきのパッケージで、プログラムの実体は「/usr/games」ディレクトリに格納されています。

2. 対局方法
「File」→「New Game」をクリックし、開いた画面で「盤サイズ」「手番」「置石」「コミ」などの条件を指定して、「OK」を押下すると対局がはじまります。
「Engine max level」は思考エンジンのシミュレーション数をあらわしていて、値が大きいほど強くなりますが、通常は「Unlimited」を指定すればO.K.です。
ふつうに条件を指定して対局するほかにも、勝敗におうじて段級位が変動し、それにともなって自動的に対局条件が設定されるレーティング対局もできます。
「File」→「Set Rated Board Size」でレーティングに挑戦する碁盤のサイズを指定して、「File」→「New Rated Game」でレーティング対局がはじまります。
勝ったら置石が減り、負けたら置石が増えるかたちで、次局の対局条件が実力にあうように調整されていきます。

3. 棋譜分析
対局以外の実用性の高い使いかたとしては、sgf形式などの棋譜を読みこんで、それをLeelaに分析させることができます。
「Analyze」→「Analysis Window」を表示させてから、「Analyze」→「Start/Stop Analysis」をクリックすると、「Analysis Window」に候補手とそれぞれの候補手を選択した場合の勝率が表示されます。
「Move」列に表示されている候補手をクリックすると、そのときに読んでいる変化図が碁盤に表示されます。
「Effort%」が高ければ十手以上先まで読み筋が出ますし、クリックするたびに図が変化して、かなり広く深く読んでいることがわかります。
「Tools」→「Show Best Moves」をオンにすると、色分けによる優先順位表示とともに、候補手を盤上に表示させることもできます。
「Analyze」→「Show Histogram」をオンにすると、手数の進行にともなう勝率の変遷が可視化され、どこでわるい手を打ったかひと目で把握できます。
「Leela」の棋力そのものが高いため、こうした分析内容の信頼性も高く、対局のみならず囲碁を勉強するツールとしても非常に貴重な存在であるといえます。

4. GTP版の使いかた
Leela 0.11.0 engine only (commandline/GTP engine for Windows/Linux/macOS)」をダウンロードして、それにふくまれる「leela_0110_linux_x64」をGTPエンジンとして指定し、「Sabaki」などのGTPを解釈する囲碁GUIから利用することもできます。
その場合は「-g -p 1600 --noponder」(p値が大きいほど強くなるが、着手にかかる時間は長くなる)などといったオプションや、「time_settings 0 20 1;」(持ち時間なし、一手20秒以内で着手)のような時間指定を使って、強さと考慮時間のバランスをさぐる必要があります。
お気にいりの囲碁GUIがあって、それに特有の機能や操作を使いたい場合は、上記の方法で「GTP版Leela」を利用するのが便利です。

5. 個人的な目標設定
GPUをもたない古いラップトップで動かしているため、「Leela」の強さを完全に引き出すことはできませんが、それでもhatakazuにとってはじゅうぶん強い対戦相手です。
hatakazuは囲碁を勉強するとき(囲碁にかぎらず何事もそうですが)頭でっかちになる傾向があるので、時間の心配をする必要などなく対局できる「Leela」相手にどんどん打ってみて、そのなかでどうしたらいいかわからなかったり打ちかたを忘れてしまっていたりする場面が出てくるので、それを書籍にもどって見なおしておくという勉強法も効率的かなと思っています。
いまのところ、勝ったり負けたりして二子〜四子をいったりきたりしていますが、長期的には互先で勝負できるようになることを目標に勉強していくつもりです。
posted by hatakazu at 23:18| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする