TensorFlowでCPUの拡張命令を利用できるようにする(Ubuntu 16.04)
2 min read

TensorFlowでCPUの拡張命令を利用できるようにする(Ubuntu 16.04)

TensorFlowでCPUの拡張命令を利用できるようにする(Ubuntu 16.04)

以下のサイトと同じ内容なのですが、Ubuntu 16.04環境へのbazelのインストールと低スペックなVPS上でのコンパイルのためオプションなどを一部変更しています。

Python: Keras/TensorFlow の学習を CPU の拡張命令で高速化する (Mac OS X)

bazelのインストール

まずはTensorFlowのビルド環境を整えようと思います。公式サイト通りに進めればOKです。

Install Bazel on Ubuntu

今回は、手軽なバイナリインストーラを使います。

  • 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を使えるよ、という警告は出なくなりました。リソースがシビアな環境では、少しでも処理速度を改善していきたいところですね。

すべてコチラのサイトのおかげです。ありがとうございます。

Python: Keras/TensorFlow の学習を CPU の拡張命令で高速化する (Mac OS X)