运行tensorflow出现「Your CPU supports instructions that this TensorFlow binary was not compiled to use SSE4.1 SSE4.2 AVX AVX2 FMA」问题的原因及解决办法

macOS下tensorflow的下载和安装(通过anaconda)

首先我安装的是通过anaconda安装的CPU版本的tensorflow

1.问题

运行tensorflow时遇到了这样的问题:

1
2
3
Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA

Creating new thread pool with default inter op setting: 4. Tune using inter_op_parallelism_threads for best performance.

翻译一下就是,你的CPU支持SSE4.1 SSE4.2 AVX AVX2 FMA这些拓展,但是无法编译使用

这个不是错误,只是一个警告,告诉你如果从源代码安装tensorflow,那么tensorflow会跑得更快

2.分析

先科普一番

1
2
3
SSE4 (Streaming SIMD Extensions 4)是IntelCore微体系结构和AMDK10(K8L)中所使用的SIMDCPU指令集
AVX指令集(英语:Advanced Vector Extensions,即高级向量扩展指令集)是x86架构处理器中的指令集,被英特尔和AMD的处理器所支持
FMA指令集(英语:Fused-Multiply-Add,即积和熔加运算)是x86架构微处理器上的指令集。FMA指令集是128位元和256位元的流式单指令流多资料流扩充集(SSE)指令集,以进行积和熔加运算。

那么为什么会出现这样的问题呢?

在stackoverflow里找到了答案:

翻译一下就是,很可能你没有利用源代码的方式安装tensorflow,这意味着你安装了别人预先构建的未针对你的体系结构进行优化的二进制文件,这个警告就是想告诉你:你有这些指令集,但是因为二进制文件没有用他们编译,所以这些指令集都用不了

如果用上这些拓展的话,显然会加快计算

3.解决

3.1忽略警告

第一种解决方法是直接忽略警告,这种方法简单粗暴,但是实际上并没有解决问题

在代码中加入如下两句即可:

1
2
import os 
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
1
2
3
4
import tensorflow as tf
hello = tf.constant('Hello,tensorflow')
sess = tf.Session()
print(sess.run(hello))

3.2用源代码安装tensorflow

第二种方法就是麻烦的用源代码安装tensorflow

这样就可以自己编译这些二进制文件以利用上面那串指令集

但是不管再怎么快,CPU也远远快不过GPU,所以不如就照第一种方法凑合着用吧

参考自stackoverflow的这个问题 -> How to compile Tensorflow with SSE4.2 and AVX instructions?

从源代码构建 TensorFlow pip 软件包并将其安装在 macOS 上

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2018-2020 LeFlacon

奶茶一杯 快乐起飞

支付宝
微信