TensorFlow1.0(CPU版)をインストールしたら実行時に「TensorFlowライブラリがSSE使うようにコンパイルされてないよ。あなたの環境ならもっとスピードアップができるよ。」っていうワーニングがでるようになりました。じゃあ試してみるかってことでソースコードからインストールしてみることにしてみました。加えて、どうせソースから入れるならついでにXLAも試してみようかということでやってみました。
(毎回ワーニングがでるのがウザかったという理由もあり)
*XLAは1.0ではまだ実験的採用です
TensorFlow1.0をインストールすると下記のワーニングが出るようになりました
環境
Ubuntu14.04 64bit
Python2.7
TensorFlow1.0(CPU support only)
*GPU版は最初からXLAが有効になっているらしい…(GPU持ってないんで試してませんが)
インストール方法
ソースコードからのインストール方法は公式ドキュメントの通りです。
以下、実際にやった手順です。
1.TensorFlowソースコードの取得
git clone https://github.com/tensorflow/tensorflow cd tensorflow git checkout r1.0
2.Bazelのインストール
Bazelのインストールも公式ドキュメントの通りですが、apt-getでインストールした場合上手く行きませんでした。
*TensorFlowのconfigureで↓の問題でつまる。
.configure error Unrecognized option: –action_env=PATH
Bazelは
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer pkg-config zip g++ zlib1g-dev unzip
次に、ここから自分の環境にあったインストーラをダウンロード。 インストール出来たか確認。 先ずは依存パッケージのインストール。 次に、./configureを実行します。 いろいろ設定を聞かれるので環境に合わせて入力していきます。今回はほぼすべてデフォルト設定のままで、XLAだけ有効にしました。 Bazelを使ってTensorFlowのpip packageをビルドします。 ビルドはCorei5-4570(3.2GHz)マシンで30分ほどでした。 ビルドが終わると/tmp/tensorflow_pkgディレクトリに.whlパッケージができているので、pipでインストールします。 最後に、pythonでTensorFlowパッケージがインポートできるか確認してインストール終了です。 *ImportError: cannot import name pywrap_tensorflowとなる場合は、tensorflowディレクトリから出てから試しましょう 簡単にですが以前と速度比較をしてみました。 CPU:Core i5-4570(3.2GHz) timeコマンドでuser時間を計測した結果を下記に示す。 約30%のスピードアップが確認できました。 TensorFlow1.0にしてから(pipでインストールした場合も)コアダンプが発生するようになってしまいました。 (jemalloc) Error in `python’: double free or corruption (!prev) とすれば良いらしい。 上記のissueに書いてあったのですが、3月にはTensorFlow1.1がもうリリースされるっぽいですね。 そういえばKerasもGoogleの中の人が開発してるんですよね。 あと使う側としてはユーザ数が多いのもホント助かる。自分が躓くところは大抵他の誰かも躓いてて、ほとんどgithubのissuesかstackoverflowに書いてある。いやーありがたいことです。
今回は、「bazel-0.4.4-installer-linux-x86_64.sh」
cd ~/Download
sudo chmod +x bazel-0.4.4-installer-linux-x86_64.sh
./bazel-0.4.4-installer-linux-x86_64.sh --user
bazel version
3.TensorFlowのコンフィグ
sudo apt-get install python-numpy python-dev python-pip python-wheel
cd tensorflow
./configure
4.ビルド
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
5.インストール
sudo pip install /tmp/tensorflow_pkg/tensorflow-1.0.0-cp27mu-linux_x86_64.whl
6.確認
python
>>>import tensorflow as tf
速度比較
前回やった物体領域予測の学習を0.12と1.0で比較してみました。環境
Mem:24GB
結果
TensorFlow0.12 : 252m
TensorFlow1.0 : 196m
コアダンプが発生する件
気になって調べたら下記issueを発見しました。
どうやら、Ubuntu14.04のnumpy(OpenBLASのサポート?)が原因らしいです。
回避策としては、Ubuntu16.04にアップグレードするか、
sudo apt-get install libtcmalloc-minimal4
export LD_PRELOAD="/usr/lib/libtcmalloc_minimal.so.4"
あとがき
開発はやすぎ!!そろそろKerasも入ってくるのかな。
開発スピードも凄いですが、オープンソースのエコシステムが上手く機能している感じもすごいですよね。
オープンソースにすることで、Google内外問わず多くのエンジニアが更に使い易く改良し、その結果を取り入れて更なる改善…っていうサイクルが回ってるのがよく分かる。contribとか見るとほんと活発にいろんなプロジェクトが走ってるなと。
ただ、APIが乱立してどれ使ったらいいのか分からなくなってきてるのが辛いですが。
関連記事