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/start.bat」が、囲碁GUIに登録するべきGTP思考エンジンのパスになります。

5-1. GTP対応囲碁GUI「GoGui」への思考エンジン登録
メニューバーの「プログラム」から「新規プログラム」を選び、あらわれた画面の「コマンド:」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「PhoenixGo」ディレクトリを「~/PhoenixGo」に設置した場合、「コマンド:」欄に入力する絶対パスは「/home/username/PhoenixGo/start.bat」のようになります。
「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/start.bat」を指定します。
登録した「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) | 囲碁ソフトのこと | 更新情報をチェックする

2018年07月14日

「Leela Zero」専用囲碁GUI「Lizzie」のインストールと使いかた - Ubuntu編

せっかく「Leela Zero」をインストールしても対局しかできないのは残念なことで、できることならこのどんどん強くなっていくコンピュータ囲碁プログラムが考えていることを学んで、棋力の向上に役だてたいものです。
そうした目的にぴったりな「Leela Zero」専用囲碁GUIとして、「Lizzie - Leela Zero Interface」が公開されています。

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

「Lizzie」を使うことで、「Leela Zero」と対局するだけではなく、「Leela Zero」の思考エンジンを利用して棋譜を分析することもできるようになります。
棋譜分析では勝率の推移はもちろん、候補手とそれぞれの勝率、そのあとの読み筋などを表示させることが可能で、hatakazuのように囲碁の勉強に「Leela Zero」を使ってみたいひとにとってはたいへん役にたつツールになっています。

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

「Lizzie」をインストールするさいの動作要件ですが、ハードウェア的には特別な要請はなく、Ubuntuが動いているコンピュータならたいてい問題なく動かせるはずです。
ただし、「Lizzie」はようするに「Leela Zero」を思考エンジンとしてもちいる囲碁GUIなので、「Leela Zero」を動かすさいの条件を考慮する必要があります。
NVIDIA製もしくはAMD製の外部GPUを搭載したコンピュータであれば、GPUバージョンの「Leela Zero」を動かすことができますが、それ以外の場合はCPUバージョンを使うことになります。
ソフトウェア的には、「Lizzie」は「Javaランタイム」をあてにしているので、「Javaランタイム」をあらかじめインストールしておく必要があります。

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

Java SE Downloads」ページから「Java SE 8u171/ 8u172」 -> 「JDK」のボタンを押して、「Java SE Development Kit 8 Downloads」へすすみ、Linux版圧縮ファイル「jdk-8u171-linux-x64.tar.gz」をクリックしてインストールファイル「jdk-8u171-linux-x64.tar.gz」をダウンロードします。
ダウンロードしたディレクトリへ移動して、このファイルを解凍すると「jdk1.8.0_171」ディレクトリができるので、それを「/usr/lib/jdk1.8.0_171」に設置します。

$ tar xzvf jdk-8u171-linux-x64.tar.gz
$ sudo mv jdk1.8.0_171 /usr/lib


そのあと、エディタで「~/.bashrc」に以下二行を追記して、パスをとおしておきます。

export JAVA_HOME=/usr/lib/jdk1.8.0_171/
export PATH=$PATH:$JAVA_HOME/bin


「$ java -version」コマンドを実行して、バージョン情報が正しく表示されれば、パスの設定はO.K.です。

$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)


もうひとつ、「Lizzie」ではソースからビルドするにさいして、「Maven」を使用することが推奨されています。
「Maven」もまた「Java」ランタイムがインストールされていることを動作要件とするため、上記「Java」ランタイムインストールを実行してから、「Maven」インストールへすすんでください。

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

Download Apache Maven」ページで「apache-maven-3.5.4-bin.tar.gz」をクリックし、インストールファイル「apache-maven-3.5.4-bin.tar.gz」を取得します。

ファイルをダウンロードしたディレクトリへ移動して、「apache-maven-3.5.4-bin.tar.gz」を解凍し、生成した「apache-maven.3.5.4」ディレクトリを「~/apache-maven.3.5.4」へ移動します。
最後に、パスのとおったディレクトリ(たとえば「~/bin」など)に、「~/apache-maven-3.5.4/bin/mvn」からシンボリックリンクを貼ります。
$ tar zxvf apache-maven-3.5.4-bin.tar.gz
$ mv apache-maven-3.5.4 ~/
$ ln -s ~/apache-maven-3.5.4/bin/mvn ~/bin


ターミナルを再起動(もしくはあらたなターミナルを起動)して、「mvn -v」コマンドを実行し、正しくインストールされていることを確認します。


2. 「Lizzie」インストールの準備とソースの取得
「Lizzie」の現行バージョンは「v0.5」で、「Leela Zero」のあたらしい機能であるリアルタイム分析に対応しており、「Leela Zero」公式ソースからビルドした「leelaz」をそのまま使うことができるようになっています。
(以前は、「Leela Zero」に思考内容を常に出力する機能をもたせるために、ソースに変更をくわえてから「leelaz」をビルドする必要がありました。)
以下の手順にしたがって、「Leela Zero」GitHubレポジトリ「next」ブランチから「~/leelaz-lizzie」以下にソースを取得し、「Lizzie」と連携できる「Leela Zero」をビルドします。

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

CPUバージョンをビルドする場合は、ここでテキストエディタで「config.h」を開き、現行バージョンでは74行めにあたる「#define USE_OPENCL」行を削除します。


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


つづいて、ホームディレクトリへもどったうえで、「Lizzie」のソースを取得します。

$ cd
$ git clone https://github.com/featurecat/lizzie
$ cd lizzie


これで、「Lizzie」をビルドするのに必要なソースが「~/lizzie」ディレクトリにコピーされ、そこへ移動してビルド作業をすすめる準備がととのいました。

3. 「Lizzie」のインストール
「Lizzie」をビルドするには、Javaベースのプロジェクトを管理するためのツール、「Maven」を使います。
ビルド処理が終わったら、さきほど「~/leelaz-lizzie」ディレクトリ以下に用意した「leelaz」と「best-network」を、「~/lizzie」にコピーします。

$ mvn package
$ cp ~/leelaz-lizzie/src/leelaz ./
$ cp ~/leelaz-lizzie/best-network ./network.gz


以上で、「Lizzie」のインストール作業は完了です。

4. 「Lizzie」の設定
まずは、「~/lizzie」ディレクトリから以下のコマンドを実行して、「Lizzie」が正常に起動することを確認します。

$ java -jar "target/lizzie-0.5-shaded.jar"


はじめて「Lizzie」を起動する場合は、連携する「Leela Zero」が「OpenCL」チューニングを設定する必要があるため、じゃっかん時間がかかります。
左下に「Leela Zero is loading...」というメッセージが表示された状態で、しばらく待たされますが、このメッセージが消えたら「Lizzie」は問題なく起動しています。
「Lizzie」の正常起動を確認したら「Lizzie」をいったん終了し、「lizzie」フォルダのなかに生成している設定ファイル「config.txt」を開きます。
以下に、編集する可能性のある項目だけ抜き出して、各項目の意味と設定方法を記述します。

{ # 全体設定開始。
"leelaz": { # エンジン設定開始。
"automatically-download-latest-network": false, # 「true」にすると、起動するたびに最新の学習ずみネットワークを確認にいく。
"max-analyze-time-minutes": 5, # 思考モードを継続する最大分数。
"analyze-update-interval-centisec": 10, # エンジンから分析情報を送る間隔を1/100秒単位で指定。
"network-file": "network.gz", # 利用する学習ずみネットワークファイルを指定。
"max-game-thinking-time-seconds": 10, # 対局時に考える一手あたりの最大秒数。
"engine-start-location": ".", # パスの起点を指定する。
"engine-command": "./leelaz --gtp --lagbuffer 0 --weights %network-file --threads 4", # エンジンのパスと、起動時にわたすパラメータ。
"print-comms": false # 「true」にすると、エンジンとやりとりするGTPコマンドを出力する。
}, # エンジン設定終了
"ui": { # GUI設定開始
"shadows-enabled": true,
"board-color": [
217,
152,
77
],
"shadow-size": 100,
"show-winrate": true, # 勝率を表示する。
"fancy-board": true,
"show-variation-graph": true, # 「true」にすると、画面右に分岐ツリーを表示する。
"win-rate-always-black": false, # 「true」にすると、つねに黒番からみた勝率を表示する。
"confirm-exit": false, # 「true」にすると、「lizzie」を終了するときにデータ保存の確認をする。
"handicap-instead-of-winrate": false, # 「true」にすると、実力差を勝率ではなく、置石の数で表示する。
"large-subboard": false, # 画面左下の第二碁盤を大きなサイズで表示する。
"show-move-number": false, # 「true」にすると、石の上に手順を表示する。
"show-next-moves": true, # 次の手を表示する。
"show-leelaz-variation": true, # 変化図を表示する。
"show-subboard": true, # 画面左下に第二碁盤を表示する。
"theme": "DefaultTheme",
"fancy-stones": true,
"show-best-moves": true, # 最善手をハイライト表示する。
"board-size": 19
} # GUI設定終了
} # 全体設定終了


上記は「http://zero.sjeng.org/best-network」から最新の学習ずみネットワークを取得し、それを「~/lizzie」フォルダに置いて、「network.gz」という名前に変更したものを利用する設定です。

*****そのほかの学習ずみネットワークの利用方法*****
「Leela Zero」が各局面でどう打つかは過去に学習してきたことに依存するので、ことなる学習ずみネットワークを読みこませることで、ことなるふるまいをすることが期待できます。

人間の棋譜から学んで人間にちかい打ちかたをするもの
上のリンクから「best_v1.txt.zip」ファイルを取得し、展開してえられる「weights.txt」ファイルを「~/lizzie」フォルダに移動して、「human-network」などのわかりやすい名前に変更しておきます。
この学習ずみネットワークを利用したい場合、「Lizzie」フォルダにある設定ファイル「config.txt」の該当部分を、「"network-file": "human-network",」に変更します。

Facebook「ELF OpenGo」の学習ずみネットワークを「Leela Zero」で利用できるように変換したもの
上のリンクからgzファイルを取得し、「~/lizzie」フォルダに移動して、「ELF-network」などのわかりやすい名前に変更しておきます。
Facebook「ELF OpenGo」のGitHubレポジトリから学習ずみネットワーク「pretrained-go-19x19-v0.bin」をダウンロードして、公開されているpythonスクリプトで変換することもできます。

この学習ずみネットワークを利用したい場合、「Lizzie」フォルダにある設定ファイル「config.txt」の該当部分を、「"network-file": "ELF-network",」に変更します。


以上の設定が終わったら、「Lizzie」の起動をかんたんにするために、スクリプトを作成して「~/lizzie/lizzie.sh」に保存します。

#!/bin/bash
cd ~/lizzie
java -jar "target/lizzie-0.5-shaded.jar"


「$ ln -s ~/lizzie/lizzie.sh ~/bin/lizzie」コマンドで、パスのとおったディレクトリ「~/bin」にシンボリックリンクをはっておけば、「$ lizzie」コマンドでかんたんに「Lizzie」を起動できるようになります。

5. 「Lizzie」の使いかた
デフォルトであらわれるのは、白黒両方を手動入力するかたちで、「Leela Zero」エンジンの思考内容を表示させていく画面です。
「x」キーを押すことで、入力できるコマンドの一覧表が表示されます。
「Leela Zero」との対局を開始するためには、「n」キーを押下します。
対局条件としては手番と置石は設定できますが、コミは七目半固定で、日本ルールでの対局はできなそうなのが残念なところです。
「Leela Zero」に棋譜分析させるためには、「o」キーを押して、分析したいSGFファイルを読みこみます。
「s」キーで保存、「i」キーで棋譜情報編集、「m」キーで手順番号表示、「.」キーで地を数えて形成判断します。
上下矢印キーで手順操作、左右矢印キーで分岐ツリーを移動、「home」キーで棋譜の最初へ、「end」キーで棋譜の最後へ飛びます。
棋譜分析では、考えられる候補手が勝率および思考深さとともに表示され、候補手のどれかにカーソルを重ねるとそのあとの読み筋が表示される仕組みになっています。
「space」キーで「Leela Zero」の思考開始/停止をコントロールできるほか、「enter」キーで「Leela Zero」に次の手を打たせてみることもできます。
posted by hatakazu at 22:59| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年07月13日

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

コンピュータ囲碁プログラム「Leela」を開発したベルギーの開発者が、Google DeepMindの「AlphaGo Zero」論文に触発されて、自己対戦による深層学習の手法にもとづくあらたなコンピュータ囲碁プログラム「Leela Zero」を開発し、ユーザがリソースを提供して自己対戦データを収集することで「Leela Zero」を育てていく、というユーザ参加型のプロジェクトが立ち上がっています。
このプロジェクトは2017年11月に開始されましたが、およそ九ケ月たった2018年7月現在までに800万回をこえる自己対戦を積みかさねた結果として、「Leela Zero」はすでに世界最強のコンピュータ囲碁プログラムのひとつといえるまでに成長しているそうです。

「Leela Zero」プロジェクトのサイト
「Leela Zero」GitHubレポジトリ
・ソースからビルド。
・GPUバージョンおよびCPUバージョン。

ほかのオープンソース化されたコンピュータ囲碁プラグラムは、あらかじめ自己対戦を積みかさねてできあがった学習ずみネットワークが公開されますが、プロジェクトとしてはその時点で完結しているため、さらに学習をつづけて学習ずみネットワークが更新されることはありません。
しかしながら「Leela Zero」の場合は、ユーザの協力によって自己対戦データを増やしていってみんなで「Leela Zero」を育てていくプロジェクトなので、はっきりと強くなったことが確認された時点で学習ずみネットワークが更新されます。
「AlphaGo Zero」論文の検証を目的として立ちあげられたプロジェクトですが、人間の棋譜から学ぶことなく独力で学習をつづける「Leela Zero」はどのような碁を打つようになるのか、そしてどこまで強くなるのか、見守っていきたいと思っています。

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

「Leela Zero」をインストールするにあたっては、NVIDIA製もしくはAMD製の外部GPUを搭載したコンピュータであればGPUバージョンを動かすことができますが、それ以外の場合はCPUバージョンを使うことになります。
なお、「Leela Zero」を使って対局や棋譜分析をおこないたい場合は、GTPを解釈できる囲碁GUIと連携させる必要があります。
「Leela Zero」専用に開発された「Lizzie」という囲碁GUIを使うのが便利ですが、一般的によく知られた「GoGui」や「Sabaki」などの囲碁GUIにも、問題なく登録できます。

2. 「Leela Zero」インストールの準備とソースの取得
「Leela Zero」の現行バージョンは「v0.15」で、「Leela Zero」GitHubレポジトリでソースが公開されています。
「Leela Zero」をビルドするためには、必要なライブラリなどをあらかじめインストールのうえ、「Leela Zero」のソースを取得します。
「Leela Zero」をホームディレクトリ直下の「~/leela-zero」以下へインストールするものとして、以下のとおり準備作業をおこないます。

$ cd # ホームディレクトリ「~/」から作業開始。
$ sudo apt install clinfo && clinfo # OpenCL対応デバイスの確認。
$ sudo apt install libboost-dev libboost-program-options-dev libopenblas-dev opencl-headers ocl-icd-libopencl1 ocl-icd-opencl-dev zlib1g-dev # ビルドに必要なライブラリのインストール。
$ git clone https://github.com/gcp/leela-zero # ソースの取得。
$ cd leela-zero/src # 「~/leela-zero/src」ディレクトリへ移動。


3. 「Leela Zero」のインストール

CPUバージョンをビルドする場合は、「Requirements」項の「If you do not have a GPU, modify config.h in the source and remove the line that says "#define USE_OPENCL".」という記述にしたがって、ソースに変更をくわえます。
テキストエディタで「config.h」を開き、現行バージョンでは74行めにあたる「#define USE_OPENCL」行を削除します。
GPUバージョンの場合は、なにもする必要はないので、そのまま以下のビルド作業へすすみます。

$ make # 「~/leela-zero/src」ディレクトリでビルド、「~/leela-zero/src/leelaz」生成。
$ cd .. # 「~/leela-zero」ディレクトリへもどる。
$ wget http://zero.sjeng.org/best-network # 学習ずみネットワーク「~/leela-zero/best-network」設置。


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

4. 「Leela Zero」の設定
「Leela Zero」はパラメータをあらかじめ指定した設定ファイルをもたず、起動コマンドにパラメータをわたすかたちで動作を制御します。
そのため設定ファイルの準備は必要ありませんが、ユーザが自己対戦データを提供してみんなで「Leela Zero」を育てていくというコンセプトにもとづいて、強くなったらそのぶんの学習ずみネットワークが公開されるので、「Leela Zero」が最新の学習ずみネットワークを使えるように準備しないといけません。
どの学習ずみネットワークを読みこませるかは、やはり起動時にパラメータ指定することになりますが、そのファイルをあらかじめ取得しておく必要があるということです。
基本的には、「~/leela-zero」ディレクトリへ移動して「wget http://zero.sjeng.org/best-network」コマンドを実行すれば、「http://zero.sjeng.org/best-network」で公開されている最新の学習ずみネットワークが「~/leela-zero/best-network」に設置されます。
それにより、起動時に「--weights /home/username/leela-zero/best-network」パラメータを指定することで、「Leela Zero」が最新の学習ずみネットワークを利用できるようになります。

*****そのほかの学習ずみネットワークの利用方法*****
「Leela Zero」が各局面でどう打つかは過去に学習してきたことに依存するので、ことなる学習ずみネットワークを読みこませることで、ことなるふるまいをすることが期待できます。

人間の棋譜から学んで人間にちかい打ちかたをするもの
上のリンクから「best_v1.txt.zip」ファイルを取得し、それをそのまま「~/leela-zero」ディレクトリに移動して、「human-network」などのわかりやすい名前に変更しておきます。
この学習ずみネットワークを利用したい場合、「Leela Zero」起動時に指定するパラメータは、「--weights /home/username/leela-zero/human-network」になります。

Facebook「ELF OpenGo」の学習ずみネットワークを「Leela Zero」で利用できるように変換したもの
上のリンクからgzファイルを取得し、それをそのまま「~/leela-zero」ディレクトリに移動して、「ELF-network」などのわかりやすい名前に変更しておきます。
Facebook「ELF OpenGo」のGitHubレポジトリから学習ずみネットワーク「pretrained-go-19x19-v0.bin」をダウンロードして、公開されているpythonスクリプトで変換することもできます。「$ elf_convert.py pretrained-go-19x19-v0.bin」コマンドを実行、生成したファイルの名前を「ELF-network」に変更のうえ、「~/leela-zero」ディレクトリへ移動。

この学習ずみネットワークを利用したい場合、「Leela Zero」起動時に指定するパラメータは、「--weights /home/username/leela-zero/ELF-network」になります。


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

5-1. GTP対応囲碁GUI「GoGui」への思考エンジン登録
メニューバーの「プログラム」から「新規プログラム」を選び、あらわれた画面の「コマンド:」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば上記の手順どおり、ホームディレクトリ直下の「~/leela-zero」以下に「Leela Zero」をインストールしたとすれば、「コマンド:」欄に入力する絶対パスは「/home/username/leela-zero/src/leelaz」のようになります。
思考エンジン起動時にわたすパラメータはたとえば「--gtp --threads 2 --playouts 1600 --noponder --weights /home/username/leela-zero/best-network」のようなかたちで指定しますが、「--gtp」がGTP対応囲碁GUIから制御するための必須オプション、「--threads」は使用するスレッド数指定、「--playouts」はプレイアウト数指定で大きいほど強くなる(「--playouts」オプション無指定でプレイアウト数無制限)、「--noponder」は相手の手番でも思考する「ponder」機能を使わない(プレイアウト数を指定するときは必須)、「--weights」は利用する学習ずみネットワークファイルを絶対パスで指定、といった意味をもちます。
上記パスとパラメータは、一行にまとめて「コマンド:」欄に記述するので、全体として入力するべきコマンドは「/home/username/leela-zero/src/leelaz --gtp --threads 2 --playouts 1600 --noponder --weights /home/username/leela-zero/best-network」のようになります。
「OK」ボタンを押下して何度か「待機」をクリックしながら待っていると、ステイタスバーに表示されていた「プログラムの開始中」メッセージが消えて新規プログラム登録画面が開くので、「ラベル:」欄にたとえば「Leela Zero」などと入力して「OK」ボタンを押下します。
これで登録完了となるので、次回以降はメニューバーの「プログラム」 -> 「プログラムの起動」とすすんで「Leela Zero」を選ぶと、「Leela Zero」が起動して対局や棋譜分析に利用できるようになります。
登録した囲碁思考エンジン「Leela Zero」と対局するには、「Leela Zero」を起動した状態で、メニューバーの「対局」から「碁盤サイズ」「置石」「コンピュータの手番」を指定したうえで、「新規対局」をクリックします。
検討したい局面を指定して、そこで「Leela Zero」がどう打つかをみることもできます。
「Leela Zero」を起動したあと、メニューバーから「コンピュータの手番」を「なし」にして、どんどん石を置いていって対象となる局面をつくり、黒番の局面なら「Leela Zeroに黒を打たせる」、白番の局面なら「Leela Zeroに白を打たせる」アイコンをクリックします。
そのさい「GTPシェル」を開いておけば、読み筋や評価値も表示されるので、着手の意味を考えるときに参考になります。

5-2. 「Sabaki」への思考エンジン登録
メニューバーの「Engines」から「Manage Engines」を選び、あらわれた画面で「Add」をクリックします。
「(Unnamed Engine)」と表示されている欄にカーソルをもっていって、わかりやすい表示名を、そして「Path」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば上記の手順どおりホームディレクトリ直下の「~/leela-zero」以下に「Leela Zero」をインストールした場合、「(Unnamed Engine)」欄にカーソルをもっていって「Leela Zero」と入力、「Path」欄に絶対パス「/home/username/leela-zero/src/leelaz」を指定します。
その下の「No arguments」と表示されている欄には、思考エンジンに渡してやるパラメータを入力します。
パラメータはたとえば「--gtp --threads 2 --playouts 1600 --noponder --weights /home/username/leela-zero/best-network」のようなかたちで指定しますが、「--gtp」がGTP対応囲碁GUIから制御するための必須オプション、「--threads」は使用するスレッド数指定、「--playouts」はプレイアウト数指定で大きいほど強くなる(「--playouts」オプション無指定でプレイアウト数無制限)、「--noponder」は相手の手番でも思考する「ponder」機能を使わない(プレイアウト数を指定するときは必須)、「--weights」は利用する学習ずみネットワークファイルを絶対パスで指定、といった意味をもちます。
さらにその下の「Initial command (;-separated)」と表示されている欄で、考慮時間の設定などが可能です。
たとえば「持ち時間なし、一手20秒以内で着手」という条件にしたい場合は、ここに「time_settings 0 20 1;」と入力してやればO.K.です。
基本的には、プレイアウト数と考慮時間が強さに影響する要素なので、うまく強さと対局時間のバランスがとれる条件を見つける必要があります。
登録した「Leela Zero」と対局するには、メニューバーの「File」から「New」をクリックします。
開いた画面で「Board Size」「Handicap」「Komi」を指定のうえ、黒番と白番それぞれの担当者を選択します。
自分が担当する手番は「Manual」を選択、「Leela Zero」に担当させる手番は登録されている思考エンジンの表示名から「Leela Zero」を選んで、「OK」ボタンを押下します。
「Sabaki」にほかの囲碁思考エンジンを登録しておいて、「Leela Zero」をほかの思考エンジンと対局させることもできます。
その場合は、対局させる思考エンジンの両方について「ponder」機能を無効化するように設定し、互いの思考をさまたげないかたちで対局をおこなう必要があります。


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

http://zero.sjeng.org/
https://github.com/gcp/leela-zero
https://github.com/gcp/leela-zero/releases
https://github.com/gcp/leela-zero/issues/1329
posted by hatakazu at 22:54| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年07月12日

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

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

「Leela」サイト:SJENG.ORG - chess, go, audio and misc. software
・Ubuntu用debパッケージ配布あり。
・64bit対応。
・GPUバージョンおよびCPUバージョン。
・GUIパッケージおよびGTP思考エンジンのみ配布。

Google DeapMind「AlphaGo」、とりわけそれにつづく「AlphaGo Zero」の衝撃をうけて、人間が過去に蓄積した知識による教育なしに、自己対戦のみにもとづいて深層学習を重ねていく手法をとりいれたあたらしいコンピュータ囲碁プログラムが登場してきました。

「Leela Zero」プロジェクトページ「Leela Zero」GitHubレポジトリ:ソースからビルド、GPUバージョンおよびCPUバージョン。
「AQ」GitHubレポジトリ:ソースからビルド(Linuxバイナリ配布あり)、「TensorFlow」フレームワーク、GPUバージョン(「CUDA + cuDNN」必要)およびCPUバージョン。
Facebook「ELF OpenGo」GitHubレポジトリ:ソースからビルド、「PyTorch」フレームワーク、GPUバージョン(「CUDA + cuDNN」必要)およびCPUバージョン。
Tencent「PhoenixGo」GitHubレポジトリ:ソースからビルド、「TensorFlow」フレームワーク、GPUバージョン(「CUDA + cuDNN」必要)およびCPUバージョン。

これらのあたらしいコンピュータ囲碁プログラムはきわめて短期間でものすごく強くなっているだけではなく、人間の棋譜から学んでないため人間なら打たないような着手がおおく、囲碁の可能性を広げるものとしてプロ棋士もコンピュータ囲碁プログラムから学ぶというかたちで歓迎されているようです。
hatakazuもこうしたコンピュータ囲碁プログラム、とくにFacebook「ELF OpenGo」を動かしてみたくて、NVIDIA製GPU(GeForce MX 150)搭載のラップトップを購入してしまったほどです。
このラップトップ上には、すでにWindows10とUbuntu18.04のデュアルブート環境を構築してあるので、今後すこしずつ導入していろいろ遊んでみるつもりです。
しかし、正直なところhatakazuが囲碁を勉強する場合、一番役に立つのは「Leela」だといまでも思っています。
まずは、「Leela」はプロ棋士などレベルの高い人間の棋譜から学んでおり、各局面でプロ棋士ならどう打つかをシミュレートするメカニズムになっているため、人間の強いひとのような着手がおおくて、人間が対局や棋譜分析をつうじて学ぶのに適していること。
それから、パッケージにふくまれる囲碁GUIがたいへんよくできており、操作性がよいというだけではなく、「Leela」の強さを生かして囲碁を勉強するためのすぐれたツールになっていること。
そしてもうひとつ特記すべき理由は、なんといっても置碁をふつうに打ってくれる唯一のコンピュータ囲碁プラグラムである、ということです。

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

「Leela」をインストールするにあたっては、64bitのLinux OSが必要になりますが、Ubuntu18.04では配布されているdebパッケージがそのまま使えます。
「OpenCL 1.1」以降に対応したGPUを搭載したコンピュータであれば、「GPU Accelerated」バージョンを動かすことができますが、それ以外の場合は通常のCPUバージョンを使うことになります。

2. 「Leela」インストールファイルのダウンロード
「Leela」の最新バージョンは「0.11.0」で、「Leela」ページから「Leela 0.11.0 for Ubuntu (deb package)」をクリックして、囲碁GUIがセットになったパッケージのUbuntus用インストールファイル「leela_0.11.0_amd64.deb」を取得します。

3. 「Leela」のインストール
ダウンロードした「leela_0.11.0_amd64.deb」があるディレクトリへ移動して、以下のコマンドを実行します。

$ sudo apt install ./leela_0.11.0_amd64.deb


インストールが完了したら、CPUバージョン「Leela」とGPUバージョン「Leela (GPU Accelerated)」がアプリケーションメニューに登録されています。
コンピュータの環境におうじて、使うほうのアイコンを右クリックして「ランチャーに登録」を選択すれば、ドックにアイコンが表示されてワンクリックで起動できるようになります。
GPUバージョン「Leela (GPU Accelerated)」を起動したあと、「Help」 -> 「About...」をクリックすると、「Leela」が認識しているGPUを確認することができます。

4. 「Leela」の基本的な使いかた

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

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

5. GTP思考エンジンの利用方法
「Leela」は基本的に対局や棋譜分析のためのインタフェースもふくんだGUIパッケージで配布されていますが、「Leela」の思考エンジン部分のみをGTPで利用して、ほかのGTP対応囲碁GUIから対局や棋譜分析に利用することもできます。
「Leela」の思考エンジンをほかのGTP対応囲碁GUIから使いたい場合は、「Leela 0.11.0 engine only (commandline/GTP engine for Windows/Linux/macOS)」をクリックして、Linux用をふくむ思考エンジンのみの圧縮ファイル「Leela0110GTP.zip」をダウンロードします。
ダウンロードした「Leela0110GTP.zip」の中身を「Leela0110GTP」ディレクトリのなかに解凍し、この「Leela0110GTP」ディレクトリを環境にあわせて適切な場所、たとえば「~/Leela0110GTP」などに配置します。

$ unzip Leela0110GTP.zip -d Leela0110GTP
$ move Leela0110GTP ~/


「Leela0110GTP」ディレクトリのなかにGTP思考エンジンの各種環境用バイナリがふくまれており、「OpenCL 1.1」以降に対応したGPUを搭載したコンピュータであればGPUバージョン「leela_0110_linux_x64_opencl」が、それ以外の場合はCPUバージョン「leela_0110_linux_x64」が、囲碁GUIに登録するべきGTP思考エンジンになります。

5-1. 「GoGui」への思考エンジン登録
メニューバーの「プログラム」から「新規プログラム」を選び、あらわれた画面の「コマンド:」欄に囲碁思考エンジンの絶対パスと、指定すべきパラメータを入力します。
たとえば解凍したバイナリを「~/Leela0110GTP」に置いた場合、「コマンド:」欄に入力する絶対パスは「/home/username/Leela0110GTP/leela_0110_linux_x64_opencl」のようになります。
パラメータはたとえば「--gtp --threads 2 --playouts 1600 --noponder」のようなかたちで指定しますが、「--gtp」がGTP対応囲碁GUIから制御するための必須オプション、「--threads」は使用するスレッド数指定、「--playouts 1600」はプレイアウト数指定で大きいほど強くなる(「--playouts」オプション無指定でプレイアウト数無制限)、「--noponder」は相手の手番でも思考する「ponder」機能を使わない(プレイアウト数を指定するときは必須)、といった意味をもちます。
上記パスとパラメータは、一行にまとめて「コマンド:」欄に記述するので、全体として入力するべきコマンドは「/home/username/Leela0110GTP/leela_0110_linux_x64_opencl --gtp --threads 2 --playouts 1600 --noponder」のようになります。
「OK」ボタンを押下して何度か「待機」をクリックしながら待っていると、ステイタスバーに表示されていた「プログラムの開始中」メッセージが消えて新規プログラム登録画面が開くので、「ラベル:」欄にたとえば「Leela 0.11.0 GTP」などと入力して「OK」ボタンを押下します。
これで登録完了となるので、次回以降はメニューバーの「プログラム」 -> 「プログラムの起動」とすすんで「Leela 0.11.0 GTP」を選ぶと、「Leela」が起動して対局や棋譜分析に利用できるようになります。
登録した囲碁思考エンジン「Leela」と対局するには、「Leela」を起動した状態で、メニューバーの「対局」から「碁盤サイズ」「置石」「コンピュータの手番」を指定したうえで、「新規対局」をクリックします。
検討したい局面を指定して、そこで「Leela」がどう打つかをみることもできます。
「Leela」を起動したあと、メニューバーから「コンピュータの手番」を「なし」にして、どんどん石を置いていって対象となる局面をつくり、黒番の局面なら「Leelaに黒を打たせる」、白番の局面なら「Leelaに白を打たせる」アイコンをクリックします。
そのさい「GTPシェル」を開いておけば、読み筋や評価値も表示されるので、着手の意味を考えるときに参考になります。
CPUバージョンを使う場合は、上の記述における「leela_0110_linux_x64_opencl」を「leela_0110_linux_x64」に読みかえてください。

5-2. 「Sabaki」への思考エンジン登録
メニューバーの「Engines」から「Manage Engines」を選び、あらわれた画面で「Add」をクリックします。
「(Unnamed Engine)」と表示されている欄にカーソルをもっていって、わかりやすい表示名を、そして「Path」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば解凍したバイナリを「~/Leela0110GTP」に置いた場合、「(Unnamed Engine)」欄にカーソルをもっていって「Leela 0.11.0 GTP」と入力、「Path」欄に絶対パス「/home/username/Leela0110GTP/leela_0110_linux_x64_opencl」を指定します。
その下の「No arguments」と表示されている欄には、思考エンジンに渡してやるパラメータを入力します。
パラメータはたとえば「--gtp --threads 2 --playouts 1600 --noponder」のようなかたちで指定しますが、「--gtp」がGTP対応囲碁GUIから制御するための必須オプション、「--threads」は使用するスレッド数指定、「--playouts 1600」はプレイアウト数指定で大きいほど強くなる(「--playouts」オプション無指定でプレイアウト数無制限)、「--noponder」は相手の手番でも思考する「ponder」機能を使わない(プレイアウト数を指定するときは必須)、といった意味をもちます。
さらにその下の「Initial command (;-separated)」と表示されている欄で、考慮時間の設定などが可能です。
たとえば「持ち時間なし、一手20秒以内で着手」という条件にしたい場合は、ここに「time_settings 0 20 1;」と入力してやればO.K.です。
基本的には、プレイアウト数と考慮時間が強さに影響する要素なので、うまく強さと対局時間のバランスがとれる条件を見つける必要があります。
CPUバージョンを使う場合は、上の記述における「leela_0110_linux_x64_opencl」を「leela_0110_linux_x64」に読みかえてください。


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

https://www.sjeng.org/leela.html
posted by hatakazu at 22:16| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年07月11日

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

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

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

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

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

2. 「Sabaki」インストールファイルのダウンロード
「Sabaki」の最新バージョンは「0.34.1」で、ダウンロードページから64bit版Linux用インストーラ「sabaki-v0.34.1-linux-x64.AppImage」を取得できます。

3. 「Sabaki」のインストール
ダウンロードしたファイルに実行権限を付与し、コマンドラインから実行、もしくは画面上のアイコンをダブルクリックするだけで「Sabaki」が起動します。

$ chmod +x sabaki-v0.34.1-linux-x64.AppImage
$ ./sabaki-v0.34.1-linux-x64.AppImage


開いた画面でシステムに登録するかどうか聞いてきますが、システムに登録しないまま毎回AppImageファイルをダブルクリックして起動するなら「No」を、システムに登録してアプリケーション一覧画面にあらわれるようにしたければ「Yes」を押します。
「./cache/Sabaki」ディレクトリに設定が残ります。
一番かんたんな起動方法は、パスのとおった「~/bin」にシンボリックリンクをはっておき、端末から「sabaki」コマンドで起動できるようにすることです。

$ ln -s sabaki-v0.34.1-linux-x64.AppImage ~/bin/sabaki
$ sabaki &


4. 囲碁思考エンジンの登録
「Sabaki」はあくまでも囲碁GUIなので、対局や棋譜分析をおこなうためには、GTP経由で囲碁思考エンジンとやりとりする必要があります。
囲碁思考エンジンが考え、囲碁GUIがそれを画面に表現する、私たちは囲碁GUIをとおして囲碁思考エンジンと対局しているということです。
そのため、あらかじめ「Sabaki」にGTP対応囲碁思考エンジンを登録し、それとやりとりできるように設定しておかないといけません。
メニューバーの「Engines」から「Manage Engines」を選び、あらわれた画面で「Add」をクリックします。
「(Unnamed Engine)」と表示されている欄にカーソルをもっていって、わかりやすい表示名を、そして「Path」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば囲碁思考エンジン「AQ」実行ファイルを「~/AQ」ディレクトリにインストールしている場合、「(Unnamed Engine)」欄にカーソルをもっていって「AQ」と入力、「Path」欄に絶対パス「/home/username/AQ/AQ」を指定します。
「AQ」の場合は「AQ」実行ファイルとおなじ場所に設定ファイル「aq_config.txt」が存在し、そこで各種パラメータを指定する方法ですが、使用する思考エンジンによってはその下の「No arguments」と表示されている欄にパラメータを記入してやる必要があります。
各種思考エンジンの「Sabaki」への登録方法については、それぞれのインストール方法を紹介するページに項目をもうけて、記述していきたいと思っています。

5. 「Sabaki」の基本的な使いかた
登録した囲碁思考エンジン(たとえば「AQ」)と対局するには、メニューバーの「File」から「New」をクリックします。
開いた画面で「Board Size」「Handicap」「Komi」を指定のうえ、黒番と白番それぞれの担当者を選択します。
自分が担当する手番は「Manual」を選択、コンピュータに担当させる手番は登録されている思考エンジンの表示名から選んで、「OK」ボタンを押下します。
メニューバーの「Engines」から「Toggle GTP Console」をクリックすると、「GTP Console」が開き、そこに囲碁GUI「Sabaki」と囲碁思考エンジン(たとえば「AQ」)とのやりとりが表示されます。
便利な使いかたとしては、「Sabaki」に複数の囲碁思考エンジンを登録しておいて、思考エンジンどうし対局させることができます。
その場合は、対局させる思考エンジンの両方について「ponder」機能を無効化するように設定し、互いの思考をさまたげないように設定するのがいいでしょう。
「Sabaki」メニューバーの「View」から「Toggle Menu Bar」をクリックすると、メニューバーが消えてしまいますが、「Alt」キーを押すことでメニューバーが表示されるようになります。


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

https://github.com/SabakiHQ/Sabaki
https://github.com/ymgaq/AQ
posted by hatakazu at 21:30| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする