2020年05月25日

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