用FPGA構(gòu)建邊緣AI推理應(yīng)用很難?這樣做,變簡(jiǎn)單!
對(duì)于希望在邊緣的推理處理器上實(shí)施人工智能 (AI) 算法的設(shè)計(jì)人員來(lái)說,他們正不斷面臨著降低功耗并縮短開發(fā)時(shí)間的壓力,即使在處理需求不斷增加的情況下也是如此?,F(xiàn)場(chǎng)可編程門陣列 (FPGA) 為實(shí)施邊緣AI所需的神經(jīng)網(wǎng)絡(luò) (NN) 推理引擎提供了特別有效的速度和效率效率組合。然而,對(duì)于不熟悉 FPGA 的開發(fā)人員來(lái)說,傳統(tǒng)FPGA的開發(fā)方法可能相當(dāng)復(fù)雜,往往導(dǎo)致他們?nèi)ミx擇不太理想的解決方案。
本文引用地址:http://butianyuan.cn/article/202310/451367.htm本文將介紹來(lái)自Microchip Technology的一種比較簡(jiǎn)單的方法。通過這種方法,開發(fā)人員可以使用FPGA和軟件開發(fā)套件 (SDK) 構(gòu)建經(jīng)過訓(xùn)練的NN,或者使用基于FPGA的視頻套件立即啟動(dòng)智能嵌入式視覺應(yīng)用開發(fā),從而避開傳統(tǒng)的FPGA開發(fā)。
為什么要在邊緣使用AI?
邊緣計(jì)算為物聯(lián)網(wǎng) (IoT) 應(yīng)用帶來(lái)了諸多好處,涵蓋了包括工業(yè)自動(dòng)化、安全系統(tǒng)、智能家居等在內(nèi)的多個(gè)領(lǐng)域。在以工廠車間為目標(biāo)的工業(yè)物聯(lián)網(wǎng) (IIoT) 應(yīng)用中,邊緣計(jì)算通過避免到云端應(yīng)用的往返延遲,可以顯著縮短過程控制環(huán)路的響應(yīng)時(shí)間。同樣,基于邊緣的安全系統(tǒng)或智能家居門鎖即使由于意外或人為原因與云端的連接斷開時(shí),也能繼續(xù)正常工作。在很多情況下,在任何此類應(yīng)用中使用邊緣計(jì)算時(shí),都可以通過減少產(chǎn)品對(duì)云資源的依賴來(lái)幫助降低整體運(yùn)營(yíng)成本。隨著產(chǎn)品要求的提高,開發(fā)者可以依靠產(chǎn)品中內(nèi)置的本地處理功能去幫助維持更穩(wěn)定的運(yùn)營(yíng)開支,而不會(huì)面臨增加昂貴的云資源的意外需求。
對(duì)機(jī)器學(xué)習(xí) (ML) 推理模型的快速接受和需求的增加,極大地提高了邊緣計(jì)算的重要性。對(duì)于開發(fā)人員來(lái)說,推理模型的本地處理能力有助于降低云端推理所需的響應(yīng)延遲和云資源成本。對(duì)于用戶來(lái)說,使用本地推理模型會(huì)讓他們更加相信,其產(chǎn)品在偶爾與互聯(lián)網(wǎng)斷開或基于云的供應(yīng)商產(chǎn)品發(fā)生變化時(shí)仍能正常運(yùn)行。此外,在安全和隱私方面的擔(dān)憂會(huì)進(jìn)一步推動(dòng)對(duì)本地處理和推理的需求,以限制通過公共互聯(lián)網(wǎng)傳輸?shù)皆贫说拿舾行畔?shù)量。
為基于視覺的對(duì)象檢測(cè)開發(fā)NN推理模型是一個(gè)多步驟過程。首先進(jìn)行模型訓(xùn)練,這一步通常在TensorFlow等ML框架上使用公開的標(biāo)記圖像或自定義的標(biāo)記圖像進(jìn)行訓(xùn)練。由于處理需求,模型訓(xùn)練通常使用云端或其他高性能計(jì)算平臺(tái)的圖形處理單元 (GPU) 進(jìn)行。訓(xùn)練完成后,模型被轉(zhuǎn)換為能夠在邊緣或霧計(jì)算資源上運(yùn)行的推理模型,并將推理結(jié)果以一組對(duì)象類概率的形式交付(圖1)。
圖1:在多步驟過程的末端實(shí)現(xiàn)邊緣人工智能的推理模型,需要使用現(xiàn)有或定制型訓(xùn)練數(shù)據(jù)在框架上訓(xùn)練和優(yōu)化NN。(圖片來(lái)源:Microchip Technology)
為什么推理模型存在計(jì)算方面的挑戰(zhàn)?
與訓(xùn)練過程中使用的模型相比,雖然NN推理模型的大小和復(fù)雜程度都有所降低,但還是需要大量計(jì)算,這對(duì)于通用處理器來(lái)說仍是一個(gè)挑戰(zhàn)。在其通用形式中,深層NN模型由多層神經(jīng)元集組成。在一個(gè)全連接網(wǎng)絡(luò)的每一層內(nèi),每個(gè)神經(jīng)元nij 都需要計(jì)算每個(gè)輸入與相關(guān)權(quán)重系數(shù)Wij 的乘積之和(圖2)。
圖2:通過NN進(jìn)行推理所需的計(jì)算次數(shù)會(huì)造成龐大的計(jì)算工作量。(圖片來(lái)源:Microchip Technology)
圖2中沒有顯示激活函數(shù)和類似函數(shù)帶來(lái)的額外計(jì)算要求。激活函數(shù)通過將負(fù)值映射為零,將大于1的值映射為1來(lái)修改每個(gè)神經(jīng)元的輸出。每個(gè)神經(jīng)元nij 的激活函數(shù)的輸出作為下一層i+1的輸入,以此類推直至每一層。NN模型的輸出層最終產(chǎn)生一個(gè)輸出向量,代表原始輸入向量(或矩陣)對(duì)應(yīng)于監(jiān)督學(xué)習(xí)過程中使用的某一個(gè)類(或標(biāo)簽)的概率。
相比上圖所示具有代表性的通用NN架構(gòu),有效的NN模型是由大得多、復(fù)雜得多的架構(gòu)來(lái)構(gòu)建的。例如,用于圖像對(duì)象檢測(cè)的典型卷積NN (CNN) 以分段方式應(yīng)用這些原理,掃描輸入圖像寬度、高度和顏色深度,從而生成一系列最終會(huì)產(chǎn)生輸出預(yù)測(cè)向量的特征圖(圖3)。
圖3:用于圖像對(duì)象檢測(cè)的CNN會(huì)在許多層中牽涉到大量神經(jīng)元,這對(duì)計(jì)算平臺(tái)提出了更高的要求。(圖片來(lái)源:Aphex34 CC BY-SA 4.0)
用FPGA加速NN數(shù)學(xué)
雖然在邊緣執(zhí)行推理模型的方案不斷涌現(xiàn),但很少有方案能夠提供實(shí)際的邊緣高速推理所需的最佳靈活性、性能和能效組合。在現(xiàn)有的邊緣AI替代品中,F(xiàn)PGA特別有效,因?yàn)樗鼈兛蓤?zhí)行基于硬件的高性能計(jì)算密集型工作,同時(shí)功耗相對(duì)較低。
盡管FPGA優(yōu)勢(shì)突出,但由于傳統(tǒng)的開發(fā)流程有時(shí)會(huì)讓沒有豐富FPGA經(jīng)驗(yàn)的開發(fā)人員望而生畏,舍棄FPGA。為了有效實(shí)施通過NN框架生成的NN模型的FPGA,開發(fā)人員需要了解將模型轉(zhuǎn)換為寄存器傳輸語(yǔ)言 (RTL)、設(shè)計(jì)綜合和最終審定之間的細(xì)微差別,并需要制定具體的設(shè)計(jì)階段路線,從而做到優(yōu)化實(shí)施(圖4)。
圖4:為了在FPGA上實(shí)現(xiàn)NN模型,開發(fā)人員即便是現(xiàn)在還需要了解如何將其模型轉(zhuǎn)換為RTL,并執(zhí)行傳統(tǒng)的FPGA工作流程。(圖片來(lái)源:Microchip Technology)
憑借其PolarFire FPGA、專用軟件和相關(guān)知識(shí)產(chǎn)權(quán) (IP),Microchip Technology提供了一種解決方案,讓沒有FPGA經(jīng)驗(yàn)的開發(fā)人員也能廣泛地使用高性能、低功耗邊緣推理。
PolarFire FPGA采用先進(jìn)的非易失性工藝技術(shù)制造,旨在最大限度地提高靈活性和性能,同時(shí)將功耗降至最低。除了用于通信和輸入/輸出 (I/O) 的大量高速接口外,它們還具有深厚的FPGA結(jié)構(gòu),能夠使用軟IP內(nèi)核支持高級(jí)功能,具體包括RISC-V處理器、高級(jí)內(nèi)存控制器和其他標(biāo)準(zhǔn)接口子系統(tǒng)(圖5)。
圖 5:Microchip Technology 的 PolarFire 架構(gòu)提供了一種深度結(jié)構(gòu),旨在支持高性能設(shè)計(jì)要求,包括實(shí)施計(jì)算密集型推理模型。(圖片來(lái)源:Microchip Technology)
PolarFire FPGA架構(gòu)提供了一套廣泛的邏輯元件和專用功能塊,通過PolarFire FPGA系列的不同器件獲得各種不同的容量支持,具體包括MPF100T、MPF200T、MPF300T和MPF500T系列(表1)。
表1:PolarFire系列包括多種FPGA結(jié)構(gòu)特性和容量。(表格來(lái)源:Digi-Key Electronics,基于Microchip Technology的PolarFire數(shù)據(jù)表)
在特別令人關(guān)注的推理加速功能中,PolarFire架構(gòu)包括一個(gè)專用數(shù)學(xué)塊,提供一個(gè)具有預(yù)加法器的18位 × 18位有符號(hào)乘法累加函數(shù)(MAC)。內(nèi)置的點(diǎn)積模式使用一個(gè)數(shù)學(xué)塊來(lái)執(zhí)行兩個(gè)8位乘法運(yùn)算,通過利用模型量化對(duì)精度的影響可以忽略這一優(yōu)勢(shì),提供了一種可提高容量的機(jī)制。
除了能加快數(shù)學(xué)運(yùn)算外,PolarFire架構(gòu)還有助于緩解在通用架構(gòu)上實(shí)施推理模型時(shí)遇到的存儲(chǔ)器擁堵問題,例如用來(lái)保存在NN算法執(zhí)行過程中創(chuàng)建的中間結(jié)果的小型分布式存儲(chǔ)器。另外,NN模型的權(quán)重值和偏置值可以存儲(chǔ)在一個(gè)系數(shù)為16深 x 18位的只讀存儲(chǔ)器(ROM) 中,這種存儲(chǔ)器通過位于數(shù)學(xué)塊附近的邏輯元件構(gòu)建。
結(jié)合其他PolarFire FPGA結(jié)構(gòu)特性,數(shù)學(xué)塊為Microchip Technology更高級(jí)別的CoreVectorBlox IP奠定了基礎(chǔ)。這將作為一個(gè)靈活的NN引擎,能夠執(zhí)行不同類型的NN。除了一組控制寄存器外,CoreVectorBlox IP還包括三個(gè)主要功能塊:
● 微控制器:一個(gè)簡(jiǎn)單的RISC-V軟處理器,可從外部存儲(chǔ)器讀取Microchip固件二進(jìn)制大對(duì)象 (BLOB) 和用戶特定型NN BLOB文件。通過執(zhí)行固件BLOB的指令來(lái)控制CoreVectorBlox的整體運(yùn)算。
● 矩陣處理器 (MXP):這是一種由8個(gè)32位算術(shù)邏輯單元 (ALU) 組成的軟處理器,旨在使用逐元素張量運(yùn)算對(duì)數(shù)據(jù)向量執(zhí)行并行運(yùn)算,包括加法、減法、xor、移位、mul、dotprod等,并根據(jù)需要使用8位、16位和32位混合精度。
● CNN加速器:使用通過數(shù)學(xué)塊實(shí)現(xiàn)的二維MAC函數(shù)陣列來(lái)加速M(fèi)XP運(yùn)算,運(yùn)算精度為8位。
一個(gè)完整的NN處理系統(tǒng)將包括CoreVectorBlox IP塊、存儲(chǔ)器、存儲(chǔ)器控制器和主機(jī)處理器,如微軟RISC-V (Mi-V) 軟件處理器內(nèi)核(圖6)。
圖6:CoreVectorBlox IP塊與Microchip的Mi-V RISC-V微控制器等主機(jī)處理器配合,實(shí)現(xiàn)NN推理模型。(圖片來(lái)源:Microchip Technology)
在視頻系統(tǒng)實(shí)施過程中,主機(jī)處理器將從系統(tǒng)存儲(chǔ)器加載固件和網(wǎng)絡(luò)BLOB,并將其復(fù)制到雙數(shù)據(jù)速率 (DDR) 隨機(jī)存取存儲(chǔ)器 (RAM) 中供CoreVectorBlox塊使用。當(dāng)視頻幀到達(dá)時(shí),主機(jī)處理器將其寫入DDR RAM,并向CoreVectorBlox塊發(fā)出信號(hào),以開始圖像處理。在主機(jī)運(yùn)行網(wǎng)絡(luò)BLOB中定義的推理模型后,CoreVectorBlox塊將結(jié)果(包括圖像分類)寫回DDR RAM中,供目標(biāo)應(yīng)用程序使用。
開發(fā)流程簡(jiǎn)化了NN FPGA實(shí)施
Microchip使開發(fā)人員避開了在PolarFire FPGA上實(shí)施NN推理模型的復(fù)雜性。NN模型開發(fā)人員無(wú)需處理傳統(tǒng)FPGA流程的細(xì)節(jié),而是像往常一樣使用其NN框架,并將生成的模型加載到Microchip Technology的VectorBlox 加速器軟件開發(fā)工具包 (SDK) 中。SDK生成所需的一組文件,包括正常FPGA開發(fā)流程所需的文件和上文提到的固件和網(wǎng)絡(luò)BLOB文件(圖7)。
圖 7:VectorBlox Accelerator SDK 管理在 FPGA 上的 NN 模型實(shí)施細(xì)節(jié),自動(dòng)生成設(shè)計(jì)并運(yùn)行基于 FPGA 的推理模型所需的文件。(圖片來(lái)源:Microchip Technology)
由于VectorBlox Accelerator SDK流程將NN設(shè)計(jì)置于在FPGA中實(shí)施的NN引擎之上,因此不同的NN可以在同一FPGA設(shè)計(jì)上運(yùn)行,而無(wú)需重復(fù)FPGA設(shè)計(jì)綜合流程。開發(fā)者為生成的系統(tǒng)創(chuàng)建C/C++代碼,并能在系統(tǒng)內(nèi)快速切換模型,或使用時(shí)間切片同時(shí)運(yùn)行模型。
VectorBlox Accelerator SDK將Microchip Technology Libero FPGA設(shè)計(jì)套件與NN推理模型開發(fā)的全套功能融為一體。除了模型優(yōu)化、量化和校準(zhǔn)服務(wù)之外,SDK還提供了一個(gè)NN仿真器,能讓開發(fā)人員在FPGA硬件實(shí)施中使用其模型之前用相同的BLOB文件進(jìn)行模型評(píng)估(圖8)。
圖8:VectorBlox Accelerator SDK提供了一套全面的服務(wù),旨在優(yōu)化由框架生成的推理模型的FPGA實(shí)施。(圖片來(lái)源:Microchip Technology)
VectorBlox Accelerator SDK支持采用開放神經(jīng)網(wǎng)絡(luò)交換 (ONNX) 格式的模型,以及來(lái)自包括TensorFlow、Caffe、Chainer、PyTorch和MXNET在內(nèi)的多種框架的模型。可支持的CNN架構(gòu)包括MNIST、MobileNet版、ResNet-50、Tiny Yolo V2和Tiny Yolo V3。Microchip正在努力擴(kuò)大支持范圍,將大多數(shù)網(wǎng)絡(luò)納入預(yù)訓(xùn)練模型的開源式OpenVINO工具包開放模型動(dòng)物園中,包括Yolo V3、Yolo V4、RetinaNet和SSD-MobileNet等。
視頻套件演示FPGA推理
為幫助開發(fā)人員快速啟動(dòng)智能嵌入式視覺應(yīng)用開發(fā),Microchip Technology提供了一個(gè)全面的樣例應(yīng)用,設(shè)計(jì)用于在該公司的MPF300-VIDEO-KIT PolarFire FPGA視頻和成像套件和參考設(shè)計(jì)上運(yùn)行。
基于Microchip MPF300T PolarFire FPGA,該套件電路板結(jié)合了雙攝像頭傳感器、雙數(shù)據(jù)速率4 (DDR4) RAM、閃存、電源管理和各種接口(圖9)。
圖9:MPF300-VIDEO-KIT PolarFire FPGA視頻和成像套件及相關(guān)軟件能讓開發(fā)人員在智能嵌入式視覺應(yīng)用中快速啟動(dòng)基于FPGA的推理。(圖片來(lái)源:Microchip Technology)
該套件附帶一個(gè)完整的Libero設(shè)計(jì)項(xiàng)目,用于生成固件和網(wǎng)絡(luò)BLOB文件。將BLOB文件編程到板載閃存中后,開發(fā)人員點(diǎn)擊Libero中的運(yùn)行按鈕即可開始演示,處理來(lái)自攝像頭傳感器的視頻圖像,并將推理結(jié)果在顯示屏上顯示(圖10)。
圖10:Microchip Technology PolarFire FPGA視頻和成像套件演示了如何設(shè)計(jì)和使用圍繞Microchip CoreVectorBlox NN引擎構(gòu)建的智能嵌入式視覺系統(tǒng)的FPGA實(shí)施。(圖片來(lái)源:Microchip Technology)
對(duì)于每個(gè)輸入視頻幀,基于FPGA的系統(tǒng)會(huì)執(zhí)行以下步驟(步驟編號(hào)與圖10相關(guān))。
1. 從相機(jī)中加載一幀畫面
2. 將幀存儲(chǔ)在RAM中
3. 讀取RAM中的幀
4. 將原始圖像轉(zhuǎn)換為RGB、平面化RGB并將結(jié)果存儲(chǔ)在RAM中。
5. Mi-V soft RISC-V處理器啟動(dòng)CoreVectorBlo x引擎,從RAM中檢索圖像,進(jìn)行推理并將分類概率結(jié)果存儲(chǔ)回RAM中。
6. Mi-V使用結(jié)果創(chuàng)建一個(gè)包含邊界框、分類結(jié)果和其他元數(shù)據(jù)的疊加幀,并將該框架存儲(chǔ)在RAM中。
7. 原始幀與疊加幀混合并寫入HDMI顯示屏。
該演示支持Tiny Yolo V3和MobileNet V2模型加速,但需要開發(fā)人員改動(dòng)少許代碼,將模型名稱和元數(shù)據(jù)添加到包含兩個(gè)默認(rèn)模型的現(xiàn)有列表中,即可使用上述方法運(yùn)行其他SDK支持的模型。
結(jié)論
NN模型等人工智能算法通常會(huì)施加計(jì)算密集型工作負(fù)載,這需要比通用處理器更強(qiáng)大的計(jì)算資源。雖然FPGA能夠很好地滿足推理模型執(zhí)行的性能和低功耗要求,但傳統(tǒng)的FPGA開發(fā)方法可能會(huì)很復(fù)雜,往往導(dǎo)致開發(fā)人員轉(zhuǎn)向不太理想的解決方案。
評(píng)論