宋鐵
摘? 要: 神經(jīng)網(wǎng)絡(luò)的廣泛應(yīng)用使得人們更加關(guān)注神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,更高精度的要求給神經(jīng)網(wǎng)絡(luò)的訓(xùn)練帶來(lái)了困難,因此加速神經(jīng)網(wǎng)絡(luò)的訓(xùn)練成為了研究的重點(diǎn)。對(duì)于神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中卷積層占據(jù)了大部分的訓(xùn)練時(shí)間,所以加速卷積層的訓(xùn)練成為了加速神經(jīng)網(wǎng)絡(luò)的關(guān)鍵。本文提出了GFW加速調(diào)度算法,GFW算法通過對(duì)不同卷積圖像的大小和卷積核的數(shù)量調(diào)用不同的卷積算法,以達(dá)到整體的最佳訓(xùn)練效果。實(shí)驗(yàn)中具體分析了9層卷積網(wǎng)絡(luò)的加速訓(xùn)練,實(shí)驗(yàn)結(jié)果顯示,相比于GEMM卷積算法,GFW算法實(shí)現(xiàn)了2.901倍的加速,相比于FFT算法GFW算法實(shí)現(xiàn)了1.467 倍的加速,相比于Winograd算法,GFW算法實(shí)現(xiàn)了1.318 倍的加速。
關(guān)鍵詞: 卷積神經(jīng)網(wǎng)絡(luò);GEMM;FFT;Winograd算法;GFW調(diào)度算法
【Abstract】: The wide application of neural networks makes people pay more attention to the training of neural networks. The requirement of higher precision brings difficulties to the training of neural networks. Therefore, the training of accelerated neural networks has become the focus of research. For the training of neural networks, the convolutional layer occupies most of the training time, so the training of the accelerated convolution network becomes the key to accelerate the neural network. In this paper, the GFW accelerated scheduling algorithm is proposed. The GFW algorithm calls different convolution algorithms on the size of different convolution images and the number of convolution kernels to achieve the overall optimal training effect. In the experiment, the acceleration training of the 9-layer convolutional network is analyzed in detail. The experimental results show that compared with the GEMM convolution algorithm, the GFW algorithm achieves 2.901 times acceleration; compared with the FFT algorithm, the GFW algorithm achieves 1.467 times acceleration; Compared to the Winograd algorithm, the GFW algorithm achieves a 1.318x acceleration.
【Key words】: Convolutional neural network; GEMM; FFT; Winograd algorithm; GFW scheduling algorithm
0? 引言
自從深度學(xué)習(xí)被提出后,便迅速成為了研究的熱點(diǎn)。深度神經(jīng)網(wǎng)絡(luò)的應(yīng)用使得圖像分類,語(yǔ)音識(shí)別和語(yǔ)言翻譯等領(lǐng)域取得了很大的進(jìn)步,并且在很多方面已經(jīng)超過了人類的識(shí)別能力。卷積神經(jīng)網(wǎng)絡(luò)在圖像和視頻識(shí)別,推薦系統(tǒng)和自然語(yǔ)言處理等領(lǐng)域取得了較好的效果,在本文中主要研究了卷積網(wǎng)絡(luò)訓(xùn)練與加速。
許多算法都被提出用以加速卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,但是每個(gè)算法都有各自的優(yōu)點(diǎn)和缺點(diǎn),并且沒有一個(gè)算法可以處理所有情形的問題。在本文中,我們?cè)贕PU環(huán)境下測(cè)試了不同算法對(duì)卷積神經(jīng)網(wǎng)絡(luò)的加速性能。根據(jù)各個(gè)算法的特點(diǎn)和適合不同的卷積輸入圖像的大小以及卷積核數(shù)量,我們對(duì)卷積神經(jīng)網(wǎng)絡(luò)中不同的卷積層使用不用的調(diào)度策略以達(dá)到對(duì)整個(gè)神經(jīng)網(wǎng)絡(luò)的最佳訓(xùn)練效果。
1? 相關(guān)研究
從卷積神經(jīng)網(wǎng)絡(luò)被引入到公眾中以來(lái),有很多的研究都在研究卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算與加速,但很少的研究關(guān)注卷積算法之間的不同,評(píng)估卷積算法的最佳方法是實(shí)驗(yàn)對(duì)比不同算法之間的性能差異。Mathieu等人[1-2]實(shí)驗(yàn)得出了FFT算法的性能。Chetlur等人比較了隱式GEMM,顯式GEMM和直接卷積算法之間的性能差異的工作[3]。Lavin等人分析了Winograd算法與GEMM和FFT算法相比的優(yōu)勢(shì)[4]。然而,通過這些年的發(fā)展,GPU環(huán)境中的算法實(shí)現(xiàn)已經(jīng)變得多樣化。例如,GEMM算法有三種實(shí)現(xiàn)方式。雖然這些實(shí)現(xiàn)方式執(zhí)行相同的算法,但它們的性能完全不同,因此也需要對(duì)這些卷積實(shí)現(xiàn)算法重新進(jìn)行實(shí)驗(yàn)評(píng)估。
有許多研究比較了不同DNN框架的性能,如文獻(xiàn)[5]和[6]。有相關(guān)的工作研究了使用GPU在CUDA平臺(tái)上并行訓(xùn)練神經(jīng)網(wǎng)絡(luò)。Pendlebury等人[7]提出了在NVIDIA CUDA平臺(tái)上使用神經(jīng)網(wǎng)絡(luò)的并行加速程序,相比于CPU其性能提升了80%。Honghoon Jang 等人[8]在多核的CPU和GPU上實(shí)現(xiàn)了基于神經(jīng)網(wǎng)路的文本檢測(cè)系統(tǒng)。這相比于CPU上執(zhí)行快15倍,相比于OpenMp的GPU執(zhí)行快了4倍。相關(guān)的神經(jīng)網(wǎng)絡(luò)并行加速庫(kù)被開發(fā)用于加速神經(jīng)的并行訓(xùn)練,如cuDNN和cuFFT等。并且被廣泛應(yīng)用于神經(jīng)網(wǎng)絡(luò)的加速訓(xùn)練中。
本文的工作主要是實(shí)驗(yàn)分析了卷積算法GEMM、FFT和Winograd,分析卷積算法對(duì)于不同維度大小的輸入圖像以及卷積核的數(shù)量對(duì)卷積網(wǎng)絡(luò)的計(jì)算效率。據(jù)此本文提出了GFW加速算法,主要根據(jù)卷積網(wǎng)絡(luò)中不同大小的卷積特征圖和卷積核的數(shù)量調(diào)用不同的卷積算法,實(shí)現(xiàn)整個(gè)神經(jīng)網(wǎng)絡(luò)的最佳訓(xùn)練效果。
2? GFW加速調(diào)度算法
2.1? GEMM
。
2.4? GFW調(diào)度算法
對(duì)于神經(jīng)網(wǎng)絡(luò)的加速訓(xùn)練過程中,通過卷積計(jì)算和池化層后,卷積層的輸入特征圖維度大小不斷地減小,卷積核的數(shù)量也隨著卷積層的變化而變化。對(duì)于不同維度的特征圖和卷積核的數(shù)量適合不同的卷積算法,同一個(gè)神經(jīng)網(wǎng)絡(luò)使用一個(gè)卷積算法計(jì)算會(huì)造成內(nèi)存和計(jì)算資源的浪費(fèi),這樣并不能達(dá)到神經(jīng)網(wǎng)絡(luò)整體的最佳訓(xùn)練性能。對(duì)此,本文提出了GFW加速調(diào)度算法,GFW調(diào)度算法的思想是對(duì)不同的卷積層輸入特征圖維度大小卷積核的數(shù)量調(diào)度不同的卷積算法,實(shí)現(xiàn)每一層卷積層的最佳訓(xùn)練,從而提高整個(gè)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練性能。GFW調(diào)度算法是在GEMM、FFT和Winogd卷積算法中根據(jù)特征圖維度大小和卷積核的數(shù)量來(lái)調(diào)用相應(yīng)的卷積算法,實(shí)現(xiàn)最佳的訓(xùn)練性能。如圖1給出了GFW加速調(diào)度算法的流程圖,圖中Image_size為輸入圖像的大小,F(xiàn)ilter output為卷積核的數(shù)量,GFW是根據(jù)這兩個(gè)參數(shù)來(lái)調(diào)度相應(yīng)的卷積算法,實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的最佳訓(xùn)練效果。
3? 實(shí)驗(yàn)結(jié)果與分析
本實(shí)驗(yàn)完成對(duì)神經(jīng)網(wǎng)絡(luò)的加速實(shí)驗(yàn),主要在同一實(shí)驗(yàn)平臺(tái)上分別對(duì)卷積層的不同的卷積算法進(jìn)行了加速實(shí)驗(yàn)。實(shí)驗(yàn)中使用的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)具有九層卷積層,分別使用GEMM、FFT和Winograd卷積算法對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行加速實(shí)驗(yàn),并且與GFW加速調(diào)度算法進(jìn)行了加速對(duì)比。實(shí)驗(yàn)中對(duì)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)中的每一層卷積層進(jìn)行了四種卷積算法的加速實(shí)驗(yàn),從實(shí)驗(yàn)中每一層中各個(gè)算法的執(zhí)行時(shí)間可以具體分析出GFW加速調(diào)度算法的調(diào)度策略。最后,分析了每個(gè)卷積算法對(duì)整個(gè)神經(jīng)網(wǎng)絡(luò)的加速時(shí)間以及GFW加速調(diào)度算法相比其它卷積算法的加速比。
3.1? 實(shí)驗(yàn)分析
實(shí)驗(yàn)中對(duì)具有九層卷積層的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),卷積網(wǎng)絡(luò)是由卷積層和池化層組成,輸入圖像經(jīng)過每一層的卷積和池化層后得到的特征圖都會(huì)減小,在不同卷積層的輸入特征圖的維度都是不同的。實(shí)驗(yàn)中使用的硬件平臺(tái)是NVIDIA GeForce GTX1080Ti GPU,其具有11GB的顯存,使用了CUDA 9.0版本對(duì)GPU計(jì)算資源進(jìn)行管理。實(shí)驗(yàn)中分別測(cè)試了神經(jīng)網(wǎng)絡(luò)每一層在四種卷積算法下的執(zhí)行時(shí)間,并且分析了每個(gè)卷積算法對(duì)神經(jīng)網(wǎng)絡(luò)的加速效率。
3.2? 實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)中首先分析了GEMM、FFT和Winograd卷積算法以及DFW加速調(diào)度算法在對(duì)九層神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的加速效果。在每一層卷積層后接著池化層,輸出的特征映射圖都會(huì)相比輸入圖片減小一半,這樣神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)中的不同卷積層的輸入圖像維度大小不同。圖2給出了GEMM、FFT和Winograd卷積算法對(duì)神經(jīng)網(wǎng)絡(luò)中每一層的執(zhí)行時(shí)間的變化以及GFW加速調(diào)度算法對(duì)神經(jīng)網(wǎng)絡(luò)每一層的執(zhí)行效率。從圖中分析可知由于每一層卷積層的輸入圖像維度不同,因此每一層的執(zhí)行時(shí)間會(huì)隨著輸入特征圖的減小而減小。從圖中可以發(fā)現(xiàn),對(duì)于GEMM、FFT和Winograd卷積算法對(duì)于神經(jīng)網(wǎng)絡(luò)卷積層的計(jì)算時(shí)間都隨著輸入特征圖維度的減小而減小,但對(duì)于不同維度大小的輸入特征圖,三個(gè)卷積算法的計(jì)算時(shí)間是不同的。圖中黃色曲線是GFW加速調(diào)度算法在加速神經(jīng)網(wǎng)絡(luò)中每一層的時(shí)間曲線,從圖中可以分析出GFW加速調(diào)度算法始終在三條曲線的最下面,這也證明了GFW加速調(diào)度算法在對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練時(shí),在對(duì)每一層進(jìn)行計(jì)算時(shí)都會(huì)調(diào)用三個(gè)算法中計(jì)算時(shí)間最短的算法,這樣可以使得神經(jīng)網(wǎng)絡(luò)的整體訓(xùn)練時(shí)間最小,實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的加速 訓(xùn)練。
從圖2分析中可知對(duì)于不同維度的輸入特征圖,卷積層的計(jì)算時(shí)間是不同的,并且對(duì)于相同維度輸入特征圖,使用不同的卷積計(jì)算算法所需要的時(shí)間也是不同的。圖3分析了神經(jīng)網(wǎng)絡(luò)中九層卷積層使用三種不同卷積算法的執(zhí)行時(shí)間,以及GFW加速調(diào)度算法加速卷積計(jì)算的執(zhí)行時(shí)間。為了便于分析與觀察,實(shí)驗(yàn)中將GFW對(duì)卷積層的計(jì)算時(shí)間進(jìn)行了歸一化處理,這樣可以清晰的分析出在不同的卷積層中GFW加速調(diào)度算法相對(duì)于其它卷積算法的加速比以及GFW的調(diào)度策略。圖中顯示W(wǎng)inograd卷積算法適合于維度較大的輸入特征圖,而GEMM算法則比較適合維度較小的輸入特征圖,F(xiàn)FT卷積算法適合于輸入特征圖維度居中的卷積計(jì)算。GFW則是根據(jù)神經(jīng)網(wǎng)絡(luò)卷積層的輸入特征圖維度大小以及卷積核的數(shù)量來(lái)調(diào)度不同的加速算法,實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)最佳的加速效果。
圖3中具體分析了神經(jīng)網(wǎng)絡(luò)中每一層卷積層使用不同卷積算法的計(jì)算效率以及加速比,并分析了GFW加速調(diào)度算法的調(diào)度策略。GFW加速調(diào)度算法實(shí)現(xiàn)每一層卷積層的調(diào)度加速?gòu)亩鴮?shí)現(xiàn)了整個(gè)神經(jīng)網(wǎng)絡(luò)的加速訓(xùn)練,圖4中給出了幾種卷積算法對(duì)整個(gè)神經(jīng)網(wǎng)絡(luò)的加速效率。圖中的三幅對(duì)比圖中分別展現(xiàn)了幾種卷積算法的計(jì)算效率,使用FFT實(shí)現(xiàn)卷積計(jì)算加速神經(jīng)網(wǎng)絡(luò)相比于使用GEMM實(shí)驗(yàn)卷積計(jì)算對(duì)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練性能提升了49.4%;使用Winograd算法實(shí)現(xiàn)卷積計(jì)算加速神經(jīng)網(wǎng)絡(luò)訓(xùn)練相比于使用FFT實(shí)驗(yàn)卷積計(jì)算對(duì)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練性能提升了10.2%;本文提出的GFW加速調(diào)度算法對(duì)于神經(jīng)網(wǎng)絡(luò)的加速訓(xùn)練中,相比于目前加速效率最高的Winograd算法,在對(duì)神經(jīng)網(wǎng)絡(luò)的加速訓(xùn)練中性能提升了24.1%。
圖5中直觀的展示了本文提出的GFW加速調(diào)度算法相比于GEMM、FFT和Winograd算法對(duì)神經(jīng)網(wǎng)絡(luò)的加速比。在對(duì)本文具有九層卷積層的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行加速實(shí)驗(yàn)時(shí),GFW加速調(diào)度算法是根據(jù)卷積層中輸入特征圖的大小以及卷積核的數(shù)量進(jìn)行調(diào)度的加速算法,因此,在對(duì)神經(jīng)網(wǎng)絡(luò)訓(xùn)練時(shí)加速性能較高。相比于GEMM卷積算法加速GFW調(diào)度算法取得了2.901倍的加速,相比于FFT實(shí)現(xiàn)卷積計(jì)算對(duì)神經(jīng)網(wǎng)絡(luò)的加速GFW調(diào)度算法取得了1.467的加速,相比于Winograd算法實(shí)現(xiàn)卷積計(jì)算,GFW調(diào)度算法對(duì)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練實(shí)現(xiàn)了1.318倍的加速。
4? 結(jié)束語(yǔ)
神經(jīng)網(wǎng)絡(luò)中的卷積計(jì)算占據(jù)著神經(jīng)網(wǎng)路的大部分訓(xùn)練時(shí)間,因此,加速卷積計(jì)算的效率是加速神經(jīng)網(wǎng)絡(luò)訓(xùn)練的關(guān)鍵。本文針對(duì)卷積計(jì)算提出了GFW加速調(diào)度算法,針對(duì)神經(jīng)網(wǎng)絡(luò)中不同卷積層的輸入特征圖的大小和卷積核的數(shù)量調(diào)度相應(yīng)的卷積算法,實(shí)現(xiàn)整個(gè)神經(jīng)網(wǎng)絡(luò)的最佳訓(xùn)練性能。實(shí)驗(yàn)結(jié)果顯示,GFW加速調(diào)度算法在對(duì)神經(jīng)網(wǎng)絡(luò)的加速訓(xùn)練中,相比于GEMM卷積算法實(shí)現(xiàn)了2.901倍的加速,相比于使用FFT實(shí)現(xiàn)卷積計(jì)算對(duì)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,GFW調(diào)度算法實(shí)現(xiàn)了1.467倍的加速,相比于對(duì)卷積網(wǎng)絡(luò)計(jì)算效率較高的Winograd算法,GFW調(diào)度算法在加速神經(jīng)網(wǎng)絡(luò)訓(xùn)練中實(shí)現(xiàn)了1.318倍的加速。
參考文獻(xiàn)
[1]Chen T, Li M, Li Y, et al. Mxnet: A flexible and efficient machine learning library for heterogeneous distributed systems[J]. arXiv preprint arXiv: 1512. 01274, 2015.
[2]Vasilache N, Johnson J, Mathieu M, et al. Fast convolutional nets with fbfft: A GPU performance evaluation[J]. arXiv preprint arXiv: 1412. 7580, 2014.
[3]Chetlur S, Woolley C, Vandermersch P, et al. cudnn: Efficient primitives for deep learning[J]. arXiv preprint arXiv: 1410. 0759, 2014.
[4]Lavin A, Gray S. Fast algorithms for convolutional neural networks[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016: 4013-4021.
[5]Li X, Zhang G, Huang H H, et al. Performance analysis of gpu-based convolutional neural networks[C]//2016 45th International Conference on Parallel Processing (ICPP). IEEE, 2016: 67-76.
[6]Kim H, Nam H, Jung W, et al. Performance analysis of CNN frameworks for GPUs[C]//2017 IEEE International Sympo sium on Performance Analysis of Systems and Software (ISPASS). IEEE, 2017: 55-64.
[7]Pendlebury J, Xiong H, Walshe R. Artificial neural network simulation on CUDA[C]//Distributed Simulation and Real Time Applications (DS-RT), 2012 IEEE/ACM 16th Interna tional Symposium on. IEEE, 2012: 228-233.
[8]Jang, Honghoon, Anjin Park, and Keechul Jung. "Neural network implementation using cuda and openmp. " Digital Image Computing: Techniques and Applications. IEEE, 2008.
[9]Xu, Rui, et al. "Accelerating CNNs Using Optimized Sche du ling Strategy. " International Conference on Algorithms and Architectures for Parallel Processing. Springer, Cham, 2018.
[10]Lu W, Yan G, Li J, et al. Flexflow: A flexible dataflow accelerator architecture for convolutional neural networ ks[C]//2017 IEEE International Symposium on High Perfor mance Computer Architecture (HPCA). IEEE, 2017: 553- 564.
[11]Hill P, Jain A, Hill M, et al. Deftnn: Addressing bottlenecks for dnn execution on gpus via synapse vector elimination and near-compute data fission[C]//Proceedings of the 50th Ann ual IEEE/ACM International Symposium on Microarchite cture. ACM, 2017: 786-799.
[12]Song L, Wang Y, Han Y, et al. C-brain: A deep learning accelerator that tames the diversity of cnns through adaptive data-level parallelization[C]//2016 53nd ACM/EDAC/IEEE Design Automation Conference (DAC). IEEE, 2016: 1-6.
[13]Lin, Yu-Sheng, Wei-Chao Chen, and Shao-Yi Chien. "Unro lled memory inner-products: An abstract GPU operator for efficient vision-related computations. " Proceedings of the IEEE International Conference on Computer Vision. 2017.
[14]盧冶, 陳瑤, 李濤, 等. 面向邊緣計(jì)算的嵌入式FPGA卷積神經(jīng)網(wǎng)絡(luò)構(gòu)建方法[J]. 計(jì)算機(jī)研究與發(fā)展, 2018, 55(03): 551-562.
[15]李景軍, 張宸, 曹強(qiáng). 面向訓(xùn)練階段的神經(jīng)網(wǎng)絡(luò)性能分析[J]. 計(jì)算機(jī)科學(xué)與探索, 2018, 12(10): 1645-1657.