人工智能之EdgeBoard中CNN架構(gòu)的剖析
(文章來源:粵訊)
人工智能領(lǐng)域邊緣側(cè)的應(yīng)用場(chǎng)景多種多樣,在功能、性能、功耗、成本等方面存在差異化的需求,因此一款優(yōu)秀的人工智能邊緣計(jì)算平臺(tái),應(yīng)當(dāng)具備靈活快速適配全場(chǎng)景的能力,能夠在安防、醫(yī)療、教育、零售等多維度行業(yè)應(yīng)用中實(shí)現(xiàn)快速部署。
百度大腦EdgeBoard嵌入式AI解決方案,以其豐富的硬件產(chǎn)品矩陣、自研的多并發(fā)高性能通用CNN(Convolution Neural Network)設(shè)計(jì)架構(gòu)、靈活多樣的軟核算力配置,搭配移動(dòng)端輕量級(jí)Paddle Lite高效預(yù)測(cè)框架,通過百度自定義的MODA (Model Driven Architecture)工具鏈,依據(jù)各應(yīng)用場(chǎng)景定制化的模型和算法特點(diǎn),向用戶提供高性價(jià)比的軟硬一體的解決方案,同時(shí)和百度大腦模型開發(fā)平臺(tái)(AIStudio、EasyDL)深度打通,實(shí)現(xiàn)模型的訓(xùn)練、部署、推理等一站式服務(wù)。
EdgeBoard是基于Xilinx 16nm工藝Zynq UltraScale+ MPSoC的嵌入式AI解決方案,采用Xilinx異構(gòu)多核平臺(tái)將四核ARM Cortex-A53處理器和FPGA可編程邏輯集成在一顆芯片上,高性能計(jì)算板卡上搭載了豐富的外部接口和設(shè)備,具有開發(fā)板、邊緣計(jì)算盒、抓拍機(jī)、小型服務(wù)器、定制化解決方案等表現(xiàn)形態(tài)。
EdgeBoard計(jì)算卡產(chǎn)品可以分為FZ9、FZ5、FZ3三個(gè)系列,是基于Xilinx XCZU9EG、XAZU5EV、XAZU3EG研發(fā)而來,分別具有高性能,視頻硬解碼,低成本等特點(diǎn),同時(shí)還有不同的DDR容量版本。以上三個(gè)版本PS側(cè)同樣采用四核Cortex-A53 、雙核Cortex-R5、以及GPU Mali-400MP2等處理器配置,PS到PL的接口均為12x32/64/128b AXI Ports,主要的區(qū)別在于PL側(cè)擁有的芯片邏輯資源大小不同。
采用上述三種標(biāo)準(zhǔn)產(chǎn)品的硬件板卡或者一致的硬件參考設(shè)計(jì),用戶可無縫適配運(yùn)行EdgeBoard公開發(fā)布的最新版標(biāo)準(zhǔn)鏡像,也可根據(jù)自身項(xiàng)目需求定制相關(guān)的硬件設(shè)計(jì),并進(jìn)一步根據(jù)性能、成本和功耗要求,以及其他功能模塊的集成需求,對(duì)軟核的算力和資源進(jìn)行個(gè)性化配置。
EdgeBoard的CNN加速軟核(整體的加速方案稱之為軟核)提供了一套計(jì)算資源和性能優(yōu)化的AI軟件棧,由上至下分別包括應(yīng)用層軟件API、計(jì)算加速單元的SDK調(diào)度管理、Paddle Lite預(yù)測(cè)框架基礎(chǔ)管理器、Linux操作系統(tǒng)、負(fù)責(zé)設(shè)備管理和內(nèi)存分配的驅(qū)動(dòng)層和CNN算子的專用硬件加速單元,用來完成卷積神經(jīng)網(wǎng)絡(luò)模型的加載、解析、優(yōu)化和執(zhí)行等功能。
專用計(jì)算加速單元基于FPGA的可編程邏輯資源開發(fā)實(shí)現(xiàn),采用ARM CPU和FPGA共享內(nèi)存的方式,通過高帶寬DMA(Direct Memory Access)實(shí)現(xiàn)二者數(shù)據(jù)的高速交互,共享內(nèi)存也并作為異構(gòu)計(jì)算平臺(tái)各算子數(shù)據(jù)在CPU和FPGA協(xié)同處理的橋梁,減少了數(shù)據(jù)在CPU與FPGA之間的重復(fù)傳輸。此外,CNN算子功能模塊可直接發(fā)起DDR讀寫操作,充分發(fā)揮了FPGA的實(shí)時(shí)響應(yīng)特性,減少了CPU中斷等待的時(shí)間消耗。
作為CNN網(wǎng)絡(luò)中比重最大、最為核心的卷積計(jì)算加速單元,是CNN軟核性能加速的關(guān)鍵,也占用了FPGA芯片的大部分算力分配和邏輯資源消耗。下面將針對(duì)EdgeBoard卷積計(jì)算加速單元的設(shè)計(jì)思路進(jìn)行簡(jiǎn)要介紹,此章節(jié)也是理解CNN軟核算力彈性配置的技術(shù)基礎(chǔ)。
每一層網(wǎng)絡(luò)的卷積運(yùn)算,有M個(gè)輸入圖片(稱之為feature map,對(duì)應(yīng)著一個(gè)輸入通道),N個(gè)輸出feature map(N個(gè)輸出通道),M個(gè)輸入會(huì)分別進(jìn)行卷積運(yùn)算然后求和,獲得一幅輸出map。那么需要的卷積核數(shù)量就是M*N。
針對(duì)上述計(jì)算特點(diǎn),EdgeBoard的卷積單元采用脈動(dòng)陣列的數(shù)據(jù)流動(dòng)結(jié)構(gòu),將數(shù)據(jù)在PE之間通過寄存器進(jìn)行打拍操作,可以實(shí)現(xiàn)在第二個(gè)PE計(jì)算結(jié)果出來的同時(shí)完成和前一個(gè)PE的求和。這樣可以使數(shù)據(jù)在運(yùn)算單元的陣列中進(jìn)行流動(dòng),減少訪存的次數(shù),并且結(jié)構(gòu)更加規(guī)整,布線更加統(tǒng)一,提高系統(tǒng)工作頻率,避免了采用加法樹等并行結(jié)構(gòu)所造成的高扇出問題。
SDK可以將一條滑窗鏈的Feature Map數(shù)據(jù)分成B塊,并將分塊數(shù)B和每個(gè)塊的數(shù)據(jù)量告訴卷積計(jì)算加速單元,那么后者則可以分批依次從DDR讀取B次Feature Map數(shù)據(jù),每次的數(shù)據(jù)量是可以存入到Image SRAM內(nèi)。
SDK可以將Kernel的數(shù)量分割成S份,使得分割后的每份Kernel數(shù)量可以下發(fā)到PL側(cè)的Filter SRAM中,然后SDK分別調(diào)度S次卷積算子執(zhí)行操作,所有的數(shù)據(jù)返回DDR后,再從通道(Channel)維度做這S次計(jì)算結(jié)果的數(shù)據(jù)拼接(Concat)即可。不過要注意的是,我們的Filter SRAM雖然不需存儲(chǔ)所有Kernel的數(shù)據(jù)量,但至少要保證能夠存儲(chǔ)一個(gè)Kernel的數(shù)據(jù)量。
由此看來,即使EdgeBoard三兄弟中最小的FZ3擁有極其有限的片上存儲(chǔ)資源,也是能夠很好地完成大多數(shù)CNN網(wǎng)絡(luò)的參數(shù)適配。
我們以卷積計(jì)算加速單元的核心矩陣乘加運(yùn)算消耗DSP硬核(Hard core)的個(gè)數(shù)作為CNN軟核核心算力的考察指標(biāo)。當(dāng)然,這并不包括卷積前處理、后處理模塊,以及其他算子加速單元或者用戶自定義功能模塊所消耗的DSP數(shù)量,因此這并不是整個(gè)解決方案在FPGA芯片內(nèi)部的DSP資源消耗。我們的設(shè)計(jì)可以支持Window并行度1-8的任意整數(shù),支持Kernel并行度包括4,8,16。
目前,EdgeBoard公開版針對(duì)卷積計(jì)算加速單元Window維度和Kernel維度的并行度配置,以及核心矩陣乘加運(yùn)算的DSP硬核消耗。
EdgeBoard的CNN軟核以其靈活的算力搭配組合以及算子可定制化的特點(diǎn),既可以根據(jù)具體模型的算子組合和所占比例,將一定成本和資源條件內(nèi)的芯片性能發(fā)揮到極致,還可以在滿足場(chǎng)景所要求性能的前提下減少不必要的功耗支出,此外還允許開發(fā)者縮減軟核尺寸并將芯片資源應(yīng)用于自定義功能的IP中,極大地增強(qiáng)了EdgeBoard人工智能多場(chǎng)景覆蓋的能力。
? ? ?