<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > EdgeBoard中“活靈活現”的算子

EdgeBoard中“活靈活現”的算子

作者: 時(shí)間:2019-12-30 來(lái)源:電子產(chǎn)品世界 收藏

背景介紹

本文引用地址:http://dyxdggzs.com/article/201912/408763.htm

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

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

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

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

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

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

提升內存訪(fǎng)問(wèn)帶寬是提高AI加速性能的另一關(guān)鍵因素,因為FPGA與內存的數據交互在整個(gè)計算過(guò)程中占比很高,有時(shí)甚至超過(guò)了計算本身所消耗的時(shí)間。直接提高內存訪(fǎng)問(wèn)帶寬的方法包括提高DDR位寬、增加傳輸所用的高速接口資源、提高DMA傳輸的時(shí)鐘頻率等。另外也可以通過(guò)復用FPGA芯片上的內存資源(RAM)以及計算和傳輸交疊執行(overlap)等方法,減少與外部DDR存儲的交互,降低數據傳輸的開(kāi)銷(xiāo)。這些設計方法較為常見(jiàn),本文不做詳細介紹。

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

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

image.png

圖1. DSP48E2結構圖

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

一.Supertile

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

image.png

圖2. Supertile結構

image.png

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

二.INT8移位計算技術(shù)

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

image.png

圖4. DSP移位示意圖

image.png

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

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

多算子復用

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

一.向量運算單元

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

image.png

圖6. dw-conv示意圖

image.png

圖7. dw-conv的計算

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

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

image.png

圖8. Pooling復用dw-conv

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

image.png

圖9. ew-add/sub復用dw-conv

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

二.矩陣運算單元

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

image.png

圖10. Conv算子示意圖

三.指數激活運算單元

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

多算子融合

在推理時(shí)做BatchNorm運算非常耗時(shí),通過(guò)SDK將BatchNorm+Scale的線(xiàn)性變換參數融合到卷積層,替換原來(lái)的weights和bias,這樣4個(gè)算子可以融合成單個(gè)算子conv + batchnorm + scale + relu,對于dw-conv同樣如此。相對于每計算完一個(gè)算子就將數據送回內存,這種算子融合大大減少了內存的讀寫(xiě)操作,有效提高了處理幀率。

此外,我們將scale、bias和relu為代表的激活函數層放到各算子之后的鏈路上,然后統一送到DMA傳輸模塊,如圖11所示。這不僅使得各算子復用了這些邏輯,節省了大量片內資源,也使得各算子都可以具備這些功能,且都能以最大帶寬進(jìn)行DMA傳輸。在實(shí)踐中,我們將這些功能做成可選項,由軟件根據當前網(wǎng)絡(luò )算子的需要進(jìn)行選擇,在節省資源的同時(shí),既保證了通用性,又兼顧了靈活性。

image.png

圖11. EdgeBoard內部結構和鏈路圖



關(guān)鍵詞: FPGA AI

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>