我最近安装了 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!
,这表明安装确实成功,但还有其他问题。
您知道问题是什么以及如何解决吗?
原文由 csg 发布,翻译遵循 CC BY-SA 4.0 许可协议
这个警告是关于什么的?
现代 CPU 提供了许多低级指令,除了通常的算术和逻辑,称为扩展,例如 SSE2、SSE4、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 设备上调度(除非明确设置为不)。在这种情况下,您可以通过以下方式简单地忽略此警告
…或者通过设置
export TF_CPP_MIN_LOG_LEVEL=2
如果你在 Unix 上。无论如何,Tensorflow 运行良好,但您不会看到这些烦人的警告。如果您没有 GPU 并且希望尽可能多地利用 CPU, 您应该从针对 您的 CPU 优化的源构建 tensorflow ,并启用 AVX、AVX2 和 FMA(如果您的 CPU 支持)。在 这个问题 和 这个 GitHub 问题 中已经讨论过它。 Tensorflow 使用一个名为 bazel 的临时构建系统,构建它并不是那么简单,但肯定是可行的。在此之后,不仅警告会消失,tensorflow 的性能也应该会有所提高。