问题描述
这个警告是关于什么的?
现代 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!
,这表明安装确实成功,但还有其他问题。
您知道问题是什么以及如何解决吗?