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