国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

高性能異構(gòu)加速器MiniGo算子優(yōu)化方法

2024-04-08 11:59:54賀周雨李榮春姜晶菲
國防科技大學學報 2024年1期
關(guān)鍵詞:共享內(nèi)存加速器異構(gòu)

喬 鵬,賀周雨,李榮春*,姜晶菲

(1. 國防科技大學 計算機學院, 湖南 長沙 410073; 2. 國防科技大學 并行與分布計算全國重點實驗室, 湖南 長沙 410073)

目前,卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNNs)在人工智能典型應(yīng)用領(lǐng)域取得了令人印象深刻的效果[1-6]。結(jié)合深度學習和強化學習,深度強化學習(deep reinforcement learning,DRL)被認為是處理決策類問題的有效方法之一。DRL網(wǎng)絡(luò)模型的推理和訓練需要大量的計算和外部存儲訪問,再加上智能體和仿真環(huán)境交互中存在復雜的計算過程,這導致得到一個合格的智能體需要巨大的算力。計算模式復雜、對算力需求高的特點,使得DRL算法適合作為大規(guī)模計算平臺的系統(tǒng)性能評測應(yīng)用。因此,MLPerf[7]機器學習基準測試應(yīng)用集中包含了強化學習分區(qū)。MLPerf是一套測量機器學習訓練和推理在特定軟硬件上性能表現(xiàn)的基準測試應(yīng)用集,其中強化學習分區(qū)基準測試應(yīng)用是MiniGo。MiniGo訓練過程中,需要收集大量自我博弈的樣本,因此需要面向大規(guī)模計算集群進行部署和優(yōu)化。通過分析提交結(jié)果和代碼,在單結(jié)點對MiniGo中策略網(wǎng)絡(luò)進行推理和訓練優(yōu)化是十分重要的。因此,本文研究了MiniGo與自研高性能異構(gòu)加速器的定制化適配。①結(jié)合加速器系統(tǒng)特性對MiniGo算子進行定制化匯編優(yōu)化,在多核、多向量處理單元(vector processing element, VPE)、多寄存器、多指令間實現(xiàn)并行計算。②在中央處理器(central processing unit, CPU)和數(shù)字信號處理器(digital signal processing, DSP)的異構(gòu)計算層次,提出一種設(shè)備間共享內(nèi)存編碼模式,有效減少片內(nèi)數(shù)據(jù)搬運開銷。同時,在設(shè)備間實現(xiàn)流水并行。③提供一個易使用的面向TensorFlow的高性能算子計算庫。高性能算子計算庫包含了DSP驅(qū)動和CPU-DSP異構(gòu)執(zhí)行引擎。

1 相關(guān)工作

1.1 MiniGo

強化學習普遍對算力需求高,適合應(yīng)用于高性能異構(gòu)加速器定制化適配的測試。2013年DeepMind提出深度Q-Learning網(wǎng)絡(luò)[1],融合深度學習與傳統(tǒng)強化學習Q-Learning方法,在Atari中取得了突破性進步。隨后AlphaGo[2]、AlphaStar[3]、OpenAI Five[4]、AlphaFold[5]等在圍棋、即時戰(zhàn)略游戲等領(lǐng)域取得里程碑式的突破。圍棋在很長一段時間被認為是人工智能領(lǐng)域最具挑戰(zhàn)的經(jīng)典游戲之一。圍棋第一手有361種下法,第二手有360種,第三手有359種,依次類推,一共有 361! 種下法,考慮到存在大量不合規(guī)則的棋子分布,合理的棋局約占1.2%,約為2.08×10170[8]。由于搜索空間巨大,圍棋存在難以落子的問題。AlphaGo開創(chuàng)性地結(jié)合神經(jīng)網(wǎng)絡(luò)和蒙特卡羅樹搜索(Monte Carlo tree search, MCTS),通過近似估值函數(shù)估計對弈結(jié)果降低了搜索深度,利用基于策略函數(shù)的采樣動作降低了搜索廣度。經(jīng)過有監(jiān)督學習訓練、自我博弈強化學習,以99.8%勝率打敗所有圍棋程序,以5局完勝的成績打敗圍棋冠軍選手。MLPerf選擇MiniGo作為基準測試應(yīng)用。MiniGo是根據(jù)AlphaGo Zero[9]編寫的開源圍棋智能體訓練代碼。

MiniGo智能體訓練主要分為訓練和自我博弈。訓練任務(wù)中,使用最近的訓練得到的模型和其自我博弈產(chǎn)生的樣本進行訓練,得到新的模型。自我博弈任務(wù)中,使用最新模型進行自我博弈,產(chǎn)生新的樣本,作為下一次訓練的訓練樣本。兩個任務(wù)互相依賴,交替進行。訓練階段主要包括數(shù)據(jù)傳遞、網(wǎng)絡(luò)層調(diào)度、網(wǎng)絡(luò)的前向推理和反向更新。自我博弈階段通過MCTS計算落子位置。MCTS分為選擇、擴展、評估、回溯四個部分,其中選擇、擴展、評估需要訓練模型的推理結(jié)果。在自博弈的評估階段會進行前瞻,通過假想對局來估計當前動作的價值。以1 000個對局為例,平均每1個對局執(zhí)行前瞻101 884次,1個對局內(nèi)最大前瞻次數(shù)為225 318。其中每次前瞻都會執(zhí)行1次模型的推理。在1個8核的i7-9700K訓練智能體。實驗結(jié)果顯示,在訓練階段,網(wǎng)絡(luò)的前向推理和反向更新占總時間的71.3%。在自博弈階段,網(wǎng)絡(luò)的前向推理占總時間的83.26%。由此可見,模型訓練中計算熱點在于神經(jīng)網(wǎng)絡(luò)算子的計算。它的算子構(gòu)成如表1所示。

表1 MiniGo網(wǎng)絡(luò)結(jié)構(gòu)

目前,向MLPerf榜單提交MiniGo訓練結(jié)果的機構(gòu)有NVIDIA和INTEL。NVIDIA設(shè)計了一個自研CPU-GPU異構(gòu)計算系統(tǒng)(DGXA100-NGC20.06)訓練MiniGo。NVIDIA提供的方法在單結(jié)點上的優(yōu)化主要是卷積神經(jīng)網(wǎng)絡(luò)的低精度計算。INTEL設(shè)計了一個自研的純CPU計算系統(tǒng)(4socket-per-node-CPX-6UPI)。INTEL提供的方法在訓練時采用單精度浮點計算以保證訓練收斂,推理時采用INT8精度計算以保證推理速度。

加速器上的計算資源和存儲容量是有限的,優(yōu)化算子計算映射過程能夠有效地提高資源利用率[10]。此外,芯片內(nèi)外通信的高成本是實現(xiàn)更高性能的另一個主要障礙。大量數(shù)據(jù)移動和內(nèi)存訪問相關(guān)的能量消耗可能會超過計算的能量消耗[11-12]。

結(jié)合以上分析,本文方法在異構(gòu)設(shè)備間計算任務(wù)分配、異構(gòu)設(shè)備間數(shù)據(jù)通信、加速器算子計算三個方面進行了優(yōu)化。

1.2 加速芯片

面對日益增加的算力需求,將計算密集和數(shù)據(jù)密集的網(wǎng)絡(luò)計算卸載到加速器處理是一個有效的解決方法。常用的加速器有圖形處理器(graphics processing unit, GPU)、張量處理器(tensor processing unit, TPU)、現(xiàn)場可編程門陣列(field programmable gate array, FPGA)、DSP等。它們各自擁有不同的優(yōu)勢。例如,FPGA相對于傳統(tǒng)專用集成電路(application specific integrated circuit, ASIC)具有更強的可操作性,在相同功耗效率下可以達到比多核GPU更低延遲的推理。GPU具有可用于較好的軟件優(yōu)化生態(tài)環(huán)境以及高功耗下的高性能優(yōu)勢。TPU是專為張量(Tensor)計算而設(shè)計的加速器。相對于FPGA的低計算能力和GPU的高功耗,基于DSP的矢量處理器取得了性能和功耗的平衡。近年來,加速器的并行計算能力、內(nèi)存容量、內(nèi)存速度等都得到了極大的增強。除了硬件設(shè)備的改進,相應(yīng)的面向加速器的算子計算方法也在改進[13-17]。

面對日益增加的算力需求,結(jié)合人工智能應(yīng)用和計算平臺特點進行高效適配是一個有效的解決方法[18]。實驗顯示,計算設(shè)備對于不同人工智能應(yīng)用展現(xiàn)出的利用率不同。一些實驗[19-20]表明,面向特定硬件的特定算法的協(xié)同優(yōu)化設(shè)計能表現(xiàn)出更好的性能。

目前,面向加速器的算子加速方法研究得到了矚目的發(fā)展。但依然存在一些挑戰(zhàn)。首先是針對卷積神經(jīng)網(wǎng)絡(luò)的核心計算單元(如通用矩陣乘)在計算過程中如何合理使用特定加速器的多計算資源;然后是如何減少數(shù)據(jù)在加速器中傳輸占據(jù)的計算時間;最后是如何利用異構(gòu)設(shè)備進行設(shè)備間并行計算。本文提出了面向高性能異構(gòu)加速器的算子優(yōu)化方法以解決上述問題。

1.3 自研原型系統(tǒng)

本文方法所依托的計算系統(tǒng)為FT-M7032,如圖1所示。該系統(tǒng)是國防科技大學面向E級計算自主研發(fā)的一款異構(gòu)計算系統(tǒng),由大容量片外存儲、CPU、DSP簇、內(nèi)存雙倍數(shù)據(jù)速率(double data rate, DDR)和其他外設(shè)組成。計算設(shè)備包含1個16核 ARMv8 CPU和4個DSP簇。16核 CPU是裁剪版的Phytium FT-2000+Processor[21-22]。CPU和DSP簇之間共享內(nèi)存空間。大容量的片外存儲和片內(nèi)內(nèi)存通過高速網(wǎng)絡(luò)連接。

圖1 原型系統(tǒng)架構(gòu)圖Fig.1 System architecture diagram of prototype system

FT-M7032擁有4個DSP簇,每個簇包含8個DSP核,1個6 MB的片上全局共享存儲(global shared memory,GSM)。GSM片上帶寬大約為307.2 GB/s,內(nèi)部包含4個子通路,可作為數(shù)據(jù)或指令的片上內(nèi)存使用。單個DSP核在1.8 GHz工作主頻下可以提供345.6 GFLOPS的峰值性能。

DSP核主要由標量處理單元(scalar processing unit,SPU)、向量處理單元(vector processing unit,VPU)、直接存儲器(direct memory access,DMA)、取指單元和超長指令字控制器組成。VPU 負責向量計算,主要由16個向量處理部件(vector processing element,VPE)與768 KB向量存儲(array memory,AM)構(gòu)成。每個VPE有64個64 bit的寄存器和3個浮點乘累加(float multiply accumulate, FMAC)單元。16個VPE一次可以處理32個單精度浮點數(shù)據(jù)。AM與向量寄存器之間的帶寬為921.6 GB/s。標量存儲(scalar memory,SM)與寄存器之間的訪問帶寬為28.8 GB/s。AM、SM的數(shù)據(jù)可以通過DMA搬出或搬入。

2 MiniGo算子加速方法

傳統(tǒng)算子加速方法通常具有以下問題:①未對不同尺寸算子進行定制化優(yōu)化,導致資源的浪費;②數(shù)據(jù)在設(shè)備間傳遞消耗大;③沒有考慮異構(gòu)設(shè)備的特性。針對上述問題,提出了一種高效的并行計算策略。在DSP端進行算子計算優(yōu)化,為MiniGo的算子進行定制化匯編實現(xiàn)。結(jié)合原型系統(tǒng)具有異構(gòu)計算設(shè)備、設(shè)備間具有共享內(nèi)存段、MiniGo算法流程的特性實現(xiàn)了異構(gòu)設(shè)備間的高效并行計算。提供了面向TensorFlow的一種類英偉達統(tǒng)一計算架構(gòu)(compute unified device architecture, CUDA)的高性能算子庫,高效調(diào)用上述優(yōu)化的計算。

2.1 DSP端算子計算

FT-M7032的1個DSP簇包含8個DSP核,可以通過DSP核間并行、核內(nèi)并行、DSP指令集并行加速算子計算。結(jié)合性能分析工具,發(fā)現(xiàn)MiniGo應(yīng)用的計算熱點集中在神經(jīng)網(wǎng)絡(luò)推理和訓練過程,即全連接、卷積算子、批量規(guī)一化(batch normalization, BN)和修正線性單元(rectified linear unit, ReLU)等算子。為了降低MiniGo應(yīng)用執(zhí)行時間,針對這些算子進行了匯編優(yōu)化,卸載到DSP中高效執(zhí)行。

本節(jié)中數(shù)據(jù)格式采用TensorFlow默認格式NHWC和NHWK進行說明。其中,I表示輸入張量,W表示權(quán)重張量,O表示輸出張量,N是批大小,H是張量高,W是張量寬,C是輸入張量的通道數(shù),K是輸出張量的通道數(shù)。

2.1.1 全連接算子

針對MiniGo的算子大小、自研系統(tǒng)的特性進行了定制化設(shè)計。

以MiniGo中的FC2為例。原始全連接算子的偽代碼如算法1所示,本文全連接算子的偽代碼如算法2所示。如算法1所示,在原始全連接算子中,內(nèi)存訪問操作數(shù)為4NCK次。其中,NCK為循環(huán)次數(shù),4為矩陣O讀取內(nèi)存操作、計算后存儲到內(nèi)存操作以及IW的內(nèi)存讀取操作。完成一次全連接算子計算操作為NCK次乘累加操作。本文方法通過結(jié)合自研系統(tǒng)的軟硬件特性,設(shè)計出針對性的優(yōu)化方法。分析可并行性:對于前向計算,N維度批次之間無計算相關(guān)性;輸入的一行和權(quán)重的一列做乘累加時,在K維上無計算相關(guān)性;輸入的一行可以進一步劃分為多個塊,并行地與對應(yīng)權(quán)重相乘,保留中間結(jié)果,后續(xù)再累加。原型系統(tǒng)擁有多個DSP核,可以實現(xiàn)N維的并行。原型系統(tǒng)擁有多個VPE和寄存器,可以實現(xiàn)K維的并行、塊劃分的并行和指令向量化寄存器的并行。如算法2所示,在本文方法中,全連接算子的內(nèi)存訪問操作數(shù)為4,分別是IWO的內(nèi)存讀取和O的內(nèi)存寫入操作。最內(nèi)循環(huán)計算是(1,19)和(19,64)的矩陣乘法,使用向量化和寄存器化后將原本的1×19×19×64個乘累加指令縮減為19個。經(jīng)過二次維度拆分并行化、矩陣乘向量化后,原始全連接算子串行的NCK次操作轉(zhuǎn)換為并行的N(C/19)個19次操作。

算法1 原始全連接算子前向計算偽代碼

算法2 本文方法全連接算子前向計算偽代碼Alg.2 Pseudo code for this method′s fully connected operator in forward calculation

本文方法在片上的具體映射如圖2所示,流程為:將I[N][C]在N維進行劃分,劃分后的矩陣以標量的方式從DDR加載到DSP核的SM中。對W[C][K]進行廣播,以向量的形式從DDR加載到DSP核內(nèi)的AM中。對SM中的數(shù)據(jù)根據(jù)塊尺寸進行劃分,劃分后一組數(shù)據(jù)大小為(1,19)存入寄存器R中,后續(xù)廣播到向量寄存器(vecter register, VR)中。將一組數(shù)據(jù)與權(quán)重進行乘累加,得到一組結(jié)果放入VR中等待累加,如此循環(huán)19次完成N維上的1組數(shù)據(jù),放入AM中,后續(xù)再通過DMA傳回DDR。如此在N維循環(huán)8次,得到全連接算子前向計算的結(jié)果O[N][K]。反向過程類似,在N維并行地在多核計算。每個核中處理一組數(shù)據(jù),循環(huán)19次乘累加。在最后一次累加后將結(jié)果傳入GSM中。由此得到8組數(shù)據(jù),對位相加得到權(quán)重的更新值。

圖2 全連接計算片上映射示意圖Fig.2 Schematic diagram of on-chip mapping for fully connected computation

2.1.2 卷積算子

卷積是MiniGo中最耗資源的運算,將卷積計算卸載到DSP進行,能夠有效加速計算。常用的卷積計算并行方案有im2col、傅里葉卷積、winograd、直接卷積。im2col會導致輸入矩陣膨脹,惡化訪存。傅里葉卷積增大了輸入和卷積核大小,從而增加了內(nèi)存帶寬的需求。傅里葉卷積計算更復雜,涉及復數(shù)乘法,不適用于小卷積核。winograd中轉(zhuǎn)換映射的矩陣越大,計算精度的損失越大。結(jié)合DSP結(jié)構(gòu)設(shè)計和MiniGo網(wǎng)絡(luò)設(shè)計,本文方法選擇了直接卷積的實現(xiàn)方法。

直接卷積涉及輸入特征圖和核權(quán)值的三維乘積累加運算,計算過程如圖3所示。其中,圖3(a)為前向計算過程,圖3(b)為反向計算權(quán)重值過程。根據(jù)卷積計算的特性,分析可并行性。通過分析前向計算過程可知,N維度批次之間無計算相關(guān)性??衫眠@個特點實現(xiàn)DSP內(nèi)多核并行。對于每個批次為N/8的直接卷積,輸出通道K維度之間無計算相關(guān)性,可實現(xiàn)DSP計算單元的硬件并行。對反向計算過程進行分析。根據(jù)對其計算過程進行拆分,可以分為2個部分:①批次之間無計算相關(guān)性的,利用DSP多核、核內(nèi)多計算單元并行;②批次之間存在數(shù)據(jù)交互的,則使用直接累加歸約和二分累加歸約。

(a) 前向計算過程(a) Forward computation process

(b) 反向計算過程(b) Backward computation process

MiniGo中的卷積算子根據(jù)數(shù)據(jù)規(guī)??煞譃镃ONV3_INIT,CONV3_RES,CONV1_POLICY,CONV1_VALUE。以CONV3_INIT為例,卷積前向計算在原型系統(tǒng)中的偽代碼如算法3所示。在N維上劃分I,將數(shù)據(jù)均勻分到8個核上并行計算。復制8份W廣播到各個核內(nèi)的AM中。在K維和C維上做循環(huán),將一組大小為(3,3)的W放入VR中等待計算。在H和W維做循環(huán),確定I的中心點,將中心點坐標放入R1和R2中。判斷當前中心點是不是邊界,如果是,則進行padding。取中心點周圍9個數(shù)據(jù),存入VR中。

在VR中進行矩陣乘,得到O的1個值。將輸出從VR存入GSM。如此進行循環(huán),得到O。

把O通過DMA輸出到DDR中。分析上述計算過程的并行性。在算法3的步驟2利用8個核在N維上實現(xiàn)并行。在步驟5利用多VPE和多寄存器,在K維實現(xiàn)并行。在步驟11,乘累加需要6個指令周期,跳轉(zhuǎn)指令需要7個指令周期,同時進行這2個指令,從而覆蓋部分進行邊界判斷的消耗。本文方法的卷積算子在匯編過程中利用多核、多VPE、多寄存器、指令周期重疊實現(xiàn)了并行計算。

算法3 CONV3_INIT前向計算偽代碼Alg.3 Pseudo code for CONV3_INIT operator in forward calculation

2.1.3 BN+ReLU

BN有助于訓練更快地收斂并防止網(wǎng)絡(luò)過擬合。對于1個批次的輸入X=[x(1),x(2),…,x(m)],μ是X的均值,δ2是X的方差。輸出Y=[y(1),y(2),…,y(m)]。BN前向計算公式為:

(1)

式中,γ和β分別是通道尺度和偏差。在MiniGo中激活函數(shù)是ReLU,如式(2)所示。

(2)

其中,a等于0。當x大于0時,不變;當x小于等于0時,x置0。

本文方法將BN和ReLU合并為1個算子,能夠有效減少數(shù)據(jù)在片上的頻繁讀寫。BN+ReLU計算的輸入數(shù)據(jù)大小為NHWC。在N維可以使用多核并行計算。N維之間存在數(shù)據(jù)交互,使用直接累加歸約和二分累加歸約。單個DSP核內(nèi),在C維進行VR級并行。C是64,是VR處理數(shù)據(jù)能力的倍數(shù)。將單核內(nèi)拆分后的數(shù)據(jù)組累加后保存在AM中,再把每個核的累加結(jié)果存儲到GSM中。在BN計算后進行ReLU計算。對于正向計算,直接對BN的輸出進行判定,當前值小于0則賦值為0,反之不變。反向計算時,如果當前位置的正向ReLU的結(jié)果為0,則將該位置上對應(yīng)的傳入梯度賦值為0,反之不變。

2.2 異構(gòu)設(shè)備間并行

原型系統(tǒng)由1個16核CPU、4個DSP簇、1個異構(gòu)設(shè)備共享的DDR構(gòu)成CPU-DSP異構(gòu)計算節(jié)點,如圖1所示。因此,可以依托CPU-DSP異構(gòu)計算整合計算資源完成一個任務(wù),以適配MiniGo的復雜計算需求。

2.2.1 流水并行

異構(gòu)設(shè)備流水并行操作重疊了CPU數(shù)據(jù)處理和DSP算子計算時間。CPU數(shù)據(jù)處理包括網(wǎng)絡(luò)構(gòu)建、節(jié)點間通信、規(guī)約計算、蒙特卡羅樹搜索。以自我博弈任務(wù)為例,智能體下一步行動根據(jù)蒙特卡羅樹搜索結(jié)果確定。蒙特卡羅樹搜索分為選擇、擴展、推理、回溯,其中選擇和推理需要訓練模型的推理結(jié)果。因此,本文方法將復雜的計算任務(wù)分割,將網(wǎng)絡(luò)算子計算卸載到DSP進行,其余在CPU進行,實現(xiàn)了異構(gòu)設(shè)備間的流水并行。流程為:DSP完成算子計算后將結(jié)果返回給CPU進行蒙特卡羅樹搜索。CPU進行蒙特卡羅樹搜索的同時,DSP開始下一批次的算子計算。

2.2.2 共享內(nèi)存編碼

在CPU-GPU異構(gòu)計算系統(tǒng)中,CPU側(cè)內(nèi)存數(shù)據(jù)首先通過CPU調(diào)度經(jīng)過總線和接口標準(peripheral component interface express, PCIE)總線傳輸?shù)紾PU側(cè)顯存中。GPU計算后,將結(jié)果從顯存再經(jīng)PCIE總線傳輸?shù)絻?nèi)存,完成一次計算卸載。為了減少數(shù)據(jù)搬運,TensorFlow等框架一般會把所有的算子參數(shù)都放到顯存,只在數(shù)據(jù)預取有一次CPU-GPU的搬運。但對于增量式搬運,則需要更多的CPU-GPU數(shù)據(jù)搬運,或者通過重疊減少數(shù)據(jù)搬運的影響。原型系統(tǒng)中,DDR中存在CPU-DSP共享的物理地址空間。因此,根據(jù)原型系統(tǒng)這一特性設(shè)計了共享內(nèi)存編程。張量中權(quán)值變量、輸入輸出等內(nèi)存管理全周期都在共享物理地址空間,既無數(shù)據(jù)搬運的問題,也無復雜的流水調(diào)度重疊通信和計算。根據(jù)原型系統(tǒng)的共享內(nèi)存體系結(jié)構(gòu)設(shè)計了共享內(nèi)存編碼模式。對于整個神經(jīng)網(wǎng)絡(luò)的前向、反向計算過程,可以減少數(shù)據(jù)在CPU和DSP之間的拷貝,從而減少了計算時間。

2.2.3 高性能算子庫

為了讓TensorFlow等深度學習框架使用DSP實現(xiàn)高性能的神經(jīng)網(wǎng)絡(luò)推理和訓練,設(shè)計了類英偉達CUDA的高性能算子庫,如圖4所示。高性能算子庫包含了DSP驅(qū)動和CPU-DSP異構(gòu)執(zhí)行引擎。高性能算子庫將優(yōu)化后的底層算子實現(xiàn)封裝,給TensorFlow等深度學習框架提供統(tǒng)一的接口,供上層應(yīng)用靈活使用。如圖4所示,左邊是調(diào)用TensorFlow庫實現(xiàn)網(wǎng)絡(luò)構(gòu)建,右邊是調(diào)用本文方法算子庫實現(xiàn)網(wǎng)絡(luò)構(gòu)建。

圖4 算子庫調(diào)用示例Fig.4 Example of calling the operator library

3 實驗

本節(jié)通過實驗測試本文方法的性能。如無特別說明,輸入數(shù)據(jù)的大小均為(96,19,19,13),數(shù)據(jù)類型為單精度浮點數(shù)。

3.1 DSP端算子優(yōu)化

3.1.1 卸載算子計算

在本節(jié)對比了DSP端算子優(yōu)化前后性能。優(yōu)化前實驗設(shè)置為使用TensorFlow算子庫在純CPU上進行計算。根據(jù)使用核數(shù)的不同分別記為CPU-1、CPU-4、CPU-8、CPU-16。優(yōu)化后實驗使用8個DSP核進行計算,記為DSP-8。

實驗結(jié)果如圖5所示。算子優(yōu)化后各個算子計算速度有不同程度的提升。其中CONV3_RES的計算速度提升最為明顯。以CPU-8作為Baseline對比DSP端算子計算優(yōu)化性能。卷積算子的計算速度均有較大提升。CONV3_RES的一次前向計算耗時從38.38 ms降至4.02 ms,反向計算耗時從178.05 ms降至4.2 ms。加速比分別為9.54和42.29。CONV3_INIT的前后向加速比分別是2.31和11.53。CONV1_POLICY的前后向加速比分別是6.19和11.53。CONV1_VALUE的前后向加速比分別是1.94和9.63。FC性能提升不理想。原因在于MiniGo中FC2維度尺寸小,在DSP上計算快,申請內(nèi)存和數(shù)據(jù)搬運操作相對慢。

(a) CONV3_INIT

(b) CONV3_RES

(c) CONV1_POLICY

(d) CONV1_VALUE

(e) BN+ReLU

(f) FC1

(g) FC2

(h) FC3

3.1.2 擴展性

擴展性是驗證并行計算方法性能的有效方法。擴展性為固定計算規(guī)模、增加計算資源得到的并行效率。在本節(jié)討論了算子計算優(yōu)化后的擴展性。實驗設(shè)置為,固定使用的DSP核數(shù)為8,輸入數(shù)據(jù)的批大小,分別在數(shù)據(jù)批大小為96和768上進行訓練,記錄1步中各算子耗時。重復進行多組實驗。該實驗以在單核計算的算子計算耗時為基準,記錄在8核計算的算子計算耗時相對于基準的加速比。實驗結(jié)果顯示,CONV3_RES算子多核并行后加速比提升最大。當批大小分別是96和768時,CONV3_RES的加速比分別是16.22和24.69。CONV3_INIT的加速比分別是4.40和4.44。BN+ReLU也有明顯的速度提升。FC3加速比提升最小。原因是MiniGo中FC算子計算量小。受限于帶寬,內(nèi)存申請、數(shù)據(jù)傳輸時間大于計算時間,導致收益不高。實驗結(jié)果證明,實現(xiàn)算子的多核計算能有效提升計算速度。當一次計算數(shù)據(jù)規(guī)模擴大8倍時,能保持大約一致的加速比。

3.1.3 計算效率

為了驗證所提方法在自研原型系統(tǒng)上的有效性,以計算量最大的CONV3_RES為例,分析了其計算量、計算性能和計算效率,如表2所示。

由表2結(jié)果可知,在相對小的計算量的情況下,計算效率達到23%左右。主要原因是計算量小,計算時間相對于數(shù)據(jù)傳輸時間占比降低。隨著計算量增加,本文實現(xiàn)的計算性能和效率在提升。說明本文方法有效利用了硬件結(jié)構(gòu)特點,能夠有效發(fā)揮其計算性能。

表2 DSP-8下的CONV3_RES的 計算量、計算性能、計算效率

3.2 異構(gòu)設(shè)備間的共享內(nèi)存編碼優(yōu)化

本節(jié)的基準測試記為DSP-SMP。使用TensorFlow框架的默認異構(gòu)計算接口,數(shù)據(jù)在CPU和DSP之間顯式搬運,在DSP上進行MiniGo訓練。優(yōu)化后實驗記為DSP+SMP,使用共享內(nèi)存編碼優(yōu)化后,在DSP上進行MiniGo訓練。采用算子計算時間來衡量共享內(nèi)存編程優(yōu)化帶來的性能提升。

表3和表4展示了共享內(nèi)存編碼優(yōu)化前后各個算子計算時間對比。各算子在前向和反向計算中,共享內(nèi)存編碼均表現(xiàn)出一定的性能提升。其中,卷積計算的速度提升最為明顯。CONV3_INIT反向計算的加速比是11.88。CONV3_RES前向計算耗時從16.85 ms降到4.02 ms,加速比是4.19。相應(yīng)地,反向計算平均耗時從35.59 ms降到4.21 ms,加速比是8.45。BN+ReLU前向計算和后向計算的加速比分別是4.42和5.56。從實驗結(jié)果可知,共享內(nèi)存編碼大大地縮減了計算時間。

表3 共享內(nèi)存編碼優(yōu)化前后前向計算平均時間對比Tab.3 Comparison of forward calculation time before and after shared memory programming optimization

表4 共享內(nèi)存編碼優(yōu)化前后反向計算平均時間對比Tab.4 Comparison of backward calculation time before and after shared memory programming optimization

3.3 耗時與加速比

在本節(jié)中,展示了本文方法在訓練階段和自博弈階段的整體加速效果。Baseline實驗為CPU-8,設(shè)置見3.1.1節(jié)。

智能體訓練階段和自博弈階段耗時對比如表5和表6所示。在訓練階段中,1步中前向計算總耗時從606.18 ms降至236.79 ms,反向計算總耗時從1 642.00 ms降至350.62 ms。加速比分別為2.56和4.68。1步訓練時間從2 248.18 ms降為587.41 ms,加速比為3.83。由于1次對局中行動長度波動較大,在自博弈階段選取前瞻次數(shù)為10 000進行分析。在CPU-8中執(zhí)行10 000次前瞻的自博弈推理時間為1 185.87 s,在DSP-8中為816.48 s。DSP-8在自博弈推理階段的加速比達1.5。綜上,本文方法能夠?qū)崿F(xiàn)MiniGo算子加速。

表5 1步內(nèi)訓練耗時對比

表6 自博弈推理耗時對比

4 結(jié)論

本文結(jié)合MiniGo計算過程特點和高性能異構(gòu)加速器特性,主要針對傳統(tǒng)算子加速方法沒有實現(xiàn)定制化匯編導致的資源浪費、片上數(shù)據(jù)傳輸消耗大和異構(gòu)計算資源分配的問題進行了優(yōu)化。首先,針對算子計算-訪存特性和計算平臺資源定制了算子計算,在多核、多VPE、指令集方面實現(xiàn)了并行計算。然后,結(jié)合計算平臺擁有設(shè)備間共享存儲段的特性,設(shè)計了共享內(nèi)存編碼模式,減少數(shù)據(jù)傳輸消耗。最后,結(jié)合算法計算流程在CPU-DSP間實現(xiàn)了流水并行,合理分配任務(wù)和資源。同時,面向TensorFlow實現(xiàn)了一個易于使用的高性能算子庫。實驗部分對比了本文方法的算子計算在多核并行化的性能提升、共享內(nèi)存編碼模式帶來的性能提升。本文方法實現(xiàn)了面向高性能異構(gòu)加速器的MiniGo算子加速。

猜你喜歡
共享內(nèi)存加速器異構(gòu)
輪滑加速器
化學工業(yè)的“加速器”
試論同課異構(gòu)之“同”與“異”
全民小康路上的“加速器”
少先隊活動(2021年6期)2021-07-22 08:44:24
通過QT實現(xiàn)進程間的通信
基于PCI總線的多處理器協(xié)同機制研究
科技風(2017年20期)2017-07-10 18:56:06
overlay SDN實現(xiàn)異構(gòu)兼容的關(guān)鍵技術(shù)
電信科學(2016年11期)2016-11-23 05:07:56
等待“加速器”
LTE異構(gòu)網(wǎng)技術(shù)與組網(wǎng)研究
在新興異構(gòu)SoCs上集成多種系統(tǒng)
天峻县| 昭平县| 和静县| 泽库县| 鄯善县| 淮滨县| 塘沽区| 电白县| 新河县| 丹寨县| 庆安县| 玛沁县| 射阳县| 上杭县| 舞钢市| 鹤峰县| 施秉县| 华亭县| 女性| 娱乐| 锡林郭勒盟| 漳平市| 增城市| 吉木萨尔县| 怀仁县| 三江| 合作市| 都江堰市| 秭归县| 额尔古纳市| 鸡泽县| 琼海市| 万安县| 博客| 鄂托克旗| 金沙县| 崇礼县| 义马市| 韶关市| 上蔡县| 闽清县|