現代英特爾® 架構上的 TensorFlow* 優化——正如去年參加Intel AI會議同樣,Intel本身提供了對接本身AI CPU優化版本的Tensorflow,下載連接見後,同時能夠基於谷歌官方

現代英特爾® 架構上的 TensorFlow* 優化

英特爾:Elmoustapha Ould-Ahmed-Vall,Mahmoud Abuzaina,Md Faijul Amin,Jayaram Bobba,Roman S Dubtsov,Evarist M Fomenko,Mukesh Gangadhar,Niranjan Hasabnis,Jing Huang,Deepthi Karkada,Young Jin Kim,Srihari Makineni,Dmitri Mishura,Karthik Raman,AG Ramesh,Vivek V Rane,Michael Riera,Dmitry Sergeev,Vamsi Sripathi,Bhavani Subramanian,Lakshay Tokas,Antonio C Vallesnode

谷歌:Andy Davis,Toby Boyd,Megan Kacholia,Rasmus Larsen,Rajat Monga,Thiru Palanisamy,Vijay Vasudevan,Yao Zhangpython

做爲一款領先的深度學習和機器學習框架,TensorFlow* 對英特爾和谷歌發揮英特爾硬件產品的最佳性能相當重要。本文 向人工智能 (AI) 社區介紹了在基於英特爾® 至強和英特爾® 至強融核™ 處理器的平臺上實施的 TensorFlow* 優化。在去年舉辦的首屆英特爾人工智能日上,英特爾公司的柏安娜和谷歌的 Diane Green 共同宣佈了雙方的合做,這些優化是英特爾和谷歌工程師密切合做取得的成果。linux

咱們介紹了在優化實踐中遇到的各類性能挑戰以及採用的解決方法,還報告了對通用神經網絡模型示例的性能改進。這些優化帶來了多個數量級的性能提高。例如,根據咱們的測量,英特爾® 至強融核™ 處理器 7250 (KNL) 上的訓練性能提高了高達 70 倍,推斷性能提高了高達 85 倍。基於英特爾® 至強® 處理器 E5 v4 (BDW) 和英特爾至強融核處理器 7250 的平臺爲下一代英特爾產品奠基了基礎。用戶尤爲但願今年晚些時候推出的英特爾至強(代號爲 Skylake)和英特爾至強融合(代號爲 Knights Mill)處理器將提供顯著的性能提高。git

在現代 CPU 上優化深度學習模型的性能面臨衆多挑戰,和優化高性能計算 (HPC) 中其餘性能敏感型應用所面臨的挑戰差異不大:github

  1. 須要重構代碼,以利用現代矢量指令。這意味着將全部關鍵基元(如卷積、矩陣乘法和批歸一化)被向量化爲最新 SIMD 指令(英特爾至強處理器爲 AVX2,英特爾至強融核處理器爲d AVX512)。
  2. 要想實現最佳性能,須要特別注意高效利用全部內核。這意味着在特定層或操做實施並行化以及跨層的並行化。
  3. 根據執行單元的須要,提供儘量多的數據。這意味着須要平衡使用預取、緩存限制技術和改進空間和時間局部性的數據格式。

爲了知足這些要求,英特爾開發了衆多優化型深度學習基元,計劃應用於不一樣的深度學習框架,以確保通用構建模塊的高效實施。除了矩陣乘法和卷積之外,建立模塊還包括:web

  • 直接批量卷積
  • 內積
  • 池化:最大、最小、平均
  • 標準化:跨通道局部響應歸一化 (LRN),批歸一化
  • 激活:修正線性單元 (ReLU)
  • 數據操做:多維轉置(轉換)、拆分、合併、求和和縮放。

請參閱 本文,獲取關於面向深度神經網絡的英特爾® 數學核心函數(英特爾® MKL-DNN)的優化基元的更多詳情。算法

在 TensorFlow 中,咱們實施了英特爾優化版運算,以確保這些運算能在任何狀況下利用英特爾 MKL-DNN 基元。同時,這也是支持英特爾® 架構可擴展性能的必要步驟,咱們還須要實施大量其餘優化。特別是,由於性能緣由,英特爾 MKL 使用了不一樣於 TensorFlow 默認佈局的另外一種佈局。咱們須要最大限度地下降兩種格式的轉換開銷。咱們還想確保數據科學家和其餘 TensorFlow 用戶不須要改變現有的神經網絡模型,即可使用這些優化。編程

圖形優化

咱們推出了大量圖形優化通道,以:緩存

  1. 在 CPU 上運行時,將默認的 TensorFlow 操做替換爲英特爾優化版本。確保用戶能運行現有的 Python 程序,在不改變神經網絡模型的狀況下提高性能。
  2. 消除沒必要要且昂貴的數據佈局轉換。
  3. 將多個運算融合在一塊兒,確保在 CPU 上高效地重複使用高速緩存。
  4. 處理支持快速向後傳播的中間狀態。

這些圖形優化進一步提高了性能,沒有爲 TensorFlow 編程人員帶來任何額外負擔。數據佈局優化是一項關鍵的性能優化。對於 CPU 上的某些張量運算而言,本地 TensorFlow 數據格式一般不是最高效的數據佈局。在這種狀況下,未來自 TensorFlow 本地格式的數據佈局轉換運算插入內部格式,在 CPU 上執行運算,並將運算輸出轉換回 TensorFlow 格式。可是,這些轉換形成了性能開銷,應盡力下降這些開銷。咱們的數據佈局優化發現了能利用英特爾 MKL 優化運算徹底執行的子圖,並消除了子圖運算中的轉換。自動插入的轉換節點在子圖邊界執行數據佈局轉換。融合通道是另外一個關鍵優化,它將多個運算自動融合爲高效運行的單個英特爾 MKL 運算。性能優化

其餘優化

咱們還調整衆多 TensorFlow 框架組件,以確保在各類深度學習模型上實現最高的 CPU 性能。 咱們使用 TensorFlow 中現成的池分配器開發了一款自定義池分配器。 咱們的自定義池分配器確保了 TensorFlow 和英特爾 MKL 共享相同的內存池(使用英特爾 MKL imalloc 功能),沒必要過早地將內存返回至操做系統,所以避免了昂貴的頁面缺失和頁面清除。 此外,咱們還認真優化了多個線程庫(TensorFlow 使用的 pthread 和英特爾 MKL 使用的 OpenMP),使它們能共存,而不是互相爭奪 CPU 資源。

性能實驗

咱們的優化(如上述優化)在英特爾至強和英特爾至強融核平臺上實現了顯著的性能提高。 爲了更好地展現性能改進,咱們提供瞭如下最佳方法(或 BKM)和 3 個通用 ConvNet 性能指標評測的基準和優化性能值。

  1. 如下參數對英特爾至強(代號爲 Broadwell)和英特爾至強融核(代號爲 Knights Landing)的性能很是重要,建議您針對特定的神經網絡模型和平臺優化這些參數。 咱們認真優化了這些參數,力求在英特爾至強和英特爾至強融核處理器上得到 convnet 性能指標評測的最佳性能。
    1. 數據格式:建議用戶針對特定的神經網絡模型指定 NCHW 格式,以實現最佳性能。 TensorFlow 默認的 NHWC 格式不是 CPU 上最高效的數據佈局,將帶來額外的轉換開銷。
    2. Inter-op / intra-op:建議數據科學家和用戶在 TensorFlow 中試驗 intra-op 和 inter-op 參數,爲每一個模型和 CPU 平臺搭配最佳設置。這些設置將影響某層或跨層的並行性。
    3. 批處理大小 (Batch size):批處理大小是影響可用並行性(以使用所有內核)、工做集大小和整體內存性能的另外一個重要參數。
    4. OMP_NUM_THREADS:最佳性能須要高效使用全部可用內核。因爲該設置控制超線程等級(1 到 4),所以,對英特爾至強融核處理器的性能尤其重要。
    5. 矩陣乘法中的轉置 (Transpose in Matrix multiplication):對於某些矩陣大小,轉置第二個輸入矩陣 b 有助於改進 Matmul 層的性能(改進高速緩存的重複使用)。如下 3 個模型所用的全部 Matmul 運算亦是如此。用戶應在其餘尺寸的矩陣中試驗該設置。
    6. KMP_BLOCKTIME:用戶應試驗各類設置,以肯定每一個線程完成並行區域執行後等待的時間,單位爲毫秒。

英特爾® 至強® 處理器(代號爲 Broadwell - 雙插槽 - 22 個內核)上的示例設置

英特爾® 至強融核™ 處理器(代號爲 Knights Landing - 68 個內核)上的示例設置

  1. 英特爾® 至強® 處理器(代號爲 Broadwell – 雙插槽 – 22 個內核)的性能結果

  2. 英特爾® 至強融核™ 處理器(代號爲 Knights Landing – 68 個內核)的性能結果

  3. 英特爾® 至強® 處理器(代號爲 Broadwell)和英特爾® 至強融核™ 處理器(代號爲 Knights Landing)上不一樣批處理尺寸的性能結果 - 訓練

利用 CPU 優化安裝 TensorFlow

按照「現已推出英特爾優化型 TensorFlow 系統」 中的指令安裝包含 pip 或 conda 的預構建二進制軟件包,或按照如下指令從源構建:

  1. 運行 TensorFlow 源目錄中的 "./configure",若是您選擇了使用英特爾 MKL 的選項,將自動下載 tensorflow/third_party/mkl/mklml 中的面向機器學習的最新版英特爾 MKL。
  2. 執行如下命令建立 pip 程序包,以安裝通過優化的 TensorFlow 建立。
    • 可更改 PATH,使其指向特定 GCC 編譯器版本:
      export PATH=/PATH/gcc/bin:$PATH
    • 也能夠更改 LD_LIBRARY_PATH,使其指向新 GLIBC:
      export LD_LIBRARY_PATH=/PATH/gcc/lib64:$LD_LIBRARY_PATH.
    • 專爲在英特爾至強和英特爾至強融核處理器上實現最佳性能而建立:
      bazel build --config=mkl --copt=」-DEIGEN_USE_VML」 -c opt //tensorflow/tools/pip_package:
      build_pip_package
  3. 安裝優化版 TensorFlow 系統
    1. bazel-bin/tensorflow/tools/pip_package/build_pip_package ~/path_to_save_wheel
      pip install --upgrade --user ~/path_to_save_wheel /wheel_name.whl

系統配置

對人工智能意味着什麼

優化 TensorFlow 意味着高度可用、普遍應用的框架建立的深度學習應用如今能更快速地運行於英特爾處理器,以擴大靈活性、可訪問性和規模。 例如,英特爾至強融核處理器能以近乎線性的方式跨內核和節點橫向擴展,可顯著減小訓練機器學習模型的時間。 咱們不斷加強英特爾處理器的性能,以處理更大、更困難的人工智能工做負載,TensorFlow 也能隨着性能的進步而升級。

英特爾和谷歌共同優化 TensorFlow 的合做體現了雙方面向開發人員和數據科學家普及人工智能的不懈努力,力求在從邊緣到雲的全部設備上隨時運行人工智能應用。 英特爾相信這是建立下一代人工智能算法和模型的關鍵,有助於解決最緊迫的業務、科學、工程、醫學和社會問題。

本次合做已經在基於英特爾至強和英特爾至強融核處理器的領先平臺上實現了顯著的性能提高。 這些優化現已在谷歌的 TensorFlow GitHub 存儲庫中推出。 咱們建議人工智能社區嘗試這些優化,並期待得到基於優化的反饋與貢獻。

 

 

轉自:https://software.intel.com/zh-cn/articles/intel-optimized-tensorflow-wheel-now-available#

Intel Optimized Tensorflow Wheel Now Available

Intel's Tensorflow optimizations are now available for Linux as a wheel installable through pip.

For more information on the optimizations as well as performance data, see this blog post.

To install the wheel into an existing Python installation, simply run

Edit 10/12/17: Wheel paths have been updated to 1.3.0

Edit 11/22/17: Wheel paths have been updated to 1.4.0

To create a conda environment with Intel Tensorflow that also takes advantage of the Intel Distribution for Python’s optimized numpy, run

Conda Package Now Available in Intel Python 2018

A conda package of Intel's optimized Tensorflow comes with the new 2018 Intel Python distribution on Linux. You can also create a conda environment with Intel Optimized Tensorflow with the following commands:

conda create -n intel_tf -c intel --override-channels tensorflow
source activate intel_tf

 

 

參考:https://software.intel.com/en-us/articles/build-and-install-tensorflow-on-intel-architecture

能夠直接用谷歌官方的tf來編譯支持Intel的mkl CPU。

Building a TensorFlow* Pip Package for Installation

If the program Git* is not currently installed on your system, issue the following command:

sudo apt install git

Clone the GitHub repository by issuing the following command:

git clone https://github.com/tensorflow/tensorflow

The tensorflow directory created during cloning contains a script named configure that must be executed prior to creating the pip package and installing TensorFlow. This script allows you to identify the pathname, dependencies, and other build configuration options. For TensorFlow optimized on Intel architecture, this script also allows you to set up Intel® Math Kernel Library (Intel® MKL) related environment settings. Execute the following commands:

cd tensorflow
./configure

Important: Select ‘Y’ to build TensorFlow with Intel MKL support, and ‘Y’ to download MKL LIB from the web. Select the default settings for the other configuration parameters. When the script has completed running, issue the following command to build the pip package:

bazel build --config=mkl --copt="-DEIGEN_USE_VML" -c opt //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

Installing TensorFlow—Native Pip Option

At this point in the process the newly created pip package will be located in tmp/tensorflow_pkg. The next step is to install TensorFlow, which can be done either as a native pip installation, or in an Anaconda* virtual environment as described in the next section. For a native pip installation simply enter the following command:

sudo pip install /tmp/tensorflow_pkg/tensorflow-1.2.0rc1-cp27-cp27mu-linux_x86_64.whl

(Note: The name of the wheel, as shown above in italics, may be different for your particular build.)

Once these steps have been completed be sure to validate the installation before proceeding to the next section. Note: When running the Python validation script provided in the link, be sure to change to a different directory, for example:

cd ..

相關文章
相關標籤/搜索