您的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有效,它吐出的信息只是意味着它没有尽其所能。为了摆脱它,你可以从源代码安装看到它在这里

我也遇到了可以成功运行的命令的相同问题。>>> 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. Oguz Ozcan's

@Ben这只是一个警告,但一切都会正常吗?(至少从初学者的角度来看)
bvdb

1
要使用AVX指令编译Tensorflow,看到这个答案
Sreeragh AR

2
在相同情况下,我收到了非常相似的消息,消息为Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
Hamid Heydarian '18

Answers:


818

这是什么警告?

现代CPU提供大量的低级别的指示,除了一般的算术和逻辑,被称为扩展,例如SSE2,SSE4,AVX等。从维基百科

Advanced Vector ExtensionsAVX)是Intel在2008年3月提出的针对Intel和AMD微处理器的x86指令集体系结构的扩展,并由Intel首先在2011年第一季度发布的Sandy Bridge处理器中得到支持,随后由AMD在Bulldozer处理器中发布。在2011年第三季度发布。AVX提供了新功能,新指令和新编码方案。

特别是,AVX引入了融合乘法累加(FMA)运算,从而加快了线性代数的计算速度,即点积,矩阵乘法,卷积等。几乎每个机器学习训练都涉及很多这些运算,因此将在支持AVX和FMA的CPU上速度更快(最高300%)。该警告指出您的CPU确实支持AVX(万岁!)。

我想在这里强调一下:这CPU有关。

那为什么不使用呢?

因为tensorflow默认发行版是在没有CPU扩展的情况下构建的,例如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'

...或通过设置(export TF_CPP_MIN_LOG_LEVEL=2如果您使用的是Unix)。无论如何,Tensorflow都运行良好,但是您不会看到这些烦人的警告。


如果没有GPU,并希望利用CPU尽可能的,你应该从优化源建立tensorflow 您的 CPU与AVX,AVX2,如果你的CPU支持他们启用了FMA。在这个问题以及GitHub问题中都对此进行了讨论。Tensorflow使用了一个称为bazel的临时构建系统,构建它并不是那么简单,但是肯定是可行的。此后,不仅警告会消失,而且tensorflow性能也应提高。


29
值得一提的是,TensorFlow Serving具有针对未优化的CPU和优化的CPU(AVX,SSE4.1等)的单独安装。详细信息在这里: github.com/tensorflow/serving/blob/…
克里斯·弗雷格利

9
根据对该问题的已删除答案,具有GPU(GTX1080Ti)的i9-7900x(Skylake-AVX512)上的AVX512F“在CIFAR10 1000次迭代中获得28%的增益68-> 48s”。您确定在使用GPU时忽略警告是一个很好的建议吗?除非该注释是虚假的,否则至少在某些情况下,CPU指令集似乎会有所帮助。
彼得·科德斯

1
@PeterCordes如果是这样,我一定会把它包含在我的答案中。但是,“我的模型速度提高了30%”这句话听起来与“我的C ++程序速度提高了30%”一样。究竟是什么型号?是否有手动CPU放置?数据如何传输?例如,在numpy中可能有很多工作。当然,有可能使CPU成为瓶颈,因此在SO上存在很多问题。通常将其视为错误。
Maxim

2
@Maxim:删除的答案的全文为“ 在我的测试中,I9(7900x)GPU(GTX1080Ti)上的AVX512F指令在CIFAR10 1000次迭代中获得28%的增益68s-> 48s ”。因此,不幸的是没有细节(或标点,语法或格式)。
彼得·科德斯

2
显然,如果您使用的是Mac,它将不会使用GPU,stackoverflow.com
questions /

156

使用此命令为您的CPU和OS更新tensorflow二进制文件

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

您可以在此处找到whl文件的下载网址

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


1
我试图在Windows 10 wuth网址stackoverflow.com/questions/47068709/...。我收到一条说zipfile.BadZipFile的错误消息:文件不是zip文件
Tithina Thilina Dayaratne

1
当我下载并使用下载的版本时,它起作用了
Suchitha Thilina Dayaratne '18

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文件的路径>”将其重新安装。如果您拥有3.6 Python和64位Windows,则将此WHL文件下载到您的计算机-github.com/fo40225/tensorflow-windows-wheel/blob/master/1.10.0/…(忽略您看到的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上。为您的CPU优化TensorFlow二进制文件可以节省数小时的运行时间,因此您只需执行一次。



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下载到本地计算机,然后使用此cmd进行安装:

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
这不是错误。这是一个警告,表明sorflow不支持用于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_hubpip install tensorflow_datasets
James Brett,

是的->只是想对您回答的完整性有所帮助。
D亚当斯

哦,我不记得必须单独安装它们了。谢谢!
詹姆斯·布雷特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.