Tensorflow Warning: The TensorFlow library wasn’t compiled to use SSE,SSE2,SSE3,SSE4.1 instructions,but these are available on your machine and could speed up CPU computations.
在使用tensorflow时,会一段巨长的warning,如下图所示:
总结来说,就是电脑上的tensorflow不能编译SSE, SSE2, SSE3, SSE4.1这些指令集, 但是机器上是有这些指令集的,并且使用这些指令会加快CPU的运行速度.
然而当前的TensorFlow在编译时并没有用到这些指令集,需要手动编译才能加入这些指令集. 所以tensorflow的运行速度会比较慢,不过程序仍然是可以运行的.
原因
出现这种warning的原因是当前使用的tensorflow是采用pip命令安装的,不是从源码编译安装的. 安装的Tensorflow中缺少了对应的模块,需要编译安装。
顺便提一句,当我们使用GPU时并不需要用到CPU,所以这些warning可以忽略.
解决
查阅网上的资料,发现要想消除这个warning有2种方法:
- 在代码前加上以下指令,修改警告信息的显示级别,使得运行不出现warning提示:
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf
为什么加了这句指令就不会出现Warning提示了呢? 因为修改了信息的显示级别:
# 1級
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='1' # 所有信息都显示
# 2級
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2' # 只显示 warning 和 Error
# 3級
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='3' # 只显示 Error
- 重新编译安装tensorflow,在编译的时候使用这些指令集.
具体的步骤在其他博客中有写到,这里只规整一下:
Step1 卸载已经安装的tensorflow
Step2 克隆tensorflow仓库,使用下面的命令会在当前文件夹中创建一个名为“tensorflow”的文件夹,下载的文件都存在里面.
git clone --recurse-submodules https://github.com/tensorflow/tensorflow
Step3 安装bazel,在编译安装tensorflow的时候要用到bazel工具. 按照官网指导输入命令.
Step4 开始编译TensorFlow
a. configure
cd tensorflow
./configure
b. bazel build
#CPU
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
c.生成whl文件
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
d. 安装编译好的包
pip install /tmp/tensorflow_pkg/tensorflow-{version}-none-any.whl
e. 验证TensorFlow是否安装成功
>>>import tensorflow as tf
>>>hello = tf.constant("Hello!TensorFlow!")
>>>sess = tf.Session()
>>>print(sess.run(hello))
测试成功即可,我还没有试验是否可行,先记下来,找合适时间实践.
具体的过程在参考资料[1]中有着详细的讲解.
参考资料:
[1] TensorFlow CPU环境 SSE/AVX/FMA 指令集编译
sess.run()出现如下Warning