Tensorflow針對CPU的編譯優化加速-解決Not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA

本文介紹Tensorlfow 針對 CPU SSE4.1 SSE4.2 AVX AVX2 FMA 的編譯優化,以提升Tensorflow在CPU上的計算速度,實測可以提升兩倍以上的速度。

1、問題

在用 pip 安裝tensorflow的CPU版本後,在運行的時候通常會出現如下提示:Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA

該提示說明你的CPU支持AVX擴展,但是你安裝的TensorFlow版本無法編譯使用。而AVX的利用可以大大提升線性代數運算。

由於AVX不是所有CPU都支持(實際上08年以後的intel  CPU都支持...),所以通過 pip install 安裝的 tensorflow CPU 版本是不支持AVX的。

---------------

所謂AVX,全稱爲高級矢量擴展(Advanced Vector eXtensions,AVX)是英特爾在2008年3月提出的英特爾和AMD微處理器的x86指令集體系結構的擴展,英特爾首先通過Sandy Bridge處理器在2011年第一季度推出,隨後由AMD推出Bulldozer處理器在2011年第三季度.AVX提供了新功能,新指令和新編碼方案。

特別是,AVX引入了融合乘法累加(FMA)操作,加速了線性代數計算,即點積,矩陣乘法,卷積等。幾乎所有機器學習訓練都涉及大量這些操作,因此將會支持AVX和FMA的CPU(最高達300%)更快。該警告指出您的CPU確實支持AVX。

---------------

2、AVX編譯優化

 Tensorflow使用谷歌開源的 Bazel 自動化構建工具編譯項目,有一定的學習成本。

但是可以藉助github上編譯好的版本進行安裝。 

(1)linux/Mac OS 編譯

github地址: https://github.com/lakshayg/tensorflow-build

下表爲開源項目中的一部分,根據Tensorflow、Ubuntu、GCC、和python版本選擇對應的下載鏈接。

實際上版本並沒有表中那麼嚴格的限制,比如tensorflow版本,版本 1.4.0~1.13.0的主要API變動不大,假如表格中沒有對應版本的話,可以選最近的版本,實測是可以通過的。

同樣的,GCC版本假如高於表中的版本,也選最近的低版本即可

操作系統也不一定是Ubuntu,應該Debian系的都可以。

TF HW OS GCC Python Supports  
1.9.0 CPU Ubuntu 16.04 5.4 3.6.6 FMA, AVX, AVX2, SSE4.1, SSE4.2 Download
1.9.0 CPU Ubuntu 16.04 5.4 3.5.2 FMA, AVX, AVX2, SSE4.1, SSE4.2 Download
1.9.0 CPU Ubuntu 16.04 5.4 2.7.12 FMA, AVX, AVX2, SSE4.1, SSE4.2 Download
1.9.0 CPU Ubuntu 18.04 7.3 3.6.5 FMA, AVX, AVX2, SSE4.1, SSE4.2 Download
1.10.0 CPU Ubuntu 18.04 7.3 3.6.5 FMA, AVX, AVX2, SSE4.1, SSE4.2 Download
1.10.0 CPU Ubuntu 18.04 7.3 2.7.15rc1 FMA, AVX, AVX2, SSE4.1, SSE4.2 Download

下載後得到 tensorflow-1.9.0-cp36-cp36m-linux_x86_64.whl 類似的文件,然後直接在對應的環境中:

pip install tensorflow-1.9.0-cp36-cp36m-linux_x86_64.whl

或者:

conda install tensorflow-1.9.0-cp36-cp36m-linux_x86_64.whl

然後再運行項目,AVX 相關的警告就消失了,而且模型訓練和測試速度應該有大幅提升。

(2)windows 編譯

github 地址:https://github.com/fo40225/tensorflow-windows-wheel

方法同上,找到對應的版本 pip install 或者conda install 即可

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章