商湯聯合提出基於FPGA的快速Winograd演算法:實現FPGA之上最優的CNN表現與能耗
選自IEEEXplore
作者:Liqiang Lu、Yun Liang、Qingcheng Xiao
機器之心編譯
參與:路雪、黃小天
此前,商湯科技聯合北京大學等提出一種基於 FPGA 的快速 Winograd 演算法,可以大幅降低演算法複雜度,改善 FPGA 上的 CNN 性能。論文中的實驗使用當前最優的多種 CNN 架構,從而實現了 FPGA 加速之下的最優性能和能耗。
1. 引言
深度卷積神經網路(CNN)在多個計算機視覺任務上取得了優秀的性能,包括圖像分類、目標檢測和語義分割 [1, 2]。CNN 的高準確率是以極大的計算複雜度為代價的,因為它需要對特徵圖中的所有區域進行綜合評估 [3, 4]。為了解決如此巨大的計算壓力,研究者使用 GPU、FPGA 和 ASIC 等硬體加速器來加速 CNN [5–17]。其中,FPGA 因其高性能、低能耗和可重配置性成為有效解決方案。更重要的是,使用 C 或 C++的高級綜合(High Level Synthesis,HLS)大幅降低了 FPGA 的編程障礙,並提高了生產效率 [18–20]。
CNN 通常包含多個層,每一層的輸出特徵圖是下一層的輸入特徵圖。之前的研究發現當前最優 CNN 的計算主要由卷積層主導 [6, 7]。使用傳統的卷積演算法,則輸出特徵圖中的每個元素要經多步乘積累加運算進行單獨計算。儘管之前使用傳統卷積演算法的 FPGA 解決方案取得初步成功 [5–9, 11],但是如果演算法更加高效,該解決方案的效率可能會更高。本文展示了使用 Winograd 演算法的卷積演算法 [21] 如何大幅降低演算法複雜度,改善 FPGA 上的 CNN 性能。使用 Winograd 演算法,利用元素之間的結構相似性生成輸出特徵圖中的一列元素。這減少了乘法運算的數量,從而降低演算法複雜度。研究證明快速的 Winograd 演算法適合為具備小型濾波器的 CNN 推導高效演算法 [16]。
更重要的是,CNN 的當前趨勢是帶有小型濾波器的深度拓撲。例如,Alexnet 的所有卷積層(除了第一層)都使用 3 × 3 和 5 × 5 濾波器 [3];VGG16 僅使用 3 × 3 濾波器 [22]。這為使用 Winograd 演算法高效實現 CNN 創造了機會。但是,儘管在 FPGA 上使用 Winograd 演算法很有吸引力,但仍然存在一些問題。首先,設計不僅要最小化內存帶寬要求,而且要匹配計算引擎與內存吞吐量。其次,在 FPGA 上映射 Winograd 演算法時存在很大的設計空間。很難推斷哪些設計會改善性能,抑或損害性能。
本文設計了一種行緩衝結構為 Winograd 演算法緩存特徵圖。這允許不同的 tile 在卷積運算進行時重用數據。Winograd 演算法的計算涉及通用矩陣乘法(GEMM)和元素級乘法(EWMM)的混合矩陣變換。然後,我們設計了一種高效的 Winograd PE,並通過並行化啟動多個 PE。最後,我們開發分析模型用於評估資源使用情況,並預測性能。我們使用這些模型探索設計空間,確定最優的設計參數。
本文的貢獻如下:
提出一種架構,可在 FPGA 上使用 Winograd 演算法高效實現 CNN。該架構把行緩衝結構、通用和元素級矩陣乘法用於 Winograd PE 和 PE 並行化。
開發出分析性的資源和性能模型,並使用該模型探索設計空間,確定最優參數。
使用當前最優的 CNN(如 AlexNet 和 VGG16)對該技術進行嚴格驗證。
圖 1:傳統卷積演算法和 Winograd 卷積演算法的對比。我們假設 Winograd 演算法的步幅 S 為 1。
3. 架構設計
圖 2:架構圖示
圖 2 表示在 FPGA 上基於 Winograd 演算法的卷積層架構。研究者在相鄰 tile 的特徵圖中確定數據重用機會。最後,自然而然地實現了行緩衝。輸入特徵圖 (M) 有多個通道,如圖 1 所示。行緩衝的每一行都存儲所有通道中同樣的一行。Winograd PE 從行緩衝中獲取數據。具體來說,給出一個 n×n 輸入 tile,Winograd PE 將生成一個 m × m 輸出 tile。研究者通過並行化多個通道的處理來啟動 PE 陣列。最後,使用雙緩衝(double buffer)重疊數據遷移和計算。所有輸入數據(如輸入特徵圖、濾波器)最初都存儲在外部存儲器中。輸入和輸出特徵圖通過 FIFO 被遷移至 FPGA。但是,濾波器的大小隨著網路深度增加而顯著擴大。將所有濾波器載入到片上存儲器(on-chip memory)中是不切實際的。在本論文的設計中,研究者將輸入和輸出通道分成多組。每個組僅包含一部分濾波器。研究者在需要時按組載入濾波器。為方便陳述,下文中假設只有一組。
圖 3:Winograd PE 設計圖示
4. 自動工具流程
研究者設計了一個自動工具流程將 CNN 自動映射至 FPGA,如圖 5 所示。該流程包括設計空間探索引擎(DSEE)。研究者使用 Caffe prototxt 來描述 CNN 的結構 [24]。FPGA 配置參數包括內存帶寬、DSP 數量、邏輯單元和片上內存容量。DSEE 的輸出是最優解 。在步驟 2 中,基於最優解,研究者開發了代碼生成引擎(CGE),可自動生成 Winograd 卷積函數。該函數描述整個加速器結構,包括行緩衝、緩衝管理和 Winograd PE。生成的實現是 HLS 兼容的 C 代碼。編譯指令如內存分區因素、循環展開因素 Tn Tm 以及 FIFO 介面被插入函數中。步驟 3 中,研究者使用 Xilinx HLS 工具將代碼合成為寄存器傳輸級別。最後,研究者使用 Xilinx SDSoC(軟體定義片上系統)工具鏈來生成比特流。
圖 5:自動工具流程
5. 實驗評估
表 2:設計參數
表 3:Alexnet 的性能對比
表 4:VGG 的性能對比
表 5:GPU 平台對比
論文:Evaluating Fast Algorithms for Convolutional Neural Networks on FPGAs
論文鏈接://ieeexplore.ieee.org/abstract/document/7966660/
摘要:近年來,卷積神經網路(CNN)越來越廣泛地應用於計算機視覺任務。FPGA 因其高性能、低能耗和可重配置性成為 CNN 的有效硬體加速器而備受關注。但是,之前基於傳統卷積演算法的 FPGA 解決方案通常受限於 FPGA 的計算能力(如 DSP 的數量)。本論文展示了快速的 Winograd 演算法,該演算法可以大幅降低演算法複雜度,改善 FPGA 上的 CNN 性能。我們首先提出了一種新型架構在 FPGA 上實現 Winograd 演算法。我們的設計利用行緩衝結構(line buffer structure)來高效重用不同 tile 的特徵圖數據。我們還高效架構 Winograd PE 引擎,通過並行化啟動多個 PE。同時存在複雜的設計空間有待探索。我們提出一種分析模型,用於預測資源使用情況、推斷性能。我們使用該模型指導快速的設計空間探索。實驗使用了當前最優的 CNN,結果表明其實現了在 FPGA 上的最優性能和能耗。我們在 Xilinx ZCU102 平台上達到了卷積層平均處理速度 1006.4 GOP/s,整體 AlexNet 處理速度 854.6 GOP/s,卷積層平均處理速度 3044.7 GOP/s,整體 VGG16 的處理速度 2940.7 GOP/s。
本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。
?------------------------------------------------
※斯坦福吳恩達老師 deeplearning.ai 開課了:敲黑板序列模型
※情緒激動的陸奇在CES發布阿波羅2.0
TAG:機器之心 |