web-dev-qa-db-ja.com

お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていないという命令をサポートしています。AVX AVX2

TensorFlowは初めてです。私は最近それをインストールしました(Windows CPUバージョン)そして以下のメッセージを受け取りました:

Tensorflow-1.4.0が正常にインストールされました。tensorflow-tensorboard-0.4.0rc2

それから私が走ろうとしたとき

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
sess.run(hello)
'Hello, TensorFlow!'
a = tf.constant(10)
b = tf.constant(32)
sess.run(a + b)
42
sess.close()

(私は https://github.com/tensorflow/tensorflow を通して見つけました)

私は次のメッセージを受け取りました:

2017-11-02 01:56:21.698935:IC:\ tf_jenkins\home\workspace\rel-win\M\windows\PY\36\tensorflow\core\platform\cpu_feature_guard.cc:137]これをサポートしているTensorFlowバイナリが使用するようにコンパイルされていません:AVX AVX2

しかし私が走ったとき

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

Hello, TensorFlow!を出力しました。これは、インストールは実際に成功したことを示していますが、他に問題があることを示しています。

問題が何か、そしてそれをどのように修正するのか知っていますか?ありがとう。

459
csg

この警告は何ですか?

最近のCPUは、拡張機能として知られている通常の算術演算とロジックに加えて、多くの低レベルの命令を提供します。 SSE2、SSE4、AVXなど。 Wikipedia から:

Advanced Vector ExtensionsAVX)はx86命令の拡張です2008年3月にIntelが提案し、2011年第1四半期に出荷されたSandy Bridgeプロセッサを搭載したIntelおよび2011年第3四半期に出荷されたBulldozerプロセッサを搭載したAMDが最初にサポートしたIntelおよびAMDのマイクロプロセッサのアーキテクチャを設定します。AVXは、新機能、新しい命令、新しいコーディングスキーム。

特に、AVXは fused Multiply-Accumulate (FMA)演算を導入し、線形代数計算、つまりドット積、行列乗算、畳み込みなどを高速化します。ほとんどすべての機械学習トレーニングには多大な時間がかかりますこれらの操作のうち、AVXおよびFMAをサポートするCPU(最大300%)でより高速になります。警告は、CPUがAVXをサポートしていることを示しています(やっと!)。

ここで強調したいのは、CPUのみに関することです。

なぜ使用されないのですか?

テンソルフローのデフォルトのディストリビューションは、SSE4.1、SSE4.2、AVX、AVX2、FMAなど、= CPU拡張なし で構築されているためです。デフォルトのビルド(pip install tensorflowからの1つ)は、できるだけ多くのCPUと互換性がある。もう1つの議論は、これらの拡張機能を使用してもCPUはGPUよりもはるかに低速であり、GPUで中規模および大規模の機械学習トレーニングを実行することが期待されるということです。

あなたは何をするべきか?

GPUがある場合、AVXサポートを気にする必要はありません。ほとんどの高価なopはGPUデバイスにディスパッチされるからです(明示的に)。この場合、この警告を単に無視することができます

# Just disables the warning, doesn't enable AVX/FMA
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

...またはUnixを使用している場合はexport TF_CPP_MIN_LOG_LEVEL=2を設定します。とにかくTensorflowは正常に動作していますが、これらの迷惑な警告は表示されません。


GPUがない場合、可能な限りCPUを利用したい場合、からテンソルフローを構築する必要がありますCPUがサポートしている場合、AVX、AVX2、およびFMAを有効にしてyourCPUに最適化されたソース この質問 および このGitHubの問題 で説明されています。 Tensorflowは bazel と呼ばれるアドホックビルドシステムを使用し、それをビルドすることはそれほど簡単ではありませんが、確かに実行可能です。この後、警告が消えるだけでなく、テンソルフローのパフォーマンスも向上するはずです。

679
Maxim

このコマンドを使ってあなたのCPUとOS用のテンソルフローバイナリを更新します。

pip install --ignore-installed --upgrade "Download URL"

WhlファイルのダウンロードURLはここにあります。

https://github.com/lakshayg/tensorflow-build

121
HimalayanCoder

GPUによるCPUの最適化

たとえあなたがGPUを持っていて、それをトレーニングや推論のために使っていても、TensorFlowをソースからインストールすることによってあなたが得ることができるパフォーマンス向上があります。その理由は、いくつかのTF操作はCPU実装のみを持ち、あなたのGPUでは実行できないことです。

また、あなたのCPUをうまく利用するいくつかの性能強化のヒントがあります。 TensorFlowのパフォーマンスガイド 以下をお勧めします:

入力パイプライン操作をCPUに実行すると、パフォーマンスが大幅に向上します。入力パイプラインにCPUを使用すると、GPUはトレーニングに集中できます。

最高のパフォーマンスを得るには、CPUとGPUを組み合わせて使用​​するようにコードを作成し、GPUがある場合はそれをすべてGPUにダンプしないでください。あなたのTensorFlowバイナリをあなたのCPU用に最適化することで、何時間もの実行時間を節約することができ、そしてあなたはそれを一度しなければなりません。

20
Wesam

Windowsの場合は、AVX2でコンパイルされた TensorFlow用の公式インテルMKL最適化 ホイールを確認できます。この解決法は私の推論〜x3をスピードアップします。

conda install tensorflow-mkl
6
Flayn

Windowsの場合(所有者f040225に感謝)、こちらにアクセスしてください: https://github.com/fo40225/tensorflow-windows-wheel "tf + python +の組み合わせに基づいてあなたの環境のURLを取得する" cpu_instruction_extension "#:。その後、このcmdを使ってインストールします。

pip install --ignore-installed --upgrade "URL"

「ファイルはZipファイルではありません」というエラーが発生した場合は、.whlファイルをローカルコンピュータにダウンロードし、このcmdを使用してインストールしてください。

pip install --ignore-installed --upgrade /path/target.whl
4
Z.Wei

pip バージョンのtensorflowを使用する場合、それはすでにコンパイルされていて、インストールしているだけであることを意味します。基本的にあなたはtensorflow-gpuをインストールします、しかし、あなたがそれをリポジトリからダウンロードして、構築しようとするとき、あなたはそれをCPU AVXサポートで構築するべきです。あなたがそれを無視するならば、あなたがあなたがcpuで走るたびに警告を受けるでしょう。

0