TensorflowをSSE4.2およびAVX命令でコンパイルする方法は?


289

これは、Tensorflowが機能しているかどうかを確認するスクリプトの実行から受け取ったメッセージです。

I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally
W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:910] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

SSE4.2とAVXについて言及していることに気づきました。

  1. SSE4.2およびAVXとは何ですか?
  2. これらのSSE4.2およびAVXは、TensorflowタスクのCPU計算をどのように改善しますか。
  3. 2つのライブラリを使用してTensorflowをコンパイルする方法は?

18
bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --config=cuda -k //tensorflow/tools/pip_package:build_pip_package Xeon E5 v3 でこれらのフラグを使用してビルドしたいのですが、公式リリースと比較して8k matmul CPU速度が3倍向上します(0.35-> 1.05 T ops / sec)
Yaroslav Bulatov

4
NOTE on gcc 5 or later: the binary pip packages available on the TensorFlow website are built with gcc 4, which uses the older ABI. To make your build compatible with the older ABI, you need to add --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" to your bazel build command. ABI compatibility allows custom ops built against the TensorFlow pip package to continue to work against your built package.ここから忘れずにtensorflow.org/install/install_sources
Ivan Kush

4
これらの命令github.com/lakshayg/tensorflow-buildをサポートするTF用にコンパイルされたバイナリがいくつかあります。これは役に立つかもしれません。
Lakshay Garg 2017

1
@IvanKushがそのフラグを追加したにもかかわらず、テンソルフローを正常にインポートできません(正常にコンパイルされます)。あなたが成功したGCC 5でコンパイルした場合、参照してください。stackoverflow.com/questions/45877158/...
anon01

1
Ubuntu 16.04を使用している場合、github.com
mind / wheelsで

回答:


160

私はちょうど同じ問題に遭遇しました、Yaroslav Bulatovの提案はSSE4.2サポートをカバーしていないようです、追加--copt=-msse4.2するだけで十分でしょう。結局、私は

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

警告やエラーは発生しません。

おそらく、どのシステムにとっても最良の選択は次のとおりです。

bazel build -c opt --copt=-march=native --copt=-mfpmath=both --config=cuda -k //tensorflow/tools/pip_package:build_pip_package

更新:ビルドスクリプトがを-march=native含んでいる可能性があり=ます。

-mfpmath=bothglangでのみ機能し、clangでは機能しません。 -mfpmath=sseおそらく、それよりも良いとはいえ、同じように優れており、x86-64のデフォルトです。32ビットビルドのデフォルト-mfpmath=387はなので、これを変更すると32ビットで役立ちます。(ただし、数値計算で高いパフォーマンスが必要な場合は、64ビットバイナリをビルドする必要があります。)

私は何のためにTensorFlowのデフォルトわからない-O2-O3です。 gcc -O3自動ベクトル化を含む完全な最適化を有効にしますが、コードが遅くなる場合があります。


これが行うこと:--coptforbazel buildは、CおよびC ++ファイルをコンパイルするためのオプションをgccに直接渡します(ただし、リンクしないため、ファイル間リンク時間最適化には別のオプションが必要です)。

x86-64 gccはデフォルトでSSE2以前のSIMD命令のみを使用するため、任意の x86-64システムでバイナリを実行できます。(https://gcc.gnu.org/onlinedocs/gcc/x86-Options.htmlを参照してください)。それはあなたが望むものではありません。CPUが実行できるすべての命令を利用するバイナリを作成したいのは、このバイナリは、ビルドしたシステムでのみ実行しているためです。

-march=nativeCPUがサポートするすべてのオプションを有効にするので、-mavx512f -mavx2 -mavx -mfma -msse4.2冗長になります。(また、-mavx2すでに可能-mavx-msse4.2するので、ヤロスラフのコマンドは、罰金されている必要があります)。また、これらのオプションのいずれかをサポートしていないCPU(FMAなど)を使用している-mfma場合、使用すると、不正な命令でエラーが発生するバイナリが作成されます。

TensorFlowの./configure有効化デフォルト-march=nativeので、手動でのコンパイラオプションを指定する必要がないようにする必要があり使用して、。

-march=native有効-mtune=nativeにするため、AVX命令のどのシーケンスがアラインされていないロードに最適かなど、CPUに対して最適化します

これはすべて、gcc、clang、またはICCに適用されます。(ICCの場合は、の-xHOST代わりに使用できます-march=native。)


6
確かに+1以上です!だからそれ-march=nativeはその仕事ではないようです。また、--config=cuda(CUDAサポートが必要ない場合)と-k(コンパイル中にエラーが発生しなかったため)のドロップも機能します。
Marc

4
新しいコンパイル済みバージョンをアンインストールして再インストールした後も、AVX、AVX2、FMAに関する警告が表示されます。
Benedikt S. Vogler 2017年

5
macOSで動作--copt=-mfpmath=bothさせるためにドロップする必要がありclangました。結果のバイナリに影響しますか?
gc5

2
明確にするために:設定ファイルを作成するときは、単に--copt = -march = nativeを使用しますか?または、元の投稿で見られたすべての最適化を、最適化を行うオプションがある場所に置きますか?
Thornhale 2017年

1
「ビルド」コマンドはワークスペースからのみサポートされているというエラーが表示されますか?何をすべきか?
控えめな2017年

133

最初にこれらの警告が表示される理由の説明から始めましょう。


ほとんどの場合、ソースからTFをインストールしておらず、代わりにのようなものを使用していpip install tensorflowます。つまり、アーキテクチャに最適化されていないビルド済み(他の人が作成した)バイナリをインストールしたということです。そしてこれらの警告はあなたに正確にこれを伝えます:あなたのアーキテクチャで何かが利用可能ですが、バイナリがそれでコンパイルされなかったのでそれは使われません。これはドキュメンテーションの一部です。

TensorFlowは、起動時に、CPUで利用可能な最適化でコンパイルされているかどうかをチェックします。最適化が含まれていない場合、TensorFlowは、AVX、AVX2、FMA命令が含まれていないなどの警告を発します。

良いことは、おそらくTFで学習/実験したいだけなので、すべてが適切に機能し、心配する必要がないということです


SSE4.2およびAVXとは何ですか?

ウィキペディアには、SSE4.2AVXについての適切な説明があります。この知識は、機械学習に優れている必要はありません。それらは、コンピューターが単一の命令に対して複数のデータポイントを使用して、自然に並列化できる操作(たとえば、2つの配列を追加する)を実行するためのいくつかの追加の命令のセットと考えることができます。

SSEとAVXはどちらも、SIMD(単一命令、複数データ)の抽象的なアイデアの実装です。

フリンの分類法における並列コンピュータのクラス。複数のデータポイントで同じ操作を同時に実行する複数の処理要素を備えたコンピューターについて説明します。したがって、このようなマシンはデータレベルの並列処理を利用しますが、同時実行性は利用しません。同時(並列)計算がありますが、特定の瞬間に1つのプロセス(命令)しかありません。

次の質問に答えるにはこれで十分です。


これらのSSE4.2およびAVXは、TFタスクのCPU計算をどのように改善しますか

これらは、さまざまなベクトル(行列/テンソル)演算のより効率的な計算を可能にします。これらのスライドで詳細を読むことができます


2つのライブラリを使用してTensorflowをコンパイルする方法は?

これらの命令を利用するためにコンパイルされたバイナリが必要です。最も簡単な方法は、自分でコンパイルすることです。MikeとYaroslavが提案したように、次のbazelコマンドを使用できます

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


4
このコマンドラインはどういう意味ですか?bazelこの場合、インストールする必要がありますか?
YZ 2017

1
MSYS2またはVisual Studio 2017 ommunity Editionを使用して64ビットのウィンドウの下でビルドする人はいますか?ステップを共有できますか?
James Chang

1
このpipパッケージをローカルマシンのconda環境にインストールできますか?
dgketchum

3
3時間以上(経過時間:11984.258秒)後、私はを手に入れましたFAILED: Build did NOT complete successfully。自分でコンパイルするのはそれほど簡単ではありません。
imbrizi

こっちも一緒。ビルドも失敗し、ログに次のように表示されます:cl:コマンドライン警告D9002:不明なオプション '-mavx'を無視cl:コマンドライン警告D9002:不明なオプション '-mavx2'を無視cl:コマンドライン警告D9002:無視不明なオプション '-mfma' cl:コマンドライン警告D9002:不明なオプション '-mfpmath = both'を無視cl:コマンドライン警告D9002:不明なオプション '-msse4.2'を無視cl:コマンドライン警告D9002:不明なオプションを無視 '- fno-strict-aliasing 'cl:コマンドライン警告D9002:不明なオプション' -fexceptions 'を無視するため、これらのオプションは不明
Shilan

53

まず3つ目の質問にお答えしましょう。

conda-env内で自己コンパイルされたバージョンを実行したい場合は、実行できます。これらは、追加の指示とともにシステムにtensorflowをインストールするために実行する一般的な指示です。注:このビルドは、Ubuntu 16.04 LTSを実行するAMD A10-7850ビルド(サポートされている命令についてはCPUを確認してください...異なる場合があります)用です。私はconda-env内でPython 3.5を使用しています。クレジットは、tensorflowソースのインストールページと上記の回答に移動します。

git clone https://github.com/tensorflow/tensorflow 
# Install Bazel
# https://bazel.build/versions/master/docs/install.html
sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel
# Create your virtual env with conda.
source activate YOUR_ENV
pip install six numpy wheel, packaging, appdir
# Follow the configure instructions at:
# https://www.tensorflow.org/install/install_sources
# Build your build like below. Note: Check what instructions your CPU 
# support. Also. If resources are limited consider adding the following 
# tag --local_resources 2048,.5,1.0 . This will limit how much ram many
# local resources are used but will increase time to compile.
bazel build -c opt --copt=-mavx --copt=-msse4.1 --copt=-msse4.2  -k //tensorflow/tools/pip_package:build_pip_package
# Create the wheel like so:
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
# Inside your conda env:
pip install /tmp/tensorflow_pkg/NAME_OF_WHEEL.whl
# Then install the rest of your stack
pip install keras jupyter etc. etc.

2番目の質問について:

最適化された自己コンパイルされたバージョンは、私の意見では努力する価値があります。私の特定の設定では、これまで560〜600秒かかっていた計算が約300秒しかかかりませんでした。正確な数値は異なりますが、特定のセットアップでは、一般的に35〜50%の速度の向上が期待できます。

最後に、最初の質問:

回答の多くはすでに上記で提供されています。要約すると、AVXSSE4.1、SSE4.2、MFAは、X86 CPUのさまざまな種類の拡張命令セットです。多くには、行列またはベクトル演算を処理するための最適化された命令が含まれています。

自分の誤解を強調して、時間を節約できることを期待します。SSE4.2がSSE4.1に代わる新しいバージョンの命令であるということではありません。SSE4 = SSE4.1(47命令のセット)+ SSE4.2(7命令のセット)。

tensorflowコンパイルのコンテキストで、コンピューターがAVX2とAVX、およびSSE4.1とSSE4.2をサポートしている場合は、これらすべての最適化フラグを設定する必要があります。私のようにしないでください。SSE4.2は新しいのでSSE4.1に取って代わるべきだと考えてそのまま進んでください。それは明らかに間違っています!そのため、再コンパイルする必要があり、40分もかかりました。


.whlファイルはどこに保存されていますか?私もWindowsにインストールしたいですか?
WiLL_K 2017

これは次の場所に格納されています:/ tmp / tensorflow_pkg(Linuxドライブ上)
Thornhale、

これにはどのくらい時間がかかりますか。その約2時間と私のラップトップがフリーズしました。
GB

うーん、テンソルフローのコンパイルには時間がかかります。8 GBのラップトップで約1.5時間かかりました。ただし、インストール時間は変動する可能性があり、使用可能なRAMの影響を大きく受けます。これらのコンパイルは多くのRAMを消費することが知られています。リソース要件を削減し、おそらくフリーズを防ぐには、「bazel build」の後に次のフラグを追加してコンパイルを実行します。例:私の高速システムの1つで、フラグなしでコンパイルすると、フラグ4500で2200秒かかりました。
Thornhale、2017

1
一般に、私はWindowsでMLを実行するのは大変な苦痛だと気づきました。結局、Linux環境で動作する場合にのみ機能するものを動作させるために、多くの時間を費やすことになります。tensorflowはOSごとにコンパイルする必要があると思います。さらに、リンクlinkにアクセスすると、テンソルフローが公式にサポートされていないことがわかります。ここにWindows用のtensorflowをコンパイルする方法に関するいくつかのガイドがあります:リンク。認めざるを得ませんが、試したことはありません。私はubuntuを使用しています。
Thornhale、2017

25

これらは、SIMD ベクトル処理命令セットです。

ベクトル命令を使用すると、多くのタスクでより高速になります。機械学習はそのような仕事です。

tensorflowインストールドキュメントの引用:

可能な限り幅広いマシンと互換性を持たせるために、TensorFlowはデフォルトでx86マシン上のSSE4.1 SIMD命令のみを使用するようにしています。最近のほとんどのPCとMacはより高度な命令をサポートしているため、自分のマシンでのみ実行するバイナリを--copt=-march=nativeビルドする場合は、bazel buildコマンドでこれらを有効にすることができます。


TensorflowバイナリがCPUディスパッチを使用しないのはなぜですか?GCCによるサポートは不十分ですか?
Chris Pushbullet 2017

4
「tensorflow installation docs」というリンクは機能しません。だから私はこの答えがまだ有効かどうか疑問に思っています。答えてください!
Thornhale、2017年

@ChrisPushbullet Tensorflowをコンパイルして、GPUのいくつかの異なる計算機能をサポートできますが、バイナリサイズが大幅に増加します。私の推測では、CPUについても同様です。
Davidmh

22

このすべての返信といくつかの試行錯誤のおかげで、を使ってMacにインストールできましたclang。誰かに役立つ場合に備えて、私のソリューションを共有するだけです。

  1. ドキュメント-ソースからのTensorFlowのインストールの指示に従います

  2. 要求されたとき

    bazelオプション "--config = opt"が指定されている場合、コンパイル時に使用する最適化フラグを指定してください[デフォルトは-march = native]

次に、この文字列をコピーして貼り付けます。

-mavx -mavx2 -mfma -msse4.2

(デフォルトのオプションでエラーが発生したため、他のいくつかのフラグでもエラーが発生しました。上記のフラグでエラーは発生しませんでした。ところでn、他のすべての質問に返信しました)

インストール後、デフォルトのホイールに基づく別のインストールに関してディープモデルをトレーニングするときに、約2倍から2.5倍のスピードアップを確認します-macOSへのTensorFlowのインストール

それが役に立てば幸い


4
-march=nativeコンパイラがそれを正しくサポートしていれば、さらに良いはずです。また-mtune=native、CPUに適切な命令を選択するように設定されます。ハスウェル上の例と後で、それは無効-mavx256-split-unaligned-store-mavx256-split-unaligned-loadデフォルトでオンにされ、-mtune=genericそしてデータが整列されることが知られているが、実行時にあることが判明されていない傷パフォーマンス。
Peter Cordes

1
ありがとう!私の場合-march=native、エラーが発生しましたが、他のオプションでは発生しませんでした。多分それは特定のコンパイラです。他の人が同じ障害を経験した場合に備えて、これを正確に共有していました。
JARS 2017年

1
どのエラー?ビルドシステムが持つ文字列の上にチョークない限り=、それに、またはあなたが使用していないgccclang、それが動作するはずです。そして-mtune=native -mavx2 -mfma あなたのために働きますか?または-mtune=skylake?(またはあなたが持っているどんなCPUでも)。ところで、-mavx2意味-mavx-msse4.2ます。それらすべてをレシピに含めることはになりませんし、CPUがサポートしていないものを人々が省略しやすくなると思います。
Peter Cordes

1
この質問のトップアンサーを少し前に編集しましたが、私自身はテンソルフローを使用していません。-march=nativeビルドシステムに問題がある場合は、お知らせください。(そして/またはあなたはそれを上流に報告して、彼らが彼らのビルドスクリプトを修正できるようにするべきです)。
Peter Cordes

1
提案をどうもありがとう。これを確認するために、.configureスクリプトのみ-march=nativeを再実行しましたが、これはエラーです:/ Users / jose / Documents / code / tmptensorflow / tensorflow / tensorflow / core / BUILD:1442:1:C ++コンパイルルール '// tensorflow / core:lib_internal_impl'が失敗しました(出口1)。tensorflow / core / platform / denormal.cc:37からインクルードされたファイル:/Library/Developer/CommandLineTools/usr/bin/../lib/clang/7.0.2/include/pmmintrin.h:28:2:エラー: "SSE3命令セットが有効になっていません" #error "SSE3命令セットが有効になっていません" Apple LLVMバージョン7.0.2(clang-700.1.81)を使用
JARS

7

私は最近それをソースからインストールしました、そして以下は利用可能な言及された指示でソースからそれをインストールするために必要なすべてのステップです。

他の回答では、これらのメッセージが表示される理由がすでに説明されています。私の答えはisnstallの方法を段階的に示しています。これは、私が行ったように、実際のインストールに人々が奮闘するのを助けるかもしれません。

  1. Bazelをインストールする

入手可能なリリースの 1つ、たとえば0.5.2からダウンロードします。それを抽出し、ディレクトリに移動して構成しますbash ./compile.sh。実行可能ファイルを/usr/local/bin次の場所にコピーします。sudo cp ./output/bazel /usr/local/bin

  1. Tensorflowをインストールする

tensorflowのクローン:git clone https://github.com/tensorflow/tensorflow.git クローンディレクトリに移動して構成します。./configure

それはいくつかの質問であなたを促します、私がそれぞれの質問への回答を提案したので、もちろん、あなたは好きなようにあなた自身の回答を選ぶことができます:

Using python library path: /usr/local/lib/python2.7/dist-packages
Do you wish to build TensorFlow with MKL support? [y/N] y
MKL support will be enabled for TensorFlow
Do you wish to download MKL LIB from the web? [Y/n] Y
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]: 
Do you wish to use jemalloc as the malloc implementation? [Y/n] n
jemalloc disabled
Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] N
No Google Cloud Platform support will be enabled for TensorFlow
Do you wish to build TensorFlow with Hadoop File System support? [y/N] N
No Hadoop File System support will be enabled for TensorFlow
Do you wish to build TensorFlow with the XLA just-in-time compiler (experimental)? [y/N] N
No XLA JIT support will be enabled for TensorFlow
Do you wish to build TensorFlow with VERBS support? [y/N] N
No VERBS support will be enabled for TensorFlow
Do you wish to build TensorFlow with OpenCL support? [y/N] N
No OpenCL support will be enabled for TensorFlow
Do you wish to build TensorFlow with CUDA support? [y/N] N
No CUDA support will be enabled for TensorFlow
  1. pipパッケージ。それを構築するには、どの命令が必要かを説明する必要があります(ご存知のように、Tensorflowから欠落していることが通知されました)。

pipスクリプトを作成します。 bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.1 --copt=-msse4.2 -k //tensorflow/tools/pip_package:build_pip_package

pipパッケージをビルドします。 bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

作成したTensorflow pipパッケージをインストールします。 sudo pip install /tmp/tensorflow_pkg/tensorflow-1.2.1-cp27-cp27mu-linux_x86_64.whl

これで、次回Tensorflowを起動したときに、不足している命令について文句を言うことはありません。


4
justでのビルド-c opt --copt=-march=nativeは少なくともと同じくらい良いはず--copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-msse4.1 --copt=-msse4.2です。(どちらの場合も警告は表示され-march=nativeませんが、構築中のシステムのCPU専用に調整することで、コードをさらに高速化できます)。また--copt=-mavx2 --copt=-mfma、これは以前のすべてのAVXおよびSSEオプションを意味するため、この長い文字列のオプションは、gccオプションを理解していない誰かによって明確に記述されました。
Peter Cordes 2017

1
@PeterCordes、この問題(github.com/tensorflow/tensorflow/issues/7449)を確認してください。bazelのメンテナでさえ、なぜmarch = nativeが期待どおりに機能しなかったのかについて断定できませんでした。「gccオプションを理解する」ように思われる場合は、問題を「コミュニティサポート」が必要であるとマークしているので、おそらくそれらを修正するのを助けることができます。
エドゥアルド

よろしくお願いします...うーん、--copt=-mavx2うまくいかなかったという人もいます。 動作する場合 --copt=-mfma--copt=-march=native解析に=問題がない限り、動作するはずです。gcc / clang / iccの場合、ビルドスクリプトが最終的-march=nativeにコンパイラに渡されるようにする必要があります。ビルドスクリプトを介してそれを実現することがトリックになります。
Peter Cordes

7

これが最も簡単な方法です。たった一歩。

速度に大きな影響があります。私の場合、トレーニングステップにかかる時間はほぼ半分になりました。

tensorflowのカスタムビルドを参照 する



@SreeraghARあなたの方法は私のテンソルフローとケラを格下げしました。
KPMG 2018

TensorFlow、Pythonのバージョン、HWに応じて正しいファイルをインストールしてください。
Sreeragh AR 2018

@SreeraghARのTensFlowバージョンは1.10.0で、を使用していMacOS Sierraます。ファイルを見つけるのを手伝ってください。
KPMG 2018

うーん..あなたのバージョンに対応するものを見つけることができません。カスタムホイールを作る必要がある人もいます。github.com/yaroslavvb/tensorflow-community-wheels 即時ソリューションは
Tensorflow


5

TensorFlowをSSE4.2およびAVXでコンパイルするには、直接使用できます

bazelビルド--config = mkl --config = "opt" --copt = "-march = broadwell" --copt = "-O3" // tensorflow / tools / pip_package:build_pip_package

ソース:https : //github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docker/Dockerfile.devel-cpu-mkl


1
最近何か変わった?前回私がチェック--copt="-march=native"食べていました=。(ところで、これらの二重引用符は何もしませんbazel。コマンドラインが表示される前にシェルによって削除されます。)
Peter Cordes

4

2.0互換性のあるソリューション:

ターミナル(Linux / MacOS)またはコマンドプロンプト(Windows)で以下のコマンドを実行して、Bazelを使用してTensorflow 2.0をインストールします。

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

#The repo defaults to the master development branch. You can also checkout a release branch to build:
git checkout r2.0

#Configure the Build => Use the Below line for Windows Machine
python ./configure.py 

#Configure the Build => Use the Below line for Linux/MacOS Machine
./configure
#This script prompts you for the location of TensorFlow dependencies and asks for additional build configuration options. 

#Build Tensorflow package

#CPU support
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package 

#GPU support
bazel build --config=opt --config=cuda --define=no_tensorflow_py_deps=true //tensorflow/tools/pip_package:build_pip_package

2
これのどの部分が-march=native、または他のGCC / clangオプションを指定しますか?AVX、FMA、またはSSE4.2についての言及はありません。(そして、BazelまたはTensorflowのビルドスクリプトは、-mavx動作などのオプションのみが壊れる方法でまだ壊れてい-march=nativeますか?それが問題である場合、この質問のトップアンサーに問題があります)
Peter Cordes

tfバージョン2.1.0でのCPUサポートの場合、オプション--config = optが機能しませんでした。--config = v2で解決しました。また、ビルドするのに適切なバゼルバージョンは29.0であることを言及しておくのも良いでしょう。
Tolik

2

ソースからTensorFlowを構築する場合、configureスクリプトを実行します。configureスクリプトが尋ねる質問の1つは次のとおりです。

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]

configureスクリプトは、TensorFlowピップパッケージをビルドするbazelコマンドに指定するフラグ(複数可)を添付します。大まかに言えば、次の2つの方法のいずれかでこのプロンプトに応答できます。

  • TensorFlowを実行するCPUタイプと同じタイプのCPUタイプでTensorFlowを構築する場合は、デフォルト(-march=native)を受け入れる必要があります。このオプションは、マシンのCPUタイプに合わせて生成されたコードを最適化します。
  • 1つのCPUタイプでTensorFlowを構築しているが、別のCPUタイプでTensorFlowを実行する場合は、gccドキュメントで説明されいるようにより具体的な最適化フラグを提供することを検討してください。

上記の箇条書きの説明に従ってTensorFlowを構成すると、--config=opt実行中の任意のbazelコマンドにフラグを追加するだけで、ターゲットCPU用に完全に最適化されたTensorFlowを構築できるようになります。


-1

これらの警告を非表示にするには、実際のコードの前にこれを行うことができます。

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf

5
静かにハードウェアで実行するよりも遅い速度で実行することは悪い考えのようです。
Peter Cordes

@Peter Cordesに全般的に同意します。ただし、警告を非表示にしてタスクに集中することは(規律あるマインドフルな方法で)良い場合があります。
ウェストサイダー、2017年

2
@westsider:ええ、場合によっては役立つかもしれませんが、意味を指摘しない限り、これは良い答えではありません。再コンパイルする代わりに警告を非表示にすると、実際のパフォーマンスが失われます。(GPUを使用して重量物を持ち上げている場合を除いて、CPUオプションについて警告する可能性はありますか?)
Peter Cordes
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.