2018年07月25日

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

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

「AQ」の動作要件は、「AQ」GitHubレポジトリの記述によれば、以下のようになっています。

・OS: 64-bit Linux
・GPU: Nvidia GPU with CUDA capability of >=3.0
・CPU: CPU with SSE 4.2

64bit OSのみの対応、そしてGPUバージョンを動かすためには、Compute Capability 3.0以上のNVIDIA製GPUが必要です。
この条件を満たしていれば、公開されているソースをダウンロードして、GPU版「AQ」をビルドすることができます。
GPUをもたない環境では、CPUバージョンをビルドして使うことになります。
「AQ」はGoogle開発の機械学習フレームワーク「TensorFlow」を利用しており、おなじくGoogle開発のビルドツール「Bazel」をもちいて、「TensorFlow」ソースからビルドする仕組みになっています。
「TensorFlow」を「CUDA」と連携させることで、GPUバージョン「AQ」をビルドすることができます。
ここでは、「Bazel 0.11.1」インストールずみ、GPU対応としては「CUDA 9.0」+「cuDNN 7.0」+「NCCL 2.1」環境構築ずみとして、「Ubuntu 18.04 LTS 日本語 Remix」で「AQ」をソースからビルドする手順について記述していきます。

*****「gcc-4.8」「g++4.8」の準備*****
(必要な環境がすでに構築されている場合、もしくはCPUバージョンを使う場合は、このセクションは無視して先へすすんでください。)

Ubuntu18.04標準の「gcc-7」では、GPU版「TensorFlow」をソースからビルドすることはできず、かわりに「gcc-4.8」を使う必要があります。
そのため、「gcc-4.8」「g++-4.8」をインストールのうえ「update-alternatives」コマンドを使って「gcc-7」「g++-7」より優先順位をあげて、一時的に自動モードで「gcc-4.8」「g++-4.8」が使われるように設定します。

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 70

$ sudo apt-get install gcc-4.8 g++-4.8

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 80
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 80


なお「gcc-4.8」でビルドするさいには、エディタで「/usr/include/x86_64-linux-gnu/c++/4.8/bits/c++config.h」ファイルをひらいて、以下の二行を追加しておきます。

#define _GLIBCXX_USE_C99 1
#define _GLIBCXX_USE_C99_MATH 1


上記はGPU版「TensorFlow」をソースからインストールするさいに必要な特殊設定なので、「AQ」のビルド作業が終わったら「gcc-4.8」「g++-4.8」の優先順位をさげて、自動モードでシステム標準の「gcc-7」「g++-7」が使われるように設定をもどしておきます。

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 48
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 48


最終的に、「AQ」をソースからビルドするまえにととのえた環境は、以下のようになっています。

・Ubuntu 18.04 LTS 日本語 Remix
・CUDA 9.0 -> /usr/local/cuda-9.0
・cuDNN 7.0.5 -> /usr/lcoal/cuda-9.0
・NCCL 2.1.15 -> /usr/local/nccl-2.1
・Bazel 0.11.1
・TensorFlow 1.8.0 -> 「1.9.0」以降のバージョンをビルドするには「Bazel 0.13」以降が必要になるため、ここでは「Bazel 0.11」と互換性のある「1.8.0」を使う。
・GCC 4.8

2. 「AQ」インストールの準備とソースの取得
「AQ」の現行バージョンは「v2.1.1」で、「AQ」GitHubレポジトリでソースが公開されています。
「AQ」のCPUバージョンをビルドするなら、「TensorFlow」をソースからビルドするための「Bazel」ツールがインストールされていること、GPUバージョンをビルドするなら、それにくわえてGPU対応として「CUDA 9.0」+「cuDNN 7.0」+「NCCL 2.1」環境構築、「gcc-4.8」設定が完了していることを確認します。
今回はホームディレクトリに「tensorflow」ディレクトリを作成し、そこに「TensorFlow」および「AQ」のソースをダウンロードしてビルド作業をおこない、生成した「AQ」実行ファイルをホームディレクトリ直下の「AQ」ディレクトリにインストールすることにします。
まずは「~/tensorflow」ディレクトリに「TensorFlow 1.8.0」のソースをダウンロードし、「TensorFlow」の設定をおこないます。

$ cd
$ git clone --recursive https://github.com/tensorflow/tensorflow
$ cd ~/tensorflow
$ git checkout v1.8.0 # これよりあたらしいバージョンは「Bazel 0.11.1」ではビルドできない。
$ git submodule update --init --recursive
$ ./configure


Pythonのバージョンとライブラリのパスを指定したあと、たくさん質問がつづきますが、以下の項目だけはしっかりと確認してください。

・CPUバージョン:「jemalloc」と「XLA」を有効化する。
・GPUバージョン:「CUDA」サポートを有効化し、「CUDA 9.0 /usr/local/cuda-9.0」「cuDNN 7.0 /usr/local/cuda-9.0」「NCCL 2.1 /usr/local/nccl-2.1」のバージョンとパスを指定する。

上記の設定が終わったら、「AQ」のソースを取得し、ビルド作業をおこなう「~/tensorflow/tensorflow/AQ/src」ディレクトリへ移動します。

$ cd tensorflow
$ git clone https://github.com/ymgaq/AQ
$ cd AQ/src


以上で、「TensorFlow」ソースツリーのなかに「AQ」ソースを設置し、ビルド作業をすすめる準備がととのいました。

3. 「AQ」のインストール
CPUバージョンをビルドする場合は、「search.h」ファイルのなかにCPUモードを有効にするスイッチがふくまれているので、ソースに変更をくわえます。
テキストエディタで「search.h」を開き、現行バージョンでは18行目にあたる「//#define CPU_ONLY」行のコメント符号「//」を削除し、「#define CPU_ONLY」に変更してCPUモードを有効にします。
GPUバージョンの場合は、なにもする必要はないので、そのまま以下のビルド作業へすすみます。

・CPUバージョン:「--config=opt」「--config=monolithic」スイッチを指定してビルド。
$ bazel build -c opt --config=monolithic :AQ


・GPUバージョン:「--config=opt」「--config=monolithic」「--config=cuda」スイッチを指定してビルド。
$ bazel build -c opt --config=monolithic --config=cuda :AQ


ビルド処理が終わったら、「~/tensorflow/bazel-bin/tensorflow/AQ/src/」ディレクトリに実行ファイル「AQ」が生成しているので、それを「~/tensorflow/tensorflow/AQ」ディレクトリへコピーします。
そのほかにもいくつかファイルを動かしたら、「~/tensorflow/tensorflow/AQ」ディレクトリ内で実行ファイル「AQ」を動かす準備が完了します。
ホームディレクトリからリンクをはって、「~/AQ/AQ」コマンドで実行ファイルを呼び出せるようにします。

$ cd ~/
$ cp ~/tensorflow/bazel-bin/tensorflow/AQ/src/AQ ~/tensorflow/tensorflow/AQ/AQ
$ cp ~/tensorflow/tensorflow/AQ/prob/* ~/tensorflow/tensorflow/AQ/
$ ln -s ~/tensorflow/tensorflow/AQ ~/AQ # あるいは「mv ~/tensorflow/tensorflow/AQ ~/AQ」で移動しても可。


4. 「AQ」の設定
以上の作業が完了したら、「~/AQ」ディレクトリにGTP思考エンジンの実行ファイル「AQ」と、設定ファイル「aq_config.txt」が置かれている状態になります。
このあとは、「AQ」のGPU版Linuxバイナリを利用するときとまったくおなじように、「AQ」の設定とGTP対応囲碁GUIへの登録をすすめればO.K.です。


参考ウェブページ一覧表(順不同)

「AQ」開発者である山口祐さんのtwitter「https://twitter.com/ymg_aq」
https://www.tensorflow.org/install/install_linux
https://www.tensorflow.org/install/install_sources
https://github.com/ymgaq/AQ/issues/85
https://github.com/ymgaq/AQ/issues/68
https://github.com/ymgaq/AQ/issues/9
https://github.com/ymgaq/AQ/issues/33
https://github.com/ymgaq/AQ/issues/12
https://github.com/ymgaq/Pyaq/blob/master/README.md
https://medium.com/jim-fleming/loading-a-tensorflow-graph-with-the-c-api-4caaff88463f
http://www.python36.com/install-tensorflow141-gpu/
http://www.python36.com/how-to-install-tensorflow-gpu-with-cuda-9-2-for-python-on-ubuntu/
posted by hatakazu at 21:55| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください