機(jī)器學(xué)習(xí)領(lǐng)域的不斷發(fā)展為部署利用神經(jīng)網(wǎng)絡(luò)推理的設(shè)備和應(yīng)用程序創(chuàng)造了新的機(jī)會(huì),這些設(shè)備和應(yīng)用程序具有前所未有的基于視覺的功能和準(zhǔn)確性水平。但是,快速發(fā)展的領(lǐng)域已經(jīng)讓位于處理器、加速器和庫的混亂局面。本文介紹了開放互操作性標(biāo)準(zhǔn)及其在降低成本和降低在實(shí)際產(chǎn)品中使用推理和視覺加速的障礙方面的作用。
每個(gè)行業(yè)都需要開放標(biāo)準(zhǔn),通過增加生態(tài)系統(tǒng)元素之間的互操作性來降低成本和縮短上市時(shí)間。開放標(biāo)準(zhǔn)和專有技術(shù)具有復(fù)雜且相互依存的關(guān)系。專有 API 和接口通常是達(dá)爾文式的試驗(yàn)場(chǎng),并且可以在智能市場(chǎng)領(lǐng)導(dǎo)者手中保持主導(dǎo)地位,這是理所當(dāng)然的。強(qiáng)大的開放標(biāo)準(zhǔn)源于行業(yè)對(duì)成熟技術(shù)的更廣泛需求,可以提供健康、激勵(lì)的競爭。從長遠(yuǎn)來看,不受任何一家公司控制或依賴于任何一家公司的開放標(biāo)準(zhǔn)通??梢猿蔀樾袠I(yè)向前發(fā)展的連續(xù)性線索,因?yàn)榧夹g(shù)、平臺(tái)和市場(chǎng)地位不斷變化和發(fā)展。
Khronos Group 是一個(gè)非營利性標(biāo)準(zhǔn)聯(lián)盟,任何公司都可以加入,擁有超過 150 名成員。所有標(biāo)準(zhǔn)組織的存在都是為了為競爭者提供一個(gè)安全的場(chǎng)所,讓他們?yōu)榱怂腥说睦孢M(jìn)行合作。Khronos Group 的專業(yè)領(lǐng)域是創(chuàng)建開放、免版稅的 API 標(biāo)準(zhǔn),使軟件應(yīng)用程序庫和引擎能夠利用硅加速的力量來滿足要求苛刻的用例,例如 3D 圖形、并行計(jì)算、視覺處理和推理。
創(chuàng)建嵌入式機(jī)器學(xué)習(xí)應(yīng)用程序
許多互操作部分需要協(xié)同工作來訓(xùn)練神經(jīng)網(wǎng)絡(luò)并將其成功部署在嵌入式加速推理平臺(tái)上——如圖 1 所示。有效的神經(jīng)網(wǎng)絡(luò)訓(xùn)練通常需要大型數(shù)據(jù)集,使用浮點(diǎn)精度并在強(qiáng)大的 GPU 上運(yùn)行- 加速臺(tái)式機(jī)或云端。訓(xùn)練完成后,經(jīng)過訓(xùn)練的神經(jīng)網(wǎng)絡(luò)將被引入為快速張量操作優(yōu)化的推理運(yùn)行時(shí)引擎,或?qū)⑸窠?jīng)網(wǎng)絡(luò)描述轉(zhuǎn)換為可執(zhí)行代碼的機(jī)器學(xué)習(xí)編譯器。無論使用引擎還是編譯器,最后一步都是在從 GPU 到專用張量處理器的各種加速器架構(gòu)之一上加速推理代碼。

圖 1. 訓(xùn)練神經(jīng)網(wǎng)絡(luò)并將其部署在加速推理平臺(tái)上的步驟
那么,行業(yè)開放標(biāo)準(zhǔn)如何幫助簡化這一過程呢?圖 2. 說明了在視覺和推理加速領(lǐng)域中使用的 Khronos 標(biāo)準(zhǔn)??偟膩碚f,隨著處理器頻率擴(kuò)展讓位于并行編程作為以可接受的成本和功率水平提供所需性能的最有效方式,人們對(duì)所有這些標(biāo)準(zhǔn)的興趣越來越大。

圖 2. 用于加速視覺和推理應(yīng)用程序和引擎的 Khronos 標(biāo)準(zhǔn)
從廣義上講,這些標(biāo)準(zhǔn)可以分為兩組:高級(jí)和低級(jí)。高級(jí) API 側(cè)重于易于編程,具有跨多個(gè)硬件架構(gòu)的有效性能可移植性。相比之下,低級(jí) API 提供對(duì)硬件資源的直接、顯式訪問,以實(shí)現(xiàn)最大的靈活性和控制。每個(gè)項(xiàng)目都必須了解最適合其開發(fā)需求的 API 級(jí)別。此外,高級(jí) API 通常會(huì)在其實(shí)現(xiàn)中使用低級(jí) API。
讓我們更詳細(xì)地了解其中的一些 Khronos 標(biāo)準(zhǔn)。
SYCL - C++ 單源異構(gòu)編程
SYCL(發(fā)音為“鐮刀”)使用 C++ 模板庫來調(diào)度標(biāo)準(zhǔn) ISO C++ 應(yīng)用程序的選定部分以卸載處理器。SYCL 使復(fù)雜的 C++ 機(jī)器學(xué)習(xí)框架和庫能夠直接編譯并加速到在許多情況下優(yōu)于手動(dòng)調(diào)整代碼的性能水平。如圖 3 所示,默認(rèn)情況下,SYCL 是通過較低級(jí)別的 OpenCL 標(biāo)準(zhǔn) API 實(shí)現(xiàn)的:將用于加速的代碼提供給 OpenCL,而剩余的主機(jī)代碼則通過系統(tǒng)的默認(rèn) CPU 編譯器提供。

圖 3. SYCL 將標(biāo)準(zhǔn) C++ 應(yīng)用程序拆分為 CPU 和 OpenCL 加速代碼
越來越多的 SYCL 實(shí)現(xiàn),其中一些使用專有后端,例如 NVIDIA 的 CUDA 用于加速代碼。值得注意的是,英特爾的新 oneAPI Initiative 包含一個(gè)名為 DPC++ 的并行 C++ 編譯器,它是基于 OpenCL 的符合 SYCL 實(shí)現(xiàn)。
NNEF——神經(jīng)網(wǎng)絡(luò)交換格式
當(dāng)今使用的神經(jīng)網(wǎng)絡(luò)訓(xùn)練框架有數(shù)十種,包括 Torch、Caffe、TensorFlow、Theano、Chainer、Caffe2、PyTorch 和 MXNet 等等,并且都使用專有格式來描述他們訓(xùn)練的網(wǎng)絡(luò)。還有數(shù)十種甚至數(shù)百種嵌入式推理處理器進(jìn)入市場(chǎng)。迫使許多硬件供應(yīng)商理解和導(dǎo)入如此多的格式是一個(gè)典型的碎片問題,可以通過如圖 4 所示的開放標(biāo)準(zhǔn)來解決。

圖 4. NNEF 神經(jīng)網(wǎng)絡(luò)交換格式通過推理加速器簡化訓(xùn)練網(wǎng)絡(luò)的攝取
NNEF 文件格式旨在在網(wǎng)絡(luò)訓(xùn)練和推理芯片領(lǐng)域之間架起一座有效的橋梁——Khronos 久經(jīng)考驗(yàn)的多公司治理模型為硬件社區(qū)提供了關(guān)于格式如何以滿足需求的方式發(fā)展的強(qiáng)烈聲音。開發(fā)處理器工具鏈和框架的公司,通常在安全關(guān)鍵市場(chǎng)。
NNEF 并不是業(yè)界唯一的神經(jīng)網(wǎng)絡(luò)交換格式,ONNX 是由 Facebook 和微軟共同創(chuàng)立的開源項(xiàng)目,是一種被廣泛采用的格式,主要專注于訓(xùn)練框架之間的網(wǎng)絡(luò)交換。NNEF 和 ONNX 是互補(bǔ)的,因?yàn)?ONNX 跟蹤培訓(xùn)創(chuàng)新和機(jī)器學(xué)習(xí)研究社區(qū)的快速變化,而 NNEF 的目標(biāo)是嵌入式推理硬件供應(yīng)商,這些供應(yīng)商需要一種具有更深思熟慮的路線圖演變的格式。Khronos 圍繞 NNEF 發(fā)起了一個(gè)不斷發(fā)展的開源工具生態(tài)系統(tǒng),包括來自關(guān)鍵框架的導(dǎo)入器和導(dǎo)出器以及一個(gè)模型動(dòng)物園,以使硬件開發(fā)人員能夠測(cè)試他們的推理解決方案。
OpenVX – 便攜式加速視覺處理
OpenVX(VX 代表“視覺加速”)通過提供圖形級(jí)抽象來簡化視覺和推理軟件的開發(fā),使程序員能夠通過連接一組函數(shù)或“節(jié)點(diǎn)”來構(gòu)建他們所需的功能。這種高級(jí)抽象使芯片供應(yīng)商能夠非常有效地優(yōu)化他們的 OpenVX 驅(qū)動(dòng)程序,以便在幾乎任何處理器架構(gòu)上高效執(zhí)行。隨著時(shí)間的推移,OpenVX 在原始視覺節(jié)點(diǎn)旁邊添加了推理功能——畢竟神經(jīng)網(wǎng)絡(luò)只是另一個(gè)圖!通過將 NNEF 訓(xùn)練的網(wǎng)絡(luò)直接導(dǎo)入 OpenVX 圖中,OpenVX 和 NNEF 之間的協(xié)同作用越來越大,如圖 5 所示。

圖 5. OpenVX 圖可以描述從 NNEF 文件導(dǎo)入的視覺節(jié)點(diǎn)和推理操作的任意組合
OpenVX 1.3 于 2019 年 10 月發(fā)布,使針對(duì)垂直細(xì)分市場(chǎng)(例如推理)的精心挑選的規(guī)范子集能夠被實(shí)施和測(cè)試,使其符合官方標(biāo)準(zhǔn)。OpenVX 還與 OpenCL 深度集成,使程序員能夠添加自己的自定義加速節(jié)點(diǎn)以在 OpenVX 圖形中使用 - 提供簡單的可編程性和可定制性的獨(dú)特組合。
OpenCL – 異構(gòu)并行編程
OpenCL 是一種低級(jí)標(biāo)準(zhǔn),用于對(duì) PC、服務(wù)器、移動(dòng)設(shè)備和嵌入式設(shè)備中的各種異構(gòu)處理器進(jìn)行跨平臺(tái)并行編程。OpenCL 提供基于 C 和 C++ 的語言來構(gòu)建內(nèi)核程序,這些程序可以在具有 OpenCL 編譯器的系統(tǒng)中的任何處理器上并行編譯和執(zhí)行,從而為程序員明確控制在哪些處理器上執(zhí)行哪些內(nèi)核。OpenCL 運(yùn)行時(shí)協(xié)調(diào)加速器設(shè)備的發(fā)現(xiàn),為選定的設(shè)備編譯內(nèi)核,以復(fù)雜的同步級(jí)別執(zhí)行內(nèi)核并收集結(jié)果,如圖 6 所示。

圖 6. OpenCL 使 C 或 C++ 內(nèi)核程序能夠跨異構(gòu)處理器的任意組合并行編譯和執(zhí)行
OpenCL 在整個(gè)行業(yè)中廣泛使用,為計(jì)算、視覺和機(jī)器學(xué)習(xí)庫、引擎和編譯器提供最低的“接近金屬”執(zhí)行層。
OpenCL 最初是為在高端 PC 和超級(jí)計(jì)算機(jī)硬件上執(zhí)行而設(shè)計(jì)的,但在與 OpenVX 類似的演變過程中,需要 OpenCL 的處理器越來越小,精度也越來越低,因?yàn)樗鼈円赃吘壱曈X和推理為目標(biāo)。OpenCL 工作組正在努力定義為嵌入式處理器量身定制的功能,并使供應(yīng)商能夠交付針對(duì)關(guān)鍵功耗和成本敏感用例的選定功能,并且完全符合要求。
關(guān)于作者:
Neil Trevett 是 NVIDIA 開發(fā)者生態(tài)系統(tǒng)副總裁,他幫助應(yīng)用程序利用先進(jìn)的 GPU 和芯片加速。Neil is also the elected President of the Khronos Group, where he initiated the OpenGL ES standard used by billions worldwide every day, helped catalyze the WebGL and glTF projects to bring interactive 3D graphics to the Web, fostered the creation of the OpenVX standard for vision和推理加速,并主持定義異構(gòu)并行計(jì)算的開放標(biāo)準(zhǔn)的 OpenCL 工作組。在 NVIDIA Neil 站在將交互式 3D 引入 PC 的硅革命的最前沿,他建立了 3Dlabs 的嵌入式圖形部門,為各種非 PC 平臺(tái)帶來先進(jìn)的視覺處理。
審核編輯:郭婷
-
處理器
+關(guān)注
關(guān)注
68文章
20084瀏覽量
243914 -
gpu
+關(guān)注
關(guān)注
28文章
5050瀏覽量
134032 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8532瀏覽量
136019
發(fā)布評(píng)論請(qǐng)先 登錄
嵌入式需要掌握哪些核心技能?
新一代嵌入式開發(fā)平臺(tái) AMD嵌入式軟件和工具2025.1版現(xiàn)已推出
AMD 2025.1版嵌入式軟件和工具的新增功能
Linux嵌入式和單片機(jī)嵌入式的區(qū)別?
嵌入式開發(fā)入門指南:從零開始學(xué)習(xí)嵌入式
使用Lattice mVision打造嵌入式視覺系統(tǒng)解決方案
嵌入式教育科普|GPIO接口全面解析
電子發(fā)燒友榮獲飛凌嵌入式“2024年度最具價(jià)值媒體”獎(jiǎng)
嵌入式主板選型與應(yīng)用指南
嵌入式主板的概述與發(fā)展
ARM架構(gòu)嵌入式主板特點(diǎn)
什么是嵌入式人工智能

用于加速嵌入式視覺和推理的開放標(biāo)準(zhǔn)
評(píng)論