機(jī)器學(xué)習(xí)領(lǐng)域的不斷發(fā)展為部署利用神經(jīng)網(wǎng)絡(luò)推理的設(shè)備和應(yīng)用程序創(chuàng)造了新的機(jī)會(huì),這些設(shè)備和應(yīng)用程序具有前所未有的基于視覺(jué)的功能和準(zhǔn)確性水平。但是,快速發(fā)展的領(lǐng)域已經(jīng)讓位于處理器、加速器和庫(kù)的混亂局面。本文介紹了開(kāi)放互操作性標(biāo)準(zhǔn)及其在降低成本和降低在實(shí)際產(chǎn)品中使用推理和視覺(jué)加速的障礙方面的作用。
每個(gè)行業(yè)都需要開(kāi)放標(biāo)準(zhǔn),通過(guò)增加生態(tài)系統(tǒng)元素之間的互操作性來(lái)降低成本和縮短上市時(shí)間。開(kāi)放標(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)大的開(kāi)放標(biāo)準(zhǔn)源于行業(yè)對(duì)成熟技術(shù)的更廣泛需求,可以提供健康、激勵(lì)的競(jìng)爭(zhēng)。從長(zhǎng)遠(yuǎn)來(lái)看,不受任何一家公司控制或依賴于任何一家公司的開(kāi)放標(biāo)準(zhǔn)通??梢噪S著技術(shù)、平臺(tái)和市場(chǎng)地位的旋轉(zhuǎn)和演變而成為行業(yè)向前發(fā)展的連續(xù)性線索。
Khronos Group 是一個(gè)非營(yíng)利性標(biāo)準(zhǔn)聯(lián)盟,任何公司都可以加入,擁有超過(guò) 150 名成員。所有標(biāo)準(zhǔn)組織的存在都是為了為競(jìng)爭(zhēng)者提供一個(gè)安全的場(chǎng)所,讓他們?yōu)榱怂腥说睦孢M(jìn)行合作。Khronos Group 的專業(yè)領(lǐng)域是創(chuàng)建開(kāi)放、免版稅的 API 標(biāo)準(zhǔn),使軟件應(yīng)用程序庫(kù)和引擎能夠利用硅加速的力量來(lái)滿足要求苛刻的用例,例如 3D 圖形、并行計(jì)算、視覺(jué)處理和推理。
創(chuàng)建嵌入式機(jī)器學(xué)習(xí)應(yīng)用程序
許多互操作部分需要協(xié)同工作來(lái)訓(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)過(guò)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)將被引入為快速?gòu)埩坎僮鲀?yōu)化的推理運(yùn)行時(shí)引擎,或?qū)⑸窠?jīng)網(wǎng)絡(luò)描述轉(zhuǎn)換為可執(zhí)行代碼的機(jī)器學(xué)習(xí)編譯器。無(wú)論使用引擎還是編譯器,最后一步都是在從 GPU 到專用張量處理器的各種加速器架構(gòu)之一上加速推理代碼。
圖 1. 訓(xùn)練神經(jīng)網(wǎng)絡(luò)并將其部署在加速推理平臺(tái)上的步驟
那么,行業(yè)開(kāi)放標(biāo)準(zhǔn)如何幫助簡(jiǎn)化這一過(guò)程呢?圖 2. 說(shuō)明了在視覺(jué)和推理加速領(lǐng)域中使用的 Khronos 標(biāo)準(zhǔn)。總的來(lái)說(shuō),隨著處理器頻率擴(kuò)展讓位于并行編程作為以可接受的成本和功率水平提供所需性能的最有效方式,人們對(duì)所有這些標(biāo)準(zhǔn)的興趣越來(lái)越大。
圖 2. 用于加速視覺(jué)和推理應(yīng)用程序和引擎的 Khronos 標(biāo)準(zhǔn)
從廣義上講,這些標(biāo)準(zhǔn)可以分為兩組:高級(jí)和低級(jí)。高級(jí) API 側(cè)重于易于編程,具有跨多個(gè)硬件架構(gòu)的有效性能可移植性。相比之下,低級(jí) API 提供對(duì)硬件資源的直接、顯式訪問(wèn),以實(shí)現(xiàn)最大的靈活性和控制。每個(gè)項(xiàng)目都必須了解最適合其開(kāi)發(fā)需求的 API 級(jí)別。此外,高級(jí) API 通常會(huì)在其實(shí)現(xiàn)中使用低級(jí) API。
讓我們更詳細(xì)地了解其中的一些 Khronos 標(biāo)準(zhǔn)。
SYCL - C++ 單源異構(gòu)編程
SYCL(發(fā)音為“鐮刀”)使用 C++ 模板庫(kù)來(lái)調(diào)度標(biāo)準(zhǔn) ISO C++ 應(yīng)用程序的選定部分以卸載處理器。SYCL 使復(fù)雜的 C++ 機(jī)器學(xué)習(xí)框架和庫(kù)能夠直接編譯并加速到在許多情況下優(yōu)于手動(dòng)調(diào)整代碼的性能水平。如圖 3 所示,默認(rèn)情況下,SYCL 是通過(guò)較低級(jí)別的 OpenCL 標(biāo)準(zhǔn) API 實(shí)現(xiàn)的:將用于加速的代碼提供給 OpenCL,而剩余的主機(jī)代碼則通過(guò)系統(tǒng)的默認(rèn) CPU 編譯器提供。
圖 3. SYCL 將標(biāo)準(zhǔn) C++ 應(yīng)用程序拆分為 CPU 和 OpenCL 加速代碼
越來(lái)越多的 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 等等,并且都使用專有格式來(lái)描述他們訓(xùn)練的網(wǎng)絡(luò)。還有數(shù)十種甚至數(shù)百種嵌入式推理處理器進(jìn)入市場(chǎng)。迫使許多硬件供應(yīng)商理解和導(dǎo)入如此多的格式是一個(gè)典型的碎片問(wèn)題,可以通過(guò)如圖 4 所示的開(kāi)放標(biāo)準(zhǔn)來(lái)解決。
圖 4. NNEF 神經(jīng)網(wǎng)絡(luò)交換格式通過(guò)推理加速器簡(jiǎn)化訓(xùn)練網(wǎng)絡(luò)的攝取
NNEF 文件格式旨在在網(wǎng)絡(luò)訓(xùn)練和推理芯片領(lǐng)域之間架起一座有效的橋梁——Khronos 久經(jīng)考驗(yàn)的多公司治理模型讓硬件社區(qū)對(duì)格式如何以一種滿足開(kāi)發(fā)處理器工具鏈和框架的公司,通常在安全關(guān)鍵市場(chǎng)。
NNEF 并不是業(yè)界唯一的神經(jīng)網(wǎng)絡(luò)交換格式,ONNX 是由 Facebook 和微軟共同創(chuàng)立的開(kāi)源項(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ā)展的開(kāi)源工具生態(tài)系統(tǒng),包括來(lái)自關(guān)鍵框架的導(dǎo)入器和導(dǎo)出器以及一個(gè)模型動(dòng)物園,以使硬件開(kāi)發(fā)人員能夠測(cè)試他們的推理解決方案。
OpenVX – 便攜式加速視覺(jué)處理
OpenVX(VX 代表“視覺(jué)加速”)通過(guò)提供圖形級(jí)抽象來(lái)簡(jiǎn)化視覺(jué)和推理軟件的開(kāi)發(fā),使程序員能夠通過(guò)連接一組函數(shù)或“節(jié)點(diǎn)”來(lái)構(gòu)建他們所需的功能。這種高級(jí)抽象使芯片供應(yīng)商能夠非常有效地優(yōu)化他們的 OpenVX 驅(qū)動(dòng)程序,以便在幾乎任何處理器架構(gòu)上高效執(zhí)行。隨著時(shí)間的推移,OpenVX 在原始視覺(jué)節(jié)點(diǎn)旁邊添加了推理功能——畢竟神經(jīng)網(wǎng)絡(luò)只是另一個(gè)圖!通過(guò)將 NNEF 訓(xùn)練的網(wǎng)絡(luò)直接導(dǎo)入 OpenVX 圖中,OpenVX 和 NNEF 之間的協(xié)同作用越來(lái)越大,如圖 5 所示。
圖 5. OpenVX 圖可以描述從 NNEF 文件導(dǎo)入的視覺(jué)節(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 圖形中使用 - 提供簡(jiǎn)單的可編程性和可定制性的獨(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++ 的語(yǔ)言來(lái)構(gòu)建內(nèi)核程序,這些內(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ì)算、視覺(jué)和機(jī)器學(xué)習(xí)庫(kù)、引擎和編譯器提供最低的“接近金屬”執(zhí)行層。
OpenCL 最初是為在高端 PC 和超級(jí)計(jì)算機(jī)硬件上執(zhí)行而設(shè)計(jì)的,但在與 OpenVX 類似的演變過(guò)程中,需要 OpenCL 的處理器越來(lái)越小,精度也越來(lái)越低,因?yàn)樗鼈円赃吘壱曈X(jué)和推理為目標(biāo)。OpenCL 工作組正在努力定義為嵌入式處理器量身定制的功能,并使供應(yīng)商能夠交付針對(duì)關(guān)鍵功耗和成本敏感用例的選定功能,并且完全符合要求。
審核編輯:郭婷
-
處理器
+關(guān)注
關(guān)注
68文章
19899瀏覽量
235419 -
嵌入式
+關(guān)注
關(guān)注
5152文章
19678瀏覽量
317774 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8505瀏覽量
134675
發(fā)布評(píng)論請(qǐng)先 登錄
嵌入式視覺(jué)的發(fā)展機(jī)遇
嵌入式機(jī)器視覺(jué)系統(tǒng)有什么特性?怎么優(yōu)化?
淺析MATLAB和Simulink嵌入式視覺(jué)應(yīng)用
嵌入式視覺(jué)與標(biāo)準(zhǔn)視覺(jué)有哪些差異呢
嵌入式視覺(jué)的最新趨勢(shì)討論
嵌入式視覺(jué)系統(tǒng)和標(biāo)準(zhǔn)的有什么不同
嵌入式技術(shù)無(wú)處不在,嵌入式視覺(jué)系統(tǒng)的簡(jiǎn)介
嵌入式機(jī)器視覺(jué)系統(tǒng)設(shè)計(jì)

深度解讀嵌入式視覺(jué)的幾個(gè)典型應(yīng)用
淺析MATLAB和Simulink嵌入式視覺(jué)應(yīng)用

用于加速嵌入式視覺(jué)和推理的開(kāi)放標(biāo)準(zhǔn)

用于加速嵌入式視覺(jué)和推理的開(kāi)放標(biāo)準(zhǔn)

用于加速嵌入式視覺(jué)和推理的開(kāi)放標(biāo)準(zhǔn)

開(kāi)放式加速標(biāo)準(zhǔn)如何推動(dòng)安全關(guān)鍵型發(fā)展

加速嵌入式視覺(jué)和推理的開(kāi)放標(biāo)準(zhǔn):行業(yè)概述

評(píng)論