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


656

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] CPUはこれをサポートする命令をサポートしていますTensorFlowバイナリが使用するようにコンパイルされていません:AVX AVX2

しかし、私が走ったとき

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

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

あなたは問題が何であり、それを修正する方法を知っていますか?


33
tfは機能します。それが出力する情報は、それが可能な限り速くないことを意味します。それを取り除くには、ソースからインストールできます。ここを
Ben

正常に実行できるコマンドでも同じ問題に直面しています。>>> sess = tf.Session() 2017-11-05 18:02:44.670825: I C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\ 35\tensorflow\core\platform\cpu_feature_guard.cc:137] Your CPU supports instruct ions that this TensorFlow binary was not compiled to use: AVX AVX2
M.オグズオズカン2017年

@Benなので警告ですが、すべてうまくいきますか?(少なくとも初心者の観点から)
bvdb 2018年

1
AVX命令を使用して
Tensorflow

2
同じ状況で非常によく似たメッセージが表示されましたYour CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2。メッセージはです。
Hamid Heydarian 2018

回答:


820

この警告は何ですか?

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

Advanced Vector ExtensionsAVX)は、2008年3月にIntelによって提案されたIntelおよびAMDのマイクロプロセッサ用のx86命令セットアーキテクチャに対する拡張機能であり、2011年第1四半期にSandy Bridgeプロセッサを搭載したIntelによって最初にサポートされ、その後、ブルドーザープロセッサを搭載したAMDによってサポートされます。 AVXは2011年第3四半期に発表されました。AVXは、新しい機能、新しい命令、新しいコーディングスキームを提供します。

特に、AVXでは融合積和(FMA)演算導入されており、線形代数計算、つまりドット積、行列乗算、畳み込みなどが高速化されています。ほとんどすべての機械学習トレーニングには、これらの演算が大量に含まれているため、 AVXおよびFMAをサポートするCPUでより高速(最大300%)。警告は、CPUがAVX(フレイ!)をサポートしていることを示しています。

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

なぜそれが使われないのですか?

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

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

GPUを使用している場合は、 AVXサポートについて気にする必要はありません。最も明示的に設定されている場合を除き、最も高価な演算はGPUデバイスでディスパッチされるためです。この場合、この警告を単に無視することができます

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

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


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


29
TensorFlow Servingには、最適化されていないCPUと最適化されたCPU(AVX、SSE4.1など)の個別のインストールがあることに言及する価値があります。詳細はこちらです: github.com/tensorflow/serving/blob/...
クリスFregly

9
この質問に対する回答の削除によると、GPU(GTX1080Ti)を搭載したi9-7900x(Skylake-AVX512)でAVX512Fを使用すると、「CIFAR10 1000の反復で28%が68秒-> 48秒増加します」。GPUを使用するときの警告を無視することは良いアドバイスだと思いますか?そのコメントが偽物でない限り、少なくとも一部のケースでは、CPU命令セットから得られるものがあるようです。
Peter Cordes

1
@PeterCordesもしそうなら、私は確かにそれを私の答えに含めます。しかし、「私のモデルは30%高速化する」という記述は、「私のC ++プログラムは30%高速化する」と同じように聞こえます。正確にはどのモデルですか?手動でのCPU配置はありますか?データはどのように転送されますか?たとえば、派手に多くの作業がある可能性があります。もちろん、CPUをボトルネックにすることは可能であり、SOについてはそれについて多くの疑問があります。通常はバグと見なされます。
Maxim

2
@Maxim:削除された回答のテキスト全体は、「私のテストでは、I9(7900x)GPU(GTX1080Ti)の命令AVX512Fにより、CIFAR10 1000反復で28秒から68秒-> 48秒のゲインになります」。そのため、残念ながら詳細(または句読点、文法、または書式)はありません。
Peter Cordes

2
あなたがMacであるどうやらあれば、それはGPU、使用されることはありませんstackoverflow.com/questions/46364917/...
デントアーサー・デント

156

このコマンドを使用して、CPUとOSのtensorflowバイナリを更新します

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

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

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


1
私はWindows 10のURLを使ってみましたstackoverflow.com/questions/47068709/…。「zipfile.BadZipFile:ファイルはzipファイルではありません」と言ってエラーが表示される
サイサティリティリナダヤラット18

1
ダウンロードしたバージョンをダウンロードして使用すると
うまくいきました

1
「zipfile.BadZipFile:ファイルはzipファイルではありません」というエラーが表示された場合、cuda9.2avx2の場合、リンクはgithub.com/fo40225/tensorflow-windows-wheel/raw/master/1.9.0/…
Yeasin Ar Rahman

5
Windowsの場合、これを試しました。「pip uninstall tensorflow」を使用して既存のtensorflowをアンインストールし、次に「pip install <ダウンロードしたWHLファイルへのパス>」を使用して再インストールします。このWHLファイルをコンピューターにダウンロードします-github.com/fo40225/tensorflow-windows-wheel/blob/master/1.10.0/…(3.6 Pythonと64ビットウィンドウがある場合(表示されているamdは無視してください)。それ以外の場合は、Githubに戻り、正しいWHLを検索します。うまくいく
キング

3
私のために働いた。Ubuntu 16.04.4、Python 3.5.2、gcc 5.4.0-whlをダウンロードしてインストールしました。現在、p2.xLarge awsインスタンスを使用しています。Faster R-CNNで230クラスを実行するカスタムオブジェクト検出演習では、パフォーマンスが反復あたり16秒から9秒に向上しました。
アプリコット

27

GPUによるCPU最適化

GPUがあり、トレーニングや推論に使用している場合でも、ソースからTensorFlowをインストールすると、パフォーマンスが向上します。その理由は、一部のTF操作にはCPU実装のみがあり、GPUで実行できないためです。

また、CPUを有効に活用するためのパフォーマンス強化のヒントがいくつかあります。 TensorFlowのパフォーマンスガイドでは、次のことを推奨しています。

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

最高のパフォーマンスを得るには、CPUとGPUを併用して連携して動作するようにコードを記述し、GPUがある場合はそれらをすべてGPUにダンプしないでください。TensorFlowバイナリをCPU向けに最適化すると、実行時間を節約でき、一度実行するだけで済みます。



12

Windowsの場合(所有者f040225に感謝)、https//github.com/fo40225/tensorflow-windows-wheelにアクセスして、「tf + python + cpu_instruction_extension」の組み合わせに基づいて環境のURLを取得します。次に、このcmdを使用してインストールします。

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

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

pip install --ignore-installed --upgrade /path/target.whl

GPUはパーツに分割され、.7zファイルとしてラベル付けされます。それらを組み合わせる方法は?
user3496060

@ user3496060 winrarを使用して分割ファイルを解凍しました
Alan Dursun

8

tensorflowのpipバージョンを使用する場合、それはすでにコンパイルされており、インストールしているだけであることを意味します。基本的にはtensorflow-gpuをインストールしますが、リポジトリからダウンロードしてビルドする場合は、CPU AVXサポートを使用してビルドする必要があります。これを無視すると、cpuで実行するたびに警告が表示されます。


このエラーを回避するにはどうすればよいですか?
jitsm555

2
これはエラーではありません。thensorflowがCPUのAVXをサポートしていないという警告です。表示したくない場合は、os.environ ['TF_CPP_MIN_LOG_LEVEL'] = '2'
Hazarapet Tunanyan

5

これを修正するために見つけた最も簡単な方法は、すべてをアンインストールしてから、特定のバージョンのtensorflow-gpuをインストールすることです。

  1. tensorflowをアンインストールします。
    pip uninstall tensorflow
  1. tensorflow-gpuをアンインストールします:(インストールしているかどうかわからない場合でも、必ず実行してください)
    pip uninstall tensorflow-gpu
  1. 特定のtensorflow-gpuバージョンをインストールします。
    pip install tensorflow-gpu==2.0.0
    pip install tensorflow_hub
    pip install tensorflow_datasets

これが機能したかどうかを確認するには、次のコードをpythonファイルに追加します。

from __future__ import absolute_import, division, print_function, unicode_literals

import numpy as np

import tensorflow as tf
import tensorflow_hub as hub
import tensorflow_datasets as tfds

print("Version: ", tf.__version__)
print("Eager mode: ", tf.executing_eagerly())
print("Hub Version: ", hub.__version__)
print("GPU is", "available" if tf.config.experimental.list_physical_devices("GPU") else "NOT AVAILABLE")

ファイルを実行すると、出力は次のようになります。

Version:  2.0.0
Eager mode:  True
Hub Version:  0.7.0
GPU is available

お役に立てれば


ModuleNotFoundError: 'tensorflow_hub'という名前のモジュールはありません
D Adams

ModuleNotFoundError: 'tensorflow_datasets'という名前のモジュールはありません
D Adams

モジュールを個別にインストールしてみてください:pip install tensorflow_hubおよびpip install tensorflow_datasets
James Brett

うん->あなたの答えの完全性に役立つようにしようとしています。
Dアダムス

ああ、別にインストールする必要があったのを覚えていません。ありがとう!
James Brett

0

私のために働いたのはこのライブラリです https://pypi.org/project/silence-tensorflow/

このライブラリをインストールして、ページの指示どおりに実行してください。これは魅力のように機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.