許多朋友使用服務器時,碰巧服務器沒有安裝GPU或者GPU都被佔滿了。但是,服務器有不少CPU都是空閒的,其實,把這些CPU都充分利用起來,也能夠有不錯的訓練效果。node
可是,若是你是用CPU版的TF,有時TensorFlow並不能把全部CPU核數使用到,這時有個小技巧David 9要告訴你們:git
在Session定義時,ConfigProto中能夠嘗試指定下面三個參數:github
David 9親自試驗,訓練彷佛有1倍速度的提升。算法
另外,有的朋友的服務器上正好都是Intel的CPU,極可能須要把Intel的MKL包編譯進TensorFlow中,以增長訓練效率。這裏David 9把MKL編譯進TF的關鍵點也指出一下。編程
官方的指導是以下3 步:緩存
3. Install the optimized TensorFlow wheel性能優化
與官網編譯TF的大體流程相似,就是先./configure,再用bazel編譯TensorFlow。服務器
最後用編譯好的bazel工具生成whl的包,用來安裝pip TensorFlow。網絡
惟一的不一樣要注意用–config=mkl的選項編譯TensorFlow:session
bazel build –config=mkl –copt=」-DEIGEN_USE_VML」 -c opt //tensorflow/tools/pip_package: build_pip_package
這樣,用pip安裝完成TF後,mkl就集成在TF中了。
參考文獻:
By Elmoustapha O. (Intel), IDZSupport K., published on 2017 年 8 月 9 日
英特爾: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 Valles
谷歌:Andy Davis,Toby Boyd,Megan Kacholia,Rasmus Larsen,Rajat Monga,Thiru Palanisamy,Vijay Vasudevan,Yao Zhang
做爲一款領先的深度學習和機器學習框架,TensorFlow* 對英特爾和谷歌發揮英特爾硬件產品的最佳性能相當重要。本文 向人工智能 (AI) 社區介紹了在基於英特爾® 至強和英特爾® 至強融核™ 處理器的平臺上實施的 TensorFlow* 優化。在去年舉辦的首屆英特爾人工智能日上,英特爾公司的柏安娜和谷歌的 Diane Green 共同宣佈了雙方的合做,這些優化是英特爾和谷歌工程師密切合做取得的成果。
咱們介紹了在優化實踐中遇到的各類性能挑戰以及採用的解決方法,還報告了對通用神經網絡模型示例的性能改進。這些優化帶來了多個數量級的性能提高。例如,根據咱們的測量,英特爾® 至強融核™ 處理器 7250 (KNL) 上的訓練性能提高了高達 70 倍,推斷性能提高了高達 85 倍。基於英特爾® 至強® 處理器 E5 v4 (BDW) 和英特爾至強融核處理器 7250 的平臺爲下一代英特爾產品奠基了基礎。用戶尤爲但願今年晚些時候推出的英特爾至強(代號爲 Skylake)和英特爾至強融合(代號爲 Knights Mill)處理器將提供顯著的性能提高。
在現代 CPU 上優化深度學習模型的性能面臨衆多挑戰,和優化高性能計算 (HPC) 中其餘性能敏感型應用所面臨的挑戰差異不大:
爲了知足這些要求,英特爾開發了衆多優化型深度學習基元,計劃應用於不一樣的深度學習框架,以確保通用構建模塊的高效實施。除了矩陣乘法和卷積之外,建立模塊還包括:
請參閱 本文,獲取關於面向深度神經網絡的英特爾® 數學核心函數(英特爾® MKL-DNN)的優化基元的更多詳情。
在 TensorFlow 中,咱們實施了英特爾優化版運算,以確保這些運算能在任何狀況下利用英特爾 MKL-DNN 基元。同時,這也是支持英特爾® 架構可擴展性能的必要步驟,咱們還須要實施大量其餘優化。特別是,由於性能緣由,英特爾 MKL 使用了不一樣於 TensorFlow 默認佈局的另外一種佈局。咱們須要最大限度地下降兩種格式的轉換開銷。咱們還想確保數據科學家和其餘 TensorFlow 用戶不須要改變現有的神經網絡模型,即可使用這些優化。
咱們推出了大量圖形優化通道,以:
這些圖形優化進一步提高了性能,沒有爲 TensorFlow 編程人員帶來任何額外負擔。數據佈局優化是一項關鍵的性能優化。對於 CPU 上的某些張量運算而言,本地 TensorFlow 數據格式一般不是最高效的數據佈局。在這種狀況下,未來自 TensorFlow 本地格式的數據佈局轉換運算插入內部格式,在 CPU 上執行運算,並將運算輸出轉換回 TensorFlow 格式。可是,這些轉換形成了性能開銷,應盡力下降這些開銷。咱們的數據佈局優化發現了能利用英特爾 MKL 優化運算徹底執行的子圖,並消除了子圖運算中的轉換。自動插入的轉換節點在子圖邊界執行數據佈局轉換。融合通道是另外一個關鍵優化,它將多個運算自動融合爲高效運行的單個英特爾 MKL 運算。
咱們還調整衆多 TensorFlow 框架組件,以確保在各類深度學習模型上實現最高的 CPU 性能。咱們使用 TensorFlow 中現成的池分配器開發了一款自定義池分配器。咱們的自定義池分配器確保了 TensorFlow 和英特爾 MKL 共享相同的內存池(使用英特爾 MKL imalloc 功能),沒必要過早地將內存返回至操做系統,所以避免了昂貴的頁面缺失和頁面清除。此外,咱們還認真優化了多個線程庫(TensorFlow 使用的 pthread 和英特爾 MKL 使用的 OpenMP),使它們能共存,而不是互相爭奪 CPU 資源。
咱們的優化(如上述優化)在英特爾至強和英特爾至強融核平臺上實現了顯著的性能提高。爲了更好地展現性能改進,咱們提供瞭如下最佳方法(或 BKM)和 3 個通用 ConvNet 性能指標評測的基準和優化性能值。
按照「現已推出英特爾優化型 TensorFlow 系統」 中的指令安裝包含 pip 或 conda 的預構建二進制軟件包,或按照如下指令從源構建:
優化 TensorFlow 意味着高度可用、普遍應用的框架建立的深度學習應用如今能更快速地運行於英特爾處理器,以擴大靈活性、可訪問性和規模。例如,英特爾至強融核處理器能以近乎線性的方式跨內核和節點橫向擴展,可顯著減小訓練機器學習模型的時間。咱們不斷加強英特爾處理器的性能,以處理更大、更困難的人工智能工做負載,TensorFlow 也能隨着性能的進步而升級。
英特爾和谷歌共同優化 TensorFlow 的合做體現了雙方面向開發人員和數據科學家普及人工智能的不懈努力,力求在從邊緣到雲的全部設備上隨時運行人工智能應用。英特爾相信這是建立下一代人工智能算法和模型的關鍵,有助於解決最緊迫的業務、科學、工程、醫學和社會問題。
本次合做已經在基於英特爾至強和英特爾至強融核處理器的領先平臺上實現了顯著的性能提高。這些優化現已在谷歌的 TensorFlow GitHub 存儲庫中推出。咱們建議人工智能社區嘗試這些優化,並期待得到基於優化的反饋與貢獻。