安裝Tensorflow使用AVX指令集

Blog的Github地址:github.com/liuyan731/b…html


最近上線了兩個機器學習Python服務,可是在線上的性能並非特別好,並且CPU的負載很是高。而後發現是安裝的Tensorflow未使用AVX指令集致使的。今天分享一下調試方法和解決方案。python

未使用AVX指令集warning

最近發現線上Tensorflow python服務CPU消耗太高,服務性能也很是差,而後分析緣由,測試服務器上使用timeline工具查看預測操做的耗時以下圖:c++

timelime-img-1

發現整個計算過程消耗時間過長(30ms)對比本機(使用GPU加速,服務器機器只用於提供服務,無GPU)耗時差異巨大(1ms,以下圖)git

timelime-img-2

同時發現兩個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指令集進行預編譯了,以下圖:

tf-release

可是爲什麼仍是會有warning警告呢?

pip與conda安裝的Tensorflow不一致?

與小組的另外一位同窗討論,發現他使用的tensorflow1.6.0並不會有avx warning,細問之下發現他是使用pip(阿里雲)安裝的,而我是使用conda(清華鏡像)安裝的。

考慮到conda鏡像和pip鏡像的可能不一致,將conda安裝的Tensorflow卸載,從新使用pip安裝,avx warning消失。

從新運行服務並打印timeline,以下圖:

timelime-img-3

總體時間降低到2ms,性能大大提高,同時CPU負載大大下降!至此性能優化到合理的水平。

因此至少對於Tensorflow 1.6.0版本pip安裝與conda安裝是不一致的。

ps

  • 使用pip安裝完Tensorflow後,從新import tensorflow報錯:ImportError: /usr/lib64/libstdc++.so.6: version CXXABI_1.3.7’ not found 的解決方案
  • AVX: Advanced Vector Extensions(AVX) are extensions to the x86 instruction set architecture for microprocessors from Intel and AMD proposed by Intel in March 2008 and first supported by Intel with the Sandy Bridge processor shipping in Q1 2011 and later on by AMD with the Bulldozer processor shipping in Q3 2011. AVX provides new features, new instructions and a new coding scheme.
  • SSE:In computing, Streaming SIMD Extensions (SSE) is an SIMD instruction set extension to the x86 architecture, designed by Intel and introduced in 1999 in their Pentium III series of processors shortly after the appearance of AMD's 3DNow!. SSE contains 70 new instructions, most of which work on single precision floating point data. SIMD instructions can greatly increase performance when exactly the same operations are to be performed on multiple data objects. Typical applications are digital signal processing and graphics processing.

補充

TF Timeline模塊

參考:Tensorflow Timeline介紹及簡單使用

pip使用國內鏡像

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博客

相關文章
相關標籤/搜索