tensorflowをソースからコンパイルしてインストールする
- コンパイルに必要なパッケージのインストール
- bazelのコンパイル
- tensorflowのコンパイル
- 作成したpythonパッケージのインストール
- C++APIのチュートリアルのコンパイルと実行方法
- 共有ライブラリのコンパイル方法
コンパイルに必要なパッケージのインストール
OSはubuntu16.04を想定
sudo apt-get install openjdk-8-jdk pkg-config zip g++ zlib1g-dev unzip
sudo apt-get install python-pip python-numpy swig python-dev python-wheel
bazelのコンパイル
tensorflowをビルドするのに必要なビルドツールであるbazelをソースからコンパイルする。
git clone https://github.com/bazelbuild/bazel.git
pushd bazel
git checkout -b work_0.3.2 refs/tags/0.3.2
./compile.sh
cp output/bazel $HOME/local/bin/
popd
tensorflowのコンパイル
githubからtensorflowのソースコードをcloneする
git clone --recursive https://github.com/tensorflow/tensorflow
cd tensorflow
git checkout -b work_v0.10.0 refs/tags/v0.10.0
configureを実行する。pythonのパス、Googleクラウドを使用するかどうか、GPUを使用するかどうか聞かれる。
./configure
configureが完了したら、bazelコマンドを使ってtensorflowをコンパイルする。
bazel build -c opt //tensorflow/tools/pip_package:build_pip_package
コンパイルが完了したら、以下のコマンドを実行する。 すると、/tmp/tensorflow_pkg ディレクトリの下に、wheelフォーマットのパッケージが作成される。
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
作成したpythonパッケージのインストール
先程作成したwheelフォーマットのパッケージをvirtualenvによるサンドボックス内にインストールする。
# tensorflow用の環境を作成
cd $HOME
mkdir tensorflow-0.10.0
virtualenv --system-site-packages $HOME/tensorflow-0.10.0
# サンドボックスの有効化
source $HOME/tensorflow-0.10.0/bin/activate
# tensorflowパッケージのインストール
pip install /tmp/tensorflow_pkg/tensorflow-0.10.0-py2-none-any.whl
C++APIのチュートリアルのコンパイルと実行方法
tensorflowのリポジトリのルートディレクトリに移動し、以下のコマンドを実行し、実行バイナリを作成する。
bazel build -c opt //tensorflow/examples/label_image:label_image
次に、計算グラフの定義を含むアーカイブをダウンロードして、プロジェクト内の所定のディレクトリに展開する。
wget https://storage.googleapis.com/download.tensorflow.org/models/inception_dec_2015.zip -O /tmp/inception_dec_2015.zip
unzip /tmp/inception_dec_2015.zip -d tensorflow/examples/label_image/data/
作成した実行バイナリを以下のコマンドにより実行すると、入力画像 (デフォルトでは tensorflow/examples/label_image/data/grace_hopper.jpg) の識別を行うことができる。
./bazel-bin/tensorflow/examples/label_image/label_image
また、別のチュートリアルのコンパイルと実行方法の例を以下に示す。
# チュートリアルのコンパイル
bazel build -c opt //tensorflow/cc:tutorials_example_trainer
# チュートリアルの実行
./bazel-bin/tensorflow/cc/tutorials_example_trainer
共有ライブラリのコンパイル方法
tensorflowのリポジトリのルートディレクトリに移動し、以下のコマンドを実行し、 tensorflowの共有ライブラリ(.so)をコンパイルする
bazel build -c opt //tensorflow:libtensorflow_cc.so
# /usr/local/lib にインストールする
# sudo install -m 0644 bazel-bin/tensorflow/libtensorflow_cc.so /usr/local/lib/
# sudo ldconfig
続いて、以下のスクリプトを実行し、tensorflowのC++APIのヘッダファイルをコピーする。 (コピー先はtmp以下となっているので適宜修正する)
tensorflowを利用するC++ソースをコンパイルする際に、このディレクトリをインクルードパスに追加する。
macOSで共有ライブラリを使用する方法
macOSでは共有ライブラリの拡張子は.soではなく.dylibなので拡張子を変更する。 また、共有ライブラリのパスを正しく設定しないと共有ライブラリのロード時にエラーとなってしまうので、 install_name_toolコマンドを使って共有ライブラリのパスを設定する。
例えば、tensorflowの共有ライブラリを/usr/local/libにインストールする場合、以下のようにする。
install -m 0644 bazel-bin/tensorflow/libtensorflow_cc.so /usr/local/lib/libtensorflow_cc.dylib
install_name_tool -id /usr/local/lib/libtensorflow_cc.dylib /usr/local/lib/libtensorflow_cc.dylib