tensorflow安装CPU指令集(AVX2)警告解决方案

问题原因

在macOS通过pip3 install 安装tensorflow(CPU版)后,运行示例代码

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello).decode())

运行之后可以正常输出

“Hello, TensorFlow!"

但是有一个警告警告提示:

 I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA

在Stack Overflow上面关于这个问题有一个详细的解答

大致翻译一下高赞答案:

Modern CPUs provide a lot of low-level instructions, besides the usual arithmetic and logic, known as extensions, e.g. SSE2, SSE4, AVX, etc. From the Wikipedia:

Advanced Vector Extensions (AVX) are extensions to the x86 instruction set architecture for microprocessors from Intel and AMD proposed by Intel in March 2008 and first supported by Intel with the Sandy Bridge processor shipping in Q1 2011 and later on by AMD with the Bulldozer processor shipping in Q3 2011. AVX provides new features, new instructions and a new coding scheme.
In particular, AVX introduces fused multiply-accumulate (FMA) operations, which speed up linear algebra computation, namely dot-product, matrix multiply, convolution, etc. Almost every machine-learning training involves a great deal of these operations, hence will be faster on a CPU that supports AVX and FMA (up to 300%). The warning states that your CPU does support AVX (hooray!).
I'd like to stress here: it's all about CPU only.

现代CPU提供了一系列低级别的指令集,除了通常的算术和逻辑之外,被称为扩展,例如, SSE2,SSE4,AVX等。
维基百科有描述:

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

特别是,AVX引入了融合乘法累加(FMA)操作,加速了线性代数计算,即点积,矩阵乘法,卷积等。几乎所有机器学习训练都涉及大量这些操作,因此将会 支持AVX和FMA的CPU(最高达300%)更快。 该警告指出您的CPU确实支持AVX(hooray!)。

那为什么没有使用呢?

由于tensorflow默认是在没有CPU扩展的情况下构建的,例如SSE4.1,SSE4.2,AVX,AVX2,FMA等。默认版本(来自pip install tensorflow的版本)旨在与尽可能多的CPU兼容。 另一个观点是,即使使用这些扩展名,CPU的速度也要比GPU低很多,所以它预计中大型机器学习任务应该在GPU上执行。

那我们应该怎么办

如果你有GPU的话,直接忽略这一项即可,因为大部分的高消耗操作都会被分配到GPU上执行(除非你设置了不这么做)。在这种情况下,你可以通过下面这个方式直接忽略这个警告:

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

这种方法只是去掉警告,实际上是没有解决问题的。

如果你没有GPU,你想最大化使用CPU,你应该启动你的CPU的AVX,AVX2以及FMA拓展。在这个问题以及这个GitHub issue里面都有详细的讨论。Tensorflow使用称为bazel的ad-hoc构建系统,构建它并不是那么简单,但肯定是可行的。 在此之后,不仅警告消失,张量流性能也应该改善。

解决方法

什么是SSE4.2和AVX?

SIMD (Single Instruction Multiple Data)单指令流多数据流,是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性技术。

在微处理器中,SIMD则是一个控制器控制多个并行的处理微元,例如Intel的MMX或SSE,以及AMD的3D NOW指令集。

所以说SSE4.2和AVX都是一种SIMD指令集。

对于TF tasks。SSE4.2和AVX使向量和矩阵计算更加高效。具体可以看这个课件

所以该怎么做,大概只能重装一遍tensorflow了。注意这次重装时候要从源码安装,从在源码安装的时候进行相关的设置。

从源码安装的官方教程总体来说还是非常麻烦的,需要很多依赖,安装一些其他的东西。

基本过程可以概括为三步:

  1. 下载TensorFlow源码
  2. 准备安装环境 (此处需要安装很多东西)
  3. 构建pip软件包(一个.whl后缀文件)
  4. 使用pip命令进行本地安装

其中2,3步骤都非常负责,及其容易出错。

最终采用的是另外一种方法。
到这个GitHub repo下载自己对应版本的pip软件包。

<font color =red>一定要对应版本!</font>

版本查看方式

$ python3

Python 3.6.5 (default, Apr 25 2018, 14:23:58) 
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

从中可以得出我们的版本 Python 3.6.5 clang-902.0.29.1,又这两个版本号加上自己的系统名在上面的GitHub repo里面选择对应的软件包。下载下来相当于直接完成了官网教材的前3步。

所以只需要执行第4步。

pip install --ignore-installed --upgrade /path/to/binary.whl

注意 Python3的pip命令是pip3 这条语句可以忽略我们已经安装好的tf包,不需要卸载,会直接升级过去。很方便。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容