范志華 吳欣欣 李文明 曹華偉 安學(xué)軍 葉笑春 范東睿
1 (處理器芯片全國重點(diǎn)實(shí)驗(yàn)室(中國科學(xué)院計(jì)算技術(shù)研究所) 北京 100190)
2 (中國科學(xué)院大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 北京 100049) (fanzhihua@ict.ac.cn)
深度神經(jīng)網(wǎng)絡(luò)(deep neural network,DNN)模型規(guī)模變得越來越大,例如AlexNet[1]和VGG16[2]網(wǎng)絡(luò)中分別包含6 000萬和1.38億個(gè)參數(shù),大規(guī)模的數(shù)據(jù)以及復(fù)雜的計(jì)算過程對(duì)硬件計(jì)算、存儲(chǔ)資源的需求也隨之加大,神經(jīng)網(wǎng)絡(luò)壓縮技術(shù)能有效緩解對(duì)計(jì)算和存儲(chǔ)的壓力.量化是一種廣泛使用的壓縮技術(shù),利用神經(jīng)網(wǎng)絡(luò)中數(shù)據(jù)的冗余性,將高精度浮點(diǎn)數(shù)據(jù)映射到使用更少位的低精度整型數(shù)據(jù)(INT8,INT4或者更低),以此降低神經(jīng)網(wǎng)絡(luò)推理的硬件開銷.
為充分體現(xiàn)低精度神經(jīng)網(wǎng)絡(luò)的性能和能效優(yōu)勢(shì),許多面向低精度神經(jīng)網(wǎng)絡(luò)的加速器被提出.DRQ架構(gòu)[3]提出了一種基于區(qū)域的動(dòng)態(tài)量化方法,該方法可以根據(jù)激活值中的敏感區(qū)域動(dòng)態(tài)改變DNN模型的精度,并針對(duì)所提出的敏感區(qū)域算法設(shè)計(jì)了一種混合精度卷積陣列加速器.AQSS[4]基于隨機(jī)計(jì)算方法實(shí)現(xiàn)了固定精度的7 b加速器結(jié)構(gòu),該加速器通過移位器代替乘加器,提高了加速器的性能.算法與硬件架構(gòu)的配合使得此類加速器在模型準(zhǔn)確率與性能等方面可以取得良好表現(xiàn),但是此類架構(gòu)與軟件方法之間緊耦合且僅支持單一精度,使得很難適用于其他的量化算法和神經(jīng)網(wǎng)絡(luò)模型.
由于量化算法和神經(jīng)網(wǎng)絡(luò)模型的不同,一些架構(gòu)通過支持多種精度運(yùn)算來增加靈活性.OLAccel[5]基于4 b的乘加單元對(duì)權(quán)重和激活值進(jìn)行低精度計(jì)算,同時(shí)考慮了少量高精度的離群值的存在,增加了一個(gè)額外的高精度乘加單元,用于離群值的計(jì)算.BitFusion[6]設(shè)計(jì)了精度可變的乘加單元,能夠支持精度為2的任意指數(shù)的乘加運(yùn)算.由于可以支持多精度數(shù)據(jù)的運(yùn)算,相比于前一類加速器,此類加速器能支持更多的量化方法和低精度網(wǎng)絡(luò).但是,此類加速器采用細(xì)粒度的配置方式,給編譯造成比較大的困難,并且對(duì)于計(jì)算部件的重構(gòu)會(huì)帶來額外的開銷.另外,此類架構(gòu)的時(shí)鐘頻率都受限于計(jì)算部件的設(shè)計(jì).
數(shù)據(jù)流架構(gòu)的執(zhí)行方式與神經(jīng)網(wǎng)絡(luò)算法具有高度匹配性,并且在靈活性、性能之間具有良好權(quán)衡.Eyeriss[7]是一款典型的數(shù)據(jù)流神經(jīng)網(wǎng)絡(luò)加速器,通過減少數(shù)據(jù)移動(dòng)、實(shí)現(xiàn)本地?cái)?shù)據(jù)復(fù)用等方式最小化模型中數(shù)據(jù)移動(dòng)距離,從而降低神經(jīng)網(wǎng)絡(luò)加速器的能耗.DPU[8]面向神經(jīng)網(wǎng)絡(luò)的稀疏性對(duì)數(shù)據(jù)流架構(gòu)進(jìn)行了優(yōu)化,通過去掉與0相關(guān)的無效操作提升了數(shù)據(jù)流芯片的性能與能效.然而,現(xiàn)有數(shù)據(jù)流加速器沒有面向低精度神經(jīng)網(wǎng)絡(luò)展開研究,而且都關(guān)注計(jì)算部件的設(shè)計(jì),忽略了數(shù)據(jù)在片上存儲(chǔ)和片外存儲(chǔ)之間的傳輸問題.此外,傳統(tǒng)數(shù)據(jù)流架構(gòu)通過雙緩沖機(jī)制掩蓋數(shù)據(jù)傳輸?shù)难舆t,但是當(dāng)部署低精度(INT8,INT4)神經(jīng)網(wǎng)絡(luò)時(shí),傳輸帶寬的利用率顯著降低.這導(dǎo)致計(jì)算執(zhí)行時(shí)間無法掩蓋數(shù)據(jù)傳輸延遲,使得計(jì)算陣列完成此次計(jì)算之后不能馬上開始下一次計(jì)算,需要等待數(shù)據(jù)傳輸完成,從而降低了數(shù)據(jù)流架構(gòu)的性能和能效.
基于以上問題,本文面向低精度神經(jīng)網(wǎng)絡(luò),對(duì)數(shù)據(jù)流架構(gòu)進(jìn)行了優(yōu)化,設(shè)計(jì)了軟硬件協(xié)同的低精度神經(jīng)網(wǎng)絡(luò)加速器DPU_Q.本文的貢獻(xiàn)有4個(gè)方面:
1)為充分挖掘低精度卷積計(jì)算過程中的數(shù)據(jù)并行性,本文設(shè)計(jì)了靈活可重構(gòu)的計(jì)算單元,根據(jù)指令的精度標(biāo)志位動(dòng)態(tài)重構(gòu)數(shù)據(jù)通路,能高效靈活得支持多種低精度數(shù)據(jù)運(yùn)算,并實(shí)現(xiàn)計(jì)算部件的高利用率和高峰值性能;
2)為支持低精度神經(jīng)網(wǎng)絡(luò)中復(fù)雜的訪存模式,本文設(shè)計(jì)了Scatter引擎,能對(duì)低精度數(shù)據(jù)進(jìn)行拼接、預(yù)處理,以滿足高層次/片上存儲(chǔ)對(duì)數(shù)據(jù)排列的格式要求,能有效應(yīng)對(duì)復(fù)雜的訪存模式并解決低精度數(shù)據(jù)傳輸帶寬利用率低的問題;
3)為充分發(fā)揮數(shù)據(jù)流架構(gòu)的性能優(yōu)勢(shì),本文提出了一種數(shù)據(jù)流圖映射算法,兼顧負(fù)載均衡的同時(shí)減少了訪存和數(shù)據(jù)流圖節(jié)點(diǎn)之間的數(shù)據(jù)傳輸帶來的開銷;
4)通過實(shí)驗(yàn)評(píng)估,相比于同精度的 Titan Xp GPU,DPU_Q可以獲得最高3.18倍的性能提升和4.49倍的能效提升.相比于同精度的Eyeriss加速器,DPU_Q可以最大獲得6.05倍性能提升和1.6倍能效提升,相比于BitFusion加速器,可以最大獲得1.52倍性能提升和1.13倍能效提升.
量化是一種神經(jīng)網(wǎng)絡(luò)壓縮技術(shù),通過將神經(jīng)網(wǎng)絡(luò)模型中的數(shù)據(jù)映射到使用更少位的數(shù)據(jù)域,減小神經(jīng)網(wǎng)絡(luò)存儲(chǔ)規(guī)模、簡化計(jì)算過程從而加快神經(jīng)網(wǎng)絡(luò)訓(xùn)練和推理的速度.量化的對(duì)象常為神經(jīng)網(wǎng)絡(luò)中的權(quán)值[9]、激活值[10]和反向傳播中的梯度[11].常見的低精度有 16 b,8 b,4 b.這些低精度神經(jīng)網(wǎng)絡(luò)經(jīng)過量化、重訓(xùn)練過程之后,能夠保證模型準(zhǔn)確率損失在可接受的范圍內(nèi),因此,面向低精度神經(jīng)網(wǎng)絡(luò)的量化算法和體系結(jié)構(gòu)研究成為計(jì)算機(jī)領(lǐng)域的研究熱點(diǎn).表1展示了具有代表性的低精度神經(jīng)網(wǎng)絡(luò)加速器.
為充分體現(xiàn)低精度神網(wǎng)絡(luò)的性能和能效優(yōu)勢(shì),許多面向低精度神經(jīng)網(wǎng)絡(luò)的加速器被提出[3-7].DRQ[3]架構(gòu)根據(jù)激活值矩陣中敏感區(qū)域的特征,動(dòng)態(tài)改變神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)的精度,并且從硬件架構(gòu)層面動(dòng)態(tài)適配模型精度,設(shè)計(jì)了支持多種混合精度的卷積計(jì)算陣列.AQSS[7]架構(gòu)則是基于隨機(jī)計(jì)算的計(jì)算模式,設(shè)計(jì)了7 b精度的加速器微架構(gòu),并且使用移位器實(shí)現(xiàn)乘加計(jì)算,顯著提升了計(jì)算性能和效率.然而,基于隨機(jī)計(jì)算的架構(gòu)需要額外的資源開銷,例如隨機(jī)數(shù)據(jù)生成、預(yù)處理等.以上述DRQ和AQSS為代表的、與軟件算法緊耦合的架構(gòu)的缺點(diǎn)是靈活性較差,很難適用于其他的量化算法、不同的神經(jīng)網(wǎng)絡(luò)模型以及模型精度.
由于量化算法和神經(jīng)網(wǎng)絡(luò)模型的不同,單一精度使加速器的靈活性受限,因此,一些架構(gòu)通過支持多種精度運(yùn)算來增加靈活性.OLAccel[5]基于4 b的乘加單元對(duì)權(quán)重和激活值進(jìn)行低精度計(jì)算,同時(shí)考慮了少量高精度的離群值的情況.增加了一個(gè)高精度乘加單元,用于計(jì)算離群值,避免高精度與低精度計(jì)算單元的更新帶來的一致性問題.BitFusion[6]引入了動(dòng)態(tài)比特級(jí)融合/分解思想,是一種可變精度的比特級(jí)加速器,它由一組可組合的比特級(jí)乘加單元組成,動(dòng)態(tài)融合以匹配單個(gè)DNN層的精度.該加速器的缺點(diǎn)在于細(xì)粒度的可重構(gòu)運(yùn)算部件使編程和算法移植變得困難,而且此類架構(gòu)的時(shí)鐘頻率都受限于計(jì)算部件的設(shè)計(jì).通過此類加速器的設(shè)計(jì)思想我們得到啟發(fā),低精度神經(jīng)網(wǎng)絡(luò)加速器的設(shè)計(jì)是需要同時(shí)支持低精度運(yùn)算與部分高精度運(yùn)算,一方面能在性能與模型準(zhǔn)確率的權(quán)衡中獲得最大收益,另一方面還可以支持更多的量化方法和網(wǎng)絡(luò)模型,增加架構(gòu)的靈活性.
數(shù)據(jù)流架構(gòu)的執(zhí)行方式與神經(jīng)網(wǎng)絡(luò)算法具有高度匹配性,并且在靈活性、粗粒度可重構(gòu)性、性能之間具有良好權(quán)衡.Eyeriss[7]在整個(gè)模型中使用16 b的量化數(shù)據(jù)進(jìn)行推理,并且通過減少某些數(shù)據(jù)移動(dòng)、實(shí)現(xiàn)本地?cái)?shù)據(jù)復(fù)用等方式最小化神經(jīng)網(wǎng)絡(luò)模型中數(shù)據(jù)移動(dòng)距離,從而降低神經(jīng)網(wǎng)絡(luò)加速器的能耗,但Eyeriss由于精度較大,使其加速效果并不顯著.DPU[8]面向稀疏神經(jīng)網(wǎng)絡(luò)對(duì)數(shù)據(jù)流處理器進(jìn)行了優(yōu)化.然而,現(xiàn)有數(shù)據(jù)流加速器沒有面向低精度神經(jīng)網(wǎng)絡(luò)展開研究,更重要的,現(xiàn)有數(shù)據(jù)流架構(gòu)側(cè)重關(guān)注數(shù)據(jù)流計(jì)算單元和數(shù)據(jù)流圖映射方面的研究,并未關(guān)注數(shù)據(jù)在片上存儲(chǔ)和片外存儲(chǔ)之間的傳輸.
DNN主要由多個(gè)卷積層組成,它們占據(jù)整個(gè)網(wǎng)絡(luò)處理約85%的計(jì)算時(shí)間[12],這些卷積層執(zhí)行高維的卷積計(jì)算.卷積層在輸入特征圖 (input feature map,Ifmap)上應(yīng)用卷積核(kernel)以生成輸出特征圖(output feature map,Ofmap).卷積層的輸入數(shù)據(jù)由 1 組2維輸入特征圖組成,每個(gè)特征圖稱為1個(gè)通道,多個(gè)通道的輸入組成1個(gè)輸入圖像,每個(gè)通道的特征值都與1個(gè)不同的2維濾波器(filter)進(jìn)行卷積運(yùn)算,通道上的每個(gè)點(diǎn)的卷積結(jié)果相加得到1個(gè)通道的輸出特征圖.卷積層的計(jì)算為
低精度神經(jīng)網(wǎng)絡(luò)是經(jīng)過量化操作之后得到的神經(jīng)網(wǎng)絡(luò)模型,量化能夠減少神經(jīng)網(wǎng)絡(luò)模型中數(shù)據(jù)的精度,縮小神經(jīng)網(wǎng)絡(luò)的規(guī)模,簡化計(jì)算來加速神經(jīng)網(wǎng)絡(luò)的訓(xùn)練或推理過程.
量化的過程可以描述為將網(wǎng)絡(luò)中的參數(shù)分成不同的簇,同一簇中的參數(shù)共享相同的量化值,量化之后對(duì)參數(shù)進(jìn)行編碼,將量化后的參數(shù)轉(zhuǎn)換為二進(jìn)制編碼來存儲(chǔ).常見的量化算法有線性映射、k-means聚類;常見的編碼方式有固定長度的二進(jìn)制編碼和變長的霍夫曼編碼.
表2展示了具有代表性的低精度神經(jīng)網(wǎng)絡(luò)及其數(shù)據(jù)精度.Q_CNN[13]是將卷積神經(jīng)網(wǎng)絡(luò)中的權(quán)值量化,對(duì)于圖像識(shí)別應(yīng)用能顯著提升神經(jīng)網(wǎng)絡(luò)的性能并減少存儲(chǔ)開銷.EIA[14]將權(quán)值和激活值都量化成8 b定點(diǎn)數(shù)據(jù),DFP[15]和LSQ[16]將網(wǎng)絡(luò)中的權(quán)重和激活值等數(shù)據(jù)量化成多個(gè)不同的數(shù)據(jù)精度,而QIL[17]將權(quán)值和激活值量化成4 b數(shù)據(jù).
Table 2 Representative Low-Precision Neural Networks表2 代表性低精度神經(jīng)網(wǎng)絡(luò)
參考文獻(xiàn)[18]中的方法,分別對(duì)AlexNet和 VGG16網(wǎng)絡(luò)進(jìn)行量化、微調(diào),不同數(shù)據(jù)位寬與網(wǎng)絡(luò)模型精度損失的關(guān)系如圖1所示.對(duì)于VGG16網(wǎng)絡(luò),數(shù)據(jù)位寬少于8 b時(shí),模型的準(zhǔn)確率就會(huì)出現(xiàn)明顯下降.而對(duì)于AlexNet網(wǎng)絡(luò),數(shù)據(jù)位寬至少為4 b時(shí),可以保證模型的準(zhǔn)確率.
Fig.1 Relationship between the accuracy loss of the neural network model and the quantization of bit-width圖1 神經(jīng)網(wǎng)絡(luò)模型準(zhǔn)確率損失與數(shù)據(jù)位寬的關(guān)系
DPU[8]是一款典型的粗粒度數(shù)據(jù)流架構(gòu),采用數(shù)據(jù)流程序執(zhí)行模型.計(jì)算機(jī)程序通過數(shù)據(jù)流圖表示,數(shù)據(jù)流圖由節(jié)點(diǎn)和連接節(jié)點(diǎn)的有向邊構(gòu)成.節(jié)點(diǎn)表示計(jì)算過程,節(jié)點(diǎn)之間的有向邊表示數(shù)據(jù)依賴關(guān)系.計(jì)算節(jié)點(diǎn)是一個(gè)指令集合,各節(jié)點(diǎn)之間的調(diào)度與執(zhí)行采用非搶占機(jī)制.借助于這種特殊的計(jì)算方式,DPU在功能靈活性方面與控制流驅(qū)動(dòng)處理器相似,在能效上接近專用處理器芯片.
圖2展示了DPU的整體架構(gòu),該架構(gòu)由2維PE(process element)陣 列 、 微 控 制 器 和 DMA(direct memory access)組成.DPU作為協(xié)處理器,通過接口與主機(jī)端進(jìn)行交互.由于DMA傳輸不占用計(jì)算資源且控制簡單,所以,DPU使用DMA作為片上與片外存儲(chǔ)之間數(shù)據(jù)傳輸?shù)牟考?
Fig.2 Overall architecture of DPU圖2 DPU 架構(gòu)
PE陣列由多個(gè)同構(gòu)PE、片上網(wǎng)絡(luò)和片上存儲(chǔ)SPM(scratchpad memory)組成.片上存儲(chǔ) SPM 負(fù)責(zé)存儲(chǔ)指令和數(shù)據(jù),并由2塊相同大小的SPM塊組成,目的是通過雙緩沖機(jī)制掩蓋數(shù)據(jù)傳輸?shù)难舆t.片上網(wǎng)絡(luò)將PE陣列組織為2維mesh拓?fù)浣Y(jié)構(gòu),并負(fù)責(zé)在PE之間傳輸配置信息和數(shù)據(jù).
在每個(gè)PE內(nèi)部,由路由、控制單元、寄存器堆、流水線執(zhí)行單元組成.為充分利用數(shù)據(jù)并行性,流水線執(zhí)行單元使用單指令多數(shù)據(jù)(single instruction multiple data,SIMD)技術(shù),進(jìn)入流水線執(zhí)行單元的矢量寄存器中都包含多個(gè)數(shù)據(jù).為了提高PE計(jì)算部件的利用率,DPU采用解耦合的流水線設(shè)計(jì),將訪存、計(jì)算部件解耦合,訪存部件采用傳統(tǒng)5級(jí)流水,計(jì)算部件采用4級(jí)流水,減少了訪存階段.
微控制器負(fù)責(zé)控制PE陣列的執(zhí)行,還負(fù)責(zé)與主機(jī)端進(jìn)行通信.主機(jī)端向微控制器發(fā)送啟動(dòng)信號(hào)以及數(shù)據(jù)流圖映射等配置信息,微控制器啟動(dòng)并配置DMA,DMA將片外存儲(chǔ)中的數(shù)據(jù)加載至PE陣列的SPM中.微控制器配置并啟動(dòng)PE陣列,每個(gè)PE獲得映射的數(shù)據(jù)流節(jié)點(diǎn),根據(jù)節(jié)點(diǎn)中的指令,從SPM中加載數(shù)據(jù),進(jìn)入流水線單元執(zhí)行.當(dāng)PE陣列執(zhí)行結(jié)束后,微控制器向主機(jī)端發(fā)送結(jié)束信息.DMA負(fù)責(zé)片上SPM中的結(jié)果傳回片外存儲(chǔ).在此過程中,片上網(wǎng)絡(luò)負(fù)責(zé)PE之間傳遞配置信息與數(shù)據(jù).
在傳統(tǒng)數(shù)據(jù)流架構(gòu)中,計(jì)算單元的數(shù)據(jù)通路寬度為32 b,與低精度神經(jīng)網(wǎng)絡(luò)中的數(shù)據(jù)寬度不匹配,不能充分利用低精度數(shù)據(jù)的性能、能耗優(yōu)勢(shì).圖3展示了數(shù)據(jù)流架構(gòu)DPU中卷積運(yùn)算的數(shù)據(jù)通路,數(shù)據(jù)通路中的數(shù)據(jù)位寬、計(jì)算部件、單個(gè)寄存器規(guī)模都是32 b,當(dāng)計(jì)算低精度數(shù)據(jù)時(shí),比如 8 b數(shù)據(jù),雖然能夠完成計(jì)算,但在數(shù)據(jù)通路中傳輸、計(jì)算的數(shù)據(jù)的高24位全為0,造成計(jì)算資源的浪費(fèi).
SIMD是一種利用數(shù)據(jù)并行性提升性能的技術(shù).SIMD指令中的操作數(shù)都是一個(gè)向量,指令可以對(duì)向量中的每個(gè)操作數(shù)執(zhí)行相同的操作和控制.SIMD的維度以8為例,即每條計(jì)算和訪存指令同時(shí)對(duì)8個(gè)數(shù)據(jù)進(jìn)行計(jì)算和讀取/寫回,每條Load指令就可以將8個(gè)分量從片上存儲(chǔ)SPM加載到PE中的矢量寄存器中.在神經(jīng)網(wǎng)絡(luò)推理過程中,8個(gè)SIMD可以并行計(jì)算不同圖像或者不同通道中相同位置的數(shù)據(jù),但是這些數(shù)據(jù)需要在SPM中順序排列.然而,在片外存儲(chǔ)中,圖像數(shù)據(jù)按照?qǐng)D像順序依次排列存儲(chǔ)在每張圖像內(nèi)部,不同通道的數(shù)據(jù)依次排列存儲(chǔ).所以在SPM中順序排列的SIMD數(shù)據(jù)在片外存儲(chǔ)中是地址離散、分散排列的,并非按照其在SPM中的順序排列.面對(duì)片外存儲(chǔ)中非連續(xù)數(shù)據(jù)的訪問,DPU對(duì)DMA進(jìn)行了優(yōu)化,不同通道之間或者不同圖像之間(SIMD之間的數(shù)據(jù)偏移)的地址偏移可以通過輸入圖像規(guī)模得到,所以根據(jù)訪存首地址以及該偏移值,即可得到8個(gè)SIMD數(shù)據(jù)在片外存儲(chǔ)的地址,DMA并行需要從片外存儲(chǔ)中讀取8個(gè)數(shù)據(jù)并依次寫回SPM即可.
Fig.3 The data path of convolution圖3 卷積運(yùn)算的數(shù)據(jù)通路
在低精度神經(jīng)網(wǎng)絡(luò)推理過程中,存儲(chǔ)的訪問模式變得更加復(fù)雜.圖4以8 b精度為例,展示了數(shù)據(jù)在片上和片外存儲(chǔ)中的排列格式.為了充分利用存儲(chǔ)資源和數(shù)據(jù)并行性,SPM中每個(gè)存儲(chǔ)單元存儲(chǔ)同一圖像中4個(gè)不同通道相同位置的數(shù)據(jù),每個(gè)SIMD分量對(duì)4個(gè)通道數(shù)據(jù)進(jìn)行卷積計(jì)算,而SIMD維度可以并行處理8個(gè)圖像的數(shù)據(jù),這樣能充分挖掘數(shù)據(jù)的并行性,從而提升芯片的性能.但是,在每個(gè)圖像中,相同位置不同通道的數(shù)據(jù)在片外存儲(chǔ)中也并非連續(xù)存儲(chǔ),意味著在SPM中每個(gè)地址的32 b數(shù)據(jù)在片外存儲(chǔ)中是分散排列的,因此,不同通道和不同圖像之間數(shù)據(jù)在片外存儲(chǔ)的偏移計(jì)算變得復(fù)雜.同時(shí),使用優(yōu)化后的DMA進(jìn)行數(shù)據(jù)傳輸,每次只能并行讀取8個(gè)SIMD的數(shù)據(jù),即8個(gè)圖像中單個(gè)通道的數(shù)據(jù),所以對(duì)于8 b精度,DMA需要啟動(dòng)4次,才能完成1次計(jì)算所需的4個(gè)通道數(shù)據(jù)的傳輸.
Fig.4 Memory access patterns in low precision data圖4 低精度數(shù)據(jù)的存儲(chǔ)訪問模式
在數(shù)據(jù)流架構(gòu)DPU中,DMA負(fù)責(zé)片上SPM與片外存儲(chǔ)之間的數(shù)據(jù)搬運(yùn).與傳統(tǒng)數(shù)據(jù)流架構(gòu)一致,DPU的片上存儲(chǔ)采用雙緩沖機(jī)制,目的是用計(jì)算時(shí)間掩蓋DMA的配置和數(shù)據(jù)傳輸時(shí)間.圖5(a)展示了AlexNet網(wǎng)絡(luò)5個(gè)卷積層進(jìn)行1次DMA傳輸與1次計(jì)算的時(shí)間對(duì)比,對(duì)于32 b高精度數(shù)據(jù),每一次啟動(dòng)DPU的執(zhí)行時(shí)間遠(yuǎn)大于傳輸時(shí)間,傳輸時(shí)間完全可以通過雙緩沖機(jī)制掩蓋.然而,在數(shù)據(jù)流架構(gòu)部署低精度神經(jīng)網(wǎng)絡(luò)時(shí),基于3.2節(jié)的分析,需要多次啟動(dòng)DMA傳輸,導(dǎo)致數(shù)據(jù)傳輸時(shí)間變長,計(jì)算時(shí)間無法掩蓋傳輸延遲,使得雙緩沖機(jī)制失效.圖5展示了AlexNet網(wǎng)絡(luò)進(jìn)行INT4和INT8的傳輸時(shí)間和執(zhí)行時(shí)間.當(dāng)精度為INT8時(shí),conv3到conv5的數(shù)據(jù)傳輸時(shí)間超過了該層的執(zhí)行時(shí)間,傳輸?shù)钠骄鶐捓寐蕛H為20.05%;當(dāng)精度為INT4時(shí),AlexNet每一層都無法通過雙緩沖機(jī)制掩蓋傳輸延遲,傳輸帶寬的利用進(jìn)一步降低.如圖5(b)所示的是雙緩存機(jī)制失效,可以看出,當(dāng)?shù)趇?1層卷積運(yùn)算結(jié)束后,第i層卷積的數(shù)據(jù)還未完成從片外存儲(chǔ)到片上SPM的傳輸,導(dǎo)致第i層的計(jì)算無法在上一層結(jié)束之后立馬開始,PE陣列需要長時(shí)間處于等待數(shù)據(jù)傳輸狀態(tài),雙緩沖機(jī)制因此失去效果,使得計(jì)算單元的利用率下降,這會(huì)降低芯片的性能.
Fig.5 Calculation and transmission overhead of different precisions in AlexNet圖5 AlexNet網(wǎng)絡(luò)不同精度的計(jì)算和傳輸開銷
基于對(duì)低精度神經(jīng)網(wǎng)絡(luò)和數(shù)據(jù)流架構(gòu)的分析,本文設(shè)計(jì)了面向低精度神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)流架構(gòu)DPU_Q,總體架構(gòu)如圖6所示.DPU_Q核心部件包含微控制器、Scatter引擎、雙緩沖SPM、PE計(jì)算陣列和片外存儲(chǔ).Scatter引擎負(fù)責(zé)片上SPM和片外存儲(chǔ)之間的低精度數(shù)據(jù)訪問和傳輸;PE陣列負(fù)責(zé)計(jì)算,其具有靈活可重構(gòu)的低精度卷積計(jì)算部件RPU(reconfigurableprocess unit);雙緩沖 SPM既負(fù)責(zé)數(shù)據(jù)存儲(chǔ),又掩蓋數(shù)據(jù)傳輸?shù)难舆t;微控制器負(fù)責(zé)控制各部分的功能.
Fig.6 The overall architecture of DPU_Q圖6 DPU_Q總體架構(gòu)
與眾多神經(jīng)網(wǎng)絡(luò)硬件加速器一樣,DPU_Q是由PE 陣列組成的空間架構(gòu)(spatial architecture).PE 之間通過片上網(wǎng)絡(luò)進(jìn)行互聯(lián),每個(gè)PE內(nèi)包含本地存儲(chǔ)和共享的片上存儲(chǔ),PE其內(nèi)包含簡單的計(jì)算單元.由于神經(jīng)網(wǎng)絡(luò)中的計(jì)算是相對(duì)簡單且規(guī)則的操作,如張量的乘加運(yùn)算,所以可以利用PE陣列的結(jié)構(gòu)計(jì)算得到有效的處理.利用PE的本地和片上共享存儲(chǔ)可以實(shí)現(xiàn)數(shù)據(jù)的時(shí)間復(fù)用,并且數(shù)據(jù)流程序執(zhí)行模型提高了程序指令級(jí)并行性的同時(shí),數(shù)據(jù)流圖節(jié)點(diǎn)之間的數(shù)據(jù)傳輸實(shí)現(xiàn)數(shù)據(jù)的空間復(fù)用,從而減少存儲(chǔ)訪問.
DPU_Q架構(gòu)的設(shè)計(jì)特點(diǎn)主要體現(xiàn)在3個(gè)方面:
1)在計(jì)算部件設(shè)計(jì)方面.以提升吞吐量和性能為目標(biāo),設(shè)計(jì)了靈活可重構(gòu)的計(jì)算單元RPU,根據(jù)指令的精度標(biāo)志位動(dòng)態(tài)重構(gòu)數(shù)據(jù)通路,能高效靈活地支持多種低精度數(shù)據(jù)運(yùn)算,并且RPU內(nèi)MAC簇可以進(jìn)行通道維度并行,結(jié)合SIMD維度進(jìn)行圖像(batch)維度并行,以此充分挖掘低精度神經(jīng)網(wǎng)絡(luò)中的數(shù)據(jù)并行性.
2)在訪存部件設(shè)計(jì)方面.以提升低精度數(shù)據(jù)傳輸帶寬利用率為目標(biāo),設(shè)計(jì)了Scatter引擎,通過在數(shù)據(jù)傳輸過程中對(duì)數(shù)據(jù)進(jìn)行重組、預(yù)處理,解決低精度數(shù)據(jù)訪存模式復(fù)雜的問題.
3)在調(diào)度方面.以提高計(jì)算部件的利用率為目標(biāo),設(shè)計(jì)了兼顧負(fù)載均衡和數(shù)據(jù)重用的dR(data reuse)數(shù)據(jù)流圖映射算法.
圖7展示了DPU_Q中低精度卷積計(jì)算單元的數(shù)據(jù)通路,該數(shù)據(jù)通路能夠根據(jù)指令中的精度標(biāo)志位動(dòng)態(tài)選擇可重構(gòu)計(jì)算單元中的計(jì)算部件.該數(shù)據(jù)通路由4個(gè)流水線階段組成.
第 1 階段為取指(instruction fetch,IF).此階段根據(jù)指令寄存器(program counter,PC)的值,從指令存儲(chǔ)中獲得指令.
第 2 階段為譯碼(instruction decode,ID).指令譯碼器對(duì)指令進(jìn)行譯碼,將指令碼(opcode)、源/目的寄存器地址、精度標(biāo)識(shí)位(precision flag)和加法樹使能信號(hào)(adder tree enable)等信息分別發(fā)送到相應(yīng)的狀態(tài)寄存器和寄存器文件中.
第 3階段為指令執(zhí)行(execution, EX).RPU 根據(jù)精度標(biāo)識(shí)位動(dòng)態(tài)選擇執(zhí)行部件(MAC簇).然后,根據(jù)ID階段解析的源寄存器地址獲取源操作數(shù),進(jìn)行計(jì)算.加法樹從流水線寄存器(EX stage)中獲取使能信號(hào),根據(jù)精度標(biāo)識(shí)位將RPU計(jì)算的結(jié)果進(jìn)行求和.另外,該階段還包含了可選的量化部件,目的是為上層軟件算法提供支持.
第 4 階段為寫回(write back, WB).在該階段,計(jì)算結(jié)果被寫回目的寄存器或者數(shù)據(jù)存儲(chǔ)中.
在DPU_Q的實(shí)現(xiàn)中,精度標(biāo)志位設(shè)計(jì)為2 b寬度,用于表示 INT4,INT8,INT16,INT32 這 4 種精度.對(duì)應(yīng)地,RPU中包含了8個(gè)INT4的MAC簇、4個(gè)INT8的MAC簇、2個(gè)INT16的MAC簇以及1個(gè)INT32的MAC.RPU根據(jù)精度標(biāo)志位選取MAC簇,并建立MAC簇與寄存器堆、加法樹之間的線路鏈接.RPU和寄存器堆、加法樹之間的線路連接寬度都為32 b,在RPU內(nèi)部,不同精度的MAC簇的計(jì)算總的數(shù)據(jù)寬度也為32 b,目的是可以充分利用部件之間線路鏈接和寄存器文件.另一方面,結(jié)合卷積的算法特點(diǎn),同一MAC簇的MAC可以并行計(jì)算同一圖像不同通道的數(shù)據(jù),充分利用低精度神經(jīng)網(wǎng)絡(luò)通道間的并行性.在DPU_Q中,向量SIMD不同維度用于不同圖像之間的并行,單個(gè)SIMD內(nèi)對(duì)相同圖像的不同通道數(shù)據(jù)進(jìn)行并行,以此進(jìn)一步提高計(jì)算并行性和吞吐量.
Fig.7 The data path of low-precision convolution in DPU_Q圖7 DPU_Q中低精度卷積的數(shù)據(jù)通路
Scatter引擎主要包括調(diào)度單元、Aggregator和Translator這3部分,如圖8所示.調(diào)度單元由地址計(jì)算單元和控制模塊組成.調(diào)度單元一方面負(fù)責(zé)計(jì)算多個(gè)圖像和通道數(shù)據(jù)在片外存儲(chǔ)中的地址;另一方面負(fù)責(zé)控制Aggregator和Translator的執(zhí)行.Aggregator完成低精度數(shù)據(jù)的拼接,由多個(gè)插槽和用于同步的計(jì)數(shù)器組成.Translator負(fù)責(zé)SIMD數(shù)據(jù)格式轉(zhuǎn)換,由8個(gè)SIMD數(shù)據(jù)隊(duì)列、分發(fā)單元和同步單元組成.
調(diào)度單元根據(jù)圖像特征(map_feature)、訪存地址(mem_addr)和精度(precision)可以得到參與計(jì)算的每張圖像和每個(gè)通道的首地址.圖像特征是個(gè)3元組(x_slice,y_slice,z_slice),分別表示圖像的寬、高和通道規(guī)模.根據(jù)圖像特征三元組和精度可得到每個(gè)圖像在片外存儲(chǔ)中的偏移,根據(jù)x_slice、y_slice和精度便可得到圖像內(nèi)每個(gè)通道的偏移,地址計(jì)算單元根據(jù)上述輸入信息得到訪存地址表,表中記錄需要訪問的片外存儲(chǔ)地址.控制模塊根據(jù)精度信息,首先生成Aggregator和Translator的控制信息.如果精度為32 b數(shù)據(jù),Aggregator處于閑置狀態(tài),數(shù)據(jù)不會(huì)通過Aggregator,直接從片外存儲(chǔ)進(jìn)入Translator.如果是低精度數(shù)據(jù),控制模塊負(fù)責(zé)提供Aggregator同步所需的s_counter信號(hào).最后,控制模塊負(fù)責(zé)給Translator提供寫地址信息spm_addr.
Aggregator負(fù)責(zé)同一張圖像不同通道低精度數(shù)據(jù)的拼接,由多個(gè)插槽和同步計(jì)數(shù)器組成.Scatter引擎根據(jù)調(diào)度單元生成的訪存地址表讀取數(shù)據(jù),每張圖像中相同點(diǎn)不同通道的數(shù)據(jù)依次寫進(jìn)對(duì)應(yīng)插槽中.每次在插槽中寫入1個(gè)數(shù)據(jù),對(duì)應(yīng)的同步計(jì)數(shù)器值減1,插槽是一個(gè)32 b的存儲(chǔ)單元,插槽的同步計(jì)數(shù)器歸零意味著插槽中已經(jīng)完成多個(gè)低精度通道數(shù)據(jù)的拼接,然后,Aggregator將該32 b數(shù)據(jù)單元傳輸至Translator.其中,同步計(jì)數(shù)器的初始值由調(diào)度單元生成s_counter信號(hào)提供.
Fig.8 The structure of the Scatter engine圖8 Scatter引擎結(jié)構(gòu)圖
Translator負(fù)責(zé)SIMD數(shù)據(jù)格式轉(zhuǎn)換,由分發(fā)器、SIMD數(shù)據(jù)隊(duì)列和同步單元組成.分發(fā)單元接受來自Aggregator或者片外存儲(chǔ)的數(shù)據(jù),將不同圖像的數(shù)據(jù)送入不同的SIMD數(shù)據(jù)隊(duì)列中,SIMD數(shù)據(jù)隊(duì)列由先入先出(first in first out,F(xiàn)IFO)隊(duì)列組成,同步單元使用bitmap進(jìn)行同步操作,bitmap中紀(jì)錄每個(gè)數(shù)據(jù)隊(duì)列中隊(duì)首數(shù)據(jù)是否就緒,一旦8個(gè)數(shù)據(jù)隊(duì)列的隊(duì)首數(shù)據(jù)就緒,則根據(jù)調(diào)度單元提供的spm_addr地址,將8個(gè)數(shù)據(jù)寫入SPM對(duì)應(yīng)地址中.
在數(shù)據(jù)流架構(gòu)中,程序使用數(shù)據(jù)流圖表示,數(shù)據(jù)流圖(dataflow graph,DFG)記為GDFG,由一組節(jié)點(diǎn)(vertices)和連接節(jié)點(diǎn)的有向邊(edge)組成,GDFG=(V,E).在粗粒度數(shù)據(jù)流架構(gòu)中,數(shù)據(jù)流圖每個(gè)節(jié)點(diǎn)由一段代碼組成,代碼段作為基本的調(diào)度和執(zhí)行單元.
負(fù)載均衡有利于提升數(shù)據(jù)流架構(gòu)的部件利用率從而保證數(shù)據(jù)流架構(gòu)性能的發(fā)揮,而數(shù)據(jù)流圖節(jié)點(diǎn)間的數(shù)據(jù)共享及復(fù)用能減少存儲(chǔ)訪問帶來的開銷,所以本文提出了兼顧負(fù)載均衡和數(shù)據(jù)復(fù)用的dR數(shù)據(jù)流圖映射算法.具體的算法如算法1所示.
算法1.dR數(shù)據(jù)流圖映射算法.
輸入:特征矩陣規(guī)模IFmap、權(quán)值矩陣規(guī)模kernel、數(shù)據(jù)精度precision、計(jì)算陣列拓?fù)銹EA、計(jì)算陣列規(guī)模PEvol、片上存儲(chǔ)容量volume;
輸出:數(shù)據(jù)流圖GDFG=(V,E)、數(shù)據(jù)流圖節(jié)點(diǎn)V與計(jì)算陣列拓?fù)銹EA的映射關(guān)系map(V,PEA).
①d_volume←calculate(IFmap,kernel,precision);/*計(jì)算每層參與運(yùn)算的數(shù)據(jù)量*/
②instance←calculate(d_volume,volume); /*由 于某些神經(jīng)網(wǎng)絡(luò)每層數(shù)據(jù)規(guī)模較大,需要多次計(jì)算*/
③vertices_work←calculate(d_volume,instance,PEvol);/*保證每個(gè)PE的負(fù)載均衡*/
④generate(vertices_work,V); /*根據(jù)每個(gè)節(jié)點(diǎn)的工作負(fù)載,編譯生成數(shù)據(jù)流圖節(jié)點(diǎn)集合V*/
⑤reduce_MA(V,GDFG);/*遍歷節(jié)點(diǎn)集合V,消除相同地址的訪問指令,將具有相同訪存指令的節(jié)點(diǎn)定義為節(jié)點(diǎn)之間的數(shù)據(jù)流動(dòng)關(guān)系,實(shí)現(xiàn)數(shù)據(jù)復(fù)用*/
⑥SD←BreadthFirstSort(GDFG);
⑦ for each nodeninSDdo
⑧ for each PEpinPEAdo
⑨curruentcost←Cost(n,p);/*代價(jià)函數(shù) */
⑩ ifcurruentcost ?bestcost←curruentcost; ?map(n,p); ? endif ? endfor ?SD←SD?{n}; ?PEA←PEA?{p}; ? endfor 算法1首先根據(jù)特征矩陣、權(quán)值矩陣規(guī)模和精度計(jì)算神經(jīng)網(wǎng)絡(luò)每層參與運(yùn)算的數(shù)據(jù)規(guī)模;然后根據(jù)片上存儲(chǔ)的容量計(jì)算迭代次數(shù),受限于片上存儲(chǔ)容量,某些神經(jīng)網(wǎng)絡(luò)層需要多次迭代才能完成計(jì)算.由于每次迭代計(jì)算的數(shù)據(jù)規(guī)??梢蕴崆坝?jì)算得到,所以可以根據(jù)數(shù)據(jù)規(guī)模以及PE陣列的計(jì)算規(guī)模,為每個(gè)計(jì)算單元分配均衡數(shù)據(jù)量,達(dá)到負(fù)載均衡的目的. 根據(jù)每個(gè)PE的工作負(fù)載,編譯器生成每個(gè)數(shù)據(jù)流圖節(jié)點(diǎn)的指令,包括取數(shù)指令、計(jì)算指令等,生成了數(shù)據(jù)流圖的節(jié)點(diǎn)集合V.在reduce_MA操作中,遍歷節(jié)點(diǎn)集合V,如果節(jié)點(diǎn)之間包含了對(duì)相同地址的取數(shù)指令,意味著這些訪存指令是冗余的,只保留一個(gè)節(jié)點(diǎn)內(nèi)的訪存指令,該節(jié)點(diǎn)作為訪存節(jié)點(diǎn),去除其他節(jié)點(diǎn)的該條訪存指令.訪存節(jié)點(diǎn)作為上游節(jié)點(diǎn),其他節(jié)點(diǎn)作為該訪存節(jié)點(diǎn)的下游節(jié)點(diǎn),通過節(jié)點(diǎn)之間的數(shù)據(jù)流動(dòng)代替冗余的訪存操作,實(shí)現(xiàn)數(shù)據(jù)的復(fù)用. 算法的下一步是程序的數(shù)據(jù)流圖GDFG到計(jì)算陣列PEA的映射.首先對(duì)數(shù)據(jù)流圖進(jìn)行寬度優(yōu)先遍歷,然后根據(jù)代價(jià)函數(shù)Cost評(píng)估每個(gè)數(shù)據(jù)流圖節(jié)點(diǎn)與不同PE映射方法的代價(jià),選取最小代價(jià)的方案進(jìn)行映射.由于數(shù)據(jù)流圖節(jié)點(diǎn)之間的依賴關(guān)系表示數(shù)據(jù)的流動(dòng),所以上下游節(jié)點(diǎn)應(yīng)該盡可能映射到相鄰的PE,這樣一方面可以減少下游節(jié)點(diǎn)的等待時(shí)間,另一方面還可以減少對(duì)片上網(wǎng)絡(luò)的壓力.所以在算法1中將每個(gè)數(shù)據(jù)流圖節(jié)點(diǎn)映射到與其所有上游節(jié)點(diǎn)歐氏距離之和最小的PE上.其中,代價(jià)函數(shù)如式(2)所示,式(2)計(jì)算待映射數(shù)據(jù)流圖節(jié)點(diǎn)為n且映射到序號(hào)為p的PE時(shí),節(jié)點(diǎn)n與其所有上游節(jié)點(diǎn)(已映射)的歐氏距離之和. 為驗(yàn)證第4節(jié)中所提方法的有效性以及評(píng)估DPU_Q處理低精度神經(jīng)網(wǎng)絡(luò)的能力,本文使用中科院計(jì)算所研發(fā)的大規(guī)模并行模擬框架SimICT[19]實(shí)現(xiàn)了時(shí)鐘精確的模擬器,模擬器配置信息如表3所示.同時(shí),實(shí)驗(yàn)中使用Verilog語言實(shí)現(xiàn)了對(duì)DPU_Q的RTL 級(jí)仿真,并且利用 Synopsys Design Compiler工具進(jìn)行綜合,使用Synopsys ICC編譯器進(jìn)行布局布線,使用Synopsys VCS進(jìn)行驗(yàn)證設(shè)計(jì). Table 3 Configuration Information of DPU_Q表3 DPU_Q的配置信息 在本實(shí)驗(yàn)中,微控制器用于執(zhí)行控制程序,采用ARM架構(gòu)處理器.DPU_Q由8×8的PE陣列組成, PE中配置了8 KB的指令緩存和32 KB的數(shù)據(jù)緩存.PE中數(shù)據(jù)通路的關(guān)鍵路徑為DECODE_REG→MUX→MAC_REG,時(shí)延為 0.8 ns,最高頻率可以達(dá)到 1.25 GHz.實(shí)驗(yàn)中PE時(shí)鐘頻率設(shè)置為1 GHz.PE之間通過2維的mesh網(wǎng)絡(luò)連接,完成數(shù)據(jù)、控制信息在PE陣列的傳輸.SPM的大小配置為6 MB,用于保存數(shù)據(jù)和指令. 在啟動(dòng)階段,主機(jī)端將DPU_Q所需要的指令和數(shù)據(jù)通過Scatter引擎從內(nèi)存拷貝到SPM中,然后配置處理器陣列控制部件來啟動(dòng)加速器的執(zhí)行.計(jì)算任務(wù)完成之后,結(jié)果數(shù)據(jù)通過Scatter從加速器的SPM中拷回片外存儲(chǔ)當(dāng)中. DPU_Q主要對(duì)低精度卷積運(yùn)算進(jìn)行優(yōu)化加速,為評(píng)估性能,實(shí)驗(yàn)選取AlexNet,VGG16網(wǎng)絡(luò)模型中的卷積層作為實(shí)驗(yàn)的測(cè)試程序,各層規(guī)模如表4所示.實(shí)驗(yàn)中使用文獻(xiàn)[18]提出的方法對(duì)AlexNet,VGG16卷積層的激活值和參數(shù)進(jìn)行量化,計(jì)算過程中保留全精度的部分和.使用基于LLVM平臺(tái)設(shè)計(jì)的編譯器,編譯器將每個(gè)卷積層編譯為數(shù)據(jù)流圖并映射到PE陣列. 為評(píng)估DPU_Q性能,實(shí)驗(yàn)中選擇GPU(NVIDIA Titan Xp)、低精度神經(jīng)網(wǎng)絡(luò)加速器Eyeriss和BitFusion作為對(duì)比平臺(tái).需要說明的是,由于cuDNN暫無法支持INT4,所以GPU平臺(tái)僅使用cuDNN實(shí)現(xiàn)INT8神經(jīng)網(wǎng)絡(luò);參考文獻(xiàn)[4]中的方法,實(shí)現(xiàn)了INT8的Eyeriss加速器.實(shí)驗(yàn)中使用部件利用率評(píng)估映射算法的有效性,部件利用率計(jì)算為 Table 4 Benchmark Information表4 測(cè)試程序信息 圖9展示了DPU_Q在執(zhí)行不同精度的AlexNet和VGG16網(wǎng)絡(luò)時(shí)數(shù)據(jù)傳輸和執(zhí)行的時(shí)間對(duì)比,其中傳輸時(shí)間指Scatter引擎進(jìn)行數(shù)據(jù)傳輸?shù)臅r(shí)間,執(zhí)行時(shí)間指PE陣列計(jì)算時(shí)間.圖9(a)中AlexNet和VGG16網(wǎng)絡(luò)沒有經(jīng)過量化,對(duì)于每一層計(jì)算執(zhí)行時(shí)間都超過該層數(shù)據(jù)在片上SPM和片外存儲(chǔ)之間的傳輸延遲,DPU_Q可以通過雙緩沖機(jī)制掩蓋數(shù)據(jù)的傳輸延遲,對(duì)性能不會(huì)造成影響. 圖9(b)(c)分別為 INT8 和 INT4精度下,DPU_Q部署AlexNet和VGG16網(wǎng)絡(luò)時(shí)計(jì)算執(zhí)行時(shí)間和傳輸時(shí)間的對(duì)比.得益于Scatter引擎,低精度數(shù)據(jù)的數(shù)據(jù)傳輸延遲不會(huì)超過計(jì)算部件的執(zhí)行時(shí)間,雙緩沖機(jī)制完全可以發(fā)揮作用.AlexNet和VGG16網(wǎng)絡(luò)在不同精度下的傳輸帶寬平均利用率為80.01%. Fig.9 Data transmission and execution time proportion of each layer of AlexNet and VGG16圖9 AlexNet和VGG16各層的數(shù)據(jù)傳輸和執(zhí)行時(shí)間占比 因此,實(shí)驗(yàn)證明了Scatter引擎可以有效解決低精度神經(jīng)網(wǎng)絡(luò)復(fù)雜的訪存模式和帶寬利用率降低的問題,解決了低精度神經(jīng)網(wǎng)絡(luò)執(zhí)行過程中雙緩沖機(jī)制面臨失效的問題. 圖10展示了不同精度下DPU_Q相對(duì)于DPU的性能提升.對(duì)于AlexNet和VGG16網(wǎng)絡(luò),INT4精度下,DPU_Q的性能達(dá)到了最佳,分別是DPU的7.9倍和7.7倍.當(dāng)精度為INT8和INT16時(shí),DPU_Q相對(duì)于DPU性能分別平均提升了3.80倍和1.89倍.DPU_Q的性能提升得益于RPU的設(shè)計(jì),RPU可以根據(jù)精度動(dòng)態(tài)重構(gòu)數(shù)據(jù)通路,RPU內(nèi)的MAC簇可以并行計(jì)算多個(gè)通道,這使得DPU_Q具有高吞吐量并以此獲得性能的提升.當(dāng)然,當(dāng)精度縮小為1/n之后,性能并未達(dá)到理想的n倍加速,例如精度為8 b時(shí)的性能未到達(dá)32 b精度時(shí)的4倍,而是3.8倍.這是因?yàn)閿?shù)據(jù)流架構(gòu)的執(zhí)行時(shí)間包括了配置初始化時(shí)間和計(jì)算時(shí)間,配置初始化的時(shí)間并未縮短. Fig.10 Speedup promotion of DPU_Q over DPU圖10 DPU_Q相對(duì)于DPU的加速比提升 圖11展示了以Eyeriss為基準(zhǔn),DPU_Q執(zhí)行AlexNet和VGG16網(wǎng)絡(luò)各層的加速比.DPU_Q執(zhí)行各層的性能都優(yōu)于Eyeriss.這是由于Eyeriss在進(jìn)行神經(jīng)網(wǎng)絡(luò)部署時(shí),僅考慮減少數(shù)據(jù)在片上的移動(dòng)距離,減少數(shù)據(jù)搬運(yùn)帶來的功耗,并未挖掘神經(jīng)網(wǎng)絡(luò)計(jì)算中的并行性.對(duì)于AlexNet,加速比最高的是conv1,其加速比是2.85,這是因?yàn)榈?層的權(quán)重矩陣規(guī)模較大、通道數(shù)較少,RPU中利用通道并行性以及SIMD間利用通道并行性的優(yōu)勢(shì)能顯著減少數(shù)據(jù)的平均執(zhí)行時(shí)間.另外得益于本文提出的映射算法能對(duì)數(shù)據(jù)進(jìn)行充分復(fù)用,使得計(jì)算部件利用率提高,加速效果更明顯.conv4和conv5的加速比較低,原因在于這2層的權(quán)重矩陣的規(guī)模很小,意味著可復(fù)用的數(shù)據(jù)占比減少,PE陣列的部件利用率下降,導(dǎo)致加速效果不明顯.當(dāng)執(zhí)行VGG16時(shí),conv2_1和conv2_2層的加速比較大,分別是8.155和8.157,這2層的通道數(shù)較少,DPU_Q加速效果明顯的原因與第1層相似.執(zhí)行AlexNet和VGG16網(wǎng)絡(luò)時(shí),DPU_Q計(jì)算平均部件利用率為76.02%. Fig.11 Speedup of DPU_Q over Eyeriss圖11 DPU_Q相對(duì)于Eyeriss的加速比 圖12展示了 DPU_Q,Eyeriss,BitFusion相對(duì)于GPU的性能對(duì)比,其中圖12(a)是INT8精度的性能對(duì)比,圖12(b)是INT4精度的性能對(duì)比.對(duì)于INT8精度,當(dāng)部署AlexNet和VGG16網(wǎng)絡(luò)時(shí),DPU_Q相比于GPU可取得3.18和1.16的加速比,DPU_Q的性能是Eyeriss的1.52倍和6.05倍.當(dāng)網(wǎng)絡(luò)結(jié)構(gòu)較為簡單時(shí),Eyeriss通過最小化數(shù)據(jù)傳輸距離作為優(yōu)化目標(biāo)以及細(xì)粒度的數(shù)據(jù)流執(zhí)行方式能夠取得較好的性能表現(xiàn),但是當(dāng)網(wǎng)絡(luò)結(jié)構(gòu)復(fù)雜時(shí),較差的數(shù)據(jù)復(fù)用以及低并行性使得性能下降較為明顯. 對(duì)于INT4精度,當(dāng)部署AlexNet和VGG16時(shí),DPU_Q相對(duì)于加速器BitFusion可以取得1.52和1.17倍的性能提升.與BitFusion相比,DPU_Q能取得較好的性能表現(xiàn),主要原因是由于BitFusion比特級(jí)的計(jì)算部件重構(gòu)會(huì)導(dǎo)致計(jì)算的數(shù)據(jù)通路較長,計(jì)算周期增加.另外,得益于DPU_Q同時(shí)利用不同圖像和不同通道維度的數(shù)據(jù)并行,實(shí)現(xiàn)了高吞吐量和性能的提升. Fig.12 Performance comparison of DPU_Q,BitFusion,Eyeriss over GPU圖12 DPU_Q,BitFusion,Eyeriss相對(duì)于GPU的性能對(duì)比 圖13展示了4種方案的能效對(duì)比,DPU_Q的能效都優(yōu)于其他3種不同的平臺(tái).當(dāng)部署AlexNet和VGG16網(wǎng)絡(luò)時(shí),DPU_Q的能效是GPU的4.49倍和3.34倍,造成GPU能效較低的主要原因是GPU的能耗非常高(計(jì)算資源平均部件利用率為41.35%).DPU_Q的能效是 Eyeriss的1.6倍和1.38倍.雖然Eyeriss的性能表現(xiàn)不佳,但是由于其具有毫瓦級(jí)的功率,使得其在能效方面具有良好表現(xiàn).DPU_Q的能效是BitFusion的1.13和1.05倍,DPU_Q在性能方面的提升得益于挖掘了多種并行性和映射算法,但是在計(jì)算單元以及傳輸Scatter引擎等特殊部件的設(shè)計(jì)也帶來了額外能耗的開銷. Fig.13 Energy efficiency comparison圖13 能效對(duì)比 實(shí)驗(yàn)中使用Verilog語言實(shí)現(xiàn)了對(duì)DPU_Q的RTL 級(jí)仿真,并且利用 Synopsys Design Compiler工具以 TSMC 12 nm 工藝進(jìn)行綜合,使用 Synopsys ICC 編譯器進(jìn)行布局布線.DPU_Q的面積和功耗分布如圖14所示,Scatter引擎所占面積比例為0.61%,功耗占比僅為0.80%.另外,DPU_Q的面積相對(duì)于DPU增加了17.6%,額定功耗增加33.59%,硬件增加的開銷主要來源是PE內(nèi)RPU多種不同精度的計(jì)算部件. Fig.14 Distribution of area and power consumption of DPU_Q圖14 DPU_Q的面積和功耗分布 本文結(jié)合低精度神經(jīng)網(wǎng)絡(luò)的計(jì)算需求,設(shè)計(jì)了靈活可重構(gòu)的計(jì)算單元和Scatter引擎,并提出了負(fù)載均衡和數(shù)據(jù)復(fù)用的數(shù)據(jù)流圖映射算法,設(shè)計(jì)了數(shù)據(jù)流加速器 DPU_Q.相比于同精度的 Titan Xp GPU,DPU_Q可以獲得最高3.18倍的性能提升和4.49倍的能效提升.相比于同精度的Eyeriss加速器,DPU_Q可以最大獲得6.05倍性能提升和1.6倍能效提升,相比于BitFusion加速器,可以最大獲得1.52倍性能提升和1.13倍能效提升,表現(xiàn)出良好的性能和能效優(yōu)勢(shì).本文僅針對(duì)卷積層進(jìn)行了優(yōu)化設(shè)計(jì),由于神經(jīng)網(wǎng)絡(luò)中還包括其他類型的計(jì)算,未來會(huì)面向神經(jīng)網(wǎng)絡(luò)中其他類型的計(jì)算,進(jìn)一步優(yōu)化數(shù)據(jù)流架構(gòu). 作者貢獻(xiàn)聲明:范志華負(fù)責(zé)論文思路的提出、架構(gòu)設(shè)計(jì)、實(shí)驗(yàn)和論文的撰寫;吳欣欣負(fù)責(zé)論文思路討論和架構(gòu)設(shè)計(jì)討論;李文明負(fù)責(zé)論文架構(gòu)討論和整體質(zhì)量把控;曹華偉負(fù)責(zé)論文修改及實(shí)驗(yàn)指導(dǎo);安學(xué)軍負(fù)責(zé)論文整體思路的指導(dǎo);葉笑春負(fù)責(zé)論文整體架構(gòu)設(shè)計(jì)及修改;范東睿負(fù)責(zé)論文整體架構(gòu)設(shè)計(jì).5 實(shí)驗(yàn)設(shè)置
5.1 實(shí)驗(yàn)平臺(tái)
5.2 測(cè)試程序
5.3 對(duì)比平臺(tái)
6 結(jié)果分析
6.1 Scatter引擎收益
6.2 性能對(duì)比
6.3 能效對(duì)比
6.4 硬件開銷
7 總 結(jié)