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

问题描述

这个警告是关于什么的?

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

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

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

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

那为什么不用呢?

因为 tensorflow 认发行版是在没有 CPU 扩展的情况下构建的,例如 SSE4.1、SSE4.2、AVX、AVX2、FMA 等。认构建(来自 的pip install tensorflow)旨在与尽可能多的 cpu 兼容。另一个论点是,即使有了这些扩展,cpu 也比 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 运行良好,但您不会看到这些烦人的警告。


并且希望尽可能多地利用 cpu,您应该从针对 ,并启用 AVX、AVX2 和 FMA(如果您的 cpu 支持)。 在这个问题这个 GitHub 问题中已经讨论过它。Tensorflow 使用一个名为bazel的临时构建系统,构建它并不是那么简单,但肯定是可行的。在此之后,不仅警告会消失,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()

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

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