我最近安装了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\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!,这表明安装确实是成功的,但还有一些地方是错误的。

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


当前回答

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

安装这个库,并按照页面上的指示,它的工作就像一个魅力!

其他回答

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

conda install tensorflow-mkl

他提供了一次名单,被人删了却看到答案是 下载软件包列表

输出:

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除了提供常见的算术和逻辑之外,还提供了许多低级指令,这些指令被称为扩展,例如SSE2、SSE4、AVX等。来自维基百科:

Advanced Vector Extensions (AVX)是对x86指令的扩展 由Intel和AMD提出的微处理器集架构 英特尔于2008年3月发布,并首先由英特尔支持Sandy处理器 桥处理器在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'

... 或者在Unix上设置export TF_CPP_MIN_LOG_LEVEL=2。Tensorflow工作得很好,但你不会看到这些恼人的警告。


如果你没有GPU,想要尽可能地利用CPU,你应该从为你的CPU优化的源代码构建张量流,并启用AVX、AVX2和FMA(如果你的CPU支持的话)。这个问题和GitHub的问题已经讨论过了。Tensorflow使用一个叫做bazel的临时构建系统,构建它并不是那么简单,但肯定是可行的。在此之后,不仅警告会消失,张量流的性能也会提高。

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

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

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

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

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

安装这个库,并按照页面上的指示,它的工作就像一个魅力!