小编典典

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

all

我最近安装了 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!,这表明安装确实成功,但还有其他问题。

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


阅读 156

收藏
2022-03-02

共1个答案

小编典典

这个警告是关于什么的?

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

高级矢量扩展 ( AVX ) 是英特尔于 2008 年 3 月提出的用于英特尔和 AMD 微处理器的 x86
指令集架构的扩展,最初由英特尔在 2011 年第一季度推出的 Sandy Bridge 处理器提供支持,随后由 AMD 推出的 Bulldozer
处理器提供支持2011 年第三季度。AVX 提供了新功能、新指令和新编码方案。

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

我想在这里强调一下:这都是关于 CPU only 的。

那为什么不用呢?

因为 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
的性能也应该会有所提高。

2022-03-02