南京航空航天大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 周 文
基于眾核架構(gòu)的BP神經(jīng)網(wǎng)絡(luò)算法優(yōu)化
南京航空航天大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 周 文
近年來(lái),眾核處理器(Many Integrated Cores,MIC)越來(lái)越多地為人們所關(guān)注,眾核架構(gòu)已經(jīng)成為許多超算的首選。BP神經(jīng)網(wǎng)絡(luò)是采用反向誤差傳播(Back Propagation,BP)算法的人工神經(jīng)網(wǎng)絡(luò),對(duì)于處理器的浮點(diǎn)計(jì)算能力要求比較高。目前最新的Intel Xeon Phi(KNL)眾核處理器可以達(dá)到3TFLOPS的雙精度浮點(diǎn)峰值性能。本文對(duì)BP神經(jīng)網(wǎng)絡(luò)在KNL上進(jìn)行了向量化擴(kuò)展,并使用寄存器分塊和緩存分塊方法優(yōu)化研究。實(shí)驗(yàn)結(jié)果表明在KNL上最快能達(dá)到220img/s的處理速度,其加速比達(dá)到了13.2,為GPU的2.9倍,KNC的2.28倍。
眾核架構(gòu);BP神經(jīng)網(wǎng)絡(luò);緩存分塊;向量化
1.1 眾核架構(gòu)處理器
MIC(Many Integrated Core)即為眾核處理器,是由Intel公司研發(fā)的基于x86架構(gòu)的集成眾多核心的高性能處理器。在2010年,Intel公司推出代號(hào)為Knight Ferry(KNF)的實(shí)驗(yàn)性產(chǎn)品。到了2012年正式推出第一代MIC產(chǎn)品,Knight Corner(KNC)。KNC是由50多個(gè)基于Pentium4架構(gòu)的內(nèi)核集成的。每個(gè)核心擁有64KB的一級(jí)緩存,以及512KB的二級(jí)緩存。核之間通過(guò)一條高速雙向環(huán)形總線(xiàn)互聯(lián)。
2016年6月,Intel公司正式發(fā)布第二代至強(qiáng)融合系列處理器,代號(hào)為Knight Landing(KNL).KNL相比于第一代KNC有非常大的調(diào)整。首先最容易看出的是KNL可以不再僅僅作為協(xié)處理器運(yùn)行了,因?yàn)镵NL具有主處理器和協(xié)處理器兩個(gè)版本,主處理器版本的KNL可以當(dāng)做CPU來(lái)獨(dú)立運(yùn)行,而協(xié)處理器版本的KNL則與KNC相同,即通過(guò)PCIe插槽與主板相連,輔助CPU完成并行計(jì)算任務(wù)。其次,KNL內(nèi)部核心由slivermont架構(gòu)組成,擁有更多的核心,達(dá)到70多個(gè),每個(gè)核心擁有64KB的一級(jí)緩存和兩個(gè)向量處理單元VPU,每?jī)蓚€(gè)核心組成一個(gè)塊(Tile),Tile內(nèi)的兩個(gè)核心共享1M二級(jí)緩存。另外,Tile之間的訪(fǎng)存通道不再是一維結(jié)構(gòu)的環(huán)形總線(xiàn)了,而是改成了二維網(wǎng)格結(jié)構(gòu),Tile間的緩存采用非一致性訪(fǎng)存技術(shù)(NUMA)更好地讀取非規(guī)則數(shù)據(jù),有效地降低緩存丟失延遲。如圖1所示為KNL的內(nèi)部架構(gòu)。
圖1 KNL內(nèi)部架構(gòu)
1.2 機(jī)器學(xué)習(xí)
機(jī)器學(xué)習(xí)是研究如何使用計(jì)算機(jī)來(lái)模仿人類(lèi)學(xué)習(xí)活動(dòng)的一門(mén)學(xué)科。從上世紀(jì)開(kāi)始,計(jì)算機(jī)領(lǐng)域就已經(jīng)對(duì)機(jī)器學(xué)習(xí)展開(kāi)了研究,其中人工神經(jīng)網(wǎng)絡(luò)(Artificial Neutral Network,ANN)尤其受大家關(guān)注。人工神經(jīng)網(wǎng)絡(luò)是模擬人類(lèi)腦部神經(jīng)元的運(yùn)作方式,使用計(jì)算機(jī)語(yǔ)言來(lái)構(gòu)造模擬的神經(jīng)網(wǎng)絡(luò)。在二十世紀(jì)初,人工神經(jīng)網(wǎng)絡(luò)進(jìn)一步發(fā)展出了深度神經(jīng)網(wǎng)絡(luò)(Deep Neutral Network,DNN),即在非監(jiān)督數(shù)據(jù)集上建立多層次的神經(jīng)元。然而由于當(dāng)時(shí)的計(jì)算機(jī)能力無(wú)法滿(mǎn)足DNN網(wǎng)絡(luò)的計(jì)算需求,因此發(fā)展緩慢。近年來(lái),隨著多核、眾核處理器的出現(xiàn),計(jì)算機(jī)能力有了大幅度的提升,目前最新的KNL處理器單片就可以達(dá)到1Tflops的浮點(diǎn)性能,這已經(jīng)達(dá)到了1997超級(jí)計(jì)算機(jī)TOP 1的整體計(jì)算能力。因此可以說(shuō)神經(jīng)網(wǎng)絡(luò)的二次高速發(fā)展離不開(kāi)高性能計(jì)算,特別是眾核處理器的進(jìn)步。
2.1 研究背景
DNN廣泛應(yīng)用于數(shù)據(jù)挖掘、模式識(shí)別等方面,這些領(lǐng)域需要對(duì)大規(guī)模數(shù)據(jù)集進(jìn)行訓(xùn)練和測(cè)試。DNN訓(xùn)練方法可以分為有監(jiān)督的預(yù)訓(xùn)練和區(qū)分性的預(yù)調(diào)整。通常神經(jīng)網(wǎng)絡(luò)預(yù)訓(xùn)練采用受限波茲曼機(jī)(Restricted Boltzmann Machine,RBM)算法來(lái)逐層訓(xùn)練,構(gòu)建深層置信網(wǎng)絡(luò)(Deep Belif Network,DBN)。而區(qū)分性預(yù)調(diào)整常采用誤差反向傳播算法(Back Propagation,BP)。
反向傳播神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)(Back Propagation Neutral Network,BPNN)由一個(gè)輸入層,一個(gè)輸出層,以及多個(gè)隱藏層構(gòu)成。整個(gè)訓(xùn)練過(guò)程通過(guò)多次迭代獲得每層之間的權(quán)重值。目前有不少關(guān)于BP神經(jīng)網(wǎng)絡(luò)的并行計(jì)算研究,同時(shí)也有許多針對(duì)特定硬件架構(gòu)的并行方法,例如集群情況的并行方法[3],在流處理器上的并行設(shè)計(jì)[4]。
2.2 算法分析
BP神經(jīng)網(wǎng)絡(luò)包括了一個(gè)輸入層,一個(gè)輸出層和多個(gè)隱藏層。每一層神經(jīng)網(wǎng)絡(luò)包括神經(jīng)元向量,權(quán)重矩陣,以及激活函數(shù)。BP神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過(guò)程包括了信號(hào)正向傳播與誤差反向傳播兩個(gè)階段。在正向傳播階段,信號(hào)通過(guò)輸入層進(jìn)入多級(jí)隱藏層,最終在輸出層輸出結(jié)果。正向傳播階段各層間的權(quán)重值不變,如果最終輸出層得到的結(jié)果與期望值誤差較大,那么再次反向傳播誤差信號(hào),逐步調(diào)整權(quán)重值。經(jīng)過(guò)多次正反向傳播調(diào)整權(quán)重,直到輸出期望結(jié)果,此時(shí)訓(xùn)練完畢。
激活函數(shù)直接關(guān)系到BP神經(jīng)網(wǎng)絡(luò)的最終輸出結(jié)果,影響非線(xiàn)性誤差函數(shù)的收斂能力。公式(1)所示即為本文所使用的S型激活函數(shù):
神經(jīng)元傳播函數(shù)如下:
圖2 二維神經(jīng)網(wǎng)絡(luò)
表1 BP
圖3 BP網(wǎng)絡(luò)正向傳播激活過(guò)程
圖4 BP神經(jīng)網(wǎng)絡(luò)反向傳播過(guò)程
圖5 BP神經(jīng)網(wǎng)絡(luò)權(quán)重更新過(guò)程
圖3為正向傳播過(guò)程的偽代碼,第7行是神經(jīng)元激活函數(shù)計(jì)算過(guò)程,output[ofm][ofh][ofw]表示輸出神經(jīng)元激活值,由輸入值input乘以權(quán)重weight再加上偏移量bias[ofm]得到。反向傳播過(guò)程和權(quán)重梯度計(jì)算過(guò)程與正向傳播類(lèi)似,如圖4表示。圖5為權(quán)重梯度值更新過(guò)程的偽代碼。這三次循環(huán)計(jì)算過(guò)程占據(jù)了BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練的大部分時(shí)間。因此,優(yōu)化這三個(gè)計(jì)算過(guò)程是降低BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練時(shí)間的關(guān)鍵。
3.1 緩存分塊優(yōu)化
(1)計(jì)算訪(fǎng)存比
1KNL計(jì)算訪(fǎng)存比。對(duì)于64核的KNL(7210P)處理器,其計(jì)算訪(fǎng)存比(F/B)可以由浮點(diǎn)性能比訪(fǎng)存帶寬求得,即如下的計(jì)算公式:
由公式(3)可知KNL的計(jì)算訪(fǎng)存比為11.7。
2BP算法計(jì)算訪(fǎng)存比。以本文實(shí)驗(yàn)所用的6層BP神經(jīng)網(wǎng)絡(luò)舉例,取IFM=OFM=1024,OH=OW=12,KH=KW=3,STRIDE=1,其訪(fǎng)存比計(jì)算公式如下:
此時(shí)由公式(4)算得計(jì)算訪(fǎng)存比為1.85。因此未優(yōu)化的BP算法在KNL上大概獲得15.8%(1.85/11.7)的計(jì)算性能,即6Tflop×15.8%=948Gflops。
(2)緩存分塊優(yōu)化
從圖3可以看到,BP神經(jīng)網(wǎng)絡(luò)傳播過(guò)程是一個(gè)6層循環(huán)。一般BP神經(jīng)網(wǎng)絡(luò)的激活數(shù)(input[]和output[])和權(quán)重值(weights)比較大,無(wú)法完全存儲(chǔ)在緩存中,因此需要使用適當(dāng)?shù)木彺娣謮K方法來(lái)優(yōu)化BP算法。
首先考慮對(duì)正向傳播過(guò)程的第一層循環(huán)進(jìn)行分塊,設(shè)分塊大小為OB,產(chǎn)生如圖6所示的循環(huán)結(jié)構(gòu)。如果OB大?。碠FH*OFW)的輸出特征數(shù)組可以被完全存儲(chǔ)在緩存中,那么其計(jì)算訪(fǎng)存比計(jì)算如下:
還是以本文實(shí)驗(yàn)的6層BP神經(jīng)網(wǎng)絡(luò)舉例,分塊大小OB根據(jù)KNL的SIMD位寬取16個(gè)單精度浮點(diǎn)。此時(shí)由公式(5)計(jì)算得到BP算法的計(jì)算訪(fǎng)存比為30.3。當(dāng)前BP算法的計(jì)算訪(fǎng)存比大于KNL計(jì)算訪(fǎng)存比,所以BP算法成為計(jì)算密集型算法,其在KNL上可以獲得很好的加速效果。
接下來(lái)還可以對(duì)第二層循環(huán)進(jìn)行分塊操作,以繼續(xù)提高計(jì)算訪(fǎng)存比。如圖6所示為二次循環(huán)分塊后的BP算法代碼,此時(shí)的計(jì)算訪(fǎng)存比達(dá)到了50。
反向傳播過(guò)程和權(quán)重值更新過(guò)程的緩存分塊方法與正向傳播過(guò)程類(lèi)似,同樣對(duì)第一、二層進(jìn)行分塊,其中反向傳播過(guò)程的第一、二層與正向傳播過(guò)程恰好相反,但不影響分塊方法。
圖6 正向傳播過(guò)程緩存優(yōu)化代碼
3.2 寄存器分塊與向量化
寄存器分塊常被用于提高寄存器的數(shù)據(jù)重用率,降低L1 cache通信堵塞以及隱藏融合乘加指令運(yùn)算操作的延遲。
在前面緩存分塊的基礎(chǔ)上,對(duì)正向傳播過(guò)程按寄存器大小進(jìn)一步分割循環(huán)。如圖7所示為正向傳播過(guò)程使用寄存器分塊的偽代碼。設(shè)寄存器分塊大小為RB_SIZE,在第5行對(duì)輸出特征映射寬度OFW按寄存器分塊大小RB_SIZE進(jìn)行分塊,同時(shí)使用vout[]數(shù)組存儲(chǔ)多次權(quán)重累加的中間結(jié)果。另外,在最內(nèi)層循環(huán)部分使用了AVX-512指令集的聚集發(fā)散指令以及FMA指令完成向量化工作。在最內(nèi)層循環(huán)中向量化的FMA指令加載個(gè)數(shù)等于RB_SIZE。
反向傳播過(guò)程以及權(quán)重更新過(guò)程和正向傳播過(guò)程類(lèi)似。
圖7 正向傳播過(guò)程向量化代碼
4.1 實(shí)驗(yàn)平臺(tái)與測(cè)試集
本文實(shí)驗(yàn)所用硬件配置如表2所示,其中KNL為主處理器版本。實(shí)驗(yàn)所用測(cè)試數(shù)據(jù)集為來(lái)自美國(guó)加州大學(xué)機(jī)器學(xué)習(xí)庫(kù)的地質(zhì)圖像集。關(guān)于KNL測(cè)試中的MCDRAM模式,Cluster模式以及線(xiàn)程配置參數(shù)見(jiàn)表3。
表2 實(shí)驗(yàn)硬件環(huán)境
表3 實(shí)驗(yàn)配置參數(shù)
4.2 優(yōu)化前后性能對(duì)比
圖8為BP算法在優(yōu)化前后的計(jì)算性能結(jié)果。本文使用的優(yōu)化方法有緩存分塊,寄存器分塊以及向量化。衡量計(jì)算性能的指標(biāo)是每秒處理圖片數(shù)量,即img/s。從圖中可以看到使用緩存分塊,寄存器分塊以及向量化后圖像處理速度達(dá)到未優(yōu)化前的2倍。
圖8 BP網(wǎng)絡(luò)優(yōu)化性能對(duì)比
4.3 加速比分析
對(duì)比CPU,GPU和MIC的加速比可以直觀地發(fā)現(xiàn)KNL的架構(gòu)優(yōu)勢(shì)。圖9為BP神經(jīng)網(wǎng)絡(luò)在不同硬件平臺(tái)上處理圖像的加速比。其中GPU是Tesla K20x,CPU是Intel Xeon 2609。從圖9中可以看到,KNC處理器的計(jì)算性能略高于GPU,而前面的SpMV算法和Stencil算法實(shí)驗(yàn)結(jié)果都不及GPU。KNL的加速達(dá)到了11.2,是其前代處理器KNC的2.28倍,性能提升效果明顯。
圖9 不同硬件平臺(tái)的加速比
本文實(shí)現(xiàn)了BP神經(jīng)網(wǎng)絡(luò)算法在眾核架構(gòu)平臺(tái)上的移植與優(yōu)化。其優(yōu)化方法是CPU平臺(tái)上常見(jiàn)的緩存分塊和寄存器分塊方法,同時(shí)還使用了AVX512指令集進(jìn)行向量化擴(kuò)展。實(shí)驗(yàn)結(jié)果證明具有一定的加速效果,每秒處理圖像速度是未優(yōu)化代碼的2倍。在KNL平臺(tái)上的計(jì)算性能是GPU(K20x)的2.9倍,是上一代MIC(KNC)的2.28倍。
[1]王恩東.MIC高性能計(jì)算編程指南[M].中國(guó)水利水電出版社,2012.
[2]OLCF Ti tan Summi t 2011.http://www.olcf.ornl.gov/ event/titan-summit/.
[3]Diede T,Hagenmaier C F,Miranker G S,et al.The Titan Graphics Supercomputer Architecture[J].Computer,1988,21(9):13-30.
[4]Suresh S,Omkar S N,Mani V.Parallel Implementation of Back-Propagation Algorithm in Networks of Workstations[J].IEEE Transactions on Parallel & Distributed Systems,2005,16(1):24-34.
[5]Furedi L,Szolgay P.CNN model on stream processing platform[C]. European Conference on Circuit Theory and Design. IEEE,2009:843-846.
[6]Kerr J P,Barlett E B.SPECT reconstruction using a backpropagation neural network implemented on a massively parallel SIMD computer[C].Computer-Based Medical Systems,1992.Proceedings. Fifth IEEE Symposium on.IEEE,1992:616-623.
[7]Tsaregorodtsev V G.Parallel implementation of backpropagation neural network software on SMP computers[C].Parallel Computing Technologies,International Conference,PACT 2005,Krasnoyarsk,Russia,September 5-9,2005,Proceedings.2005:186-192.
[8]Enke D,Ratanapan K,Dagli C.Machine-part family formation utilizing an art1 neural network implemented on a parallel neurocomputer[J].Computers & Industrial Engineering,1998,34(1):189-205.
Optimization of BP neural network algorithm based on many-core architecture
Zhou Wen
(College of Computer Science & Technology,Nanjing University of Aeronautics and Astronautics,Nanjing 210016,China)
In recent years,the MIC(Many Integrated Cores)more and more people's attention,many core architecture has become the first choice for many supercomputing.BP neural network is a kind of artificial neural network based on BP(Back Propagation)algorithm,which requires a high level of floating-point computing capability.The latest Intel Xeon Phi (KNL) core processor can achieve 3TFLOPS double precision floating point peak performance.In this paper,we extend the BP neural network on KNL,and use the method of register block and cache block to optimize the research.The experimental results show that the fastest processing speed of 220img/s can be achieved on the KNL,and the speedup ratio is 13.2,which is times of GPU and KNC is 2.28 times.
many-core architecture;BP neural network;cache block;vectorizatio
周文(1991—),男,江蘇南京人,南京航空航天大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院碩士研究生,研究方向:高性能計(jì)算。
國(guó)家自然科學(xué)基金(Grant No.61571226);江蘇省自然科學(xué)基金(青年科學(xué)基金)(Grant No.BK20140823)資助。