文/邱超 馮肖雄
深度學(xué)習(xí)CNN神經(jīng)網(wǎng)絡(luò)因其巨大的計(jì)算量,巨大的通信帶寬要求,對(duì)傳統(tǒng)的馮諾依曼體系結(jié)構(gòu)的CPU提出了挑戰(zhàn),傳統(tǒng)CPU產(chǎn)品無(wú)法應(yīng)對(duì),因此衍生出了GPU圖形處理器、ASIC專用集成電路、FPGA等幾條技術(shù)路線。我們從架構(gòu)靈活性、峰值算力、延遲以及功耗、研發(fā)成本對(duì)比五個(gè)維度,對(duì)四條平臺(tái)技術(shù)路線進(jìn)行了對(duì)比。
從以上五個(gè)維度來(lái)說(shuō),F(xiàn)PGA使用處于上游位置,因此使用FPGA作為深度學(xué)習(xí)定制化加速電路,具備了天然優(yōu)勢(shì),本文提到的新型三維脈動(dòng)陣列結(jié)構(gòu)主要是基于FPGA電路動(dòng)態(tài)可變基礎(chǔ)上實(shí)現(xiàn)。
我們知道卷積層作為計(jì)算量要求最高的網(wǎng)絡(luò)層,是CNN推理加速器中最需要加速的網(wǎng)絡(luò)層,接下來(lái)以簡(jiǎn)單實(shí)例為主,介紹卷積層的計(jì)算方法。
本文設(shè)定的卷積計(jì)算場(chǎng)景是,輸入數(shù)據(jù)圖像5x5大小,輸入通道數(shù)ci=3,卷積核大小是3x3,卷積步長(zhǎng)stride=2,卷積外部填充pad=1,輸出圖像的通道數(shù)co=2為例,介紹卷積計(jì)算過(guò)程,對(duì)于其他參數(shù)的場(chǎng)景,計(jì)算方法類似。
首先取卷積核參數(shù)中co相同的一組,找到對(duì)應(yīng)的ci通道,覆蓋到對(duì)應(yīng)的Feature Input上,經(jīng)過(guò)點(diǎn)乘求和,可得到3個(gè)結(jié)果,接下來(lái)再對(duì)3個(gè)結(jié)果進(jìn)行累加,即可得到一個(gè)輸出點(diǎn)的數(shù)據(jù)。對(duì)于其他點(diǎn)的輸出數(shù)據(jù),采用的計(jì)算方法一樣。
圖1:三維陣列結(jié)構(gòu)
一種三維脈動(dòng)陣列乘加器實(shí)現(xiàn)結(jié)構(gòu)如圖1所示,從卷積計(jì)算中提取3個(gè)重要維度,分別是ci(channel inputs),co(channel outputs)以及pix像素信息。
(1)Feature Map的ci信息與權(quán)重?cái)?shù)據(jù)的ci一一對(duì)應(yīng)。
(2)相同F(xiàn)eature Map的ci信息,可以有不同的co通道,并且co方向不需要累加和。
(3)對(duì)于不同的Pix通道信息,ci,co通道信息共用。這種三維陣列結(jié)構(gòu)的乘加陣列器,極大程度滿足了算力要求,并且做到累加和的關(guān)鍵路徑最短。
前文介紹,卷積核陣列還有一個(gè)維度參數(shù)是kernel,在這個(gè)乘加陣列中沒(méi)有體現(xiàn)出來(lái),這里考慮的因素是由于不同神經(jīng)網(wǎng)絡(luò)下,卷積核尺寸是任意的,這個(gè)維度上做分割并行相乘不可取,因此三維陣列結(jié)構(gòu)上不需要體現(xiàn)出來(lái)。
三維陣列結(jié)構(gòu)只給出了乘加陣列計(jì)算模塊工作方法,這里面有個(gè)疑問(wèn),對(duì)于Feature Map來(lái)說(shuō),數(shù)據(jù)分配器如何產(chǎn)生的,在下一節(jié)中有介紹。
Feature Maps數(shù)據(jù)分配器中包括原始輸入圖像IntPix和輸出滑窗后的圖像OutPix。我們以卷積核填充為0,核大小為5,步長(zhǎng)為2,同時(shí)輸出7點(diǎn)數(shù)據(jù)為例,介紹輸入分配器如何同時(shí)輸出多點(diǎn)Pix模塊。
首先IntPix模塊中存放的是輸入圖像數(shù)據(jù),注意是單通道的。OutPix中存放輸出的數(shù)據(jù)信息。其次從IntPix中每取到一個(gè)像素點(diǎn)pix,都會(huì)按照滑窗的對(duì)應(yīng)關(guān)系,放到相應(yīng)位置的opix中即可,這種操作方式是按照行掃描的方式進(jìn)行,當(dāng)所有行都掃描結(jié)束后,便得到了多個(gè)像素點(diǎn)按照滑窗展開(kāi)后的像素信息。
本文提出了一種新型三維脈動(dòng)陣列結(jié)構(gòu)的乘加器,并給出了Feature Map數(shù)據(jù)分配模塊的實(shí)現(xiàn)過(guò)程,該結(jié)構(gòu)具有定制靈活,關(guān)鍵路徑長(zhǎng)度較短,以及計(jì)算標(biāo)準(zhǔn)密集的特點(diǎn),非常適合在各種型號(hào)的FPGA上進(jìn)行定制化CNN推理加速應(yīng)用。