我是 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 Extensions ( AVX )是 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 文件的下载网址
即使您拥有 GPU 并将其用于训练和推理,也可以通过从源代码安装 TensorFlow 来获得性能提升。原因是某些 TF 操作仅具有 CPU 实现,不能在您的 GPU 上运行。
另外,还有一些性能增强技巧可以充分利用您的 CPU。 TensorFlow 的性能指南建议以下内容:
将输入管道操作放在 CPU 上可以显着提高性能。在输入管道中使用 CPU 可以使 GPU 腾出精力来进行培训。
为了获得最佳性能,您应该编写代码以利用 CPU 和 GPU 协同工作,如果有的话,不要将其全部转储到 GPU 上。为您的 CPU 优化 TensorFlow 二进制文件可以节省数小时的运行时间,因此您只需执行一次。