0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

EdgeBoard中“活靈活現(xiàn)”的算子

張慧娟 ? 來(lái)源:電子發(fā)燒友網(wǎng) ? 2019-12-27 22:43 ? 次閱讀

背景介紹

數(shù)據(jù)、算法和算力是人工智能技術(shù)的三大要素。其中,算力體現(xiàn)著人工智能(AI)技術(shù)具體實(shí)現(xiàn)的能力,實(shí)現(xiàn)載體主要有CPU、GPU、FPGAASIC四類器件。CPU基于馮諾依曼架構(gòu),雖然靈活,卻延遲很大,在推理和訓(xùn)練過(guò)程中主要完成其擅長(zhǎng)的控制和調(diào)度類任務(wù)。GPU以犧牲靈活性為代價(jià)來(lái)提高計(jì)算吞吐量,但其成本高、功耗大,尤其對(duì)于推理環(huán)節(jié),并行度的優(yōu)勢(shì)并不能完全發(fā)揮。專用ASIC芯片開(kāi)發(fā)周期長(zhǎng),資金投入大,由于其結(jié)構(gòu)固化無(wú)法適應(yīng)目前快速演進(jìn)的AI算法。FPGA因其高性能、低功耗、低延遲、靈活可重配的特性,被廣泛地用作AI加速,開(kāi)發(fā)者無(wú)需更換芯片,即可實(shí)現(xiàn)優(yōu)化最新的AI算法,為產(chǎn)品贏得寶貴的時(shí)間。

由此,百度基于FPGA打造了EdgeBoard嵌入式AI解決方案,能夠提供強(qiáng)大的算力,支持定制化模型,適配各種不同的場(chǎng)景,并大幅提高設(shè)備端的AI推理能力,具有高性能、高通用、易集成等特點(diǎn)。本文將主要介紹EdgeBoard中神經(jīng)網(wǎng)絡(luò)算子在FPGA中的實(shí)現(xiàn)。

FPGA加速的關(guān)鍵因素

FPGA實(shí)現(xiàn)AI加速有兩大關(guān)鍵因素,一是FPGA內(nèi)部資源,二是內(nèi)存訪問(wèn)帶寬。FPGA內(nèi)部資源主要包括LUT,F(xiàn)F,RAM以及DSP等,F(xiàn)PGA本質(zhì)上是可編程邏輯電路,可用邏輯電路的多少取決于芯片內(nèi)部資源,這也就決定了芯片的峰值算力和可容納的算子種類數(shù)。

深度學(xué)習(xí)中,90%以上的計(jì)算都集中在conv、dw-conv和pooling等少數(shù)的幾個(gè)算子上。所以,并不是FPGA中添加的加速算子數(shù)量越多越好,而是要注重算子的加速質(zhì)量:一是用更少的資源實(shí)現(xiàn)更多的功能;二是提高耗時(shí)占比大的算子性能。

在實(shí)踐中,添加新算子前需要平衡該算子在網(wǎng)絡(luò)中所耗時(shí)間的占比以及其在FPGA中所消耗的資源。當(dāng)然可以通過(guò)選取更大規(guī)模的片子來(lái)突破這種限制,但是端上設(shè)備受限于成本、功耗等因素,只能平衡多種因素選擇一個(gè)合適規(guī)模的芯片,然后通過(guò)多種設(shè)計(jì)方法和技巧來(lái)提高加速性能。本文接下來(lái)就將介紹在EdgeBoard中如何優(yōu)化設(shè)計(jì)DSP資源提升算力,以及如何通過(guò)算子復(fù)用和融合技術(shù)實(shí)現(xiàn)對(duì)多算子的支持。

提升內(nèi)存訪問(wèn)帶寬是提高AI加速性能的另一關(guān)鍵因素,因?yàn)镕PGA與內(nèi)存的數(shù)據(jù)交互在整個(gè)計(jì)算過(guò)程中占比很高,有時(shí)甚至超過(guò)了計(jì)算本身所消耗的時(shí)間。直接提高內(nèi)存訪問(wèn)帶寬的方法包括提高DDR位寬、增加傳輸所用的高速接口資源、提高DMA傳輸?shù)?a href="http://srfitnesspt.com/tags/時(shí)鐘/" target="_blank">時(shí)鐘頻率等。另外也可以通過(guò)復(fù)用FPGA芯片上的內(nèi)存資源(RAM)以及計(jì)算和傳輸交疊執(zhí)行(overlap)等方法,減少與外部DDR存儲(chǔ)的交互,降低數(shù)據(jù)傳輸?shù)拈_(kāi)銷。這些設(shè)計(jì)方法較為常見(jiàn),本文不做詳細(xì)介紹。

兩大關(guān)鍵技術(shù)實(shí)現(xiàn)四倍算力提升

FPGA中的計(jì)算主要依靠DSP實(shí)現(xiàn),高效使用DSP是保證FPGA算力的關(guān)鍵。EdgeBoard FPGA中的DSP采用DSP48E2架構(gòu),如圖1所示,包括一個(gè)27-bit的預(yù)加法器(pre-adder),一個(gè)27x18的乘法器(mult)和一個(gè)48-bit的ALU。

pIYBAF4GGlqANWgQAALCxIkVvjw982.png

圖1. DSP48E2結(jié)構(gòu)圖

在EdgeBoard的FPGA設(shè)計(jì)中,充分利用DSP48E2本身的特點(diǎn),采用supertile和INT8移位計(jì)算技術(shù),實(shí)現(xiàn)了四倍算力提升。

Supertile

一般來(lái)講,Xilinx Ultrascale系列FPGA運(yùn)行的最高頻率在300MHz到400MHz之間,但DSP是FPGA中的硬核,可以運(yùn)行在更高的頻率上。如圖2所示,SLB-M與DSP這樣構(gòu)成的基本單元,被稱之為Supertile,F(xiàn)PGA內(nèi)部Supertile的布局如圖3所示。Supertile技術(shù)的核心在于使DSP運(yùn)行于兩倍邏輯頻率上,使整個(gè)系統(tǒng)算力達(dá)到倍增的效果。這主要得益于芯片結(jié)構(gòu)中SLICEM與DSP位置臨近,使用專有的布線資源,延遲縮短,可以支撐SLICEM以雙倍邏輯運(yùn)行的頻率向DSP提供數(shù)據(jù)。另外,神經(jīng)網(wǎng)絡(luò)中存在著數(shù)據(jù)復(fù)用,通過(guò)filter和image數(shù)據(jù)的復(fù)用和交織,一次取數(shù)多次使用,從而減少數(shù)據(jù)的搬運(yùn)次數(shù),提升計(jì)算效率。

o4YBAF4GGoGAfPdfAAJbA5YEqE8540.png

圖2. Supertile結(jié)構(gòu)

pIYBAF4GGpmAcHmZAABy2kcadTk302.png

圖3. DSP和SLICEM在FPGA中的位置

INT8移位計(jì)算技術(shù)

利用DSP48E2的結(jié)構(gòu)特點(diǎn),一個(gè)DSP完成兩路INT8的乘加。在進(jìn)行8bit數(shù)據(jù)計(jì)算時(shí),將a左移18位,置于輸入的高8位,低19位補(bǔ)0,從DSP的A端輸入,b維持在低8位,從DSP的D端輸入,如圖4所示。a與b兩者先進(jìn)行累加,然后與c相乘后,結(jié)果將分別位于輸出的高(a*c)、低(b*c)兩部分,該計(jì)算過(guò)程如圖5所示。

o4YBAF4GGraAO9-5AACbwK6Y2uI962.png

圖4. DSP移位示意圖

pIYBAF4GGtCAYXkMAADFGqK_sUU377.png

圖5. 單DSP實(shí)現(xiàn)兩路INT8相乘


在實(shí)踐中,我們把a(bǔ),b兩路作為filter數(shù)據(jù)輸入,c作為image數(shù)據(jù)輸入。這樣DSP在一個(gè)時(shí)鐘周期內(nèi)就同時(shí)完成了兩路的計(jì)算,再次使算力翻倍。結(jié)合前面提到的supertile倍頻設(shè)計(jì),兩種設(shè)計(jì)使得單個(gè)DSP的算力提升四倍。因?yàn)橐淮斡?jì)算過(guò)程有乘、加兩個(gè)操作(operations),所以單個(gè)DSP在一個(gè)時(shí)鐘周期高效的完成了8個(gè)operations。

多算子復(fù)用

深度學(xué)習(xí)中主要有兩類運(yùn)算,一類是指數(shù)運(yùn)算,另一類是乘加運(yùn)算。前者主要位于激活函數(shù)層,后者是深度學(xué)習(xí)涉及最多也是最基礎(chǔ)的運(yùn)算。乘加運(yùn)算根據(jù)kernel的維度不同,又可分為向量型和矩陣型,在EdgeBoard中劃分為三個(gè)運(yùn)算單元,分別為向量運(yùn)算單元(VPU: vector processing unit)、矩陣運(yùn)算單元(MPU: matrix processing unit)和指數(shù)激活運(yùn)算單元(EXP-ACT: exponential activation unit)。

向量運(yùn)算單元

向量運(yùn)算單元VPU負(fù)責(zé)實(shí)現(xiàn)dw-conv(depth-wise convolution),完成3維輸入圖像(H x W x C)和3維卷積核(K1 x K2 x C)的乘加操作。其中一個(gè)卷積核負(fù)責(zé)輸入圖像的一個(gè)通道,卷積核的數(shù)量與上一層的通道數(shù)相同,該過(guò)程如圖6所示。圖7表示的是一個(gè)通道內(nèi)以kernel 2x2和stride 2為例的計(jì)算過(guò)程。

o4YBAF4GGuyASosZAACrEowH6TM007.png

圖6. dw-conv示意圖

pIYBAF4GGv6ATzBQAABniruvslY915.png

圖7. dw-conv的計(jì)算

EdgeBoard通過(guò)復(fù)用VPU一套計(jì)算資源實(shí)現(xiàn)了average/max pooling,elementwise add/sub,scale,batch-normalize,elementwise-mul和dropout等多種算子。

Average pooling可以看作是卷積核參數(shù)固定的dw-conv,即將求和后取平均(除以卷積核面積)的操作轉(zhuǎn)換成先乘以一個(gè)系數(shù)(1/卷積核面積)再求和。如圖8所示,該例子中卷積核大小為2x2,卷積核參數(shù)即為1/4。卷積核固定的參數(shù)可以類似于dw-conv下發(fā)卷積核的方式由SDK封裝后下發(fā),也可以通過(guò)SDK配置一個(gè)參數(shù)完成,然后在FPGA中計(jì)算轉(zhuǎn)換,這樣節(jié)省卷積核參數(shù)傳輸?shù)臅r(shí)間。另外,max-pooling算子與average pooling的計(jì)算過(guò)程類似,只需要將求均值操作換成求最大值的操作,其余挖窗、存取數(shù)等過(guò)程保持不變。

pIYBAF4GGx6AJyn3AABzKCFFkQ8256.png

圖8. Pooling復(fù)用dw-conv

Elementwise add/sub完成兩幅圖像對(duì)應(yīng)元素的相加或相減,不同于dw-conv的是它有兩幅輸入圖像。如果我們控制兩幅圖像的輸入順序,將兩幅圖像按行交錯(cuò)拼成一幅圖像,然后取卷積核為2x1,行stride為1,列stride為2,pad均設(shè)置成0,則按照dw-conv的計(jì)算方式就完成了elementwise的計(jì)算。通過(guò)在FPGA中設(shè)置當(dāng)前像素對(duì)應(yīng)的kernel值為1或-1,就可以分別實(shí)現(xiàn)對(duì)應(yīng)elementwise add和elementwise sub兩個(gè)算子。該過(guò)程如圖9所示。

o4YBAF4GGzaAcb6mAADR-LFCzbU921.png

圖9. ew-add/sub復(fù)用dw-conv

Scale算子主要在圖像預(yù)處理時(shí)使用,將輸入圖像每一個(gè)通道的全部像素點(diǎn)乘以該通道對(duì)應(yīng)的scale值,然后加上bias。如果我們將dw-conv的卷積核大小設(shè)成1x1,行列stride都設(shè)置成1,pad設(shè)置成0,卷積核參數(shù)值設(shè)成scale,就可以通過(guò)dw-conv完成scale算子的功能。通過(guò)分析發(fā)現(xiàn),batch-normalize,elementwise-mul和dropout等算子都可以通過(guò)scale算子來(lái)實(shí)現(xiàn)。

二. 矩陣運(yùn)算單元

矩陣運(yùn)算單元MPU負(fù)責(zé)實(shí)現(xiàn)convolution,完成3維輸入圖像(H x W x C)和4維卷積核(N x K1 x K2 x C)的乘加操作,單個(gè)卷積核的通道數(shù)和輸入圖像的通道數(shù)相同,而卷積核的數(shù)量N決定了輸出的通道數(shù),如圖10所示。full connection 算子實(shí)現(xiàn)的1維輸入數(shù)組(長(zhǎng)度C)和2維權(quán)重(N x C)的乘加操作。將 full connection輸入數(shù)組擴(kuò)展成 H x W x C, 輸出擴(kuò)展成 N x K1 x K2 x C, 其中H, W, K1和K2均設(shè)置成1,這樣 full connection就可以調(diào)用convolution來(lái)實(shí)現(xiàn)。另外,在計(jì)算 deconv 時(shí),通過(guò)SDK對(duì)卷積核進(jìn)行分拆、重排,就可以通過(guò)調(diào)用conv來(lái)實(shí)現(xiàn)deconv,同樣帶來(lái)了極大的收益。

pIYBAF4GG06ASbybAADFAKeezr4763.png

圖10. Conv算子示意圖


三.指數(shù)激活運(yùn)算單元
指數(shù)激活運(yùn)算單元EXP-ACT實(shí)現(xiàn)的基礎(chǔ)是sigmoid,由于在FPGA中進(jìn)行指數(shù)型運(yùn)算比較耗資源,如何復(fù)用該計(jì)算單元就變得非常有意義。通過(guò)分析發(fā)現(xiàn),可以把 tanh 和兩通道softmax 轉(zhuǎn)換成 sigmoid 的形式,這樣一個(gè)指數(shù)運(yùn)算單元就支持了3種算子,實(shí)現(xiàn)資源利用的最大化。

多算子融合

在推理時(shí)做BatchNorm運(yùn)算非常耗時(shí),通過(guò)SDK將BatchNorm+Scale的線性變換參數(shù)融合到卷積層,替換原來(lái)的weights和bias,這樣4個(gè)算子可以融合成單個(gè)算子conv + batchnorm + scale + relu,對(duì)于dw-conv同樣如此。相對(duì)于每計(jì)算完一個(gè)算子就將數(shù)據(jù)送回內(nèi)存,這種算子融合大大減少了內(nèi)存的讀寫操作,有效提高了處理幀率。
此外,我們將scale、bias和relu為代表的激活函數(shù)層放到各算子之后的鏈路上,然后統(tǒng)一送到DMA傳輸模塊,如圖11所示。這不僅使得各算子復(fù)用了這些邏輯,節(jié)省了大量片內(nèi)資源,也使得各算子都可以具備這些功能,且都能以最大帶寬進(jìn)行DMA傳輸。在實(shí)踐中,我們將這些功能做成可選項(xiàng),由軟件根據(jù)當(dāng)前網(wǎng)絡(luò)算子的需要進(jìn)行選擇,在節(jié)省資源的同時(shí),既保證了通用性,又兼顧了靈活性。

o4YBAF4GG2mAbygEAABF6Py2tNQ409.png

圖11. EdgeBoard內(nèi)部結(jié)構(gòu)和鏈路圖


福利
據(jù)可靠小道消息:EdgeBoard正在打折中,歷史最低價(jià),降價(jià)1000元,有興趣可以看看:https://aim.baidu.com/product/5b8d8817-9141-4cfc-ae58-640e2815dfd4

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • LabVIEW
    +關(guān)注

    關(guān)注

    1959

    文章

    3651

    瀏覽量

    321581
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AI邊緣計(jì)算平臺(tái)EdgeBoard如何實(shí)現(xiàn)靈活、快速部署?

    EdgeBoard計(jì)算卡產(chǎn)品可以分為FZ9、FZ5、FZ3三個(gè)系列,是基于Xilinx XCZU9EG、XAZU5EV、XAZU3EG研發(fā)而來(lái),分別具有高性能,視頻硬解碼,低成本等特點(diǎn),同時(shí)還有不同的DDR容量版本。
    發(fā)表于 03-26 14:46 ?3788次閱讀

    意大利AD F10 低音揚(yáng)聲器測(cè)評(píng):聲音活靈活現(xiàn) AD幫你實(shí)現(xiàn)

    `在發(fā)燒音響系統(tǒng),超低音是必不可少的重要單元;在簡(jiǎn)單的音改,車主如果不想拆改原車的喇叭,那么加多一個(gè)超低音,也會(huì)讓原本平庸的原車音響系統(tǒng)變得緊湊、有力,表現(xiàn)豐富了起來(lái),因此市面上低音產(chǎn)品眾多
    發(fā)表于 08-12 10:09

    EdgeBoard FZ5 邊緣AI計(jì)算盒及計(jì)算卡

    科技攜手百度,推出系列高性能及高性價(jià)比EdgeBoard 邊緣AI計(jì)算卡/計(jì)算盒,助力AI項(xiàng)目落地???b class='flag-5'>靈活適配海量的且不斷迭代的AI模型,并提供強(qiáng)大的運(yùn)行算力。開(kāi)發(fā)者可以采用EdgeBoard邊緣AI計(jì)算盒
    發(fā)表于 08-31 14:12

    【米爾百度大腦EdgeBoard邊緣AI計(jì)算盒試用連載】第六篇 EdgeBoard的浮點(diǎn)運(yùn)算能力

    的運(yùn)算速度比較,有的是最近測(cè)試的,有的則是以前測(cè)試的結(jié)果,直接引用,沒(méi)有復(fù)測(cè)。 從分析可以看到,酷睿I7的運(yùn)算能力確實(shí)強(qiáng)大,是EdgeBoard運(yùn)算能力的30倍左右,然而EdgeBoard并未使用其
    發(fā)表于 04-29 12:12

    邊緣檢測(cè)的幾種微分算子

    一、邊緣檢測(cè)邊緣檢測(cè)的幾種微分算子:一階微分算子:Roberts、Sobel、Prewitt二階微分算子:Laplacian、Log/Marr非微分算子:Canny一階微分
    發(fā)表于 07-26 08:29

    EdgeBoard神經(jīng)網(wǎng)絡(luò)算子在FPGA的實(shí)現(xiàn)方法是什么?

    FPGA加速的關(guān)鍵因素是什么?EdgeBoard神經(jīng)網(wǎng)絡(luò)算子在FPGA的實(shí)現(xiàn)方法是什么?
    發(fā)表于 09-28 06:37

    EdgeBoard是什么?有何作用

    EdgeBoard是基于FPGA打造的嵌入式AI解決方案,能夠提供強(qiáng)大的算力,并支持定制化模型,適配各種不同的場(chǎng)景,并大幅提高設(shè)備的AI推理能deeplab力,具有高性能、高通用、易集成等特點(diǎn)
    發(fā)表于 12-14 08:45

    LOG算子在FPGA的實(shí)現(xiàn)

    介紹了一種高斯拉普拉斯LOG算子在FPGA的實(shí)現(xiàn)方案!并通過(guò)對(duì)一幅BMP圖像的處理!論證了在FPGA實(shí)現(xiàn)的LOG算子的圖像增強(qiáng)效果
    發(fā)表于 05-16 17:12 ?50次下載
    LOG<b class='flag-5'>算子</b>在FPGA<b class='flag-5'>中</b>的實(shí)現(xiàn)

    星球大戰(zhàn)SpheroBB-8機(jī)器人試玩 跟一個(gè)機(jī)器人交互的感覺(jué)也是非常溫暖和奇妙的

    這大概是我第一眼看到Sphero BB-8時(shí)腦中浮現(xiàn)的畫面,在無(wú)聲無(wú)息的暗影下,他那顆活靈活現(xiàn)的小腦袋仿佛能裝下一萬(wàn)個(gè)賣萌的畫面。
    的頭像 發(fā)表于 02-28 11:33 ?2776次閱讀

    EdgeBoard為程序員打造的一款深度學(xué)習(xí)加速套件

    摘要: 簡(jiǎn)介 市面上基于嵌入式平臺(tái)的神經(jīng)網(wǎng)絡(luò)加速平臺(tái)有很多,今天給大家?guī)?lái)是百度大腦出品的EdgeBoard。按照官網(wǎng)文檔 的介紹,EdgeBoard是基于Xilinx Zynq
    發(fā)表于 07-16 21:46 ?1342次閱讀

    AI助力,老片修復(fù)一直在路上

    這樣的畫面大大地滿足了網(wǎng)友們的好奇心。視頻一經(jīng)發(fā)布,在24小時(shí)內(nèi)就有了將近50萬(wàn)的點(diǎn)贊量,10萬(wàn)+次的轉(zhuǎn)發(fā)和接近3萬(wàn)的留言。修復(fù)后的視頻把當(dāng)時(shí)的北京城演繹得活靈活現(xiàn)
    的頭像 發(fā)表于 06-03 10:53 ?2969次閱讀

    液晶廣告機(jī)的三大主要功能及優(yōu)勢(shì)詳細(xì)說(shuō)明

    1.廣告機(jī)打破傳統(tǒng)廣告的模式,產(chǎn)品展示活靈活現(xiàn)。廣告機(jī)作為一種新型的媒介,可以24小時(shí)不間斷的播放精彩的視頻及音頻,能引導(dǎo)消費(fèi)者主動(dòng)過(guò)來(lái)了解觀察,隨時(shí)都存在成交機(jī)會(huì)。
    發(fā)表于 02-04 08:00 ?0次下載

    自定義算子開(kāi)發(fā)

    一個(gè)完整的自定義算子應(yīng)用過(guò)程包括注冊(cè)算子、算子實(shí)現(xiàn)、含自定義算子模型轉(zhuǎn)換和運(yùn)行含自定義op模型四個(gè)階段。在大多數(shù)情況下,您的模型應(yīng)該可以通過(guò)使用hb_mapper工具完成轉(zhuǎn)換并順利部署
    的頭像 發(fā)表于 04-07 16:11 ?2650次閱讀
    自定義<b class='flag-5'>算子</b>開(kāi)發(fā)

    EdgeBoard使用指南

    電子發(fā)燒友網(wǎng)站提供《EdgeBoard使用指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-15 10:56 ?0次下載
    <b class='flag-5'>EdgeBoard</b>使用指南

    百度大腦EdgeBoard介紹

    對(duì)于開(kāi)發(fā)者而言,EdgeBoard是一款面向各個(gè)層次的AI開(kāi)發(fā)者的硬件平臺(tái),可以直接運(yùn)載神經(jīng)網(wǎng)絡(luò)模型,提供強(qiáng)大的運(yùn)行算力,并具備模型剪枝和量化加速的功能。它具備強(qiáng)大的計(jì)算能力和靈活的擴(kuò)展性,可以支持
    的頭像 發(fā)表于 05-15 09:50 ?434次閱讀
    百度大腦<b class='flag-5'>EdgeBoard</b>介紹