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