macOSで構築したPython環境でTensorFlowのチュートリアルのサンプルを実行したら、以下のワーニングメッセージが表示しました。

2017-07-23 23:59:04.998330: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
2017-07-23 23:59:04.998353: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
2017-07-23 23:59:04.998361: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
2017-07-23 23:59:04.998369: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.

「TensorFlowはSSE4.2, AVX, AVX2, FMAでコンパイルされていないが、このマシンならこれらにより加速することができる。」ということらしいです。

SSE4.2, AVX, AVX2, FMAって何?

調べてみれば、これらはINTELが開発したCPUの拡張命令セットです。これらの拡張命令は結構前の世代からサポートされてきたみたいですが、初めて知りました。拡張命令セットの内容はよくわからないが、これらでTensorFlowのライブラリをコンパイルすれば実行時間を短縮できるらしいので、やり方を調べ、ここにメモを残しておきます。

参考:
https://stackoverflow.com/questions/41293077/how-to-compile-tensorflow-with-sse4-2-and-avx-instructions

Python仮想環境管理のためのcondaインストール

以下のところでanacondaをダウンロードし、インストールします。anacondaはPythonで開発するためのパッケージは最初からいろいろ入っているので、anacondaでPythonをインストールし直しました。

https://www.continuum.io/downloads

参考
https://gist.github.com/aphlysia/d5fcee79ff81b8272faf

HomebrewでBazelをインストール

Bazelとは、Googleが開発したビルドツールです。makeのようなものです。
まだBazelのいいところわからないから、これから勉強したいです。
とりあえずここでインストールして使用していきます。

brew install bazel

TensorFlowのソースコードをgit cloneで取得

普通は、pip install tensorflowでTensorFlowのライブラリをPythonにインストールできますが、そうしたら冒頭のあのワーニングメッセージが表示されます。その為、ここは敢えてソースコードをダウンロードして、拡張命令セットを使用するように設定してライブラリをビルドして、インストールします。

git clone https://github.com/tensorflow/tensorflow

コンフィグレーション & コンパイル

コンフィグレーション

対話式で、コンパイル設定を行う。ここでとりあえず全部デフォルトで最後までENTER切っていいです。

cd tensorflow
./configure

コンパイル

以下の命令を実行すればコンパイル開始。自分のマシンにサポートされる拡張命令セットを一つずつ"--copt="の後ろに付けて、コンパイル実行。マシンの性能によりますが、自分のマシン(Core i5-4285U 2.4GHz)は40分ぐらい時間かかりました。

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-msse4.1 --copt=-msse4.2  -k //tensorflow/tools/pip_package:build_pip_package

配布パッケージ作成

コンパイル完了後、インストールするためのパッケージを作成します。

bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

パッケージは /tmp/tensorflow_pkg に生成されます。

condaでPython仮想環境作成

仮想環境を使わずに直接pip installでPythonにライブラリ追加してもいいですが、使用する目的によって環境を分けたほうがいいと思うので、仮想環境内で拡張命令セットでコンパイルしたライブラリをインストールすることにしました。

conda create -n tensorflow python=3.6 anaconda

-nの後ろは{仮想環境名}

仮想環境に切り替え

source activate tensorflow

仮想環境内でコンパイルしたパッケージをインストール

pip install /tmp/tensorflow_pkg/{パッケージ名}.whl

インストール完了後もう一度冒頭のサンプルを実行したらワーニングメッセージが出なくなりました。

まとめ

拡張命令セットでコンパイルしたライブラリがインストールされた仮想環境でもう一度、TensorFlowのサンプルを実行したら、ワーニングメッセージが出てこなくなりまりました。簡単なサンプルなので、結局、あまり「速くなった」という感じはしませんでした。また後日複雑なもので比較してみたいと思います。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.