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