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) | 囲碁ソフトのこと | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください