我最近安装了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\u jenkins\home\workspace\rel win\M\windows\PY\36\tensorflow\core\platform\cpu\u feature\u 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)是x86指令的扩展

特别是,AVX引入了fused multiply-accumulate(FMA)运算,这些运算加快了线性代数计算,即点积、矩阵乘法、卷积等.几乎每个机器学习培训都涉及大量这些运算,因此在支持AVX和FMA(高达300%)的CPU上会更快.警告声明您的CPU确实支持AVX(万岁!).

我想在这里强调一下:都是CPU only美元左右.

那为什么不用呢?

因为tensorflow默认发行版是without CPU extensions版,比如SSE4.1,4.2、AVX、AVX2、FMA等.默认版本(来自pip install tensorflow的版本)旨在与尽可能多的CPU兼容.另一个论点是,即使有了这些扩展,CPU也比GPU慢得多,而且预计中大规模的机器学习培训将在GPU上进行.

你该怎么办?

If you have a 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工作正常,但你不会看到这些恼人的警告.


If you don't have a GPU,并且希望尽可能多地利用CPU,如果您的CPU支持的话,you should build tensorflow from the source optimized for your CPU会启用AVX、AVX2和FMA.它已经在this questionthis GitHub issue中讨论过了.TensorFlow使用一个称为bazel的特别构建系统,构建它不是那么简单,但肯定是可行的.在此之后,不仅警告会消失,TensorFlow的性能也会有所提升.

Python相关问答推荐

使用Ubuntu、Python和Weasyprint的Docker文件-venv的问题

根据给定日期的状态过滤查询集

如何使用Google Gemini API为单个提示生成多个响应?

Python:在类对象内的字典中更改所有键的索引,而不是仅更改一个键

重新匹配{ }中包含的文本,其中文本可能包含{{var}

可变参数数量的重载类型(args或kwargs)

Vectorize多个头寸的止盈/止盈回溯测试pythonpandas

从numpy数组和参数创建收件箱

发生异常:TclMessage命令名称无效.!listbox"

优化pytorch函数以消除for循环

Pandas:将多级列名改为一级

driver. find_element无法通过class_name找到元素'""

如何启动下载并在不击中磁盘的情况下呈现响应?

* 动态地 * 修饰Python中的递归函数

搜索按钮不工作,Python tkinter

为什么在FastAPI中创建与数据库的连接时需要使用生成器?

不允许 Select 北极滚动?

Python 3试图访问在线程调用中实例化的类的对象

从一个df列提取单词,分配给另一个列

如何使用matplotlib查看并列直方图