协慌网

登录 贡献 社区

您的 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: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! ,表明安装确实成功,但是还有其他错误。

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

答案

这个警告是关于什么的?

现代 CPU 提供大量的低级别的指示,除了一般的算术和逻辑,被称为扩展,例如 SSE2,SSE4,AVX 等。从维基百科

Advanced Vector ExtensionsAVX )是 Intel 在 2008 年 3 月提出的针对 Intel 和 AMD 的 x86 指令集体系结构的扩展,并由 Intel 首先在 2011 年第一季度发布的 Sandy Bridge 处理器中得到支持,然后在 AMD 随 Bulldozer 处理器的发布而得到支持。在 2011 年第三季度发布。AVX 提供了新功能,新指令和新编码方案。

特别是,AVX 引入了融合乘法累加(FMA)运算,从而加快了线性代数的计算速度,即点积,矩阵乘法,卷积等。几乎每个机器学习训练都涉及很多这些运算,因此将在支持 AVX 和 FMA(最高 300%)的 CPU 上速度更快。该警告指出您的 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 尽可能的,你应该与AVX,AVX2你的CPU 优化的源代码编译 tensorflow,如果你的 CPU 支持他们启用了 FMA。在这个问题以及GitHub 问题中都对此进行了讨论。 Tensorflow 使用一个称为bazel的临时构建系统,构建它并不是那么简单,但是肯定是可行的。此后,不仅警告会消失,而且 tensorflow 性能也应提高。

使用此命令为您的 CPU 和 OS 更新 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 上。为您的 CPU 优化 TensorFlow 二进制文件可以节省数小时的运行时间,因此您只需执行一次。