







摘要:為解決卷積神經網絡難以在計算資源受限設備上部署的問題,面向國產FT-2000/4 多核處理器提出一種高性能的快速卷積算法FastInfer。采用分塊策略優化通用矩陣乘法,將處理器訪問頻率高的數據存入更靠近處理器的緩存中,從而提高計算過程中的訪存效率。配合分塊方案設計實現高性能的矩陣乘法微內核,使用向量外積運算更新數據,提高計算訪存比,實現最大程度掩蓋訪存指令的延遲。最終實驗結果表明,FastInfer 在FT-2000/4 處理器上的峰值計算性能達到99.56 GFLOPS。在不同輸入規模的通用矩陣乘法測試中,FastInfer 性能是OpenBLAS 算法的1.07 倍和1.52 倍。在卷積測試中,FastInfer 性能是ARM Compute Library 算法的1.32 倍,實現了在FT-2000/4 多核處理器上的高性能卷積計算。
關鍵詞:深度學習;快速卷積算法;并行計算;通用矩陣乘法
中圖分類號:TP 391.41 文獻標志碼:A
卷積運算是典型的計算密集型和訪存密集型任務。在卷積神經網絡的推理過程中,80% 的時間用于卷積層的計算,因此,卷積層的優化對于提升整個卷積神經網絡的效率和性能顯得尤為重要。并且,隨著卷積神經網絡的應用場景變得更為復雜,模型的層數進一步加深,這對部署設備的計算能力提出了更高的要求,限制了卷積神經網絡在計算資源受限的設備(如CPU)上的部署[1]。
目前優化卷積運算較為主流的算法有Im2col和Winograd[2]。Im2col 算法將輸入圖像和卷積核轉換為矩陣,從而將難以優化的卷積操作轉換為當今具有良好優化實現能力的矩陣乘法計算[2]。Winograd 最小濾波算法通過減少卷積操作的乘法次數來提升計算效率,但僅適用于卷積核較小的情況,通用性較差[3]。
Im2col 算法實現起來簡單靈活,并且能夠支持任意大小的卷積核,受到了廣泛的關注和研究。Anderson 等[4] 對Im2col 算法的內存占用和并行性進行優化,在LeNet 模型和CIFAR-10 數據集上分別達到了1.93 倍和1.61 倍的加速效果。Dukhan等[5] 提出了一種稱為間接卷積算法的Im2col 快速卷積改進算法, 通過引入間接緩沖區來代替Im2col 緩沖區,避免了高昂的內存復制成本,相較于基于通用矩陣乘法的傳統方法,算法性能提升1.03~1.23 倍。吳煥等[6] 提出一種針對卷積訪存連續性的優化策略,性能比Intel 的MKL(mathkernel library)算法提升40%。Alvarenga 等[7] 研究了多種卷積算法的性能比較,評估了來自1 097 個真實深度學習模型的9 243 個卷積操作,結果表明,在快速卷積算法中,Im2col 結合通用矩陣乘法能夠在實際應用中表現出優良的性能。Zhang 等[8]提出將Im2col 與Winograd 算法結合的快速卷積方法,將多維卷積分解為一維卷積,降低算法的空間復雜度和數據訪問不連續性,性能相比cuDNN算法中最快的基準算法提高了0.788~2.05 倍。
FT-2000/4 處理器是我國飛騰公司研發的一款面向桌面應用的高性能通用處理器。在深度學習領域,目前FT-2000/4 處理器相關生態較為薄弱,缺少深度學習庫對其進行專門的優化適配。
為實現卷積神經網絡在飛騰處理器上的高性能部署,面向FT-2000/4 處理器對卷積神經網絡的性能瓶頸— — 卷積運算進行加速。針對FT-2000/4 處理器的浮點計算能力和緩存參數配置,提出一套合理的通用矩陣乘法分塊方案,將處理器頻繁訪問的數據存入更靠近處理器的緩存中,最大程度掩蓋處理器訪存的延遲。為配合分塊方案進一步提高訪存效率,設計實現高性能的矩陣乘法內核函數,使用向量外積更新數據以提高計算訪存比,并且使用ARM NEON 向量指令和手動指令重排等提高程序的并行性。最終實驗與多個開源的高性能線性代數庫和ARM 官方開源的計算庫進行對比,證明了算法在FT-2000/4 處理器上的有效性。
1 相關背景
1.1 Im2col 算法
Im2col 卷積優化算法最早出現在深度學習框架Caffe 中,它將難以優化的直接卷積運算轉換為當前具有良好優化實現的通用矩陣乘法運算[9-12]。目前,Im2col 卷積優化算法在多個流行的深度學習框架中使用,是卷積最重要的優化算法之一。
Im2col 算法將多維的卷積核和輸入圖像張量轉換為二維矩陣,然后將變換后的矩陣相乘得出卷積運算結果。算法的主要流程有卷積核變換、輸入圖像變換和變換后矩陣相乘,其中卷積核變換可以在算子初始化時進行,只需計算一次[13]。