更多幹貨內容請關注微信公眾號“AI 前線”,(ID:ai-front)
在今天的文章中,我們將探討工程當中出現的挑戰與設計決策亮點。此外,感興趣的朋友亦可參閱我們的 GitHub(https://github.com/NervanaSystems/ngraph) 、說明文件(http://ngraph.nervanasys.com/index.html/) 以及 SysML 論文(https://arxiv.org/abs/1801.08058) 以瞭解更多細節資訊。
圖 1. nGraph 生態系統
我們目前通過 nGraph 直接支援 TensorFlow、MXNet 以及 neon。CNTK、PyTorch 與 Caffe2 則可通過 ONNX 實現間接支援。使用者可以將這些框架執行在多種裝置之上,具體包括英特爾架構、GPU、英特爾 Nervana 神經網路處理器(簡稱 NNP)等等。未來,我們還將在發展路線圖當中引入更多裝置 / 框架支援選項。
當深度學習(簡稱 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迷你書和技能圖譜。