2020年05月25日

Windows 10上に囲碁勉強環境を構築する - 「PhoenixGo」編

Tencent「PhoenixGo」についてはだいぶまえのことになりますが、「コンピュータ囲碁プログラム「PhoenixGo」のインストールと使いかた - Windows編」という記事にて、当時実行したインストール方法についてくわしくまとめました。
しかし、今回の「Windows 10上に囲碁勉強環境を構築する」プロジェクトでは「GLOBIS-AQZ」を使えるようにすることが最優先課題であったため、当時使っていた「CUDA 9.0」ベースの環境から「CUDA 10.0」+「TensorRT 7.0.0」という「GLOBIS-AQZ」動作要件を満たす環境へとシフトすることになりました。
たいていの囲碁プログラムのGPUバージョンは動作要件として特定バージョンの「CUDA」ライブラリを例示していますが、それはあくまでも動作検証をおこなった環境について言及しているだけで、じっさいにはほかのバージョンの「CUDA」ライブラリとも互換性をもって動作します。
しかしながら、「PhoenixGo」だけは明示的に以下のように「CUDA 9.0」+「cuDNN 7.1」環境に特定されており、今回プロジェクトで構築した「CUDA 10.0」をベースとする環境では動作させることができません。

・CUDA 9.0 only
・cudnn 7.1.x (x is any number) or lower for CUDA 9.0
・no AVX, AVX2, AVX512 instructions supported in this release (so it is currently much slower than the linux version)
・there is no TensorRT support on Windows


じっさいにあらたな「CUDA 10.0」環境でこれまでとおなじように「PhoenixGo」を起動しようとすると、いくつかの「CUDA 9.0」ライブラリが見つからないため起動できないむね、エラーが出てそのまま終了してしまいます。
ということは逆にいえば、このエラーメッセージで要求されているライブラリファイルだけ「CUDA 9.0」からもってきて、それをパスがとおっている場所(いちばんわかりやすいのは「PhoenixGo」の実行ファイルそのものがあるフォルダ)に置いて見つかるようにしてやれば、動かせるのではないかという考えにたどりつきます。
バックアップしてあった「CUDA 9.0」環境からさっそく「cublas64_90.dll」「cudart64_90.dll」「cudnn64_7.dll」「cufft64_90.dll」「curand64_90.dll」「cusolver64_90.dll」をとりだしてきて、「PhoenixGo」の実行ファイルが置かれている「C:\Users\username\PhoenixGo\bin」フォルダに設置してから起動してみると、はたして問題なく動作することが確認できました。

そこまでやってみてから気づいたというのがなんとも間のぬけた話なのですが、じつは「PhoenixGo」GPUバージョンには二種類のバイナリ配布があり、そのうちのひとつがまさに上記したように「CUDA 9.0」ライブラリを同梱したものになっていました。
「PhoenixGo」Windowsバイナリのダウンロードページへいくと、「PhoenixGo-win-x64-gpu-v1」と「PhoenixGo-win-x64-gpu-with-cuda-v1.zip」の二種類が公開されています。
「CUDA 9.0」+「cuDNN 7.1」環境が構築されている場合は前者をダウンロードしてインストールすればいいのですが、NVIDIA製「CUDA」対応GPUを搭載したコンピュータであれば、じつはCUDA環境が構築されていなくても(あるいは今回のhatakazuのケースのように、べつのバージョンの「CUDA」環境が構築されていても)後者をダウンロードしてインストールすることで「PhoenixGo」をよりかんたんに動かすことができるのです。
コンピュータ囲碁プログラム「PhoenixGo」のインストールと使いかた - Windows編」で記述したうち、「1. 前提となる環境」でまとめてある「CUDA 9.0」+「cuDNN 7.1」をインストールする準備作業は、スキップしてしまってかまいません。
それから「2. 「PhoenixGo」インストールファイルのダウンロード」の部分では、GPUバージョンのWindows用インストールファイルとして、「PhoenixGo-win-x64-gpu-v1」ではなくて「PhoenixGo-win-x64-gpu-with-cuda-v1.zip」のほうをダウンロードしてきます。
そのあとのインストール方法、設定方法、囲碁GUIとの連携方法は「コンピュータ囲碁プログラム「PhoenixGo」のインストールと使いかた - Windows編」に書いてあるのとまったくおなじです。
コミ六目半日本ルールで学習したネットワークをもつ「GLOBIS-AQZ」や日本ルール対応を打ち出した「KataGo」に対して、「Leela Zero」や「ELF OpenGo」は(七目半でしか学習してないので)棋譜ごとのコミ設定にかかわらず七目半でしか思考できないようにみえますが、「PhoenixGo」はそもそもの話として七目半以外のコミ設定を受けつけないので、どんな条件の棋譜であってもとにかくコミを七目半に設定しないと動かないという部分は注意が必要です。


posted by hatakazu at 21:53| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

コンピュータ囲碁プログラム「KataGo」をソースからビルドする - Ubuntu編

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

2. 「KataGo」インストールの準備とソースコードの取得
「KataGo」のソースコードは「KataGo」GitHubレポジトリでソースコードが公開されており、現時点での最新バージョンは「v1.4.2」となっています。
このソースコードをLinuxでビルドするための要件は、「KataGo」GitHubレポジトリの説明によれば、以下のとおりです。

--
Requirements
・CMake with a minimum version of 3.10.2 - for example sudo apt install cmake on Debian, or download from https://cmake.org/download/ if that doesn't give you a recent-enough version.
・Some version of g++ that supports at least C++14.
・If using the OpenCL backend, a modern GPU that supports OpenCL 1.2 or greater, or else something like this for CPU. (Of course, CPU implementations may be quite slow).
・If using the CUDA backend, CUDA 10.1 and CUDNN 7.6.1 (https://developer.nvidia.com/cuda-toolkit) (https://developer.nvidia.com/cudnn) and a GPU capable of supporting them. I'm unsure how version compatibility works with CUDA, there's a good chance that later versions than these work just as well, but they have not been tested.
・zlib, libzip, boost filesystem. With Debian packages (i.e. apt or apt-get), these should be zlib1g-dev, libzip-dev, libboost-filesystem-dev.
・If you want to do self-play training and research, probably Google perftools libgoogle-perftools-dev for TCMalloc or some other better malloc implementation. For unknown reasons, the allocation pattern in self-play with large numbers of threads and parallel games causes a lot of memory fragmentation under glibc malloc that will eventually run your machine out of memory, but better mallocs handle it fine.
--

これから「KataGo」をソースコードからビルドするにあたっては、あらかじめ「「Ubuntu 18.04 LTS 日本語 Remix」に「CUDA 10.0」+「TensorRT 7.0.0」をインストールする」の記述のとおりに「CUDA 10.0」+「TensorRT 7.0.0」環境が構築されていることを前提としています。
この手順にしたがって「CUDA」をインストールした場合、最終的には「CUDA」関連ライブラリは以下のように配置されています。

・Ubuntu 18.04 LTS 日本語 Remix
・CUDA 10.0 -> /usr/local/cuda-10.0
・cuDNN 7.6.5 -> /usr/lcoal/cuda-10.0
・NCCL 2.6.5 -> /usr/local/nccl-2.6
・TensorRT 7.0.0 -> /usr/local/TensorRT-7.0.0

ここまでの準備が終わったら、ホームディレクトリ直下の「~/KataGo」ディレクトリにインストールすることにして、「KataGo」のソースコードを取得します。

$ cd
$ git clone https://github.com/lightvector/KataGo


これで、「~/KataGo」に「KataGo」のソースコードが取得され、ビルド作業をすすめる準備がととのいました。

3. 「KataGo」のインストール

「Makefile」ファイルの編集がおわったら、ビルド作業にすすみます。
$ cd KataGo/cpp
$ cmake . -DUSE_BACKEND=CUDA

(OpenCLバージョンをビルドしたいときは「$ cmake . -DUSE_BACKEND=OPENCL」に変更のこと)

$ make


ビルド処理は問題なく完了し、「~/KataGo/cpp」ディレクトリのなかに実行バイナリ「katago」が生成しています。
このあとの作業にさいしてわかりやすいように、この生成した実行バイナリ「katago」を「KataGo」ディレクトリへ移動しておきます。

$ mv katago ../


つづいてネットワークファイルを取得します。
「KataGo」の歴代ネットワークファイルは「katago-public/g170/neuralnets」に保管されているので、そこからダウンロードしてきたネットワークファイルを自由に使うことができます。
ここでは、最近「KataGo v1.4.0」と同時に公開された、117日間トレーニングずみの最新ネットワークファイルを使ってみることにします。
それぞれことなる設計の三種類のネットワークファイルがあり、コンピュータの性能によっても強さに差が出てくるので、試してみて自分の環境に合いそうなものを採用するといいでしょう(基本的にはGPU性能が上がるほど下のものが強くなるはず)。

g170-b20c256x2-s4384473088-d968438914.bin.gz - The latest and final semi-zero 20-block net (continuing extended training on games from the bigger nets). -> ファイル名の例「kata20x256.bin.gz」
g170-b30c320x2-s3530176512-d968463914.bin.gz - The latest and final semi-zero 30-block net. -> ファイル名の例「kata30x320.bin.gz」
g170-b40c256x2-s3708042240-d967973220.bin.zp - The latest and final semi-zero 40-block net. -> ファイル名の例「kata40x256.bin.gz」

こうしてダウンロードした「kata20x256.bin.gz」「kata30x320.bin.gz」「kata40x256.bin.gz」を「katago」フォルダへ移動しておきます。

4. 「KataGo」の設定
以上の作業が完了したら、「~/KataGo」ディレクトリにGTP思考エンジンの実行ファイル「katago」と設定ファイル「default_gtp.cfg」、そして三種類のネットワークファイル「kata20x256.bin.gz」「kata30x320.bin.gz」「kata40x256.bin.gz」が置かれている状態になります。
このあとは「コンピュータ囲碁プログラム「KataGo」のインストールと使いかた - Ubuntu編」のLinux用バイナリ配布ファイルを利用するときとまったくおなじように、「default_gtp.cfg」を編集して「KataGo」の設定(日本ルール対応を忘れずに)をおこない、「Lizzie」「GoGui」「Sabaki」などGTP対応囲碁GUIへの登録作業をすすめればO.K.です。

5. 問題点
じっさいに上記インストール手順を実行するにさいしては、「$ cmake . -DUSE_BACKEND=CUDA」コマンドのところでエラーが出てしまうことがあります。
これは「cmake」と「CUDA」のバージョンの関係で発生する問題で、「Ubuntu 18.04 LTS」標準の「cmake version 3.10.2」では「CUDA 10.0」以降のライブラリを使用したコンパイルはできない、らしい。

この「cmake」でエラーが出るケースは、基本的にライブラリが見つからない問題なので、該当ライブラリが見つかるように探しにいく場所を指定してやればいい。
「OpenCL」ライブラリが見つからない場合は、「/usr/share/cmake-3.10/Modules/FindOpenCL.cmake」ファイルの「OpenCL_INCLUDE_DIR」「OpenCL_LIBRARY」あたりの変数を、「CUDA」ライブラリが見つからない場合は、「/usr/share/cmake-3.10/Modules/FindCUDA.cmake」の「CUDA_cublas_device_LIBRARY」あたりの変数を確認すること。


この環境でコンパイル作業をすすめるためには「cmake version 3.12.2」以降が必要ということなので、「CMake Download」ページ へいき、ページの下のほうにある「Older Releases」から「https://cmake.org/files/」をクリックします。
v3.12/」ディレクトリを開いて、そこから「cmake-3.12.2-Linux-x86_64.sh」をダウンロードします。
現在のバージョンをアンインストールしたうえで、「sh ./cmake-3.12.2-Linux-x86_64.sh」を実行して「cmake version 3.12.2」をインストールすれば、さきほどの「$ cmake . -DUSE_BACKEND=CUDA」コマンドが問題なくとおるようになっているはずです。
posted by hatakazu at 19:29| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする
×

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