鳳 雷,王賓濤,劉 冰,李喜鵬
(哈爾濱工業(yè)大學 電子與信息工程學院,哈爾濱 150001)
強化學習(RL,reinforcement learning)是指從環(huán)境狀態(tài)到動作映射的學習,以使動作從環(huán)境中獲得累計獎賞值最大[1],經(jīng)常被用于序貫決策層問題。與監(jiān)督學習[2]不同,RL算法主要強調智能體與環(huán)境的交互,在二者的交互的過程中,環(huán)境會根據(jù)智能體所處的狀態(tài)以及所決策的動作給予其一定的獎懲信號,智能體則會根據(jù)所獲得的獎懲信號對自身的決策策略進行優(yōu)化,從而最大化決策過程中所獲得的累計獎勵。
2013年,DeepMind團隊將深度學習中的卷積神經(jīng)網(wǎng)絡(CNN,convolutional neural network)[3]算法與傳統(tǒng)強化學習Q學習[4]相結合,設計了DQN算法[5],在雅達利游戲平臺中取得了比人類玩家更高的游戲分數(shù),從此掀起了一股深度強化學習[6]的研究浪潮。后續(xù)DeepMind團隊基于DRL算法所研發(fā)的AlphaGo[7]和AlphaGo Zero[8]在機器博弈領域取得了巨大成功,更是成為了人工智能領域的里程碑事件。目前,DRL除了在游戲中進行應用外,直接在邊緣設備上實現(xiàn)DRL同樣有巨大的應用價值和廣泛的應用前景,例如為充當巡邏機器人的無人機 (UAV, unmanned aerial vehicle)[9]提供自主避障和航路規(guī)劃的能力,為無人車輛[10-11]提供自主駕駛分析決策能力。
DQN算法作為DRL領域的開山之作,被后續(xù)許多的DRL算法所借鑒。其解決了傳統(tǒng)Q學習的“維度災難”問題,采用多層神經(jīng)網(wǎng)絡來完成值函數(shù)的非線性逼近功能,替代傳統(tǒng)的Q表查詢決策方式,將神經(jīng)網(wǎng)絡的感知能力和強化學習的決策能力結合,實現(xiàn)端到端的感知與決策。在智能體與環(huán)境交互的過程中,同時存在神經(jīng)網(wǎng)絡的推理與訓練兩類運算,這兩類運算都具備計算密集型的特點,需要較強的算力才能保證算法的實時性。
DQN計算密集型的特點,對于計算資源和功耗都受限的邊緣設備而言,直接實現(xiàn)深度強化學習算法存在一定的挑戰(zhàn)。這種挑戰(zhàn)主要來自于兩方面:一方面是DQN算法本身計算密集型特點和計算數(shù)據(jù)之間較強的依賴關系;另一方面是大多數(shù)嵌入式計算平臺本身單指令單數(shù)據(jù)流計算架構的局限性,無法支持面向DQN的高性能計算。這導致有關在嵌入式設備部署DQN算法的研究進展十分緩慢,相關研究現(xiàn)狀在1.2節(jié)中得到闡述。面向邊緣在線決策應用,本文提出一種基于FPGA平臺的DQN算法實現(xiàn)方法,可以在FPGA平臺上完成DQN算法的推理和訓練。主要工作如下:
1)提出了一種基于FPGA平臺的DQN算法的硬件實現(xiàn)架構,架構中的加速器IP核采用流式架構設計,可以靈活配置算法的訓練超參數(shù)。
2)在FPGA平臺計算資源和存儲資源的約束下,提出了一種設計空間的探索方法。通過定量分析DQN算法實現(xiàn)所需的存儲資源和計算資源,獲得DQN算法在FPGA中進行加速部署時每一層的并行計算參數(shù)。
3)面向典型應用Cartpole搭建了應用驗證平臺, 在FPGA平臺上進行了設計的功能驗證和性能測試,并在網(wǎng)絡的訓練時間和功耗方面同CPU平臺和GPU平臺進行了實驗對比。
RL的基本模型可以用圖1表示,通過智能體與環(huán)境的信息交互,實現(xiàn)決策功能。整個過程可用四元組描述,式中A為智能體動作集合;S為智能體感知的環(huán)境信息;R為智能體得到的獎勵或懲罰;P為智能體交互的環(huán)境。
圖1 強化學習基本模型
Q學習算法[4]作為一種經(jīng)典的RL算法,使用Q查詢表存儲各個動作對應的Q值,通過查詢每個動作的Q值,指導智能體做出相應決策。受限于計算機存儲的限制,Q表在處理高維狀態(tài)數(shù)據(jù)方面表現(xiàn)不佳[12]。
(1)
近年來,機器學習在嵌入式邊緣設備上的加速實現(xiàn)[14],已經(jīng)成為人工智能領域[15]的熱門話題,F(xiàn)PGA由于其低功耗、高能效和可重構的特點,在硬件加速領域[16]備受青睞,目前最先進的機器學習加速器大多支持監(jiān)督學習,如CNN[17]、循環(huán)神經(jīng)網(wǎng)路(RNN,recurrent neural network)[18]等,但對深度強化學習的硬件加速目前還處于剛剛興起的狀態(tài)。
Shengjia S等人在Stratix系列FPGA上對TPRO算法(TRPO, trust region policy optimization)進行了硬件加速以應用于機器人控制應用[19],后續(xù)提出了一種設計空間探索方法對TRPO 算法加速進行進一步的優(yōu)化[20]。S.Jiang等人采用單引擎架構,在Altera Arria 10上實現(xiàn)了Deep Q-Learing算法的硬件加速[21]。但是上述研究,在計算架構和設計空間探索等方面仍有很大提升空間。
如圖2所示,總體硬件架構主要包括外部存儲器(DDR, direct digital radiography)、處理單元(PS,processing system)、可編程邏輯部分(PL, processing logic)的加速器和片內外總線互聯(lián)。我們通過PS和PL協(xié)同工作來高效的完成DQN算法的計算,其中PS部分主要負責與環(huán)境進行交互,獎勵函數(shù)的計算,DDR中訓練經(jīng)驗池的維護,以及對PL進行超參數(shù)和工作模式的配置;PL部分定制化設計DQN算法加速器,用于實現(xiàn)算法中神經(jīng)網(wǎng)絡的前向推理、誤差反向傳播和權值更新等計算密集部分,PL部分加速器結構設計、加速算子設計及相關設計空間探索方法是研究的核心。
圖2 總體硬件架構
整個加速器采用流式架構,針對DQN算法的各個模塊進行硬件定制化設計。DQN算法加速器IP核的結構如圖3所示,定制化設計了Target_Q模塊、Current_Q模塊、損失函數(shù)計算模塊、權值更新和替換模塊、控制模塊和參數(shù)存儲單元。其中Target_Q模塊用于完成Target_Q網(wǎng)絡的前向推理;Current_Q模塊用于完成Current_Q網(wǎng)絡的前向推理和反向傳播;控制模塊用于對加速器的工作模式和訓練參數(shù)進配置,使得各個模塊能夠協(xié)同工作;權值更新與替換模塊用于實現(xiàn)Current_Q網(wǎng)絡的權值更新和Target_Q網(wǎng)絡的權值替換;損失計算模塊主要用于實現(xiàn)損失函數(shù)的計算。
圖3 DQN加速器結構圖
加速器存在兩種工作模式:一種是直接利用學習好的權值參數(shù),與環(huán)境交互后,智能體只做出決策但不進行學習;另一種是做出決策后智能體會根據(jù)環(huán)境給予的獎勵反饋進行學習,調整自身權重參數(shù)。
Target_Q模塊和Current_Q模塊是整個硬件加速過程中的設計重點,在本設計中,Target_Q模塊和Current_Q模塊均由加速算子(VMPU, vector matrix processing unit)通過流式先入先出寄存器(FIFO, first in first out)級聯(lián)組成,加速算子的具體細節(jié)將會在2.3節(jié)中介紹,同時將在2.4節(jié)介紹本設計的設計空間探索方法。
DQN算法中的神經(jīng)網(wǎng)絡選擇多層感知機,針對多層感知機中向量矩陣乘法計算密集型的特點,以及前向推理和反向傳播計算過程間的數(shù)據(jù)依賴,基于FPGA硬件資源的特點,設計了單指令多數(shù)據(jù)(SIMD, single instruction multiple data)運算和多處理單元(PE,processing element)兩種加速模式,其設計示意圖如圖4所示。SIMD主要用于完成CNN中的層累加單元,即通過在FPGA內部定制化設計SIMD,通過硬件實現(xiàn)基礎的層累加模塊,完成基于指令集的硬件加速;PE主要用于實現(xiàn)多個SIMD的并行計算;在單個PE內實SIMD并行的同時,VMPU單元內還實現(xiàn)了多個PE的并行計算,以達到最大化硬件加速性能的目的。
圖4 VMPU設計示意圖
VMPU的輸入是上一個計算單元的輸出或者最原始的輸入,經(jīng)過FIFO寄存器被存儲在VMPU內置輸入向量寄存器,用于神經(jīng)網(wǎng)絡卷積計算的權重已經(jīng)部署到FPGA內部,此使輸入向量寄存器的元素與已經(jīng)部署好的權重展開并行計算,并將結果放到輸出向量寄存器內,進而經(jīng)過激活、矩陣求導等操作后,作為輸出被傳送到下一計算單元。
在FPGA實現(xiàn)VMPU的過程中,前向推理與反向訓練的計算過程之間存在相關度較高的依賴關系,為了解決DQN中層間推理與訓練的數(shù)據(jù)依賴關系,同時實現(xiàn)FPGA并行計算,需要在FPGA片上對權重矩陣進行分區(qū)存儲,基于計算過程中權值矩陣維度設計了兩類VMPU,分別是以列為主的VMPU(A)和以行為主的VMPU(B),兩類VMPU的存儲方式劃分示意如圖5所示。在VMPU(A)中,SIMD并行對應矩陣的行維度,PE并行對應矩陣的列維度;由于兩類VMPU的權重矩陣存儲方式互為轉置,在VMPU(B)中,并行計算對應的維度與A模式相反。在部署DQN網(wǎng)絡時,對于奇數(shù)層而言,前向推理時使用VMPU(A),反向傳播時使用VMPU(B);對于偶數(shù)層而言,前向推理時采用VMPU(B),反向傳播時采用VMPU(A)。
圖5 片上權值存儲方式
如圖6所示,以VMPU(A)為例,具體說明矩陣加速算子的計算過程。假設網(wǎng)絡第一層的神經(jīng)元個數(shù)為8,第二層的神經(jīng)元個數(shù)為4,在進行前向推理時,相當于執(zhí)行一個1*8的向量與8*4的矩陣的乘法。在VMPU(A)中,如圖6(a)所示,假定SIMD取4,PE取2,則行維度的折疊因子SF為2,則列維度的折疊因子PF為2,折疊因子的計算方式將在2.4節(jié)闡述。由SF和PF可算得總折疊因子為4,即循環(huán)4次便可完成整個向量矩陣乘法的計算。在第一次循環(huán)中,如圖6(b)所示,首先計算輸入向量前4個元素a1-a4與權值矩陣對應元素的乘積累加,生成c1和c2的中間結果,第二個循環(huán)繼續(xù)計算權值矩陣當前列未進行計算的元素,生成的乘積累加結果與之前的中間結果相加,生成c1和c2的最終結果,然后加上偏置,進行激活函數(shù)的計算。同時,激活函數(shù)的梯度也將在此時計算,并存儲在片上以供反向傳播使用。最后,將兩個最終計算結果c1和c2流入FIFO中。
圖6 VMPU(A)計算示意圖
VMPU(A)將兩個最終結果流入FIFO后,后續(xù)連接的VMPU(B)將在此刻收到啟動信號,從FIFO中取出上一層的輸出數(shù)據(jù),存入輸入寄存器中,開始第二層的計算。與VMPU(A)類似,VMPU(B)的內部同樣為乘累加樹結構,但其計算邏輯是以行為主,每完成一次循環(huán),生成的都是中間結果,直到最后一次循環(huán)結束,VMPU(B)將會累加出最終的計算結果。通過選取合適的并行參數(shù),便能讓級聯(lián)的VMPU(A)和VMPU(B)之間形成流水,只要VMPU(A)的計算不中斷,每隔一段時間,VMPU(B)便會接收來自VMPU(A)的數(shù)據(jù)并進行下一層的計算,兩層之間形成數(shù)據(jù)流水后,兩層整體的計算時間大概等于VMPU(A)的計算時間。
為了滿足DQN算法特性和FPGA硬件平臺資源約束,確定網(wǎng)絡部署的并行計算參數(shù),對設計空間探索方法進行研究是十分必要的。不同于研究[21]中僅考慮了DSP資源,本設計在建立資源模型的同時考慮了DSP資源和BRAM資源,達到對計算資源和存儲資源設計空間探索的目的。
Target Q模塊和Current Q模塊的計算過程最為耗時,對于以上兩個模塊,其內部的VMPU單元采用A-B-A-B的方式級聯(lián)而成,通過對總循環(huán)次數(shù)FoldCycle進行建模,完成設計空間探索問題中性能模型的尋優(yōu),此處FoldCycle可用于表征VMPU模塊的計算時間。如公式(2)所示,設計空間探索問題,在軟硬件資源約束的情況下,尋求最小的總循環(huán)展開次數(shù)。本文首先將先對VMPU單元的A模式和B模式分別進行建模,然后再對整個系統(tǒng)進行建模。
(2)
式(2)中,FoldCycle代表總循環(huán)展開次數(shù);P代表循環(huán)展開參數(shù)的集合,該集合可用VMPU中的循環(huán)展開參數(shù)PE和SIMD表示;LayerSizei代表神經(jīng)網(wǎng)絡第i層的大??;DSPtotal、BRAMtotal代表設計實際消耗的總的計算資源和存儲資源個數(shù);DSPFPGA_Limit、BRAMFPGA_Limit代表FPGA平臺的計算資源和存儲資源的限制。
首先對VMPU(A)進行分析,在向量矩陣乘法中,使用RowSize表示權重矩陣的行維度大小,SIMDA為VMPU(A)的行循環(huán)展開參數(shù),sfA為其對應的行并行折疊因子;使用ColSize表示權重矩陣的列維度大小,PEA為VMPU(A)的列循環(huán)展開參數(shù),pfA為其對應的列并行折疊因子;則VMPU(A)的總循環(huán)展開因子FoldCycleA為sfA和pfA的乘積,相關計算關系可用公式(3)~(5)表示:
sfA=RowSize/SIMDA
(3)
pfA=ColSize/PEA
(4)
FoldCycleA=sfA*pfA
(5)
然后對VMPU(B)進行分析,在向量矩陣乘法中,同樣使用RowSize表示權重矩陣的行維度大小,PEB為VMPU(B)的行循環(huán)展開參數(shù),pfB為其對應的行并行折疊因子;使用ColSize表示權重矩陣的列維度大小,SIMDB為VMPU(B)的列循環(huán)展開參數(shù),sfB為其對應的列并行折疊因子;則VMPU(B)的總循環(huán)展開因子FoldCycleB為pfB和sfB的乘積,相關計算關系可用公式(6)~(8)表示:
pfB=RowSize/PEB
(6)
sfB=ColSize/SIMDB
(7)
FoldCycleA=pfA*sfA
(8)
采用A-B級聯(lián)模式,可以實現(xiàn)層間的流水計算與并行計算,進而增加硬件加速的性能。為了實現(xiàn)A-B級聯(lián)模式,級聯(lián)的兩層應當滿足公式(9)的要求,這樣可以解決VMPU(B)對VMPU(A)的數(shù)據(jù)依賴。當VMPU(A)與VMPU(B)之間形成層間的計算流水后,A模式的計算時間便能掩蓋B模式的計算時間,如公式(10)所示,式(11)中FoldCycleAB表示級聯(lián)的兩層計算所需的循環(huán)數(shù)。
sfA≥sfB
(9)
FoldCycleAB=FoldCycleA
(10)
在本設計中,我們實現(xiàn)了3個層次的流水以及并行設計,第一個是VMPU內部的乘積累加流水以及多個乘累加樹的并行;第二個是VMPU通過A-B級聯(lián)時,形成層與層之間的計算流水;第三個是在訓練時,Target_Q模塊與Current_Q模塊之間形成并行計算,Target_Q模塊的計算時間將被Current_Q模塊的計算時間掩蓋。因此,整個系統(tǒng)的時間消耗主要由Current_Q模塊決定。系統(tǒng)處理決策樣本所用的循環(huán)數(shù)如公式(11)所示,式中FoldCycleFP表示前向推理在Current_Q模塊所消耗的時間,F(xiàn)oldCycleBP表示反向傳播在Current_Q模塊所消耗的時間。
FoldCycle=FoldCycleFP+FoldCycleBP
(11)
除運行時間參數(shù)進行建模外,設計還對DSP計算資源和BRAM存儲資源進行建模。VMPU中DSP資源的消耗量與流水計算的啟動間隔(II,initiation interval)有關,當II為1時,消耗的DSP資源最多,當II大于1時,VMPU將對DSP資源進行復用,所消耗的DSP資源如式(12)和(13)所示,式中常系數(shù)5表示浮點型層累加單元所消耗的最小DSP個數(shù)。設計采用了FPGA空間換取時間的并行加速思想,存儲單元采用BRAM實現(xiàn),其使用數(shù)量和加速結構有關。算子并行度為SIMD*PE,則需要2*SIMD*PE個BRAM單元來存儲輸入向量和權重,同時需要PE個BRAM來存儲偏置變量。故對于VMPU中BRAM資源的消耗可用公式(14)和(15)表示:
DSPA=ceil((SIMDA/IIA)*PEA)*5
(12)
DSPB=ceil((SIMDB/IIB)*PEB)*5
(13)
BRAMA=(SIMDA*PEA+PEA)*2
(14)
BRAMB=(SIMDB*PEB+PEB)*2
(15)
本設計中消耗BRAM資源和DSP資源的主要模塊為Target_Q模塊、Current_Q模塊和權值更新與替換模塊,因此,可以按照公式(16)估計系統(tǒng)相關資源消耗的總體情況。
BRAM=Target_QBRAM+Current_QBRAM+UpdateBRAM
DSP=Target_QDSP+Current_QDSP+UpdateDSP
(16)
使用OPEN AI Gym提供的Cartpole環(huán)境對設計進行測試,Cartpole游戲環(huán)境如圖7所示。 CartPole是一個非常經(jīng)典的車桿游戲,游戲里面有一個小車,車上有豎著一根可以旋轉的桿子,每回合中車桿的初始狀態(tài)都會有所不同,小車需要左右移動來保持桿子豎直。為了保證游戲繼續(xù)進行,需要滿足以下兩個條件:
圖7 Cartpole應用
1)桿子傾斜的角度φ不能大于15°.
2)小車移動的位置x需保持在一定范圍內(±2.4個單位長度)。
本文所搭建的應用驗證平臺如圖8所示,用于對設計進行功能驗證和性能分析。應用驗證平臺分為兩個部分,分別是PC機和ZYNQ7100平臺。我們在ZYNQ的ARM端搭建了Linux操作系統(tǒng)并編寫了Cartpole應用程序,在PC機上運行gym中的Cartpole環(huán)境,邊緣側的ZYNQ與PC機中的環(huán)境通過網(wǎng)口進行通信,以模擬智能體與環(huán)境的交互過程。訓練開始后,ZYNQ將會向PC機中的環(huán)境傳遞動作信息,環(huán)境收到信息會后向ZYNQ反饋執(zhí)行動作后的獎勵、下一刻的狀態(tài)信息和當前回合是否結束的標志。
圖8 Cartpole應用驗證平臺
我們使用含有一個隱藏層的多層感知機作為DQN算法的基礎網(wǎng)絡,來進行Cartpole游戲的控制,網(wǎng)絡的結構為4-320-2。針對三層的感知機網(wǎng)絡,可以使用4個VMPU進行A-B級聯(lián)完成Current_Q模塊的搭建,使用2個VMPU完成Target_Q模塊的搭建。根據(jù)本文所提的設計空間探索方法,對Cartpole應用中DQN網(wǎng)絡在ZYNQ 7100上的部署實現(xiàn)進行尋優(yōu),求得各個單元的循環(huán)展開參數(shù)大小:SIMDA=4,PEA=PEB=32,SIMDB=2。
FPGA中加速器部分的設計使用賽靈思公司的Vivado HLS(v2018.3)開發(fā)工具,表1為Cartpole應用加速器的資源使用情況,從表中可以看出,通過設計空間探索預估的BRAM和DSP資源與實際消耗的相差無幾,稍微的誤差存在于預估過程未加入損失計算單元消耗的相關資源。通過對資源利用率的觀察,證明了所提出的設計空間探索方法的高效性。
表1 資源使用報告
為了探究本文FPGA加速器的對DQN算法的整體加速性能,進行了與CPU、GPU的對比實驗,相關硬件平臺的型號、頻率如表2所示。時間測量采用時間戳計數(shù)的方式;GPU和CPU的功耗采用各自額定功率表示,加速器的的運行功耗使用Vivado軟件綜合預估的額定功率表示;相比于FPGA的運行時間,計算3種平臺的加速比,相關實驗結果如表2所示。
表2 3種硬件平臺訓練32個樣本處理時間對比
從表2可以看出,與GPU、CPU對比,本文提出的FPGA加速器運行速度提高了28.08和12.03倍;基于FPGA設計的加速器在運行功耗方面也具有明顯的優(yōu)勢。
本文提出了一種用于DQN算法加速的硬件架構及其設計空間探索方法,其采用流式結構實現(xiàn)加速器IP核設計。通過設計空間探索,我們可以針對不同和DQN網(wǎng)絡和芯片平臺進行硬件加速實現(xiàn)。以Cartpole應用為例,我們設計了一個三層的DQN網(wǎng)絡,通過設計空間探索尋得了全局最優(yōu)的并行計算參數(shù),然后在ZYNQ 7100平臺上完成了設計的部署測試,測試結果表明,F(xiàn)PGA在訓練時的計算時間和功耗方面相對于GPU/CPU具有明顯的優(yōu)勢。