在今天的文章中,咱們將探討工程當中出現的挑戰與設計決策亮點。此外,感興趣的朋友亦可參閱咱們的 GitHub(https://github.com/NervanaSystems/ngraph) 、說明文檔(http://ngraph.nervanasys.com/index.html/) 以及 SysML 論文(https://arxiv.org/abs/1801.08058) 以瞭解更多細節信息。html
圖 1. nGraph 生態系統git
咱們目前經過 nGraph 直接支持 TensorFlow、MXNet 以及 neon。CNTK、PyTorch 與 Caffe2 則可經過 ONNX 實現間接支持。用戶能夠將這些框架運行在多種設備之上,具體包括英特爾架構、GPU、英特爾 Nervana 神經網絡處理器(簡稱 NNP)等等。將來,咱們還將在發展路線圖當中引入更多設備 / 框架支持選項。github
當深度學習(簡稱 DL)框架首次成爲用於模型訓練與推理的工具時,其在設計層面仍然專門針對特定設備的內核做出優化。所以,模型定義當中存在的諸多設備特性使得深度學習模型在面對其它或更高級設備時,每每帶來更爲複雜的適應性與可移植性挑戰。算法
在傳統方案當中,算法開發人員須要經歷枯燥的過程纔可以將模型引入其它設備當中。此外,模型在不一樣框架上的運行也會帶來衆多難題,這是由於開發人員必須將模型自己與設備特性進行拆分,並將其轉換爲新框架中的相似運算,最終對首選旋轉設備進行必要調整以立足新框架進行配置。後端
正由於如此,咱們設計出了 nGraph 庫,但願大大減小相關工程任務的複雜性。雖然經過英特爾 Math Kernel Library for Deep Neural Networks(簡稱英特爾 MKL-DNN)等爲及項目可以實現深度學習基元的內核優化,但咱們認爲提供更多編譯器選項將可以進一步優化方案的性能表現。微信
安裝 nGraph 庫並利用該庫編寫或編譯框架,便可運行模型的訓練與推理任務。您可經過任意受支持系統上的命令行將 nGraph 指定爲框架後端。咱們的 Intermediate Representation(簡稱 IR,即中間表示)層負責處理所有設備抽象細節,並容許開發人員專一於本身的數據科學、算法以及模型工做——從而完全擺脫機器碼帶來的困擾。網絡
下面來看更多細節信息:架構
nGraph 核心會建立一個強類型及設備中立式無狀態計算表示圖。圖中的各個節點,或者說 op,表明着計算中的一個步驟,且各個步驟會從零個或更多張量輸入內容中生成零個或更多張量輸出結果。咱們的理念是,nGraph 的運做應做爲深度學習框架當中更爲複雜的 DNN 運算的基石,並確保在推理計算與訓練及推理計算之間取得理想的效率平衡點。框架
咱們爲每套受支持框架開發出對應的框架橋接,其做爲 nGraph 核心與框架之間的中轉載體。咱們目前已經面向 TensorFlow/XLA、MXNet 以及 ONNX 創建了橋接機制。因爲 ONNX 只是一種交換格式,所以 ONNX 橋接還配合一個執行 API 以實現功能加強。函數
轉換器在 nGraph 核心與各種設備之間扮演着相似的角色 ; 轉換器負責將泛型與特定於設備的圖形轉換機制相結合以處理設備抽象,從而立足框架橋接實現函數執行。此外,轉換器還負責實現分配與歸還,同時在橋接的指引下進行張量讀取與寫入。咱們目前已經打造出面向英特爾架構、英特爾 NNP、英偉達 cuDNN 以及其它多種高人氣設備的轉換器選項。
英特爾公司在 MKL-DNN 的英特爾架構框架優化方面擁有着至關豐富的經驗。咱們充分利用以往積累到的寶貴資源,並經過 nGraph 爲俠框架開發出可以充分利用設備特性的優化效果。框架開發者們將可以繼續進行本身的優化工做。舉例來講,英特爾架構上的 TensorFlow 1.7+/XLA 的性能遠遠優於英特爾架構上的 TensorFlow 1.3/XA。而隨着英特爾框架 XLA 開發工做的進一步推動,這種性能提高效果應該會獲得持續增強。
如下各圖爲多種框架的初始性能數據,這些數據反映了迄今爲止咱們對 IA 轉換器做出的優化效果。在最新的英特爾至強 Platinum 8180 處理器上,結合 MKLDNN v0.13,咱們將可以達到甚至大大超越以往的框架優化性能——例如 MXNet-MKLDNN-CPU(通過 MKLDNN 優化的 MXNet)以及 neon-MKLML-CPU(通過 MKLML 優化的 neon)。咱們還可以帶來超越 TensorFlow XLA 編譯器(TF-XLA-CPU)的性能水平 ; 不過在將默認 CPU 實現與 cGraph 相結合以後,XLA 將可以帶來更爲顯著的優化成效。
截至目前,nGraph 共支持六套深度學習框架與三類計算設備。
支持的框架:
經過 nGraph 框架中立表示直接支持框架選項
TensorFlow
MXNet
neon
經過 ONNX 間接支持的框架選項
CNTK
PyTorch
Caffe2
支持的計算設備
英特爾架構 (x86,英特爾至強與至強 Phi)
英特爾 Nervana™ Neural Network Processor (簡稱英特爾 Nervana NNP)
英偉達 cuDNN (開發中)
咱們將繼續增長對更多其它設備的支持能力以及更強大的圖形優化能力,包括面向特定設備的 op 融合、更理想的工做調度器以及更快的自定義 op 內核。
若是您但願加入 nGraph 的貢獻你們庭,請訪問咱們的 GitHub 庫:https://github.com/NervanaSystems/ngraph。
原文連接:
https://ai.intel.com/ngraph-a-new-open-source-compiler-for-deep-learning-systems/
更多幹貨內容,可關注AI前線,ID:ai-front,後臺回覆「AI」、「TF」、「大數據」可得到《AI前線》系列PDF迷你書和技能圖譜。