Help us understand the problem. What is going on with this article?

拡張命令セットでTensorFlowをコンパイルする方法

More than 3 years have passed since last update.

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のサンプルを実行したら、ワーニングメッセージが出てこなくなりまりました。簡単なサンプルなので、結局、あまり「速くなった」という感じはしませんでした。また後日複雑なもので比較してみたいと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした