網上對於FPGACNN加速的研究已經很多了,神經網絡的硬件加速似乎已經滿大街都是了,這里我們暫且不討論誰做的好誰做的不好,我們只是根據許許多多的經驗來總結一下實現硬件加速,需要哪些知識,考慮哪些因素。
很多人都說在做FPGA的神經網絡加速,可是有多少人真正拿出了實際結果,可能大部分人就是用HLS(高層次綜合)寫了個四五層的小網絡,或者簡單實現了一下卷積操作。真正要用FPGA做加速,得先明白算法的整體流程以及數據的輸入輸出形式,然后結合FPGA的特點設計相應的加速結構,在結構設計層次里面涉及到一些關鍵的點。例如,如何加速原始卷積(winograd、fft或者其他),如何對數據進行復用減少數據的搬移次數,如何設計合理的流水線結構。在算法層次,需要對計算進行量化,因為現有的算法大部分都是浮點運算,FPGA 擅長定點運算,所以必須量化,卷積層量化方法有dynamic fixed point 方法,有聚類方法,也有mini float point 方法等等,當然除了卷積,還有softmax等分類算法如何量化,NMS如何在硬件上實現。另外目前的神經網絡越做越大,FPGA資源有限,因此對網絡進行裁剪也是一個需要關注的問題。
總的來說用FPGA 加速神經網絡,是一個整體性工程,需要軟件和硬件協同配合,另外硬件這邊除了核心算法,還需要考慮數據的輸入以及調度形式,可能需要用PCIE 等高速接口實時傳入圖像,再利用DDR3/4對計算的部分結果進行緩存,當網絡確定,而一個FPGA 資源又不夠用的時候,可能需要考慮兩個FPGA 互聯,那就需要用到光口或者其他高速接口,這些外圍高速接口,如果之前沒有接觸過,任何一個都可能花費相當長的時間。所以說,做FPGA 加速,一個人是絕對不行的,另外,目前能夠進行神經網絡加速的FPGA ,xilinx 的UltraScale K/V/Zynq系列是比較合適的,但是這些屬於高端FPGA,當然,不是說中低端不行,而是以目前主流網絡和現有的優化手段,在資源較少的FPGA 上進行加速難度較大,而高端FPGA 價格都比較高,所以必須得考慮成本問題。
版權所有權歸卿萃科技 杭州FPGA事業部,轉載請注明出處
作者:杭州卿萃科技ALIFPGA
原文地址:杭州卿萃科技FPGA極客空間 微信公眾號
掃描二維碼關注杭州卿萃科技FPGA極客空間