您的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: I C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\36\tensorflow\core\平台\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!,这表明安装确实成功,但还有其他问题。

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

632143 次浏览

这个警告是关于什么的?

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

高级矢量扩展AVX)是x86指令的扩展 由Intel和AMD提出的微处理器集架构 英特尔于2008年3月首次支持英特尔与桑迪 桥处理器在2011年第一季度出货,后来由AMD提供 推土机处理器于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 take advantage of AVX/FMA to run faster
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

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


如果你没有GPU并希望尽可能地利用CPU,您应该从为您的CPU优化的源代码构建TensorFlow启用AVX、AVX2和FMA,如果你的CPU支持它们。这在这个问题这个github问题中已经讨论过。Tensorflow使用一个名为bazel的临时构建系统,构建它不是那么简单,但肯定是可行的。之后,不仅警告会消失,Tensorflow性能也应该得到提高。

使用此命令更新CPU和操作系统的Tensorflow二进制文件

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

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

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

使用GPU进行CPU优化

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

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

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

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

对于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

对于Windows,您可以检查使用AVX2编译的针对TensorFlow的官方英特尔MKL优化轮子。这个解决方案加快了我的推理速度~x3。

conda install tensorflow-mkl

如果你使用pip版本的TensorFlow,这意味着它已经编译并且你只是在安装它。基本上你安装了TensorFlow-GPU,但是当你从存储库下载它并试图构建它时,你应该使用CPU AVX支持来构建它。如果你忽略它,每次在CPU上运行时都会收到警告。你也可以看看那些。

什么是AVX Cpu支持TensorFlow

我发现解决这个问题的最简单方法是卸载所有内容,然后安装特定版本的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

希望这有帮助

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

安装此库并按照页面上的指示进行操作,它的工作原理就像一个魅力!

尝试使用anaconda。我也有同样的错误。唯一的选择是从源代码构建Tensorflow,这需要很长时间。我尝试使用conda,它起作用了。

  1. 在蟒蛇中创建一个新的环境。
  2. conda install -c conda-forge tensorflow

然后,它奏效了。

他提供过一次列表,被别人删除了但看到的答案是 下载软件包列表

输出:

F:\temp\Python>python test_tf_logics_.py
[0, 0, 26, 12, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0]
[ 0  0  0 26 12  0  0  0  2  0  0  0  0  0  0  0  0]
[ 0  0 26 12  0  0  0  2  0  0  0  0  0  0  0  0  0]
2022-03-23 15:47:05.516025: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2022-03-23 15:47:06.161476: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1525] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 10 MB memory:  -> device: 0, name: NVIDIA GeForce GTX 1060 6GB, pci bus id: 0000:01:00.0, compute capability: 6.1
[0 0 2 0 0 0 0 7 0 0 0 0 0 0 0 0 0]
...

输出屏幕

正如消息所说,您的CPU支持未编译为使用TensorFlow二进制的指令。这不应该是CPU版本的TensorFlow的问题,因为它不执行AVX(高级矢量扩展)指令。 但是,似乎TensorFlow在代码的某些部分使用了AVX指令,并且消息只是一个警告,您可以放心地忽略它。 您可以使用AVX指令编译自己的TensorFlow版本。