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

csg*_*csg 577 cpu avx tensorflow

我是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()
Run Code Online (Sandbox Code Playgroud)

(我通过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))
Run Code Online (Sandbox Code Playgroud)

它运行应该和输出Hello, TensorFlow!,这表明安装确实成功,但还有其他错误.

你知道问题是什么以及如何解决它?谢谢.

Max*_*xim 734

这个警告是关于什么的?

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

高级矢量扩展(AVX)是英特尔和AMD于2008年3月提出的英特尔和AMD微处理器的x86指令集架构的扩展,并首次得到英特尔的支持,其中Sandy Bridge处理器于2011年第一季度发布,之后由AMD推出Bulldozer处理器在2011年第3季度.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'
Run Code Online (Sandbox Code Playgroud)

...或者通过设置export TF_CPP_MIN_LOG_LEVEL=2你是否在Unix上.无论如何Tensorflow工作正常,但你不会看到这些烦人的警告.


如果没有GPU,并希望利用CPU尽可能的,你应该从优化源建立tensorflow 您的 CPU与AVX,AVX2,并启用了FMA如果你的CPU支持他们.这个问题以及GitHub问题已经讨论过了.Tensorflow使用一个名为bazel的ad-hoc构建系统,并且构建它并不是那么简单,但肯定是可行的.在此之后,警告不仅会消失,张力流性能也会提高.

  • 值得一提的是,TensorFlow Serving具有针对非优化CPU和优化CPU(AVX,SSE4.1等)的单独安装.细节在这里:https://github.com/tensorflow/serving/blob/8ab0e9aeaff33d44798d6bc429195012483d48cb/tensorflow_serving/g3doc/setup.md#available-binaries (28认同)
  • 根据这个问题的删除答案,带有GPU(GTX1080Ti)的i9-7900x(Skylake-AVX512)上的AVX512F"在CIFAR10 1000次迭代中使得68s-> 48s增加28%".你确定在使用GPU时忽略警告是个好建议吗?除非该评论是伪造的,否则至少在某些情况下似乎可以从CPU指令集中获得一些东西. (8认同)
  • 显然,如果你在 Mac 上,它不会使用 GPU,/sf/ask/3245544221/ (4认同)
  • @Maxim:删除答案的全文是“*在我的测试中,I9 (7900x) GPU (GTX1080Ti) 上的指令 AVX512F 在 CIFAR10 1000 次迭代上获得了 28% 的增益 68s->48s*”。所以不幸的是没有细节(或标点符号、语法或格式)。 (3认同)

Him*_*der 140

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

pip install --ignore-installed --upgrade "Download URL"
Run Code Online (Sandbox Code Playgroud)

可以在此处找到whl文件的下载URL

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

  • 对于Windows,我试过这个.使用"pip uninstall tensorflow"卸载现有的tensorflow,然后使用"pip install <下载的WHL文件的路径>"重新安装它.将此WHL文件下载到您的计算机中 - https://github.com/fo40225/tensorflow-windows-wheel/blob/master/1.10.0/py36/CPU/avx2/tensorflow-1.10.0-cp36-cp36m-win_amd64.如果你有一个3.6 Python和一个64位的窗口(忽略你看到的amd).否则,在github中返回一步并搜索正确的WHL.有用 (5认同)
  • 为我工作。Ubuntu 16.04.4,Python 3.5.2,gcc 5.4.0-下载了whl并已安装。当前使用p2.xLarge aws实例。对于自定义对象检测练习,在Faster R-CNN上运行230类时,性能从每次迭代的16秒提高到9秒。 (2认同)

Wes*_*sam 23

使用GPU优化CPU

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

此外,还有一些性能增强技巧可以充分利用您的CPU. TensorFlow的性能指南建议如下:

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

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


Fla*_*ayn 11

对于Windows,您可以检查由AVX2编译的TensorFlow车轮的官方英特尔MKL优化。此解决方案加快了我的推断速度,达到x3。

conda install tensorflow-mkl
Run Code Online (Sandbox Code Playgroud)

  • 安装tensorflow-mkl后仍然收到此警告“您的CPU支持此TensorFlow二进制文件未编译为使用的指令:AVX AVX2”。知道为什么吗? (2认同)

Jam*_*ett 9

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

  1. 卸载张量流:
    pip uninstall tensorflow
Run Code Online (Sandbox Code Playgroud)
  1. 卸载 tensorflow-gpu:(即使您不确定是否安装了它,也要确保运行它)
    pip uninstall tensorflow-gpu
Run Code Online (Sandbox Code Playgroud)
  1. 安装特定的 tensorflow-gpu 版本:
    pip install tensorflow-gpu==2.0.0
    pip install tensorflow_hub
    pip install tensorflow_datasets
Run Code Online (Sandbox Code Playgroud)

您可以通过将以下代码添加到 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")
Run Code Online (Sandbox Code Playgroud)

运行文件,然后输出应该是这样的:

Version:  2.0.0
Eager mode:  True
Hub Version:  0.7.0
GPU is available
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


Z.W*_*Wei 7

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

pip install --ignore-installed --upgrade "URL"
Run Code Online (Sandbox Code Playgroud)

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

pip install --ignore-installed --upgrade /path/target.whl
Run Code Online (Sandbox Code Playgroud)


shi*_*una 6

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

安装这个库并按照页面上的说明进行操作,它就像一个魅力!


Haz*_*yan 5

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

  • 这不是错误。这是一个警告,表明sorflow不支持AVX for CPU。如果您不想看到它,只需通过设置* os.environ ['TF_CPP_MIN_LOG_LEVEL'] ='2'*将其关闭 (2认同)