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

2024-12-20 08:37:00
admin
原创
67
摘要:问题描述:我最近安装了 tensorflow(Windows CPU 版本),并收到以下消息:成功安装 tensorflow-1.4.0 tensorflow-tensorboard-0.4.0rc2然后当我试图跑的时候import tensorflow as tf hello = tf.constant('...

问题描述:

我最近安装了 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!,这表明安装确实成功了,但是还有其他错误。

您知道问题是什么以及如何解决它吗?


解决方案 1:

此警告是关于什么的?

现代 CPU 除了提供通常的算术和逻辑之外,还提供了许多低级指令,称为扩展,例如 SSE2、SSE4、AVX 等。摘自维基百科:

高级矢量扩展( AVX ) 是英特尔和 AMD 微处理器 x86 指令集架构的扩展,由英特尔于 2008 年 3 月提出,英特尔首先在 2011 年第一季度推出的 Sandy Bridge 处理器中支持该指令,随后 AMD 在 2011 年第三季度推出的 Bulldozer 处理器中也支持该指令。AVX 提供了新功能、新指令和新的编码方案。

具体来说,AVX 引入了融合乘法累加(FMA) 运算,可加速线性代数计算,即点积、矩阵乘法、卷积等。几乎每个机器学习训练都涉及大量这些运算,因此在支持 AVX 和 FMA 的 CPU 上速度会更快(最高可达 300%)。警告表明您的 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,则应该从针对您的CPU优化的源代码构建 tensorflow,并启用 AVX、AVX2 和 FMA(如果您的 CPU 支持它们)。这个问题和这个 GitHub 问题已经讨论过了。Tensorflow 使用一个名为bazel 的临时构建系统,构建它并不那么简单,但肯定是可行的。在此之后,不仅警告会消失,tensorflow 性能也会提高。

解决方案 2:

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

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

whl 文件的下载地址可以在这里找到

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

解决方案 3:

使用 GPU 进行 CPU 优化

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

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

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

为了获得最佳性能,您应该编写代码以利用 CPU 和 GPU 协同工作,而不是将所有代码都放在 GPU 上(如果有的话)。针对 CPU 优化 TensorFlow 二进制文件可以节省数小时的运行时间,而且您只需执行一次。

解决方案 4:

对于 Windows,您可以查看使用 AVX2 编译的TensorFlow 轮子的官方英特尔 MKL 优化。此解决方案将我的推理速度提高了约 3 倍。

conda install tensorflow-mkl

解决方案 5:

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

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

如果遇到“文件不是 zip 文件”错误,请将 .whl 下载到本地计算机,然后使用此 cmd 进行安装:

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

解决方案 6:

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

使用 SSE4.2 和 AVX 编译 Tensorflow 的正确方法

TensorFlow 中的 AVX CPU 支持是什么

解决方案 7:

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

  1. 卸载 TensorFlow:

pip uninstall tensorflow
  1. 卸载 tensorflow-gpu:(即使不确定是否安装了它,也请确保运行它)

pip uninstall tensorflow-gpu
  1. 安装特定的 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

希望这有帮助

解决方案 8:

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

安装此库并按照页面上的说明进行操作,它会非常有效!

解决方案 9:

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

  1. 在anaconda中创建一个新的环境。

  2. conda install -c conda-forge tensorflow

然后,它就成功了。

解决方案 10:

正如消息所示,您的 CPU 支持 TensorFlow 二进制文件未编译使用的指令。这应该不是 CPU 版本的 TensorFlow 的问题,因为它不执行 AVX(高级矢量扩展)指令。但是,似乎 TensorFlow 在代码的某些部分使用了 AVX 指令,并且该消息只是一个警告,您可以放心地忽略它。您可以使用 AVX 指令编译您自己的 TensorFlow 版本。

解决方案 11:

他提供过一次列表,被人删除了,但看到答案是
下载包列表

输出:

F:    empPython>python test_tf_logics_.py
[0, 0, 26, 12, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0]
[ 0  0  0 26 12  0  0  0  2  0  0  0  0  0  0  0  0]
[ 0  0 26 12  0  0  0  2  0  0  0  0  0  0  0  0  0]
2022-03-23 15:47:05.516025: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2022-03-23 15:47:06.161476: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1525] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 10 MB memory:  -> device: 0, name: NVIDIA GeForce GTX 1060 6GB, pci bus id: 0000:01:00.0, compute capability: 6.1
[0 0 2 0 0 0 0 7 0 0 0 0 0 0 0 0 0]
...
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1000  
  华为作为全球领先的信息与通信技术(ICT)解决方案提供商,其全球化项目的成功离不开高效的项目管理方法。其中,集成产品开发(IPD)流程是华为项目管理体系的核心组成部分。IPD流程不仅帮助华为在复杂的全球化项目中实现了资源的高效整合,还通过跨部门协作和持续优化,确保了项目的高质量交付。本文将通过具体案例,分析华为IPD流...
IPD测试流程   0  
  IPD(Integrated Product Development)是一种以跨职能团队协作为核心的产品开发流程,旨在通过整合资源、优化流程和提高决策效率,实现产品从概念到市场的快速、高效交付。IPD流程的核心思想是将传统的串行开发模式转变为并行开发模式,通过跨部门协作和早期风险识别,减少开发周期中的浪费和返工。这种方...
IPD流程分为几个阶段   0  
  华为的集成产品开发(IPD)流程是企业项目管理中的经典实践,其核心在于通过跨部门协同实现高效的产品开发。IPD流程强调从市场需求到产品交付的全生命周期管理,而跨部门沟通则是这一流程成功的关键。在华为的实践中,跨部门沟通不仅仅是信息的传递,更是团队协作、目标对齐和资源整合的重要手段。本文将深入探讨IPD流程中的跨部门沟通...
IPD项目管理咨询   0  
  IPD流程全称是集成产品开发(Integrated Product Development),它是一种以客户需求为导向、跨部门协作的产品开发模式。与传统产品开发模式相比,IPD强调在产品开发的早期阶段就整合市场、研发、制造、采购等多个部门的资源和能力,通过并行工程和协同工作来提升开发效率。IPD流程的核心在于打破部门壁...
IPD产品开发流程   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用