不斷發展的機器學習領域為部署設備和應用程序創造了新的機會,這些設備和應用程序利用神經網絡推理,具有前所未有的基于視覺的功能和準確性。但是,快速發展的領域已經讓位于處理器、加速器和庫的混亂格局。本文討論了開放式互操作性標準及其在降低成本和在實際產品中使用推理和視覺加速的障礙方面的作用。
每個行業都需要開放標準,通過提高生態系統元素之間的互操作性來降低成本并縮短上市時間。開放標準和專有技術具有復雜且相互依存的關系。專有API和接口通常是達爾文式的試驗場,可以在聰明的市場領導者手中保持主導地位,這是應該的。強大的開放標準源于行業對成熟技術的更廣泛需求,并且可以提供健康、激勵性的競爭。從長遠來看,隨著技術、平臺和市場地位的旋轉和發展,不受任何一家公司控制或依賴的開放標準通常可以成為行業進步的連續性線索。
創建嵌入式機器學習應用程序
許多互操作部分需要協同工作來訓練神經網絡,并將其成功部署在嵌入式加速推理平臺上,如圖 1 所示。有效的神經網絡訓練通常需要大型數據集,使用浮點精度,并在功能強大的 GPU 加速桌面機器或云中運行。訓練完成后,經過訓練的神經網絡將被攝取到針對快速張量操作進行優化的推理運行時引擎中,或者將神經網絡描述轉換為可執行代碼的機器學習編譯器中。無論使用引擎還是編譯器,最后一步都是在從 GPU 到專用張量處理器的各種加速器架構之一上加速推理代碼。
圖1.訓練神經網絡并將其部署在加速推理平臺上的步驟
那么,行業開放標準如何幫助簡化這一過程呢?圖2.說明了在視野和推理加速度中使用的 Khronos 標準。總的來說,隨著處理器頻率縮放讓位于并行編程,人們對所有這些標準越來越感興趣,并行編程是以可接受的成本和功耗水平提供所需性能的最有效方法。
圖2.用于加速視覺和推理應用和引擎的 Khronos 標準
從廣義上講,這些標準可以分為兩組:高級和低級。高級 API 側重于易于編程,并跨多個硬件架構提供有效的性能可移植性。相比之下,低級 API 提供對硬件資源的直接、顯式訪問,以實現最大的靈活性和控制力。每個項目都必須了解哪個級別的 API 最適合他們的開發需求。此外,高級 API 通常會在其實現中使用較低級別的 API。
讓我們更詳細地看一下其中一些Khronos標準。
SYCL - C++ 單源異構編程
SYCL(發音為“鐮刀”)使用C++模板庫來調度標準 ISO C++應用程序的選定部分以卸載處理器。SYCL 使復雜的C++機器學習框架和庫能夠直接編譯和加速到在許多情況下優于手動調優代碼的性能水平。如圖 3 所示,默認情況下,SYCL 是通過較低級別的 OpenCL 標準 API 實現的:將用于加速的代碼饋送到 OpenCL 中,其余主機代碼通過系統的默認 CPU 編譯器輸入。
圖3.SYCL 將標準C++應用程序拆分為 CPU 和 OpenCL 加速代碼
有越來越多的SYCL實現,其中一些使用專有后端,例如NVIDIA的CUDA用于加速代碼。值得注意的是,英特爾新的oneAPI計劃包含一個名為DPC++的并行C++編譯器,它是OpenCL上的SYCL實現。
NNEF – 神經網絡交換格式
目前有數十種神經網絡訓練框架在使用,包括Torch,Caffe,TensorFlow,Theano,Chainer,Caffe2,PyTorch和MXNet等等,并且都使用專有格式來描述其訓練的網絡。市場上還有數十種,甚至數百種嵌入式推理處理器。迫使許多硬件供應商理解和導入如此多的格式是一個經典的碎片化問題,可以通過開放標準解決,如圖 4 所示。
圖4.NNEF 神經網絡交換格式可通過推理加速器簡化對訓練網絡的攝取
NNEF 文件格式旨在為網絡訓練和推理芯片世界提供有效的橋梁——Khronos 經過驗證的多公司治理模型為硬件社區提供了強有力的聲音,說明該格式如何以滿足開發處理器工具鏈和框架的公司的需求的方式發展,通常在安全關鍵市場中。
NNEF不是業界唯一的神經網絡交換格式,ONNX是由Facebook和微軟創立的開源項目,是一種廣泛采用的格式,主要關注訓練框架之間的網絡交換。NNEF 和 ONNX 是互補的,因為 ONNX 跟蹤訓練創新和機器學習研究社區的快速變化,而 NNEF 針對的是需要具有更深思熟慮的路線圖演變格式的嵌入式推理硬件供應商。Khronos圍繞NNEF啟動了一個不斷發展的開源工具生態系統,包括來自關鍵框架的導入商和導出商以及一個模型動物園,以使硬件開發人員能夠測試他們的推理解決方案。
OpenVX – 便攜式加速視覺處理
OpenVX(VX代表“視覺加速”)通過提供圖形級抽象來簡化視覺和推理軟件的開發,使程序員能夠通過連接一組函數或“節點”來構建所需的功能。這種高級抽象使芯片供應商能夠非常有效地優化其OpenVX驅動程序,以便在幾乎任何處理器架構上高效執行。隨著時間的推移,OpenVX 在原始視覺節點之外添加了推理功能 - 神經網絡畢竟只是另一個圖!通過將NNEF訓練的網絡直接導入OpenVX圖,OpenVX和NNEF之間的協同作用越來越大,如圖5所示。
圖5.OpenVX 圖可以描述視覺節點和從 NNEF 文件導入的推理操作的任意組合
OpenVX 1.3 于 2019 年 10 月發布,支持針對垂直細分市場(如推理)的精心挑選的規范子集作為正式標準實施和測試。OpenVX 還與 OpenCL 進行了深度集成,使程序員能夠添加自己的自定義加速節點以在 OpenVX 圖形中使用,從而提供簡單可編程性和可定制性的獨特組合。
OpenCL – 異構并行編程
OpenCL 是一種低級標準,用于對 PC、服務器、移動設備和嵌入式設備中的各種異構處理器進行跨平臺并行編程。OpenCL 提供基于 C 和 C++ 的語言,用于構建內核程序,這些內核程序可以在具有 OpenCL 編譯器的系統中的任何處理器上并行編譯和執行,從而明確控制程序員在哪些處理器上執行哪些內核。OpenCL 運行時協調加速器設備的發現,編譯選定設備的內核,以復雜的同步級別執行內核,并收集結果,如圖 6 所示。
圖6.OpenCL 使 C 或 C++ 內核程序能夠在異構處理器的任意組合中并行編譯和執行
OpenCL 在整個行業中廣泛使用,為計算、視覺和機器學習庫、引擎和編譯器提供最低的“接近金屬”執行層。
OpenCL最初是為在高端PC和超級計算機硬件上執行而設計的,但在與OpenVX類似的演變中,需要OpenCL的處理器變得越來越小,精度越來越低,因為它們的目標是邊緣視覺和推理。OpenCL 工作組正在努力定義為嵌入式處理器量身定制的功能,并使供應商能夠完全一致地針對關鍵功耗和成本敏感用例提供選定的功能。
審核編輯:郭婷
-
嵌入式
+關注
關注
5086文章
19144瀏覽量
306100 -
神經網絡
+關注
關注
42文章
4774瀏覽量
100890 -
機器學習
+關注
關注
66文章
8425瀏覽量
132766
發布評論請先 登錄
相關推薦
評論