我最近安装了 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!,这表明安装确实成功,但还有其他问题。
Hello, TensorFlow!
您知道问题是什么以及如何解决吗?
现代 CPU 提供了许多低级指令,除了通常的算术和逻辑,称为扩展,例如 SSE2、SSE4、AVX 等。来自维基百科:
高级矢量扩展 ( AVX ) 是英特尔于 2008 年 3 月提出的用于英特尔和 AMD 微处理器的 x86 指令集架构的扩展,最初由英特尔在 2011 年第一季度推出的 Sandy Bridge 处理器提供支持,随后由 AMD 推出的 Bulldozer 处理器提供支持2011 年第三季度。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 上执行。
pip install tensorflow
如果您有 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 运行良好,但您不会看到这些烦人的警告。
export TF_CPP_MIN_LOG_LEVEL=2
如果您没有 GPU 并且希望尽可能多地利用 CPU,您应该从针对 您的 CPU 优化的源构建 tensorflow __,并启用 AVX、AVX2 和 FMA(如果您的 CPU 支持)。 在这个问题和这个 GitHub 问题中已经讨论过它。Tensorflow 使用一个名为bazel的临时构建系统,构建它并不是那么简单,但肯定是可行的。在此之后,不仅警告会消失,tensorflow 的性能也应该会有所提高。