由于我的笔记本是农卡,没法安装CUDA加速,而且我的显卡只有2G显存,安装OpenCL费力不讨好,而且由于我有一个Google云的300美元的体验,所以可以在Google云上使用TPU来进行加速,所以我就干脆不安装显卡加速,但是Tensorflow提供了指令集优化,由于默认使用pip安装没有提供这个功能,所以只能手动编译安装
假如你是用pip
安装的Tensorflow你可以会得到下面警告
the tensorflow library wasn't compiled to use sse4.1 instructions
安装步骤 #
1. 首先你得先看看你CPU支持什么指令集
cat /proc/cpuinfo|grep flags
执行这个指令就能看到你所支持的指令集
最新的tensorflow
1.12不需要这步,可以根据你的CPU进行推测
~~2. 然后安装bazel
由于直接从源代码安装比较简单,所以直接从github上面下载0.18.1
相对应的版本就行(最好不要使用最新版,最新版没法编译)
3. 安装完之后下载tensorflow
源码
mkdir github && cd github
git clone --recurse-submodules https://github.com/tensorflow/tensorflow
cd tensorflow
./configure
接下来一路选择N
就行
4. 生成whl
文件
bazel build -c opt –copt=-msse3 –copt=-msse4.1 –copt=-msse4.2 –copt=-mavx –copt=-mavx2 –copt=-mfma //tensorflow/tools/pip_package:build_pip_package
在源码处开始编译,注意copt
命令主要是添加指令集支持,这里你要看看上面的指令集(去掉m就是你的指令集,如-msse3指令集为sse3)你的CPU是否支持(一般都支持我的I5 4200U都支持),如果不支持删掉那个就行
这里你安装的时间比较长,要看你的CPU了
最新版不需要这么复杂了,直接
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
当然如果你想开启MKL
也可以在opt
加上改成--config mkl
最新版使用bazel
编译由于依赖网络下载,而我大天朝的网络一直报check-sum错误,官方说是我们网络的问题,我在我香港服务器尝试了一下,相同的环境下使用bazel
是能安装的,但是由于安装到后面bazel
需要太多内存了,所以直接爆照,而我本地内存大然而尝试了N多方法(尝试使用proxychain
由于安装时需要连接本地bazel
服务器,而设置过滤本地网络又没有用,也尝试使用全局代理也绕不过去),最终没有办法只能安装一个别人已经编译好的CPU的加速的。现在放出地址
你找一个你操作系统对应以及和你Python版本对应的下载下来用pip
安装一下就可以了。
- 验证
退出安装目录运行python
执行下面两句
import tensorflow as tf;sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
bazel --host_jvm_args="-Dhttp.proxyHost=localhost -Dhttp.proxyPort=8123 -Dhttps.proxyHost=localhost -Dhttps.proxyPort=8123" build --config=mkl //tensorflow/tools/pip_package:build_pip_package
总结 #
如果没有报上面的不支持指令集的warning,那么你的CPU指令集优化版就安装好了,当然这个加速效果因CPU而异,对于Xeon SP系列(100核心以上)已经能加速到50倍,同GPU差距也就2倍了(原来可是100倍),但是对于我的笔记本来说,加速效果可能就在30%左右(核心少),所以当前加速性价比最高的还是GPU加速,骚年还是买个好一点的GPU吧,没事还可以吃吃鸡。
经过我测试在I7 9700K
下相同的mnist
数据下运行,不使用CPU指令优化比使用CPU指令优化下速度还要更快,所以在高版本下的Tensorflow CPU版其实优不优化都无所谓,推荐还是使用GPU加速