このプロジェクトは2017年11月に開始されましたが、およそ九ケ月たった2018年7月現在までに800万回をこえる自己対戦を積みかさねた結果として、「Leela Zero」はすでに世界最強のコンピュータ囲碁プログラムのひとつといえるまでに成長しているそうです。
「Leela Zero」プロジェクトのサイト
「Leela Zero」GitHubレポジトリ
・Windowsバイナリ配布あり。
・64bitおよび32bit対応。
・GPUバージョンおよびCPUバージョン。
ほかのオープンソース化されたコンピュータ囲碁プラグラムは、あらかじめ自己対戦を積みかさねてできあがった学習ずみネットワークが公開されますが、プロジェクトとしてはその時点で完結しているため、さらに学習をつづけて学習ずみネットワークが更新されることはありません。
しかしながら「Leela Zero」の場合は、ユーザの協力によって自己対戦データを増やしていってみんなで「Leela Zero」を育てていくプロジェクトなので、はっきりと強くなったことが確認された時点で学習ずみネットワークが更新されます。
「AlphaGo Zero」論文の検証を目的として立ちあげられたプロジェクトですが、人間の棋譜から学ぶことなく独力で学習をつづける「Leela Zero」はどのような碁を打つようになるのか、そしてどこまで強くなるのか、見守っていきたいと思っています。
1. 前提となる環境
インストールするコンピュータの仕様は以下のとおり。
--
Dell Inspiron 14 7472 Core i7モデル 18Q42P
OS:Windows10 Home 64bit
CPU:インテル Core i7-8550U (4Mキャッシュ、最大4.0GHz)
GPU:NVIDIA GeForce MX150 GDDR5 2GB
メモリー:8GB DDR4 2400MHz(最大16GB)
保存装置:128GB SSD + 1TB 5400rpm HDD
--
「Leela Zero」をインストールするにあたっては、NVIDIA製もしくはAMD製の外部GPUを搭載したコンピュータであればGPUバージョンを動かすことができますが、それ以外の場合はCPUバージョンを使うことになります。
なお、「Leela Zero」を使って対局や棋譜分析をおこないたい場合は、GTPを解釈できる囲碁GUIと連携させる必要があります。
「Leela Zero」専用に開発された「Lizzie」という囲碁GUIを使うのが便利ですが、その「Lizzie」が64bit版Windowsのみ対応となっているため、「Leela Zero」についても64bit版Windows前提で記述していきます。
(じっさいには32bit版Windows用「Leela Zero」バイナリも公開されていますので、以下であつかうファイル名フォルダ名の「win64」の部分を「win32」に読みかえれば、そのまま32bit版Windows用「Leela Zero」をインストールできます。)
2. 「Leela Zero」インストールファイルのダウンロード
「Leela Zero」の現行バージョンは「v0.15」で、「Leela Zero」GitHubレポジトリの「Releases」ページから「leela-zero-0.15-win64.zip」をクリックして、GPUバージョンの64bit版Windows用インストールファイル「leela-zero-0.15-win64.zip」を取得します。
CPUバージョンを使う場合は、「leela-zero-0.15-cpuonly-win64.zip」のほうをクリックして、CPUバージョンの64bit版Windows用インストールファイル「leela-zero-0.15-cpuonly-win64.zip」を取得します。
3. 「Leela Zero」のインストール
ダウンロードした「leela-zero-0.15-win64.zip」ファイルもしくは「leela-zero-0.15-cpuonly-win64.zip」ファイルを右クリックして「すべて展開」を選ぶと、「leela-zero-0.15-win64」フォルダもしくは「leela-zero-0.15-cpuonly-win64」フォルダができるので、そのフォルダの名前を「leela-zero」に変更しておきます。
この「leela-zero」フォルダのなかにGTP思考エンジン本体である「leelaz.exe」がふくまれているので、この「leela-zero」フォルダをそのまましかるべき場所(たとえば「C:\Users\username\leela-zero」など)に設置すれば、インストール作業は終了です。
4. 「Leela Zero」の設定
「Leela Zero」はパラメータをあらかじめ指定した設定ファイルをもたず、起動コマンドにパラメータをわたすかたちで動作を制御します。
そのため設定ファイルの準備は必要ありませんが、ユーザが自己対戦データを提供してみんなで「Leela Zero」を育てていくというコンセプトにもとづいて、強くなったらそのぶんの学習ずみネットワークが公開されるので、「Leela Zero」が最新の学習ずみネットワークを使えるように準備しないといけません。
どの学習ずみネットワークを読みこませるかは、やはり起動時にパラメータ指定することになりますが、そのファイルをあらかじめ取得しておく必要があるということです。
「http://zero.sjeng.org/best-network」から最新の学習ずみネットワークを取得し、それを「C:\Users\username\leela-zero」フォルダに移動して、「best-network」という名前に変更しておきます。
それにより、起動時に「--weights C:\Users\username\leela-zero\best-network」パラメータを指定することで、「Leela Zero」が最新の学習ずみネットワークを利用できるようになります。
*****そのほかの学習ずみネットワークの利用方法*****
「Leela Zero」が各局面でどう打つかは過去に学習してきたことに依存するので、ことなる学習ずみネットワークを読みこませることで、ことなるふるまいをすることが期待できます。
・人間の棋譜から学んで人間にちかい打ちかたをするもの
上のリンクから「best_v1.txt.zip」ファイルを取得し、展開してえられる「weights.txt」ファイルを「C:\Users\username\leela-zero」フォルダに移動して、「human-network」などのわかりやすい名前に変更しておきます。
この学習ずみネットワークを利用したい場合、「Leela Zero」起動時に指定するパラメータは、「--weights C:\Users\username\leela-zero\human-network」になります。
・Facebook「ELF OpenGo」の学習ずみネットワークを「Leela Zero」で利用できるように変換したもの
上のリンクからgzファイルを取得し、「C:\Users\username\leela-zero」フォルダに移動して、「ELF-network」などのわかりやすい名前に変更しておきます。Facebook「ELF OpenGo」のGitHubレポジトリから学習ずみネットワーク「pretrained-go-19x19-v0.bin」をダウンロードして、公開されているpythonスクリプトで変換することもできます。
この学習ずみネットワークを利用したい場合、「Leela Zero」起動時に指定するパラメータは、「--weights C:\Users\username\leela-zero\ELF-network」になります。
5. GTP対応囲碁GUIとの連携方法
「Leela Zero」として公開されているのはGUIをもたない囲碁思考エンジン部分のみなので、グラフィカルに対局や棋譜分析をおこなうためにはGTPを解釈できる囲碁GUIと連携させる必要があります。
「leela-zero」フォルダをたとえば「C:\Users\username\leela-zero」(「username」はお使いのユーザ名)に設置したとして、「C:\Users\username\leela-zero\leelaz.exe」が、囲碁GUIに登録するべきGTP思考エンジンへのパスになります。
5-1. GTP対応囲碁GUI「GoGui」への思考エンジン登録
メニューバーの「プログラム」から「新規プログラム」を選び、あらわれた画面の「コマンド:」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「leela-zero」フォルダを「C:\Users\username\leela-zero」に設置した場合、「コマンド:」欄に入力する絶対パスは「C:\Users\username\leela-zero\leelaz.exe」のようになります。
パラメータはたとえば「--gtp --threads 4 --playouts 1600 --noponder --weights C:\Users\username\leela-zero\best-network」のようなかたちで指定しますが、「--gtp」がGTP対応囲碁GUIから制御するための必須オプション、「--threads」は使用するスレッド数指定、「--playouts」はプレイアウト数指定で大きいほど強くなる(「--playouts」オプション無指定でプレイアウト数無制限)、「--noponder」は相手の手番でも思考する「ponder」機能を使わない(プレイアウト数を指定するときは必須)、「--weights」は利用する学習ずみネットワークファイルを絶対パスで指定、といった意味をもちます。
上記パスとパラメータは、一行にまとめて「コマンド:」欄に記述するので、全体として入力するべきコマンドは「C:\Users\username\leela-zero\leelaz.exe --gtp --threads 4 --playouts 1600 --noponder --weights C:\Users\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」フォルダを「C:\Users\username\leela-zero」に設置した場合、「(Unnamed Engine)」欄にカーソルをもっていって「Leela Zero」と入力、「Path」欄に絶対パス「C:\Users\username\leela-zero\leelaz.exe」を指定します。
その下の「No arguments」と表示されている欄には、思考エンジンに渡してやるパラメータを入力します。
パラメータはたとえば「--gtp --threads 4 --playouts 1600 --noponder --weights C:\Users\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
