2018年07月31日

七月も終わってしまった

ちょっとぼけぼけしているうちに、七月も終わってしまいました。
上半期はそれなりにうまくいったけれども、市場では下半期の一時的停滞が予測されていて、それに対してなんらかの手を打たなければならない状況です。
しかし、七月はいろいろな動きが重なってしまって、この点を考えている余裕があまりありませんでした。
ほんとは、これこそ優先順位がもっとも高い、のですが・・・。
あちこち動いて取材したりするお金はありませんが、インターネットで情報を集めたり計画をねったりする時間はすくなからず確保できるという意味では、創造力を発揮して生産性を高めていくうえでそれなりに恵まれた環境で仕事をさせてもらっていると思います。
明日から八月、夏休みもあってすこしゆっくりする時期ではありますが、リフレッシュしてまたあらたな気持ちでスタートするつもりです。
posted by hatakazu at 21:21| Comment(0) | 会社とか仕事とか | 更新情報をチェックする

2018年07月30日

「Ubuntu 18.04 LTS 日本語 Remix」に「TensorFlow」をソースからインストールする

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

ここでは、「Python 3.6」仮想環境にGPU版「TensorFlow」をソースからインストールするものとして、インストールまえに必要になる準備作業について記述します。
CPU版「TensorFlow」をインストールする場合は、GPUサポートのために必要になる「CUDA」関連の部分、および「GCC 4.8」設定の部分は無視してください。

・Google製ビルドツール「Bazel」インストール
「TensorFlow」をビルドするためには、「Bazel」というビルドツールを使います。
Install TensorFlow From Souces」ページ下のほうにある動作検証環境一覧表によると、「tensorflow_gpu-1.8.0」については、「Bazel 0.9.0」と記載されています。
ここでは、「Bazel 0.11.1」がインストールされているものとします。

・「python3-numpy」「python3-dev」「python3-pip」「python3-wheel」インストール
「TensorFlow」をソースからインストールするさい、必要になる「Python 3」パッケージをあらかじめインストールしておきます。

$ sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel


・GPUサポート
Install TensorFlow From Souces」ページ下のほうにある動作検証環境一覧表によると、「tensorflow_gpu-1.8.0」については、「CUDA 9」「cuDNN 7」と記載されています。
ここでは、「CUDA 9.0」+「cuDNN 7.0」が「/usr/local/cuda-9.0」ディレクトリへ、「NCCL 2.1」が「/usr/local/nccl-2.1」ディレクトリへ、「TensorRT 3.0.4」が「/usr/local/TensorRT-3.0.4」ディレクトリへインストールされ、そこへのパスがとおっているものとします。
「CUPTI」は「CUDA 9.0 Toolkit」にふくまれているため、あらためてインストールする必要はありませんが、パスをとおしておく必要はあります。

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-9.0/extras/CUPTI/lib64


・「GCC 4.8」準備
Install TensorFlow From Souces」ページ下のほうにある動作検証環境一覧表によると、「tensorflow_gpu-1.8.0」については、「GCC 4.8」と記載されています。
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」をソースからインストールするさいに必要な特殊設定なので、GPU版「TensorFlow」のインストール作業が終わったら「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


「GCC 5」以降のバージョンでGPU版「TensorFlow」をソースからインストールする場合は、「bazel build --config=opt --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" --config=cuda」などのように、「--cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"」を追加してビルドする必要があります。
これによって、「GCC 5」以降でパッケージをビルドするさいに、古いABIを使う「GCC 4」でビルドされたバイナリとの互換性をたもつことができます。

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

・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. 「TensorFlow」ソース取得
ここでは、「~/tensorflow」ディレクトリにソースを取得するものとして、インストール作業をすすめていきます。
「TensorFlow」の最新バージョンは「1.9.0」ですが、今回は互換性の観点から「1.8.0」を採用することにして、以下のコマンドを実行します。

$ cd
$ git clone https://github.com/tensorflow/tensorflow
$ cd tensorflow
$ git checkout v1.8.0
$ git submodule update --init --recursive


3. 「TensorFlow」環境設定
まずは、「TensorFlow」をインストールする環境にあわせて設定していきます。

$ ./configure


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

・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」「TensorRT 3.0.4 /usr/local/TensorRT-3.0.4」のバージョンとパスを指定する。

4. pipパッケージ作成
「TensorFlow」環境設定が終わったら、環境にあった「TensorFlow」をインストールするためのpipパッケージを作成していきます。
あらかじめインストールしておいた「Bazel 0.11.1」を使って、ソースからビルドしていきますが、GPUサポートの有無によって指定するオプションがかわってきます。

・CPU版
Intel MKL-DNNサポートなし
$ bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package

Intel MKL-DNNサポートあり
$ bazel build --config=mkl --config=opt //tensorflow/tools/pip_package:build_pip_package


・GPU版
$ bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package


上記「bazel build」コマンドによって、「~/tensorflow/bazel-bin/tensorflow/tools/pip_package/」ディレクトリ以下に「build_pip_package」スクリプトが生成しています。
つづいて、以下のコマンドを実行することで、「/tmp/tensorflow_pkg」以下に.whlファイルを出力することができます。
「/tmp/tensorflow_pkg」は、「~/worktable」など、すきなディレクトリに変更してかまいません。

$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg


上記コマンドを実行した結果として、「/tmp/tensorflow_pkg」ディレクトリ以下に、pipパッケージ「tensorflow-1.8.0-cp36-cp36m-linux_x86_64.whl」が生成します。

5. pipパッケージのインストール
Install TensorFlow on Ubuntu」で推奨されている手順にしたがって、Python環境管理ツール「Virtualenv」を利用して「Ptyhon 3.6」仮想環境を作成し、そのなかに「TensorFlow」をインストールしていきます。
ここでは、「~/virtualenv」ディレクトリ以下に、「Python 3.6」仮想環境「py3」を作成します。

$ sudo apt-get install python3-pip python3-dev python-virtualenv
$ sudo pip install -U pip
$ mkdir ~/virtualenv
$ cd ~/virtualenv
$ virtualenv --system-site-packages -p /usr/bin/python3.6 py3


作成した仮想環境「py3」を有効化し、「TensorFlow」ソースから生成したpipパッケージをインストールします。

$ source py3/bin/activate
(py3) $ pip update -U pip
(py3) $ pip install /tmp/tensorflow_pkg/tensorflow-1.8.0-cp36-cp36m-linux_x86_64.whl


6. 「TensorFlow」インストールの検証
ここで、「TensorFlow」が正しくインストールされているかどうか、検証しておきます。
「~/virtualenv」ディレクトリへ移動し、「TensorFlow」をインストールした「Python 3.6」仮想環境「py3」を有効化したうえで、「Python 3.6」シェルをひらきます。

$ cd ~/virtualenv
$ source py3/bin/activate
(py3) $ python


「Python 3.6」シェルで以下のようなコマンドをたたいていき、「Hello, TensorFlow!」と出力されれば、「TensorFlow」のインストールは正常に完了しています。

# Python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))


7. pipパッケージのアンインストール、および仮想環境の削除
仮想環境「py3」にインストールした「TensorFlow」pipパッケージをアンインストールするには、仮想環境「py3」が有効化された状態で、以下のコマンドを実行します。

(py3) $ pip uninstall tensorflow


この仮想環境「py3」じたいが不要になった場合は、仮想環境「py3」を無効化したうえで、「~/virtualenv」ディレクトリ以下の「py3」ディレクトリをそのまま削除してしまいます。

(py3) $ deactivate
$ rm -r ~/virtualenv/py3



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

https://www.tensorflow.org/
https://www.tensorflow.org/install/
https://www.tensorflow.org/install/install_linux
https://www.tensorflow.org/install/install_sources
https://github.com/tensorflow/tensorflow
posted by hatakazu at 22:24| Comment(0) | Linuxとか | 更新情報をチェックする

2018年07月29日

第155回コンサート

昨日7月28日(土)、第155回コンサートでした。
先生不在のなか、みんなでがんばって、なんとかコンサートを終えました。
演奏の内容としても、がんばっただけのことはあって、なかなかいい音がした部分もあったのではないかと思います。
音楽的な方向性というか、めざすべき到達点というか、ひとそれぞれに考えていることがちがうので、前日の練習からいつも先生が指導されているときとはちがう感じになっていきます。
それが新鮮でおもしろい部分もあり、しかしそれでもやはり、先生が指揮台にいてくれないとできないことがたくさんあるのには愕然とします。
なるべく早く回復されて、この場所にもどってこられることを、心よりお祈りもうしあげます。
モーツァルトのカルテットは、後悔のおおい演奏になってしまいました。
せっかくとてもいいメンバーで弾かせてもらったのに、ぼくはちょっと不自由な感じになってしまって、内声部担当として音楽を楽しむことはあまりできませんでした。
持論としては、どれだけ自由に弾けるかはどれだけ音楽的な選択肢をもっているかで決まると思っているので、その意味ではやはり選択肢をもてるだけの技術がないということです。
また精進して、次の機会があればもっといい演奏ができるよう、がんばります。
posted by hatakazu at 22:09| Comment(0) | 音楽とか | 更新情報をチェックする

2018年07月28日

今日、第155回コンサート

お世話になっている先生が急に入院されることになり、そのため今日の第155回コンサートは、先生不在でおこなわれることになりました。
合奏曲のメインとしてはベートーヴェンの弦楽四重奏曲第六番、そして今回はカルテットにも参加させていただき、とってもすてきなメンバーでモーツァルト初期の弦楽四重奏曲から第四番(C-Dur, K. 157)を演奏することになっています。
せっかくいただいた機会なので、とくにモーツァルトのカルテット、いい音を出したいですね。
いやもちろんベートーヴェンもがんばりますが、こちらは合奏で、とても強力なパートメンバーといっしょに弾くのでまあ・・・。
posted by hatakazu at 10:37| Comment(0) | 音楽とか | 更新情報をチェックする

2018年07月26日

コンピュータ囲碁プログラム「ELF OpenGo」のインストールと使いかた - Ubuntu編

五月初頭のこと、Facebookがあらたなコンピュータ囲碁プログラム「EFF OpenGo」を開発、テストを終えてオープンソース化したということで、おもしろいニュースがはいってきました。

「ELF OpenGo」GitHubレポジトリ:学習ずみネットワークや棋譜なども公開。
・Linuxバイナリ配布なし、ソースからコンパイル。
・64bit対応。
・GPUバージョンおよびCPUバージョン。

関連記事
Facebookが囲碁AI「ELF OpenGo」をオープンソース化
BSDライセンスで公開された「ELF OpenGo」
オリジナルの「ELF」GitHubレポジトリ

世界ランキング30位にはいる韓国棋士四人と十四局打って全勝した、という話ですから、これはGoogle DeepMindの「AlphaGo」や日本最強の「DeepZenGo」のほうの領域にいるあらたなコンピュータ囲碁プログラムの登場ということになります。
hatakazuの棋力なら「Leela」との対局でじゅうぶんすぎるほど勉強になっているわけで、囲碁の勉強という観点だけからみれば、はっきりいって無用の長物であることはまちがいありません。
それでもまあ、これを動かしてみたいなと思って、なんとか動作条件をみたした(非力とはいえNVIDIA製GPU「GeForce MX150」を搭載した)ラップトップを購入してしまいました。

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

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

・Ubuntu 18.04
・Python 3.6
・GCC 7.3
・CUDA 9.0
・CUDNN 7.0
・NCCL 2.1.2

64bit OSのみの対応、そしてGPUバージョンを動かすためには、「CUDA 9.0」+「cuDNN 7.0」+「NCCL 2.1」環境が必要です。
この条件を満たしていればGPUバージョンの「ELF OpenGo」を、GPUをもたない環境ではCPUバージョンの「ELF OpenGo」を、使うことになります。
「ELF OpenGo」はFacebook開発の機械学習フレームワーク「PyTorch」に依存しており、GPU版「PyTorch」がインストールされていればGPUバージョン「ELF OpenGo」が、CPU版「PyTorch」がインストールされていればCPUバージョン「ELF OpenGo」が使えるようになります。

・「Anaconda」インストール
「PyTorch」をインストールするにあたって、パッケージ管理ツールとして、「Anaconda」を利用することが推奨されています。
ここでは、「Python 3.6」用の最新バージョンである「Anaconda3 5.2.0」が、あらかじめインストールされているものとします。

・GPUサポート
ここでは、「CUDA 9.0」+「cuDNN 7.0」が「/usr/local/cuda-9.0」ディレクトリへ、「NCCL 2.1」が「/usr/local/nccl-2.1」ディレクトリへインストールされ、そこへのパスがとおっているものとします。

・「PyTorch Nightly Build」インストール
現時点での最新バージョンである「PyTorch 0.4.0」バイナリをインストールしても、「ELF OpenGo」を動かすために必要な機能はカバーされてないらしく、「PyTorch」をソースからインストールするか、あるいは「PyTorch Nightly Build」バイナリをインストールするかしないといけません。
ここでは、「Python 3.6」仮想環境「pytorch」を作成のうえ、その仮想環境に「PyTorch Nightly Build」をインストールすることにします。
GPUバージョン「ELF OpenGo」を動かせる環境をととのえるためには、以下のコマンドを実行します。

$ conda create --name pytorch python=3.6
$ conda activate pytorch
(pytorch) $ conda install --channel pytorch pytorch-nightly cuda90


CPUバージョンの場合は、「cuda90」パッケージをインストールする必要はないので、最後の行だけ以下のように変更します。

(pytorch) $ conda install --channel pytorch pytorch-nightly


仮想環境「pytorch」を有効化した状態で、「Python 3.6」シェルをひらいていくつかコマンドをたたき、GPU版「PyTorch」が正しくインストールされていることを確認します。

(pytorch) $ python


「Python 3.6」シェルで、たとえば以下のようなコマンドをたたいてみて適切な出力をえられれば、GPU版「PyTorch Nightly Build」のインストールは正常に完了しています。

(input)>>> import torch
(input)>>> print(torch.__version__)
(output)2018.05.07
(input)>>> torch.cuda.is_available()
(output)True
(input)>>> torch.cuda.device_count()
(output)1
(input)>>> torch.cuda.current_device()
(output)0
(input)>>> torch.cuda.device(0)
(output)torch.cuda.device object at 0x7f6816184828
(input)>>> torch.cuda.get_device_name(0)
(output)'GeForce MX150'


*****CPU版「PyTorch」をソースからインストール*****
現時点では、「PyTorch」のソースを取得して、「CUDA 9.0」と連携させてビルドすることはできていません。
しかし、CPU版であれば問題なく、現行の「PyTorch」ソースからインストールすることができます。
CPU版を使う場合、「PyTorch Nightly Build」を使うよりもソースからインストールしたほうが、「ELF OpenGo」がはるかに早く動作するようです。
以下に、「~/pytorch」ディレクトリに「PyTorch」ソースをダウンロードし、CPU版「PyTorch」をインストールする手順を記述します。

$ conda activate pytorch
(pytorch) $ export CMAKE_PREFIX_PATH="/home/username/anaconda3/"
(pytorch) $ conda install numpy pyyaml mkl mkl-include setuptools cmake cffi typing
(pytorch) $ conda install -c mingfeima mkldnn
(pytorch) $ cd
(pytorch) $ git clone --recursive https://github.com/pytorch/pytorch
(pytorch) $ cd pytorch
(pytorch) $ NO_CUDA=1 python setup.py install


インストール処理が終わったら、「Python 3.6」シェルをひらいて、「PyTorch」のバージョンを確認しておきます。

(pytorch) $ python
(input) >>> import torch
(input) >>> print(torch.__version__)
(output) 0.5.0a0+4b61760
(input) >>> torch.cuda.is_available()
(output) False


ソースからインストールした「PyTorch」をアンインストールするには、以下のコマンドが機能します。

(pytorch) $ pip uninstall torch


2. 「ELF OpenGo」インストールの準備とソースの取得
「ELF OpenGo」は五月初頭にオープンソース化され、GitHubレポジトリでソースが公開されています。
「ELF OpenGo」のCPUバージョンをビルドするなら、CPU版「PyTorch」がソースからインストールされていること、GPUバージョンをビルドするなら、GPU対応として「CUDA 9.0」+「cuDNN 7.0」+「NCCL 2.1」環境が構築されたうえで、「PyTorch Nightly Build」がインストールされていていることを確認します。
今回はホームディレクトリに「ELF」ディレクトリを作成し、そこに「ELF OpenGo」のソースをダウンロードして、「ELF OpenGo」インストール作業をすすめることにします。
まずは、「PyTorch」をインストールした「Python 3.6」仮想環境「pytorch」を有効化し、必要なライブラリをインストールしていきます。

$ sudo apt-get install cmake g++ gcc libboost-all-dev libzmq3-dev
$ conda activate pytorch
(pytorch) $ conda install numpy zeromq pyzmq


つづいて、ホームディレクトリ直下の「~/ELF」ディレクトリに、ソースをダウンロードします。
いまのところ、最新のソースでは「ELF OpenGo」を走らせることはできないようなので、きちんと動作した六月ころのバージョンを利用します。

(pytorch) $ cd
(pytorch) $ git clone https://github.com/pytorch/ELF
(pytorch) $ cd ELF
(pytorch) $ git checkout 4257b3962c839f912501708cc3abb99f3a198a80
(pytorch) $ git submodule sync && git submodule update --init --recursive


3. 「ELF OpenGo」のインストール
つづいてビルド作業にすすみ、ビルド処理が終わったらテストしておきます。

(pytorch) $ make
(pytorch) $ make test


問題ないことを確認したら、「ELF OpenGo」を動かしてみます。
あらかじめパスをとおすためのスクリプトを実行したうえで、「gtp.sh」スクリプトがある「~ELF/scripts/elfgames/go」ディレクトリへ移動し、そこに学習ずみネットワークをダウンロードします。

(pytorch) $ source scripts/devmode_set_pythonpath.sh
(pytorch) $ cd scripts/elfgames/go
(pytorch) $ wget https://github.com/pytorch/ELF/releases/download/pretrained-go-19x19-v0/pretrained-go-19x19-v0.bin


ここまでの準備が終わったら、以下のコマンドをたたいて、「ELF OpenGo」を走らせてみます。

・CPUバージョン
(pytorch) $ ./gtp.sh ./pretrained-go-19x19-v0.bin --verbose --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 256 --resign_thres 0.05 --mcts_virtual_loss 1


・GPUバージョン
(pytorch) $ ./gtp.sh ./pretrained-go-19x19-v0.bin --verbose --gpu 0 --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 1024 --resign_thres 0.05 --mcts_virtual_loss 1


GPUの検出などがおこなわれていろいろメッセージが出ますが、問題なく起動していれば、GTPコマンドを受けつける状態になっているはずです。
「genmove black」「genmove white」などのGTPコマンドを与えてみて、正しく着手を返してくるようなら、インストールは正常に完了しています。
自分が担当する手番のほうもGTPコマンドを使って、「play black q4」「play white d16」などのように着手入力していけば、ターミナル上で「ELF OpenGo」と対局することもできます。

4. 「ELF OpenGo」の設定
推奨されている実行コマンドは、以下のとおりです。

./gtp.sh path/to/modelfile.bin --verbose --gpu 0 --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 8192 --resign_thres 0.05 --mcts_virtual_loss 1


いまのところ、考慮時間をパラメータで直接制御することはできないので、「--mcts_rollout_per_thread」の値を変更することで考慮時間をコントロールします。
hatakazuの環境では、ソースからインストールした「PyTorch 0.5.0a0」でCPUバージョンを走らせる場合は「--mcts_rollout_per_thread 256」で、バイナリインストールした「PyTorch Nightly Build」でGPUバージョンを走らせる場合は「--mcts_rollout_per_thread 1024」で、一手あたりだいたい20〜30秒で打ってくれるようです。
CPUバージョンは、ソースからインストールした「PyTorch 0.5.0a0」で動かすほうが、「PyTorch Nightly Build」バイナリで動かすよりも、二倍以上速いスピードで(半分以下の時間で)着手するように見えます。
おなじ比率で単純計算すれば、ソースからインストールした「PyTorch 0.5.0a0」でGPUバージョンを動かせれば、推奨されている「--mcts_rollout_per_thread 8192」で60秒前後で打ってくれるようになる、と期待できるのではないかと思っています。

5. GTP対応囲碁GUI「GoGui」への思考エンジン登録
「ELF OpenGo」をGTP対応囲碁GUIに連携させて、グラフィカルに利用できるようにしたいと思い、いろいろためしてみましたが、現在のところ「Sabaki」で動かすことはできていません。
そのため、ここでは「ELF OpenGo」を「GoGui」から利用できるよう、設定する方法について記述していきます。
まずは、「ELF OpenGo」をビルドするに先だって「PyTorch」をインストールした「Python 3.6」仮想環境「pytorch」を有効化し、パスをとおすスクリプトを実行したうえで、そのおなじ仮想環境から囲碁GUI「GoGui」を起動します。

$ conda activate pytorch
(pytorch) $ source ~/ELF/scripts/devmode_set_pythonpath.sh
(pytorch) $ gogui &


メニューバーの「プログラム」から「新規プログラム」を選び、あらわれた画面の「コマンド:」欄に囲碁思考エンジンの絶対パスと、起動時にわたすパラメータを一行でつづけて入力します。
たとえば「ELF」ディレクトリを「~/ELF」に設置した場合、「コマンド:」欄に入力する絶対パスは「/home/username/ELF/scripts/elfgames/go/gtp.sh」のようになります。
それにつづけて、考慮時間などの観点から採用するパラメータ、たとえば「/home/username/ELF/scripts/elfgames/go/pretrained-go-19x19-v0.bin --verbose --gpu 0 --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 1024 --resign_thres 0.05 --mcts_virtual_loss 1」を入力します。
最終的に、入力するコマンドは以下の例のようになり、これを一行でつづけて「コマンド:」欄に入力します。

/home/username/ELF/scripts/elfgames/go/gtp.sh /home/username/ELF/scripts/elfgames/go/pretrained-go-19x19-v0.bin --verbose --gpu 0 --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 1024 --resign_thres 0.05 --mcts_virtual_loss 1

※CPUバージョン「ELF OpenGo」の場合は、「--gpu 0」を削除し、考慮時間短縮のために「--mcts_rollout_per_thread」の値を非常にちいさく設定します。


「OK」ボタンを押下して何度か「待機」をクリックしながら待っていると、「[名前のないプログラム]が不正な応答を送りました」というエラーが出ますが、「警告を再表示しない」にチェックをいれて「閉じる」をクリックしてしまいます。
すると、ステイタスバーに表示されていた「プログラムの開始中」メッセージが消えて新規プログラム登録画面が開くので、「ラベル:」欄にたとえば「ELF OpenGo」などと入力して「OK」ボタンを押下します。
これで登録完了となるので、次回以降はメニューバーの「プログラム」 -> 「プログラムの起動」とすすんで「ELF OpenGo」を選ぶと、「ELF OpenGo」が起動して対局や棋譜分析に利用できるようになります。
登録した囲碁思考エンジン「ELF OpenGo」と対局するには、「ELF OpenGo」を起動した状態で、メニューバーの「対局」から「碁盤サイズ」「置石」「コンピュータの手番」を指定したうえで、「新規対局」をクリックします。
検討したい局面を指定して、そこで「ELF OpenGo」がどう打つかをみることもできます。
「ELF OpenGo」を起動したあと、メニューバーから「コンピュータの手番」を「なし」にして、どんどん石を置いていって対象となる局面をつくり、黒番の局面なら「ELF OpenGoに黒を打たせる」、白番の局面なら「ELF OpenGoに白を打たせる」アイコンをクリックします。
そのさい「GTPシェル」を開いておけば、読み筋や評価値も表示されるので、着手の意味を考えるときに参考になります。

以下の内容を記述したスクリプトを作成してそれを「~/ELF/scripts/elfgames/go/ELF-OpenGo.sh」として保存、実行権限を付与したうえで「GoGui」の新規プログラム画面で「/home/username/ELF/scripts/elfgames/go/ELF-OpenGo.sh」コマンドを指定してやれば、この「ELF-OpenGo.sh」スクリプトを編集することで「ELF OpenGo」の起動パラメータを調整できるようになります。
この場合でも、「PyTorch」がインストールされている仮想環境から「GoGui」を起動する、という点には注意が必要です。

#!/bin/bash
cd /home/username/ELF/
source scripts/devmode_set_pythonpath.sh
cd /home/username/ELF/scripts/elfgames/go/
./gtp.sh ./pretrained-go-19x19-v0.bin --verbose --gpu 0 --num_block 20 --dim 224 --mcts_puct 1.50 --batchsize 16 --mcts_rollout_per_batch 16 --mcts_threads 2 --mcts_rollout_per_thread 1024 --resign_thres 0.05 --mcts_virtual_loss 1

※CPUバージョン「ELF OpenGo」の場合は、「--gpu 0」を削除し、考慮時間短縮のために「--mcts_rollout_per_thread」の値を非常にちいさく設定します。



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

https://github.com/pytorch/ELF
https://github.com/pytorch/pytorch
https://pytorch.org/
https://github.com/pytorch/ELF/issues/27
https://github.com/pytorch/ELF/issues/30
https://github.com/pytorch/ELF/issues/33
posted by hatakazu at 22:53| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする

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) | 囲碁ソフトのこと | 更新情報をチェックする

2018年07月24日

メスト・エジルがドイツ代表からの引退を表明、自身のルーツへの敬意欠落を告発

https://twitter.com/MesutOzil1088/status/1020984884431638528/
https://twitter.com/MesutOzil1088/status/1021017944745226242/
https://twitter.com/MesutOzil1088/status/1021093637411700741/

http://kicker.town/deutschland/2018/07/93206.html
http://kicker.town/deutschland/2018/07/93220.html
http://kicker.town/deutschland/2018/07/93224.html

ドイツのように進歩的な意識が高く、成熟した(ように見える)社会でも、こういうことがおきる。
メスト・エジルが今回とった行動、採用した方法が正しかったのかどうか、それはわからない。
しかし、なにか殺伐とした印象を残す、哀しいできごとではあったと思う。
posted by hatakazu at 21:08| Comment(0) | 気になるニュース | 更新情報をチェックする

2018年07月23日

「Ubuntu 18.04 LTS 日本語 Remix」に「TensorFlow」バイナリをインストールする

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

ここでは、「Python 3.6」仮想環境にGPU版「TensorFlow」をバイナリインストールするものとして、インストールまえに必要になる準備作業について記述します。
CPU版「TensorFlow」をインストールする場合は、GPUサポートのために必要になる「CUDA」関連の部分は無視してください。

・「python3-pip」「python3-dev」インストール
「TensorFlow」バイナリをインストールするさい、必要になる「Python 3」パッケージをあらかじめインストールしておきます。

$ sudo apt-get install python3-pip python3-dev


・GPUサポート
ここでは、「CUDA 9.0」+「cuDNN 7.0」が「/usr/local/cuda-9.0」ディレクトリへインストールされ、そこへのパスがとおっているものとします。
「CUPTI」は「CUDA 9.0 Toolkit」にふくまれているため、あらためてインストールする必要はありませんが、パスをとおしておく必要はあります。

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-9.0/extras/CUPTI/lib64


2. 「TensorFlow」pipパッケージのインストール
Install TensorFlow on Ubuntu」で推奨されている手順にしたがって、Python環境管理ツール「Virtualenv」を利用して「Ptyhon 3.6」仮想環境を作成し、そのなかに「TensorFlow」をインストールしていきます。
ここでは、「~/virtualenv」ディレクトリ以下に、「Python 3.6」仮想環境「py3」を作成します。

$ sudo apt-get install python3-pip python3-dev python-virtualenv
$ sudo pip install -U pip
$ mkdir ~/virtualenv
$ cd ~/virtualenv
$ virtualenv --system-site-packages -p /usr/bin/python3.6 py3


作成した仮想環境「py3」を有効化し、必要におうじて「pip」を最新のものに更新しておきます。

$ source py3/bin/activate
(py3) $ pip update -U pip


必要な仕様におうじて、該当する「TensorFlow」pipパッケージをインストールします。

・CPU版「TensorFlow」インストールのためのpipコマンド

(py3) $ pip install -U tensorflow

もしくは、バージョンなどを指定するさいは、該当するリモートURLを使います。
(py3) $ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.9.0-cp36-cp36m-linux_x86_64.whl


・GPU版「TensorFlow」インストールのためのpipコマンド

(py3) $ pip install -U tensorflow-gpu

もしくは、バージョンなどを指定するさいは、該当するリモートURLを使います。
(py3) $ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.9.0-cp36-cp36m-linux_x86_64.whl


3. 「TensorFlow」インストールの検証
ここで、「TensorFlow」が正しくインストールされているかどうか、検証しておきます。
「~/virtualenv」ディレクトリへ移動し、「TensorFlow」をインストールした「Python 3.6」仮想環境「py3」を有効化したうえで、「Python 3.6」シェルをひらきます。

$ cd ~/virtualenv
$ source py3/bin/activate
(py3) $ python


「Python 3.6」シェルで以下のようなコマンドをたたいていき、「Hello, TensorFlow!」と出力されれば、「TensorFlow」のインストールは正常に完了しています。

# Python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))


4. pipパッケージのアンインストール、および仮想環境の削除
仮想環境「py3」にインストールした「TensorFlow」pipパッケージをアンインストールするには、仮想環境「py3」が有効化された状態で、以下のコマンドを実行します。

(py3) $ pip uninstall tensorflow


この仮想環境「py3」じたいが不要になった場合は、仮想環境「py3」を無効化したうえで、「~/virtualenv」ディレクトリ以下の「py3」ディレクトリをそのまま削除してしまいます。

(py3) $ deactivate
$ rm -r ~/virtualenv/py3



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

https://www.tensorflow.org/
https://www.tensorflow.org/install/
https://www.tensorflow.org/install/install_linux
https://www.tensorflow.org/install/install_sources
https://github.com/tensorflow/tensorflow
posted by hatakazu at 21:28| Comment(0) | Linuxとか | 更新情報をチェックする

2018年07月22日

コンピュータ囲碁プログラム「PhoenixGo」のインストールと使いかた - Ubuntu編

「PhoenixGo」は、Tencent社が開発しオープンソース化した、自己対戦による深層学習の手法にもとづくコンピュータ囲碁プログラムです。
2018年1月にTencent社の囲碁対局プラットフォーム「野狐」で「BensonDarrz」という名前で打ちはじめましたが、同4月に「世界囲碁AIトーナメント2018」で優勝してより広く知られるようになった、とのことです。

「PhoenixGo」GitHubレポジトリ
・Linuxバイナリ配布なし、ソースからコンパイル必須。
・64bit対応。
・GPUバージョンおよびCPUバージョン。

関連記事
Tencent unveils China's first open source Go AI, made on spare WeChat server processing power

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

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

・GCC with C++11 support
・Bazel (0.11.1 is known-good)
・(Optional) CUDA and cuDNN (for GPU support)
・(Optional) TensorRT (for accelerating computation on GPU, 3.0.4 is known-good)

「PhoenixGo」はGoogle開発の機械学習フレームワーク「TensorFlow」を利用しており、おなじくGoogle開発のビルドツール「Bazel」をもちいて、「TensorFlow」ソースからビルドする仕組みになっています。
「TensorFlow」を「CUDA」と連携させることで、GPUバージョン「PhoenixGo」をビルドすることができ、GPU演算の高速化のために「TensorRT」を使うオプションもあります。
ここでは、推奨されている「Bazel 0.11.1」インストールずみ、GPU対応としては「CUDA 9.0」+「cuDNN 7.0」+「NCCL 2.1」環境構築ずみ、推奨されている「TensorRT 3.0.4」インストールずみ(オプション)として、「Ubuntu 18.04 LTS 日本語 Remix」に「PhoenixGo」をインストールする手順について記述していきます。
「TensorFlow」ソースについては、「PhoenixGo」ビルド処理のなかで「TensorFlow 1.8.0」が自動的にダウンロードされるので、特別になにか準備する必要はありません。

*****「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」をソースからインストールするさいに必要な特殊設定なので、「PhoenixGo」のインストール作業が終わったら「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


最終的に、「PhoenixGo」インストールまえにととのえた環境は、以下のようになっています。

・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
・TensorRT 3.0.4 -> /usr/local/TensorRT-3.0.4(オプション)
・Bazel 0.11.1
・TensorFlow 1.8.0 -> 「PhoenixGo」インストール過程で自動的にダウンロードされる。
・GCC 4.8

2. 「PhoenixGo」インストールの準備とソースの取得
「PhoenixGo」の現行バージョンは「v1」で、「PhoenixGo」GitHubレポジトリでソースが公開されています。
「PhoenixGo」のCPUバージョンをビルドするなら、「TensorFlow」をソースからビルドするための「Bazel」ツールがインストールされていること、GPUバージョンをビルドするなら、それにくわえてGPU対応として「CUDA 9.0」+「cuDNN 7.0」+「NCCL 2.1」環境構築、GPU演算高速化のため「TensorRT 3.0.4」インストール(オプション)、「gcc-4.8」設定が完了していることを確認します。
今回はホームディレクトリに「PhoenixGo」ディレクトリを作成し、そこにソースをダウンロードして、インストール作業をすすめることにします。

$ cd
$ git clone https://github.com/Tencent/PhoenixGo
$ cd PhoenixGo


以上で、「PhoenixGo」のソースを「PhoenixGo」ディレクトリにダウンロードし、インストール作業をすすめる準備がととのいました。

3. 「PhoenixGo」のインストール
まずは「TensorFlow」の設定を実行します。

$ ./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」「TensorRT 3.0.4 /usr/local/TensorRT-3.0.4」のバージョンとパスを指定する。

上記の設定が終わったら、「PhoenixGo」ビルド処理にすすみます。

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


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


ビルド処理が終わったら、公開されている学習ずみネットワークを「PhoenixGo」ディレクトリにダウンロードのうえ解凍してから、「PhoenixGo」を走らせてみます。

$ wget https://github.com/Tencent/PhoenixGo/releases/download/trained-network-20b-v1/trained-network-20b-v1.tar.gz
$ tar xvzf trained-network-20b-v1.tar.gz
$ scripts/start.sh


CPUバージョン起動時に出るメッセージ。
current directory: '/home/username/PhoenixGo'
mcts_main wasn't built with CUDA support
mcts_main wasn't built with TensorRT support
use config file 'etc/mcts_cpu.conf'
log to '/home/username/PhoenixGo/log'
start mcts_main
XXXX-XX-XX XX:XX:XX.XXXXXX: I model/zero_model.cc:72] Read checkpoint state succ
XXXX-XX-XX XX:XX:XX.XXXXXX: I model/zero_model.cc:80] Read meta graph succ
XXXX-XX-XX XX:XX:XX.XXXXXX: I model/zero_model.cc:100] Create session succ
XXXX-XX-XX XX:XX:XX.XXXXXX: I model/zero_model.cc:107] Create graph succ
XXXX-XX-XX XX:XX:XX.XXXXXX: I model/zero_model.cc:119] Load checkpoint succ


GPUバージョン起動時に出るメッセージ。「CUDA」「TensorRT」が有効化され、GPUが検出されている。
mcts_main was built with CUDA support
mcts_main was built with TensorRT support
found 1 GPU(s)
use config file 'etc/mcts_1gpu.conf'
log to '/home/username/PhoenixGo/log'
start mcts_main


上のようなメッセージが出れば、ビルドは正常に完了しています。

4. 「PhoenixGo」の設定
GPUを一個搭載したコンピュータでGPUバージョン(「TensorRT」有効)を動かす場合は「PhoenixGo」ディレクトリの「etc/mcts_1gpu.conf」ファイルが、CPUバージョンの場合は「PhoenixGo」ディレクトリの「etc/mcts_cpu.conf」ファイルが、「PhoenixGo」の動作条件を制御する設定ファイルとなっています。
「PhoenixGo」起動コマンドを「$ scripts/start.sh etc/mcts_1gpu.conf」のようにして、明示的に設定ファイルを渡すこともできるし、各種パラメータを指定して直接「bazel-bin/mcts/mcts_main」を起動してもO.K.です。
以下に、編集する可能性のある項目だけ抜き出して、各項目の意味と設定方法を記述します。

num_eval_threads: 1 # 使用するGPUの個数。
num_search_threads: 4 # 「num_eval_threads」と「eval_batch_size」をかけた値よりもちょっと大きい値に設定するらしい。
timeout_ms_per_step: 10000 # 一手ごとの考慮時間をミリ秒で指定。
max_simulations_per_step: 0 # 一手ごとのシミュレーション数。「0」で無指定。
gpu_list: "0" # 使用するGPUの認識番号をコンマで区切って登録。CPUバージョンの設定ファイルには行じたい存在しない。
model_config -> train_dir: "pkct" # 学習ずみネットワークが保管されているフォルダを指定。
max_search_tree_size: # ツリーノードの最大サイズ。メモリ容量によって指定する。
max_children_per_node: # 各ノードがもてる子ノードの最大サイズ。メモリ容量によって指定する。
enable_background_search: 0 # 「ponder」機能を使うときは「1」、使わないときは「0」に設定。
early_stop -> enable: 0 # 勝敗が確定してしまったあとはすぐに打つ。一定ペースで打たせたいときは「0」に設定。
unstable_overtime -> enable: 0 # 次の手が確定しないときは余計に考える。一定ペースで打たせたいときは「0」に設定。
behind_overtime -> enable: 0 # 形成がよくないときは余計に考える。一定ペースで打たせたいときは「0」に設定。
time_control -> enable: 0 # GTPコマンド「time_settings」への対応。一定ペースで打たせたいときは「0」に設定。


5. GTP対応囲碁GUIとの連携方法
「PhoenixGo」として公開されているのはGUIをもたない囲碁思考エンジン部分のみなので、グラフィカルに対局や棋譜分析をおこなうためにはGTPを解釈できる囲碁GUIと連携させる必要があります。
「PhoenixGo」ディレクトリをたとえば「~/PhoenixGo」に設置したとして、「/home/username/PhoenixGo/start.bat」が、囲碁GUIに登録するべきGTP思考エンジンのパスになります。

5-1. GTP対応囲碁GUI「GoGui」への思考エンジン登録
メニューバーの「プログラム」から「新規プログラム」を選び、あらわれた画面の「コマンド:」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「PhoenixGo」ディレクトリを「~/PhoenixGo」に設置した場合、「コマンド:」欄に入力する絶対パスは「/home/username/PhoenixGo/start.bat」のようになります。
「OK」ボタンを押下して何度か「待機」をクリックしながら待っていると、ステイタスバーに表示されていた「プログラムの開始中」メッセージが消えて新規プログラム登録画面が開くので、「ラベル:」欄にたとえば「PhoenixGo」などと入力して「OK」ボタンを押下します。
これで登録完了となるので、次回以降はメニューバーの「プログラム」 -> 「プログラムの起動」とすすんで「PhoenixGo」を選ぶと、「PhoenixGo」が起動して対局や棋譜分析に利用できるようになります。
登録した囲碁思考エンジン「PhoenixGo」と対局するには、「PhoenixGo」を起動した状態で、メニューバーの「対局」から「碁盤サイズ」「置石」「コンピュータの手番」を指定したうえで、「新規対局」をクリックします。
検討したい局面を指定して、そこで「PhoenixGo」がどう打つかをみることもできます。
「PhoenixGo」を起動したあと、メニューバーから「コンピュータの手番」を「なし」にして、どんどん石を置いていって対象となる局面をつくり、黒番の局面なら「PhoenixGoに黒を打たせる」、白番の局面なら「PhoenixGoに白を打たせる」アイコンをクリックします。
そのさい「GTPシェル」を開いておけば、読み筋や評価値も表示されるので、着手の意味を考えるときに参考になります。

5-2. 「Sabaki」への思考エンジン登録
メニューバーの「Engines」から「Manage Engines」を選び、あらわれた画面で「Add」をクリックします。
「(Unnamed Engine)」と表示されている欄にカーソルをもっていって、わかりやすい表示名を、そして「Path」欄に囲碁思考エンジンの絶対パスを入力します。
たとえば「PhoenixGo」ディレクトリを「~/PhoenixGo」に設置した場合、「(Unnamed Engine)」欄にカーソルをもっていって「PhoenixGo」と入力、「Path」欄に絶対パス「/home/username/PhoenixGo/start.bat」を指定します。
登録した「PhoenixGo」と対局するには、メニューバーの「File」から「New」をクリックします。
開いた画面で「Board Size」「Handicap」「Komi」を指定のうえ、黒番と白番それぞれの担当者を選択します。
自分が担当する手番は「Manual」を選択、「PhoenixGo」に担当させる手番は登録されている思考エンジンの表示名から「PhoenixGo」を選んで、「OK」ボタンを押下します。
「Sabaki」にほかの囲碁思考エンジンを登録しておいて、「PhoenixGo」をほかの思考エンジンと対局させることもできます。
その場合は、対局させる思考エンジンの両方について「ponder」機能を無効化するように設定し、互いの思考をさまたげないかたちで対局をおこなう必要があります。


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

https://github.com/Tencent/PhoenixGo
https://github.com/Tencent/PhoenixGo/releases
https://qiita.com/take-iwiw/items/0bf12bec9c3bade2e331
https://stackoverflow.com/questions/50213089/linking-error-with-gcc-g-7-3-0-on-ubuntu-18-04/50232797
posted by hatakazu at 15:32| Comment(0) | 囲碁ソフトのこと | 更新情報をチェックする