Blog的Github地址:github.com/liuyan731/b…html
最近上线了两个机器学习Python服务,可是在线上的性能并非特别好,并且CPU的负载很是高。而后发现是安装的Tensorflow未使用AVX指令集致使的。今天分享一下调试方法和解决方案。python
最近发现线上Tensorflow python服务CPU消耗太高,服务性能也很是差,而后分析缘由,测试服务器上使用timeline工具查看预测操做的耗时以下图:c++
发现整个计算过程消耗时间过长(30ms)对比本机(使用GPU加速,服务器机器只用于提供服务,无GPU)耗时差异巨大(1ms,以下图)git
同时发现两个timeline上面的op的名称不同,在测试服务器上操做为:_MklConv2DWithBias、_MklRelu等,在本机上为Conv2D、Relu等。github
这时想到在运行Tensorflow的时候,import会warning提示没有使用intel avx、sse指令集:shell
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2性能优化
The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.服务器
The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.app
The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.机器学习
由于这个只是warning并不影响程序的运行,因此一直没有在乎,同时当时在网上查找解决方案,有不少“建议”让无论或直接把这个warning关掉...
考虑到这个AVX/SSE指令集可能会提升性能,因此着手从新编译安装Tensorflow,编译安装能够参考:stackoverflow.com/questions/4… ,过程仍是有点复杂,须要使用bazel。
可是我并无真正去编译安装orz,由于发现咱们使用的Tensorflow 1.6.0 已经开始使用AVX指令集进行预编译了,以下图:
可是为什么仍是会有warning警告呢?
与小组的另外一位同窗讨论,发现他使用的tensorflow1.6.0并不会有avx warning,细问之下发现他是使用pip(阿里云)安装的,而我是使用conda(清华镜像)安装的。
考虑到conda镜像和pip镜像的可能不一致,将conda安装的Tensorflow卸载,从新使用pip安装,avx warning消失。
从新运行服务并打印timeline,以下图:
总体时间降低到2ms,性能大大提高,同时CPU负载大大下降!至此性能优化到合理的水平。
因此至少对于Tensorflow 1.6.0版本pip安装与conda安装是不一致的。
ps
mkdir .pip
vi .pip/pip.conf
[list]
format=columns
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
复制代码
程序中的warning也是须要引发你们足够的重视,说不定里面就有一个大坑。。。
2018/4/22 done
此文章也同步至我的Github博客