您的CPU支持未编译此TensorFlow二进制文件的指令:AVX AVX2

时间:2017-11-02 06:10:46

标签: tensorflow cpu avx

我是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!,这表示安装确实成功,但还有其他错误。

您知道问题所在以及如何解决问题吗?感谢。

9 个答案:

答案 0 :(得分:629)

这是什么警告?

现代CPU提供了许多低级指令,除了通常的算术和逻辑之外,称为扩展,例如SSE2,SSE4,AVX等。来自Wikipedia

  

高级矢量扩展程序 AVX )是x86指令的扩展   为英特尔和AMD提出的微处理器设置架构   英特尔于2008年3月首次由英特尔与Sandy一起支持   桥接处理器在2011年第一季度发布,后来由AMD公司推出   推土机处理器于2011年第3季度发货.AVX提供新功能,   新指令和新的编码方案。

特别是,AVX引入了fused multiply-accumulate(FMA)操作,加速了线性代数计算,即点积,矩阵乘法,卷积等。几乎每次机器学习培训都涉及大量的这些操作因此在支持AVX和FMA的CPU上会更快(高达300%)。警告声明您的CPU确实支持AVX(万岁!)。

我想在此强调:这完全是关于仅限CPU

为什么不使用呢?

因为构建了张量流默认分布without CPU extensions,例如SSE4.1,SSE4.2,AVX,AVX2,FMA等。默认构建(来自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'

...或者如果您使用的是Unix,请设置export TF_CPP_MIN_LOG_LEVEL=2。无论如何,Tensorflow工作正常,但你不会看到这些烦人的警告。

如果您没有GPU 并希望尽可能多地利用CPU,您应该从针对您的 CPU优化的源构建张量流< / strong>如果您的CPU支持AVX,AVX2和FMA,则启用它们。已经在this questionthis GitHub issue中进行了讨论。 Tensorflow使用一个名为bazel的临时构建系统,并且构建它并不是那么简单,但肯定是可行的。在此之后,警告不仅会消失,张力流性能也会提高。

答案 1 :(得分:124)

更新CPU和amp;的tensorflow二进制文件。 OS使用此命令

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

可以在这里找到whl文件的下载URL

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

答案 2 :(得分:21)

使用GPU

进行CPU优化

即使您拥有GPU并将其用于培训和推理,您也可以通过从源安装TensorFlow获得性能提升。原因是某些TF操作只有CPU实现,无法在GPU上运行。

此外,还有一些性能增强技巧可以充分利用您的CPU。 TensorFlow's performance guide建议如下:

  

在CPU上放置输入管道操作可以显着提高性能。利用CPU作为输入管道可以让GPU专注于培训。

为了获得最佳性能,您应编写代​​码以利用CPU和GPU协同工作,如果有的话,不要将其全部转储到GPU上。  为您的CPU优化TensorFlow二进制文件可以节省数小时的运行时间,而且您必须执行一次。

答案 3 :(得分:8)

对于Windows,您可以检查用AVX2编译的official Intel MKL optimization for TensorFlow滚轮。此解决方案加快了我的推断速度,达到x3。

conda install tensorflow-mkl

答案 4 :(得分:5)

对于Windows(由于拥有者f040225),请转到此处:https://github.com/fo40225/tensorflow-windows-wheel根据“ tf + python + cpu_instruction_extension”的组合来获取您环境的URL。然后使用此cmd进行安装:

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

如果遇到“文件不是zip文件”错误,请将.whl下载到本地计算机,然后使用此cmd进行安装:

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

答案 5 :(得分:2)

我发现解决此问题的最简单方法是卸载所有内容,然后安装特定版本的tensorflow-gpu:

  1. 卸载tensorflow:
    pip uninstall tensorflow
  1. 卸载tensorflow-gpu :(即使不确定是否已安装,也请确保运行此程序)
    pip uninstall tensorflow-gpu
  1. 安装特定的tensorflow-gpu版本:
    pip install tensorflow-gpu==2.0.0

您可以通过将以下代码添加到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

希望这会有所帮助

答案 6 :(得分:2)

对我有用的是这个库https://pypi.org/project/silence-tensorflow/

安装该库并按照页面上的指示进行操作,它就像一个超级魅力!

答案 7 :(得分:1)

如果您使用 pip 版本的tensorflow,则意味着它已经被编译,您正在安装它。基本上是安装tensorflow-gpu,但是当您从存储库下载并尝试构建时,应该使用CPU AVX支持来构建它。如果忽略它,则每次在cpu上运行时都会收到警告。

答案 8 :(得分:0)

尝试使用 anaconda。我有同样的错误。一个唯一的选择是从源代码构建 tensorflow,这需要很长时间。我尝试使用 conda 并且成功了。

  1. 在 anaconda 中创建一个新环境。
  2. conda -c conda-forge tensorflow

然后,它奏效了。