运行环境 : python 3.6.0
第三方库 : tensorflow 1.9.0
问题 :
安装的 tensorflow 是 CPU 版本的 , 使用的 pip install tensorflow 清华镜像 , 安装一切顺利 , 程序也可以正常跑 , 问题是在程序运行过程中会本出来这么一句红色字体 , 虽然程序能跑 , 但是心里总觉得出现这种东西就是特别的不舒服 ...
2019-07-25 09:00:48.684950: I T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:141]
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
什么意思呢 ?
是这么个意思 : 您的CPU支持TensorFlow二进制文件未编译为使用的指令:AVX2
原因 : 除了通常的算数和逻辑 , 现代 CPU 提供了很多低级指令 , 成为扩展 , 例如 , SSE2 , SSE4 , AVX 等
AVX指令集是Sandy Bridge和Larrabee架构下的新指令集 。AVX是在之前的128位扩展到和256位的单指令多数据流。而Sandy Bridge的单指令多数据流演算单元扩展到256位的同时数据传输也获得了提升,所以从理论上看CPU内核浮点运算性能提升到了2倍。
Intel AVX指令集,在单指令多数据流计算性能增强的同时也沿用了的MMX/SSE指令集。不过和MMX/SSE的不同点在于增强的AVX指令,从指令的格式上就发生了很大的变化。x86(IA-32/Intel 64)架构的基础上增加了prefix(Prefix),所以实现了新的命令,也使更加复杂的指令得以实现,从而提升了x86 CPU的性能 。
当然 :
这个仅仅限制于CPU 。 如果你有一个 GPU , 这不是你该担心的事情 , 因为大多数昂贵的操作一般都会被分到 GPU 设备上 (除非呦明确的书名) 。 在这种情况下可以简单的忽略这种警告
那么为什么会有这种警告呢 ?
由于 tensorflow 默认分布是在没有 CPU 扩展的情况下构建的 , 例如 SSE4.1 , SSE4.2, AVX, AVX2, FMA 等 。默认版本(来自pip install tensorflow的版本)旨在与尽可能多的CPU兼容。另一个观点是,即使使用这些扩展名,CPU的速度也要比GPU慢很多,并且期望在GPU上执行中型和大型机器学习培训。
解决方法 :
- 如果安装的是GPU版本
如果你有一个GPU,你不应该关心AVX的支持,因为大多数昂贵的操作将被分派到一个GPU设备上(除非明确地设置)。在这种情况下,您可以简单地忽略此警告:
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
- 如果安装的是CPU版本(pip install tensorflow)
1.在代码中加入如下代码,忽略警告:
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'2.编译TensorFlow源码
如果您没有GPU并且希望尽可能多地利用CPU,那么如果您的CPU支持AVX,AVX2和FMA,则应该从针对CPU优化的源构建tensorflow。在这个问题中已经讨论过这个问题,也是这个GitHub问题。 Tensorflow使用称为bazel的ad-hoc构建系统,构建它并不是那么简单,但肯定是可行的。在此之后,不仅警告消失,tensorflow性能也应该改善。
其实呢 , 这并不是错误 , 只是个警告 , 可以用 os 模块来设置警告等级 , 就 OK