您的 CPU 支持未编译此 TensorFlow 二进制文件以使用的指令:AVX AVX2

Posted

技术标签:

【中文标题】您的 CPU 支持未编译此 TensorFlow 二进制文件以使用的指令:AVX AVX2【英文标题】:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2 【发布时间】:2017-11-02 06:10:46 【问题描述】:

我最近安装了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: I C:\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!,表示安装确实成功,但还有其他问题。

您知道问题出在哪里以及如何解决吗?

【问题讨论】:

tf 工作,它吐出的信息只是意味着它没有尽可能快。要摆脱它,您可以从源代码安装它,请参阅here 我也面临同样的问题,你可以成功运行的命令。 >>> sess = tf.Session() 2017-11-05 18:02:44.670825: I C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\ 35\tensorflow\core\platform\cpu_feature_guard.cc:137] Your CPU supports instruct ions that this TensorFlow binary was not compiled to use: AVX AVX2 @Ben 所以这只是一个警告,但一切都会正常工作吗? (至少从初学者的角度来看) 要使用 AVX 指令编译 Tensorflow,请参阅answer 我在同样的情况下收到了一条非常相似的消息,消息是Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 【参考方案1】:

这个警告是关于什么的?

现代 CPU 提供了许多低级指令,除了通常的算术和逻辑,称为扩展,例如SSE2、SSE4、AVX等来自Wikipedia:

Advanced Vector Extensions (AVX) 是 x86 指令的扩展 由 Intel 和 AMD 提出的微处理器集架构 英特尔于 2008 年 3 月首次由英特尔支持 Sandy 桥处理器于 2011 年第一季度及之后由 AMD 与 Bulldozer 处理器于 2011 年第三季度出货。AVX 提供新功能, 新指令和新编码方案。

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

我想在这里强调一下:这完全是关于CPU 而已

那为什么不用呢?

因为 tensorflow 默认发行版是在 without CPU extensions 构建的,例如 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'

... 或设置 export TF_CPP_MIN_LOG_LEVEL=2 如果你在 Unix 上。无论如何,Tensorflow 运行良好,但您不会看到这些烦人的警告。


如果您没有 GPU 并且希望尽可能多地利用 CPU,您应该从针对您的 CPU 优化的源代码构建 tensorflow 如果您的 CPU 支持,则启用 AVX、AVX2 和 FMA。它已在this question 和this GitHub issue 中讨论过。 Tensorflow 使用一个名为bazel 的临时构建系统,构建它并不是那么简单,但肯定是可行的。之后,不仅警告会消失,tensorflow 的性能也应该会有所提升。

【讨论】:

值得一提的是,TensorFlow Serving 对非优化 CPU 和优化 CPU(AVX、SSE4.1 等)有单独的安装。详情在这里:github.com/tensorflow/serving/blob/… 根据该问题的已删除答案,带有 GPU (GTX1080Ti) 的 i9-7900x (Skylake-AVX512) 上的 AVX512F“在 CIFAR10 1000 次迭代中在 68s->48s 上获得 28% 的增益”。您确定在使用 GPU 时忽略警告是个好建议吗?除非该评论是虚假的,否则至少在某些情况下,CPU 指令集似乎可以有所收获。 @PeterCordes 如果是这样,我肯定会将其包含在我的答案中。但是“我的模型加速了 30%”这句话听起来和“我的 C++ 程序加速了 30%”是一样的。具体是什么型号?是否有手动 CPU 放置?数据如何传输?例如,在 numpy 中可能有很多工作。当然,有可能使 CPU 成为瓶颈,并且在 SO 上有很多关于它的问题。它通常被认为是一个错误。 @Maxim:已删除答案的整个文本是“在我的测试中,I9 (7900x) GPU (GTX1080Ti) 上的指令 AVX512F 在 CIFAR10 1000 上 68s->48s 获得了 28% 的增益迭代”。所以很遗憾没有细节(或标点符号、语法或格式)。 显然如果你在 Mac 上,它不会使用 GPU,***.com/questions/46364917/…【参考方案2】:

使用此命令为您的 CPU 和操作系统更新 tensorflow 二进制文件

pip install --ignore-installed --upgrade "Download URL"

whl文件的下载地址在这里

https://github.com/lakshayg/tensorflow-build

【讨论】:

我在 Windows 10 wuth url ***.com/questions/47068709/… 上进行了尝试。我收到一条错误消息,提示 zipfile.BadZipFile: File is not a zip file 当我下载并使用下载的版本时它工作了 任何人得到“错误说 zipfile.BadZipFile:文件不是 zip 文件”应该得到原始链接,如 cuda9.2avx2 链接是 github.com/fo40225/tensorflow-windows-wheel/raw/master/1.9.0/… 对于windows,我试过这个。使用“pip uninstall tensorflow”卸载现有的 tensorflow,然后使用“pip install ”重新安装。将此 WHL 文件下载到您的计算机 - github.com/fo40225/tensorflow-windows-wheel/blob/master/1.10.0/…,如果您有 3.6 Python 和 64 位 Windows(忽略您看到的 amd)。否则,请在 github 中后退一步并搜索正确的 WHL。它有效 为我工作。 Ubuntu 16.04.4、Python 3.5.2、gcc 5.4.0 - 下载并安装了 whl。当前使用 p2.xLarge aws 实例。对于在 Faster R-CNN 上运行 230 个类的自定义对象检测练习,性能从每次迭代 16 秒提高到 9 秒。【参考方案3】:

使用 GPU 进行 CPU 优化

即使您有 GPU 并将其用于训练和推理,从源代码安装 TensorFlow 也可以获得性能提升。原因是一些 TF 操作只有 CPU 实现,不能在你的 GPU 上运行。

此外,还有一些性能增强技巧可以充分利用您的 CPU。 TensorFlow's performance guide 建议如下:

将输入管道操作放在 CPU 上可以显着提高性能。将 CPU 用于输入管道可以让 GPU 专注于训练。

为了获得最佳性能,您应该编写代码以利用您的 CPU 和 GPU 协同工作,而不是将其全部转储到您的 GPU 上(如果有的话)。 让您的 TensorFlow 二进制文件针对您的 CPU 进行优化可以节省数小时的运行时间,而且您必须这样做一次。

【讨论】:

【参考方案4】:

对于 Windows,您可以检查使用 AVX2 编译的 official Intel MKL optimization for TensorFlow ***。这个解决方案加快了我的推理速度~x3。

conda install tensorflow-mkl

【讨论】:

安装 tensorflow-mkl "Your CPU support instructions that this TensorFlow binary was not compiled to use: AVX AVX2" 后仍然收到此警告。知道为什么吗? @Pinch:根据the answers to this question,只要有MKL就可以忽略警告。 @Pinch:特别是,我看到特定工作负载的 1.5 倍改进,仅使用 tensorflow-mkl,即使我仍然遇到错误。也许有趣的是,我没有看到 WSL 的改进。在这里,tensorflowtensorflow-mkl 都比 Windows 基线提供了 2 倍的改进。【参考方案5】:

对于 Windows(感谢所有者 f040225),请转到此处:https://github.com/fo40225/tensorflow-windows-wheel 根据“tf + python + cpu_instruction_extension”的组合获取您环境的 url。然后使用这个cmd安装:

pip install --ignore-installed --upgrade "URL"

如果遇到“File is not a zip file”错误,将.whl下载到本地电脑,使用这个cmd安装:

pip install --ignore-installed --upgrade /path/target.whl

【讨论】:

GPU 文件被分成几部分并标记为 .7z 文件。如何将它们拼凑在一起? @user3496060 我用winrar解压分割文件【参考方案6】:

如果您使用 TensorFlow 的 pip 版本,则表示它已经编译好,您只是在安装它。基本上你安装了 TensorFlow-GPU,但是当你从存储库下载它并尝试构建它时,你应该使用 CPU AVX 支持来构建它。如果忽略它,每次在 CPU 上运行时都会收到警告。你也可以看看这些。

Proper way to compile Tensorflow with SSE4.2 and AVX

What is AVX Cpu support in tensorflow

【讨论】:

我怎样才能避免这个错误,我需要注意什么? 这不是错误。这是一个警告,thensorflow 不支持 cpu 的 AVX。如果您不想看到它,只需通过设置 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' 将其关闭【参考方案7】:

我发现解决此问题的最简单方法是卸载所有内容,然后安装特定版本的 tensorflow-gpu:

    卸载张量流:
    pip uninstall tensorflow
    卸载 tensorflow-gpu:(即使您不确定是否安装了它,也要确保运行它)
    pip uninstall tensorflow-gpu
    安装特定的 tensorflow-gpu 版本:
    pip install tensorflow-gpu==2.0.0
    pip install tensorflow_hub
    pip install tensorflow_datasets

您可以通过将以下代码添加到 python 文件中来检查这是否有效:

from __future__ import absolute_import, division, print_function, unicode_literals

import numpy as np

import tensorflow as tf
import tensorflow_hub as hub
import tensorflow_datasets as tfds

print("Version: ", tf.__version__)
print("Eager mode: ", tf.executing_eagerly())
print("Hub Version: ", hub.__version__)
print("GPU is", "available" if tf.config.experimental.list_physical_devices("GPU") else "NOT AVAILABLE")

运行文件,然后输出应该是这样的:

Version:  2.0.0
Eager mode:  True
Hub Version:  0.7.0
GPU is available

希望对你有帮助

【讨论】:

ModuleNotFoundError: No module named 'tensorflow_hub' ModuleNotFoundError: No module named 'tensorflow_datasets' 尝试单独安装模块:pip install tensorflow_hubpip install tensorflow_datasets 是的 -> 只是想帮助你回答的完整性。 哦,我不记得必须单独安装这些。谢谢!【参考方案8】:

对我有用的是这个库https://pypi.org/project/silence-tensorflow/

安装此库并按照页面上的说明进行操作,它就像一个魅力!

【讨论】:

【参考方案9】:

尝试使用 anaconda。我有同样的错误。一个唯一的选择是从源代码构建 tensorflow,这需要很长时间。我尝试使用 conda 并且成功了。

    在 anaconda 中创建一个新环境。 conda -c conda-forge tensorflow

然后,它起作用了。

【讨论】:

CommandNotFoundError: No command 'conda conda-forge'. - 所以,我跟着这个:conda-forge.org。但是,无论如何,我得到了这个:I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: SSE4.1 SSE4.2 AVX AVX2 FMA

以上是关于您的 CPU 支持未编译此 TensorFlow 二进制文件以使用的指令:AVX AVX2的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 TensorFlow GPU?

硬Gpu:配置

张量流有问题吗?

tensorflow提示:此版本TensorFlow不支持AVX2但是你的cpu支持

tensorflow下载和安装

如何编译 TensorFlow 二进制文件以使用 AVX2、AVX512F、FMA?