硬件加速 | 基於FPGA的深度學習CNN加速器設計(論文復現)

在這裏插入圖片描述
論文鏈接:http://cadlab.cs.ucla.edu/~cong/slides/fpga2015_chen.pdf?spm=a2c4e.11153940.blogcont5752.3.654031b6l0wvY2&file=fpga2015_chen.pdf

因爲CNN的特有計算模式,通用處理器對於CNN實現效率並不高,不能滿足性能要求。 因此,近來已經提出了基於FPGA,GPU甚至ASIC設計的各種加速器來提高CNN設計的性能。 在這些方法中,基於FPGA的加速器引起了研究人員越來越多的關注,因爲它們具有性能好,能源效率高,開發週期快,重構能力強等優點。

在實驗中,研究人員發現在FPGA相同的邏輯資源利用率情況下,兩種不同解決方案可能會有多達90%的性能差異。所以找出最佳解決方案是很重要的,特別是當考慮到FPGA平臺的計算資源和存儲器帶寬的限制時。 實際上,如果加速器結構沒有精心設計,其計算吞吐量與提供FPGA平臺的內存帶寬不匹配。 這意味着由於邏輯資源或存儲器帶寬的利用不足將造成性能的降級。

不幸的是,FPGA技術和深度學習算法的進步同時加劇了這個問題。 一方面,由最先進的FPGA平臺提供的日益增加的邏輯資源和存儲器帶寬擴大了設計空間。 此外,當應用各種FPGA優化技術(如循環平鋪和變換)時,設計空間進一步擴大。 另一方面,爲了適應現代應用的需求,深度學習算法的規模和複雜性也在不斷增加。所以,在設計空間中找出最優解是比較困難的。 因此,迫切需要有效的方法來探索基於FPGA的CNN設計空間。

然而現有的大部分工作主要關注計算引擎優化,它們有的忽略外部存儲器操作,有的將其加速器直接連接到外部存儲器。還有些研究工作通過精細的數據重用減少外部數據訪問來加速CNN應用。然而,這種方法並不一定會導致最佳的整體性能。此外,這種方法需要重新配置不同層次的FPGA計算。這在某些情況下是不可行的。

因此,爲了有效地探索設計空間,有研究人員提出了一種分析設計方案。這種方案考慮到緩衝區管理和帶寬優化,以更好地利用FPGA資源並實現更高的性能。同時加速器能夠跨越不同的層執行加速作業,而無需重新編程FPGA。下面我們具體來看一下這種方案。

考慮到在應用中基本都是將訓練好的CNN模型部署到現有計算平臺上進行預測操作,所以,很多的FPGA加速方案中僅考慮優化前向操作。同時又有研究表明,卷積操作佔據了CNN模型將近90%的計算時間,所以,本方案也是僅考慮優化CNN模型前向計算中的卷積運算,優化的模型選擇爲經典的AlexNet。同時爲了更好的分析網絡的性能,研究人員藉助Roofline Model進行優化方案的設計。通過這個 model,既可以評估一個設計的效率,還能很容易看出設計到底是 computation-limited 還是 memory bandwidth-limited,可以幫助確定進一步優化的思路。

首先,我們先來了解一下CNN中的卷積運算的規則,CNN中的卷積運算如圖1所示,代碼1表示其僞代碼。

在這裏插入圖片描述

幾乎所有的基於FPGA的加速方案,都如圖2顯示的那樣,FPGA上的CNN加速器設計主要由處理元件(PE),片上緩衝器,外部存儲器和片上/片外互連幾個組件組成。其中PE是卷積的基本計算單元。用於處理的所有數據都存儲在外部存儲器中。由於片上資源限制,數據首先被緩存在片上緩衝區中,然後再饋送給PE。雙緩衝區用於通過數據傳輸時間來覆蓋計算時間。片內互連專用於PE和片上緩衝存儲器之間的數據通信。

在這裏插入圖片描述

圖2

通過觀察圖2,我們可以發現有幾個設計問題妨礙了FPGA平臺上高效的CNN加速器設計。首先,爲了適應芯片上的一小部分數據,循環平鋪是必須的。不正確的平鋪可能會降低數據重用的效率和數據處理的並行性。第二,應仔細考慮PE和緩衝庫的組織以及它們之間的互連,以便有效地處理片上數據。第三,PE的數據處理吞吐量應與FPGA平臺提供的片外帶寬匹配。

爲了解決上述問題,下面逐條分解實現方案。

1)首先,方案採用循環平鋪(代碼2)。

注意,循環迭代器i和j由於CNN中卷積窗口大小K的相對小的尺寸(通常在3到11之間)而不是平鋪的。其他循環迭代器(row,col,to和ti)平鋪到圖形循環和點循環中(代碼2中的trr,tcc和tii)。

在這裏插入圖片描述

代碼2

2)片上計算優化的實現

計算優化的目的是在充分利用FPGA硬件平臺提供的所有計算資源的同時,實現高效的循環展開/流水線化。

循環展開可用於增加FPGA設備中大規模計算資源的利用率。在給定陣列上循環維度的不同循環迭代之間的數據共享關係可分爲三類:不相干,獨立,有依賴關係。對應如圖3所示。如代碼2所示,CNN代碼中的數據共享關係如表1所示。

在這裏插入圖片描述

圖3

因此在設計展開時,選擇對too和tii進行展開,以避免所有陣列的複雜連接拓撲。too和tii被置換到最內層循環,以簡化HLS代碼生成。生成的硬件實現如圖4所示。

在這裏插入圖片描述

圖4

循環流水線化是高級合成中的關鍵優化技術,通過重複來自不同循環迭代的操作的執行來提高系統吞吐量。因此方案使用基於多面體的優化框架來執行自動循環變換以將並行循環水平置換到最內層,以避免循環依賴。

最終循環展開和循環流水線優化後的代碼結構如代碼3所示。

在這裏插入圖片描述

代碼3

3)內存訪問優化的實現

代碼4展示了一個CNN層的存儲器傳送操作。輸入/輸出特徵圖和權重在計算引擎啓動之前就已被加載,計算完成後,將生成的輸出特徵圖寫回主存儲器。

在這裏插入圖片描述

代碼4

通過分析可知,通信部分中的最內層循環(代碼4中的ti)與數組無關,因此在不同的循環迭代之間存在冗餘的存儲器操作。所以方案使用本地存儲提升來減少相關冗餘操作。代碼4中,最內圈的維數ti與陣列輸出特徵圖無關。因此,可以將對陣列輸出特徵圖的訪問提升到外部循環。請注意,升級過程可以迭代執行,直到訪問周圍的最內層循環最終相關。通過本地存儲提升,陣列輸出特徵圖上的存儲訪問操作的行程計數從降到了 。

循環轉換數據重用。爲了通過本地存儲提升最大化數據重用的機會,方案使用基於多面體的優化框架來識別所有合法的循環轉換。表2顯示了循環迭代和數組之間的數據共享關係。每個合法循環調度中都會使用本地存儲提升功能,以減少總通信量。

在這裏插入圖片描述

表2

通過上述操作,方案明顯提升了CTC Ratio。

4)設計空間探索

以CNN模型的第5層爲例,圖5描繪了CNN模型的第5層在rooline模型座標系中的所有合理的解決方案。橫軸表示CCT Ratio,縱軸表示計算性能(GFLOPS)。任何點與原點(0,0)之間的線的斜率表示該實現的最小帶寬要求。

在這裏插入圖片描述

圖5

圖6中,帶寬Roof和計算Roof的線由平臺的規格定義。帶寬Roof線的左側的任何一點都需要比平臺提供的帶寬更高的帶寬。例如,儘管圖中A方案實現了最高的計算性能,但是目標平臺無法滿足該方案所需的存儲器帶寬。所以,綜合分析比較,最終選擇方案C作爲第5層的設計方案,它的帶寬要求爲2.2GB/s。

在這裏插入圖片描述

圖6

5)多層CNN加速器設計

在此之前,我們討論瞭如何找到每個卷積層的最優實現方案。但是,在CNN應用中,這些參數可能在不同的層之間需要變化。表3描述了該應用CNN模型中所有層的最優展開因子(Tm和Tn)。爲了解決這個問題,本方案採用的方法是在不同卷積層之間設計具有均勻展開因子的硬件架構。具有統一展開因子的CNN加速器設計和實現簡單,但可能對某些層是次優的。表3顯示,使用統一展開因子<64,7>,與每個優化卷積層的總執行週期相比,退化在5%以內。因此,方案選擇了CNN加速器在卷積層上的統一展開因子。

在這裏插入圖片描述

表3

解決完上述問題,圖7就是整個實現方案架構。實驗是在具有Xilinx FPGA芯片Virtex7 485t的VC707板上完成。其工作頻率爲100 MHz。 爲了比較性能,CPU軟件實現在具有15MB高速緩存的Intel Xeon CPU E5-2430(@ 2.20GHz)上運行。

在這裏插入圖片描述

圖7

該實驗的資源利用情況如表4所示。

在這裏插入圖片描述

表4

加速器的性能比較如表5所示。

在這裏插入圖片描述

表5

表6顯示,CPU軟件實現和FPGA實現之間的消耗能量的比例至少爲24.6x。 FPGA實現使用的能量遠遠低於其CPU實現。
在這裏插入圖片描述

表6

同時,如表7所示,如果使用定點計算引擎,該設計方案可以實現更好的性能和性能密度,因爲定點處理元件使用的資源少得多。

在這裏插入圖片描述

表7


參考文獻:

[1] Zhang C, Li P, Sun G, et al. Optimizing fpga-based accelerator design for deep convolutional neural networks[C] Proceedings of the 2015 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays. ACM, 2015: 161-170.

論文鏈接:http://cadlab.cs.ucla.edu/~cong/slides/fpga2015_chen.pdf?spm=a2c4e.11153940.blogcont5752.3.654031b6l0wvY2&file=fpga2015_chen.pdf



推薦閱讀(點擊標題可跳轉閱讀)

[1] 機器學習實戰 | 邏輯迴歸應用之“Kaggle房價預測”

[2] 機器學習實戰 | 邏輯迴歸應用之“Kaggle泰坦尼克之災”

[3] 本科生晉升GM記錄:Kaggle比賽進階技巧分享

[4] 表情識別FER | 基於深度學習的人臉表情識別系統(Keras)

[5] PyTorch實戰 | 使用卷積神經網絡對CIFAR10圖片進行分類(附源碼)

[6] 有了這些珍藏的實用工具/學習網站,自學更快樂!


關注公衆號邁微電子研發社,文章首發與公衆號。
在這裏插入圖片描述

△微信掃一掃關注「邁微電子研發社」公衆號

知識星球:社羣旨在分享AI算法崗的秋招/春招準備攻略(含刷題)、面經和內推機會、學習路線、知識題庫等。
在這裏插入圖片描述

△掃碼加入「邁微電子研發社」學習輔導羣

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章