TensorFlowでCPUの拡張命令を利用できるようにする(Ubuntu 16.04)
Posted Jul 06, 2017
以下のサイトと同じ内容なのですが、Ubuntu 16.04環境へのbazelのインストールと低スペックなVPS上でのコンパイルのためオプションなどを一部変更しています。
Python: Keras/TensorFlow の学習を CPU の拡張命令で高速化する (Mac OS X)
bazelのインストール
まずはTensorFlowのビルド環境を整えようと思います。公式サイト通りに進めればOKです。
今回は、手軽なバイナリインストーラを使います。
- Install using binary installer
何度も同じサイトを読むのも面倒なので、コマンドをまとめて記載します。
1.必要なパッケージをインストール
apt install pkg-config zip g++ zlib1g-dev unzip
2.バイナリインストーラをダウンロード
wget https://github.com/bazelbuild/bazel/releases/download/0.5.2/
3.実行権限を与えて
chmod +x bazel-0.5.2-installer-linux-x86_64.sh
4.インストーラを実行
--user
オプションを付けてインストールしているので、$HOME/bin
にインストールされました。
./bazel-0.5.2-installer-linux-x86_64.sh --user
5.パスを通す
$HOME/bin
をPATHに追加します。
export PATH="$PATH:$HOME/bin"
6.bazelの更新
上記コマンドでbazelを入れたら、更新はaptからできるそうです。
apt upgrade bazel
TensorFlowのコンパイル・インストール
TensorFlowのソースをダウンロードし、ディレクトリに入る
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
TensorFlowのバージョン指定
利用したいTensorFlowのバージョンが決まっている場合は、バージョン指定してチェックアウトする。最新バージョンで良ければこれは不要です。
git checkout v1.0.1
コンパイルの設定
./configure
以下のように対話型でいろいろ聞かれるけど、何のことかよくわからなかったので、参考にしたサイトに従って、
Do you wish to use jemalloc as the malloc implementation? [Y/n] n{Enterキー押下}
だけn
にしたけど、それ以外は、全部初期設定のままEnterキーを押しました。
コンパイル実行
これも参考にしたサイトのまま。
bazel build -c opt --copt=-mavx --copt=-msse4.1 --copt=-msse4.2 //tensorflow/tools/pip_package:build_pip_package
コンパイルが動いて、、、メモリ不足で落ちた。VPSへの投資をケチるからこうなるんだ。。。
メモリを節約できないものかと思い、検索してみたところ、--jobs=1
でコンパイルの並列度を指定できるということがわかったので試してみました。メモリが少ない環境で、他の処理への影響が心配な場合には、--host_jvm_args=-Xmx512m --host_jvm_args=-Xms512m
で使用するメモリの上限/下限も指定できるみたいです。
bazel --host_jvm_args=-Xmx512m --host_jvm_args=-Xms512m build --jobs=1 -c opt --copt=-mavx --copt=-msse4.1 --copt=-msse4.2 //tensorflow/tools/pip_package:build_pip_package
Wheelパッケージのコンパイル
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
コンパイルしたWheelからTensorFlowをインストールし直す
既存のTensorFlowをアンインストールし、
pip uninstall -y tensorflow
コンパイルしたWheelパッケージからインストールします。
pip install /tmp/tensorflow_pkg/tensorflow-1.2.1-cp36-cp36m-linux_x86_64.whl
インストールされたか確認しところ、うまいこと入ってくれたようです。
pip list --format=columns | grep -i tensorflow
tensorflow 1.2.1 tensorflow-tensorboard 0.1.2
さいごに
処理速度については確認していませんが、AVX、SSE4.1、SSE4.2を使えるよ、という警告は出なくなりました。リソースがシビアな環境では、少しでも処理速度を改善していきたいところですね。
すべてコチラのサイトのおかげです。ありがとうございます。