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

2018年05月07日

Facebook囲碁AI「ELF OpenGo」を動かしてみたかったが・・・

Facebookが開発した囲碁AI「ELF OpenGo」をオープンソース化したということで、世界ランキング30位にはいる韓国棋士四人と十四局打って全勝した、というこの囲碁AIを動かしてみたくなりました。
hatakazuの棋力なら「Leela」との対局でもじゅうぶん勉強になるわけで、はっきりいって無用の長物なのですが、まあ単純にやってみたいというだけの話ですね。
が、いろいろ調べてみると・・・。
「ELF OpenGo」は、Facebookが開発しているディープラーニング用Pythonライブラリ「PyTorch」にもとづいて動作するAIゲーム研究プラットフォーム「ELF」上で動かすかたちで、hatakazuがUbuntuを走らせている古い非力なラップトップではちょっとむずかしそうな感じでした。
GPUもつんでないし・・・。
なんとなくですがなんとかGPUのない環境でも動かせそうな気もしているのですが、まあやっぱり、だれかがバイナリを公開してくれるのをまつしかないのかなと思っているところです。
posted by hatakazu at 22:41| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

2018年05月04日

Facebook開発の囲碁AI「ELF OpenGo」がオープンソース化される

hatakazuは囲碁が好きで、ひとりで本を読んで勉強するほか、ときどきコンピュータでの対局も楽しんでいます。
まえは「KGS」や「東洋囲碁」に出入りしていたこともあるのですが、それはすぐにやめてしまって、いまはもっぱらコンピュータ囲碁ソフトとの対局ばかりですが。
というのも、hatakazuは外資系の会社で働いているため時差のある本社から夜に連絡がはいることもあり、対人ネット対局をゆっくり楽しむ時間の確保がむずかしかったからです。
それと、ベルギーの開発者が公開している囲碁ソフト「 Leela」のおかげで、無料で勉強できる環境がととのったのも大きかったですね。
「Leela」はGoogleの「AlphaGo」や日本製の「DeepZenGo」のように強いわけではありませんが、それでも無料で公開されている囲碁ソフトウェアとしては最強といわれ、hatakazuが石を置いて勉強するにはじゅうぶんな強さをもっています。
いまのところ(hatakazuの古めのコンピュータ環境で)二子〜三子をいったりきたりという感じですが、やはり一局打つなかでどうしたらいいかわからなかったり打ちかたを忘れてしまっていたりする場面が出てくるので、それを書籍にもどって見なおしておくという勉強法が効率的かなと思っています。
そういうわけで「Leela」にお世話になっているのですが、そしてhatakazuにとっては「Leela」の強さでじゅうぶんではあるのですが、おもしろいニュースがはいってきました。

Facebookが囲碁AI「ELF OpenGo」をオープンソース化
BSDライセンスで公開された「ELF OpenGo」
オリジナルのELFのGitHubレポジトリ
WIP版ELFのGitHubレポジトリ(ELF OpenGoバイナリや棋譜など)

世界ランキング30位にはいる韓国棋士四人と十四局打って全勝した、という話ですから、これは「AlphaGo」や「DeepZenGo」のほうの領域にいるあらたな囲碁AIの登場ということになります。
そして、それがBSDライセンスでオープンソース化されたということなのですから、hatakazuとしてはためしてみないわけにはいきません。
posted by hatakazu at 10:25| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。