張 萌 張 雨 張經(jīng)緯 曹新野 李 鶴
(東南大學(xué)電子科學(xué)與工程學(xué)院 南京 210096)
隨著物聯(lián)網(wǎng)(Internet of Things, IoT)和人工智能行業(yè)的發(fā)展,神經(jīng)網(wǎng)絡(luò)在許多應(yīng)用場(chǎng)景中的性能已超越傳統(tǒng)算法[1,2]。FPGA具有高度可編程性,可以滿足應(yīng)用場(chǎng)景中的延遲、功耗等要求,因此FPGA已成為部署神經(jīng)網(wǎng)絡(luò)的流行平臺(tái)之一[3–5]。目前只有豐富設(shè)計(jì)經(jīng)驗(yàn)的硬件研究人員才能在目標(biāo)平臺(tái)上部署滿足性能目標(biāo)的神經(jīng)網(wǎng)絡(luò)加速器,這阻礙了神經(jīng)網(wǎng)絡(luò)的進(jìn)一步發(fā)展。于是各種神經(jīng)網(wǎng)絡(luò)前向推理框架不斷涌現(xiàn)[6–9],可以解析神經(jīng)網(wǎng)絡(luò)算法的高級(jí)描述,捕獲網(wǎng)絡(luò)的結(jié)構(gòu)等關(guān)鍵信息,然后自動(dòng)映射為目標(biāo)平臺(tái)的硬件描述。
但是目前主流的神經(jīng)網(wǎng)絡(luò)推理框架還沒(méi)有充分考慮到在邊緣端FPGA計(jì)算資源有限的情況下,高效地探索設(shè)計(jì)空間,平衡好資源占用和性能表現(xiàn),主要還存在下列不足:(1) 很少考慮在邊緣端設(shè)備計(jì)算資源十分有限的情況下,為神經(jīng)網(wǎng)絡(luò)定制高效的硬件加速算子,提高資源利用率和性能表現(xiàn)。(2) 忽略了對(duì)設(shè)計(jì)空間探索(Design Space Exploration, DSE)算法的優(yōu)化,常規(guī)的啟發(fā)式算法對(duì)超參數(shù)的設(shè)置十分敏感,需要多次的實(shí)驗(yàn)嘗試不同的初始參數(shù)。
為了應(yīng)對(duì)上述的挑戰(zhàn),本文設(shè)計(jì)能夠在邊緣端FPGA上高效部署神經(jīng)網(wǎng)絡(luò)的推理框架NN-Edge-Builder,主要貢獻(xiàn)如下:
(1) 設(shè)計(jì)一個(gè)基于數(shù)據(jù)流結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)推理框架NN-EdgeBuilder,讓神經(jīng)網(wǎng)絡(luò)算法領(lǐng)域內(nèi)的研究人員不需要掌握深厚的硬件加速器設(shè)計(jì)經(jīng)驗(yàn),也可以快速地驗(yàn)證自己設(shè)計(jì)的網(wǎng)絡(luò)模塊的硬件性能,提高FPGA在神經(jīng)網(wǎng)絡(luò)生態(tài)中的適用性。
(2) 設(shè)計(jì)了高效的量化模塊,既支持量化感知訓(xùn)練,又支持訓(xùn)練后量化,能夠最大限度地保證神經(jīng)網(wǎng)絡(luò)的精度。
(3) 開(kāi)發(fā)了通用且高性能的硬件加速算子庫(kù),將網(wǎng)絡(luò)中計(jì)算量最大的Conv和FC層映射到Conv/FC層通用計(jì)算單元來(lái)適應(yīng)不同的量化位寬和資源限制。
(4) 設(shè)計(jì)了一個(gè)基于多目標(biāo)貝葉斯優(yōu)化的設(shè)計(jì)空間探索算法,使用具有混合核函數(shù)的高斯過(guò)程作為代理模型可以有效地提取混合設(shè)計(jì)空間的信息,使用帶約束的多目標(biāo)采集函數(shù)來(lái)處理邊緣端FPGA的資源限制,可以高效地搜索出滿足要求的設(shè)計(jì)點(diǎn)。
本文其余安排如下:第2節(jié)介紹推理框架NNEdgeBuilder的總體架構(gòu)和Conv/FC層通用計(jì)算單元;第3節(jié)介紹專為NN-EdgeBuilder定制的設(shè)計(jì)空間探索算法;第4節(jié)將討論我們使用NN-Edge-Builder部署神經(jīng)網(wǎng)絡(luò)模型的實(shí)驗(yàn)結(jié)果;第5節(jié)給出結(jié)論。
本文設(shè)計(jì)的神經(jīng)網(wǎng)絡(luò)推理框架NN-EdgeBuilder能夠在邊緣端FPGA平臺(tái)上自動(dòng)部署神經(jīng)網(wǎng)絡(luò)模型,實(shí)現(xiàn)檢測(cè)精度,推理速度和關(guān)鍵資源占用等性能指標(biāo)的平衡。圖1虛線框中的部分展示了NN-Edge-Builder的部署網(wǎng)絡(luò)模型的完整流程,主要包含網(wǎng)絡(luò)模型解析,設(shè)計(jì)空間探索和調(diào)用硬件加速算子這3個(gè)階段,具體流程如下:首先網(wǎng)絡(luò)模型解析模塊會(huì)解析已經(jīng)訓(xùn)練好的模型,提取推理階段網(wǎng)絡(luò)每層所需的信息,刪除冗余信息,接著會(huì)進(jìn)一步配置網(wǎng)絡(luò)的通用信息,如每層的量化位寬和并行度因子等信息,最后會(huì)配置每層的專用信息,如確定每層使用的硬件加速算子等,解析完網(wǎng)絡(luò)模型之后會(huì)輸出完整的計(jì)算圖。
圖1 推理框架NN-EdgeBuilder部署網(wǎng)絡(luò)模型的流程
設(shè)計(jì)空間探索階段使用了第3節(jié)設(shè)計(jì)的基于多目標(biāo)貝葉斯優(yōu)化的設(shè)計(jì)空間探索算法,可以探索網(wǎng)絡(luò)任意層的輸出位寬和并行度因子,每次迭代并通過(guò)采集函數(shù)確定下一個(gè)采樣點(diǎn),然后調(diào)用EDA工具流得到準(zhǔn)確的目標(biāo)函數(shù)值,并以此更新數(shù)據(jù)集和代理模型,直到滿足停止條件,輸出帕累托前沿設(shè)計(jì)點(diǎn)。
硬件加速算子庫(kù)為推理框架支持的所有網(wǎng)絡(luò)模塊都設(shè)計(jì)了對(duì)應(yīng)的加速算子,通過(guò)計(jì)算圖連接成一個(gè)完整的加速器。針對(duì)邊緣端FPGA資源有限的現(xiàn)狀,本文設(shè)計(jì)了低推理延遲和低資源占用的FC/Conv層通用計(jì)算單元。NN-EdgeBuilder有兩種格式的輸出:第1種是可以導(dǎo)出加速器的IP并將其集成到更大的設(shè)計(jì)中。第2種則是生成加速器的比特流,可以直接部署到硬件平臺(tái)上。
為了能夠最大限度地保持推理框架部署加速器的精度,NN-EdgeBuilder的量化模塊包含兩個(gè)子模塊,分別支持量化感知訓(xùn)練(Quantization-Aware Training, QAT)[8]和訓(xùn)練后量化(Post-Training Quantization, PTQ)[10]。量化感知訓(xùn)練子模塊可以解析經(jīng)過(guò)量化感知訓(xùn)練的網(wǎng)絡(luò)層,保留其量化配置并固定到計(jì)算圖中,在設(shè)計(jì)空間探索階段這些網(wǎng)絡(luò)層的權(quán)重位寬保持不變,以此利用量化感知訓(xùn)練精度高的特點(diǎn)。訓(xùn)練后量化子模塊主要針對(duì)推理過(guò)程中網(wǎng)絡(luò)每層的輸出位寬量化,由于在保持精度的情況下網(wǎng)絡(luò)的某些層能夠進(jìn)行更低比特的量化,所以訓(xùn)練后量化子模塊采用異構(gòu)量化,能夠在低硬件資源占用的情況下實(shí)現(xiàn)高精度。網(wǎng)絡(luò)每層的輸出量化位寬由設(shè)計(jì)空間探索模塊給出,可以細(xì)粒度地探索網(wǎng)絡(luò)每層的輸出量化位寬,來(lái)達(dá)到加速器的最優(yōu)性能表現(xiàn)。
NN-EdgeBuilder生成的是數(shù)據(jù)流結(jié)構(gòu)的加速器,會(huì)為網(wǎng)絡(luò)的每一層都例化單獨(dú)的硬件模塊,每一層都會(huì)例化單獨(dú)的緩存器(Buffer)以及基本運(yùn)算單元(Multiply ACcumulate, MAC),所以每個(gè)部分的量化位寬會(huì)不一樣,對(duì)于后續(xù)硬件生成的緩存器以及MAC沒(méi)有影響。圖2為推理框架NN-EdgeBuilder部署加速器時(shí)的量化流程,其中 IW為輸入數(shù)據(jù)的量化位寬,QW和QB是量化感知訓(xùn)練階段網(wǎng)絡(luò)權(quán)重和偏置的量化位寬,O W是訓(xùn)練后量化階段計(jì)算層的輸出位寬,QA是量化感知訓(xùn)練階段激活層的輸出位寬。量化的整體流程如下:首先量化位寬為IW的輸入數(shù)據(jù)進(jìn)入計(jì)算模塊,與位寬為QW和QB的權(quán)重和偏置進(jìn)行計(jì)算,得到輸出位寬為O W1的中間結(jié)果,接著將其送入激活層,得到輸出位寬為QA的中間結(jié)果,然后就可以進(jìn)行下一層的運(yùn)算。
圖2 量化模塊運(yùn)行流程
為了能夠更好地在資源有限的邊緣端FPGA上部署神經(jīng)網(wǎng)絡(luò),本文設(shè)計(jì)了低延遲,低資源占用的硬件加速算子庫(kù)。由于Conv層和FC層占據(jù)了網(wǎng)絡(luò)的絕大部分參數(shù)量和計(jì)算量,接下來(lái)重點(diǎn)介紹本文設(shè)計(jì)的FC層和Conv層通用計(jì)算單元,可以利用通用計(jì)算單元(GEneral Matrix Multiplication,GEMM)來(lái)加速FC層和Conv層。如圖3所示,由于本文實(shí)現(xiàn)了全片上推理,所以可以直接從Block RAM(BRAM)中加載卷積權(quán)重和偏置,只需要從外部存儲(chǔ)器讀取輸入數(shù)據(jù),數(shù)據(jù)流格式的中間計(jì)算結(jié)果不需要傳輸?shù)狡獯鎯?chǔ)器中暫存,可以直接傳遞給下一層。將網(wǎng)絡(luò)權(quán)重加載到Weight Buffer之后,就可以送入通用計(jì)算單元??梢钥紤]對(duì)網(wǎng)絡(luò)進(jìn)行更低比特的量化來(lái)降低存儲(chǔ)空間需求,或者設(shè)計(jì)更加輕量化的網(wǎng)絡(luò)來(lái)完成任務(wù)。
圖3 FC/Conv通用計(jì)算單元
在開(kāi)始計(jì)算之前,需要根據(jù)運(yùn)算類型對(duì)Input的數(shù)據(jù)進(jìn)行調(diào)整,因?yàn)镕C層的輸入尺寸較小,所以只需要根據(jù)輸入輸出尺寸進(jìn)行分塊并存入到FC_Input Buffer中即可。而Conv層輸入尺寸較大且有復(fù)雜的數(shù)據(jù)復(fù)用,所以需要將Input中的數(shù)據(jù)先緩存到Line Buffer中,調(diào)整數(shù)據(jù)排列方式,再傳輸?shù)絊W (Sliding Window) Buffer中,以此來(lái)實(shí)現(xiàn)流水線運(yùn)算和輸入數(shù)據(jù)復(fù)用。接著將準(zhǔn)備好的數(shù)據(jù)送入到通用計(jì)算單元進(jìn)行運(yùn)算,接著將計(jì)算結(jié)果按FC運(yùn)算和Conv運(yùn)算分別處理,將計(jì)算得到的部分結(jié)果對(duì)應(yīng)相加并暫存到Accum Buffer中,最終將完整的輸出結(jié)果傳輸?shù)絆utput Buffer中,然后直接送到下一層網(wǎng)絡(luò)模塊中繼續(xù)進(jìn)行計(jì)算。以FC運(yùn)算為例,假設(shè)輸入的尺寸為 2CI ,當(dāng)FC層例化了C I個(gè)MAC運(yùn)算單元時(shí),流水線計(jì)算過(guò)程如下:首先在T=1時(shí) , C I 個(gè)通道的輸入x1~xCI和神經(jīng)元參數(shù)w1~wCI并行計(jì)算得到C I 個(gè)部分結(jié)果mi~mCI,并且還將偏置b1加載到Accun Buffer中。同理在T=2 時(shí),再次得到部分計(jì)算結(jié)果mCI+1~m2CI,并將T=1時(shí) 刻計(jì)算得到的m1~mCI累加到A cc1中。
通用計(jì)算單元由MAC陣列組成,通過(guò)3.1節(jié)中介紹的并行度因子控制實(shí)例化的MAC數(shù)量[11],來(lái)決定每一層運(yùn)算中MAC使用的次數(shù)。如果對(duì)輸入和權(quán)重都進(jìn)行了量化,推理框架NN-EdgeBuilder可以使用查找表(LUT)來(lái)實(shí)現(xiàn)部分的低位寬乘法來(lái)節(jié)約DSP資源。NN-EdgeBuilder生成的是數(shù)據(jù)流結(jié)構(gòu)的加速器,加速器的延遲取決于計(jì)算延遲最大的層,所以需要探索每一層的并行度,根據(jù)每層的計(jì)算量來(lái)分配計(jì)算資源,實(shí)現(xiàn)每一層延遲的均衡。
算法1為全連接運(yùn)算循環(huán)嵌套流程,通常在計(jì)算全連接層時(shí)會(huì)將輸入展平為1維向量,即輸入向量維度為 CI ,輸出向量維度為C O,所以得到一個(gè)全連接層輸出像素點(diǎn)需要兩層循環(huán)。本文將FC層的輸出維度Loop2展開(kāi),實(shí)現(xiàn)了輸入數(shù)據(jù)復(fù)用,即在一個(gè)周期內(nèi)輸入像素點(diǎn)固定,同時(shí)和所有輸出維度對(duì)應(yīng)的神經(jīng)元相乘。本文針對(duì)輸入較小的FC層,使用數(shù)組分割指令將FC層的輸入數(shù)組完全分割到獨(dú)立的寄存器中,以此實(shí)現(xiàn)在一個(gè)時(shí)鐘周期內(nèi)訪問(wèn)所有的輸入。理想狀態(tài)下經(jīng)過(guò)C I個(gè)周期就可得到完整的輸出結(jié)果。
卷積運(yùn)算的循環(huán)嵌套流程算法2所示,得到一個(gè)卷積層輸出像素點(diǎn)需要6層循環(huán),針對(duì)輸入特征圖尺寸較大的Conv層,如果將特征圖和權(quán)重參數(shù)全部展開(kāi)并堆疊成矩陣形式,會(huì)占用邊緣端FPGA大量的硬件資源。
為了獲得最快的卷積運(yùn)算速度,本文將Loop3~Loop6展開(kāi),即實(shí)現(xiàn)了卷積核維度的展開(kāi),輸入通道維度的展開(kāi)和輸出通道維度的展開(kāi),整體的并行度為 CO×CI×HF×WF ,在每個(gè)周期內(nèi)輸出CO個(gè)像素點(diǎn),對(duì)應(yīng)著輸出特征圖的同一位置。與FC層一樣,Conv層也復(fù)用了輸入特征圖的像素點(diǎn),這樣就可以實(shí)現(xiàn)和FC層共用相同的矩陣向量運(yùn)算單元。
算法1 全連接運(yùn)算循環(huán)嵌套
為了提高輸入數(shù)據(jù)處理速度并節(jié)省硬件資源,本文設(shè)計(jì)了Line Buffer和SW Buffer來(lái)緩存輸入特征圖[12],假設(shè)輸入特征圖的尺寸為 H I×WI×CI,卷積核尺寸為 HF×WF×CI×CO,則Line Buffer的尺寸為 (HF-1)×WI×CI,SW Buffer尺寸為HF×WF×CI。
由于對(duì)輸入特征圖每個(gè)通道的處理是相同的,所以為了簡(jiǎn)潔地說(shuō)明,圖4展示了 CI=1的情況,如圖4(a)所示,輸入特征圖尺寸為HI×WI=5×5 ,卷積核尺寸H F×WF=3×3,所以Line Buffer的尺寸為( HF-1)×WI=2×5,SW Buffer尺寸為 H F×WF=3×3。如圖4(b)和圖4(c)所示,在T時(shí)刻,新的輸入像素點(diǎn)x3被壓入Line Buffer和SW Buffer的第1行,Line Buffer第1行最先壓入的像素點(diǎn)x2被移動(dòng)到Line Buffer和SW Buffer的第2行,最后是Line Buffer第2行最先壓入的像素點(diǎn)x1被 彈出,并壓入到SW Buffer的第3行。所以T時(shí)刻同一列的3個(gè)像素點(diǎn)x1,x2,x3被傳入到SW Buffer中,此時(shí)SW Buffer是被填滿的,所以會(huì)將整個(gè)SW Buffer的像素點(diǎn)送入運(yùn)算單元進(jìn)行一組并行的卷積運(yùn)算。同理,如圖4(d)、圖4(e)和圖4(f)所示,T+1 時(shí) 刻同一列的3個(gè)像素點(diǎn)x4,x5,x6被傳入SW Buffer中,并再次進(jìn)行卷積運(yùn)算。綜上分析可得x1,x2,x3一共被復(fù)用了3次。從圖4(a)和圖4(d)可以看出,Line Buffer相當(dāng)于是在輸入特征圖上滑動(dòng),每次滑動(dòng)Line Buffer的每行都會(huì)壓入新的像素點(diǎn),且將Line Buffer最后一個(gè)像素點(diǎn)彈出,這樣Line Buffer每次滑動(dòng)時(shí)彈出和壓入的像素點(diǎn)正好就是卷積運(yùn)算所需的一列數(shù)據(jù)。
圖4 Line_buffer工作流程
不同推理框架能夠提供不同程度的設(shè)計(jì)自由度,這些自由度構(gòu)成了推理框架的參數(shù)空間,提供了靈活部署神經(jīng)網(wǎng)絡(luò)的能力。NN-EdgeBuilder是基于數(shù)據(jù)流結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)推理框架,將網(wǎng)絡(luò)每一層的關(guān)鍵信息映射成計(jì)算圖上的節(jié)點(diǎn),通過(guò)并行度因子(Parallelism Factor, PF)控制每一層網(wǎng)絡(luò)例化的基本計(jì)算單元的數(shù)量,以此來(lái)調(diào)節(jié)并行度。
算法2 卷積運(yùn)算循環(huán)嵌套
并行度因子 PF通 過(guò)控制MAC實(shí)例化的數(shù)量來(lái)決定計(jì)算層中單個(gè)MAC單元使用的次數(shù)。如圖5所示,輸入向量的維度為 1 ×M,神經(jīng)元參數(shù)矩陣維度為M×N,當(dāng)并行度因子P F=1時(shí)會(huì)針對(duì)每一個(gè)乘法實(shí)例化相應(yīng)的MAC單元,則共有M×N個(gè)MAC單元,實(shí)現(xiàn)了完全并行計(jì)算。當(dāng)并行度因子PF=α?xí)r,需要實(shí)例化 c eil(M×N/α)個(gè)MAC單元。在推理框架NN-EdgeBuilder中量化能夠在保持精度的情況下更顯著地降低DSP資源利用率,并且支持任意定點(diǎn)數(shù)精度。
圖5 并行度因子控制MAC數(shù)量
綜上所述,本文選擇將網(wǎng)絡(luò)每一層的并行度因子和輸出位寬作為推理框架的設(shè)計(jì)空間,參數(shù)空間的細(xì)粒度是可調(diào)節(jié)的,可以先固定任意層的并行度和量化位寬,然后探索剩余網(wǎng)絡(luò)層的參數(shù)空間,以此來(lái)加快探索速度并降低計(jì)算資源占用,在滿足硬件資源的限制下實(shí)現(xiàn)精度和推理速度等指標(biāo)的平衡。
貝葉斯優(yōu)化使用概率模型來(lái)擬合目標(biāo)函數(shù),因?yàn)楦咚惯^(guò)程的計(jì)算代價(jià)相對(duì)較小,還可以計(jì)算每個(gè)設(shè)計(jì)點(diǎn)的不確定度,所以高斯過(guò)程是應(yīng)用最廣泛的代理模型之一[13]。假設(shè)已經(jīng)獲得的數(shù)據(jù)集共有J個(gè)神經(jīng)網(wǎng)絡(luò)推理框架得到的樣本,記為D=(X,Y),其中X=[x1,x2,...,xJ]T是J個(gè)已經(jīng)采樣過(guò)的設(shè)計(jì)點(diǎn),Y=[y1,y2,...,yJ]T是對(duì)應(yīng)的目標(biāo)性能輸出,其中y表示待優(yōu)化的黑盒函數(shù),記為y=φ(x)。假設(shè)φ(x)服 從高斯過(guò)程,則可以表示為式(1),其中u(x)代表均值函數(shù),K(x,x)代表核函數(shù)。
高斯過(guò)程利用核函數(shù)來(lái)提取不同設(shè)計(jì)點(diǎn)之間的相似性,所以核函數(shù)是決定高斯過(guò)程代理模型性能的關(guān)鍵,NN-EdgeBuilder的參數(shù)空間為網(wǎng)絡(luò)每一層的并行度因子和輸出位寬,其中并行度因子為整數(shù),而輸出位寬表示為
本文針對(duì)組合空間構(gòu)建了具有混合核函數(shù)的高斯過(guò)程G PM,可以充分地提取組合空間中采樣點(diǎn)的相似性。首先使用Matáern核函數(shù)來(lái)度量并行度因子這樣的數(shù)值變量,如式(2)所示,其中Kυ第2類修正貝塞爾函數(shù),Γ是伽馬函數(shù),l是長(zhǎng)度范圍,可以通過(guò)調(diào)整υ來(lái)控制核函數(shù)的平滑程度,本文取值為2.5,來(lái)更好地逼近真實(shí)目標(biāo)值
因?yàn)镠amming距離可以有效地度量類別參數(shù)之間的距離,所以本文使用基于Hamming距離的加權(quán)核函數(shù)來(lái)提取不同輸出位寬之間的相似性[14],如式(3)所示,其中αj為權(quán)重超參數(shù),本文取值為1。 當(dāng)x1,j=x2,j時(shí) ,δ(x1,j,x2,j)=1 ,當(dāng)x1,j ?=x2,j時(shí),δ(x1,j,x2,j)=0
綜上,針對(duì)由并行度因子和輸出位寬構(gòu)成的組合設(shè)計(jì)空間,本文使用了如式(4)所示混合核函數(shù)KMixed(x1,x2)來(lái)提升高斯過(guò)程擬合目標(biāo)函數(shù)的效率,其中Kcons(x1,x2) 為常量核函數(shù), L為常量,KN(x1,x2)為白噪聲
在貝葉斯優(yōu)化算法中采集函數(shù)負(fù)責(zé)確定下一個(gè)采樣點(diǎn)的位置,來(lái)高效逼近最優(yōu)的目標(biāo)函數(shù)值,目前流行的采集函數(shù)之一是期望改進(jìn)(Expected Improvement, EI)及其多種變體[15],可以結(jié)合已經(jīng)探測(cè)得到高確信度的區(qū)域和還沒(méi)有充分開(kāi)發(fā)的區(qū)域的信息,實(shí)現(xiàn)了搜索和利用兩者之間的平衡。
對(duì)于帶約束的多目標(biāo)優(yōu)化問(wèn)題,假設(shè)共有M個(gè)目標(biāo)函數(shù)φ(x)={φ1(x),φ2(x),...,φM(x)}和N個(gè)約束 條 件C(x)={c1(x),c2(x),...,cN(x)},且φi(x)和ci(x)都滿足高斯過(guò)程,則多目標(biāo)優(yōu)化問(wèn)題可以表示為式(5)所示。
超體積(HyperVolume,HV)是衡量多目標(biāo)優(yōu)化常用的指標(biāo)[16],以參考點(diǎn)yref為界,超體積是由非支配解集組成的目標(biāo)空間的體積,記P(V)為帕累托前沿??梢酝ㄟ^(guò)帕累托邊界上的點(diǎn)P(V)將目標(biāo)空間分塊,使用分段積分來(lái)計(jì)算期望的超體積改進(jìn)量(Expected HyperVolume Improvement, EHVI),期望的超體積改進(jìn)積分是非支配采樣點(diǎn)集合的超體積改進(jìn)分段積分之和。如式(6)所示,其中非支配解集Pn內(nèi)的設(shè)計(jì)點(diǎn)不被任何帕累托前沿上的點(diǎn)P(V)支 配,Pn={p ∈Pn:?y ∈p,y′∈P(V),y′y},P
φx(y)是目標(biāo)函數(shù)預(yù)測(cè)分布的概率密度函數(shù)。
NN-EdgeBuilder需要在滿足邊緣端FPGA硬件資源限制的條件下自動(dòng)部署網(wǎng)絡(luò)模型,常規(guī)的EHVI沒(méi)有考慮有約束多目標(biāo)優(yōu)化問(wèn)題,所以本文使用改進(jìn)后的EHVI函數(shù),只有在采樣點(diǎn)滿足約束時(shí)才會(huì)計(jì)算EHVI,改進(jìn)后的采集函數(shù)命名為EHVIC[17]。目標(biāo)函數(shù)和約束條件都是計(jì)算代價(jià)不菲的黑盒函數(shù),優(yōu)化后的采集函數(shù)由兩部分組成,第1部分是針對(duì)目標(biāo)函數(shù)的超體積改進(jìn)量,第2部分則是滿足約束的期望C S(p),如式(7)所示
由于是C S(p)是在每個(gè)單元格內(nèi)定義的,所以邊界為輸入x,記為x={x ∈F:y ∈p},考慮到約束滿足高斯過(guò)程,可以使用目標(biāo)函數(shù)后驗(yàn)分布的采樣點(diǎn)來(lái)擬合 Pr(c(x)≤0) 。選擇滿足(x|y ∈p) 標(biāo)準(zhǔn)的后驗(yàn)采樣點(diǎn),并使用Monte-Carlo采樣方法來(lái)求解 C S(p),所以EHVIC采集函數(shù)的計(jì)算如式(8)所示
為了能更快地找到可行解,讓高斯過(guò)程更專注于利用可行域的信息,不滿足要求的點(diǎn)不會(huì)用于帕累托集的計(jì)算。在多目標(biāo)貝葉斯優(yōu)化每次迭代過(guò)程中,都是通過(guò)最大化EHVIC函數(shù)在設(shè)計(jì)空間F中確定下一次采樣點(diǎn),如式(9)所示
神經(jīng)網(wǎng)絡(luò)加速器的核心指標(biāo)包含檢測(cè)精度和推理速度、資源占用等,這些指標(biāo)往往相互沖突,很難同時(shí)達(dá)到最優(yōu)。其中邊緣端FPGA的硬件資源既可以作為約束條件又可以作為優(yōu)化目標(biāo),例如可以將資源緊張的DSP和LUT作為優(yōu)化目標(biāo),而將其他資源作為約束條件,這樣可以探索性能表現(xiàn)的平衡點(diǎn)。
本文提出了基于多目標(biāo)貝葉斯優(yōu)化的推理框架設(shè)計(jì)空間探索算法,具體流程如算法3所示,首先在設(shè)計(jì)空間內(nèi)采樣,運(yùn)行EDA工具流得到初始的性能表現(xiàn)樣本集Dφ=(X,Y)和硬件資源約束條件集DC={C(x)}。接著在每一次迭代過(guò)程中,首先根據(jù)樣本集Dφ和約束集DC更新代理模型G PM。接著算出非支配域內(nèi)的期望超體積改進(jìn)量E HVI(x)和滿足約束的期望C S(p),進(jìn)一步算出帶約束的采集函數(shù) E HVIC(x), 然后通過(guò)最大化E HVIC(x),選擇下一個(gè)參數(shù)配置點(diǎn)xJ+1。得到新的配置點(diǎn)之后繼續(xù)運(yùn)行EDA工具得到真實(shí)的性能表現(xiàn)函數(shù)值φ(xJ+1)和硬件約束C(xJ+1)。最后更新數(shù)據(jù)集和約束集并進(jìn)行下一次迭代。迭代的停止條件可以根據(jù)實(shí)際場(chǎng)景的需要來(lái)選擇,如設(shè)計(jì)空間探索的最大時(shí)間,參考帕累托前沿的ADRS等,最終輸出加速器精度和推理速度平衡的帕累托前沿設(shè)計(jì)點(diǎn)。
算法3 貝葉斯優(yōu)化算法流程
為了驗(yàn)證NN-EdgeBuilder自動(dòng)部署的加速器的性能,針對(duì)大疆(DJI)無(wú)人機(jī)小目標(biāo)檢測(cè)數(shù)據(jù)集,本文使用NN-EdgeBuilder部署UltraNet網(wǎng)絡(luò)。為了提高生成的UltraNet網(wǎng)絡(luò)加速器的性能,本文使用量化感知訓(xùn)練,位寬設(shè)置為4 bit,并通過(guò)數(shù)據(jù)增強(qiáng),重參數(shù)化等優(yōu)化策略,在不改變UltraNet推理階段參數(shù)量和計(jì)算量的情況下將精度提升到了0.703。網(wǎng)絡(luò)訓(xùn)練完成之后,就可以使用NN-Edge-Builder將其自動(dòng)部署在邊緣端Ultra96-V2 FPGA上,工作頻率為250 MHz。NN-EdgeBuilder通過(guò)設(shè)計(jì)空間探索給出2個(gè)帕累托設(shè)計(jì)點(diǎn),分別記為P1和P2點(diǎn),然后可以部署到Ultra96-V2開(kāi)發(fā)板上來(lái)測(cè)試結(jié)果。
本文將NN-EdgeBuilder經(jīng)過(guò)設(shè)計(jì)空間探索得到的UltraNet-P1和UltraNet-P2加速器與專用加速器SEUer和ultrateam進(jìn)行對(duì)比,表1為4個(gè)加速器分別處理5.25×104張圖片的性能表現(xiàn),對(duì)每一個(gè)加速器,循環(huán)測(cè)試5次取各個(gè)指標(biāo)的均值。
表1 UltraNet加速器性能對(duì)比
UltraNet-P1加速器每秒處理圖片的數(shù)量比ultrateam加速器少159幀,但是UltraNet-P1使用了高性能的硬件加速算子,處理5.25×104張圖片的功耗僅為30.2 J,功耗比ultrateam降低了25.06%。UltraNet-P1擁有最高的能效比,其每瓦特每秒的運(yùn)行數(shù)達(dá)3.199×1011次,比ultrateam提升了33.46%。
UltraNet-P2加速器實(shí)現(xiàn)了檢測(cè)精度和推理速度的平衡,UltraNet-P2的IOU和SEUer相同,都是0.703,其余性能指標(biāo)均優(yōu)于SEUer,其中推理速度提升了70FPS,功耗表現(xiàn)提升了10.08%,能效比提升了11.25%。
UltraNet-P1和UltraNet-P2優(yōu)秀的性能表現(xiàn)證明了推理框架NN-EdgeBuilder能夠有效地將網(wǎng)絡(luò)模型映射為高性能的硬件加速算子,再通過(guò)充分的設(shè)計(jì)空間探索,生成性能優(yōu)異的神經(jīng)網(wǎng)絡(luò)加速器。
從表2可以看出目前主流推理框架支持的深度學(xué)習(xí)框架數(shù)量有限,如DNNBuilder只支持Caffe框架,而NN-EdgeBuilder 的擴(kuò)展性更強(qiáng),能夠高效地解析主流深度學(xué)習(xí)框架設(shè)計(jì)的網(wǎng)絡(luò)模型,如PyTorch和TensorFlow。表2還對(duì)比了NN-Edge-Builder和其他推理框架部署VGG網(wǎng)絡(luò)的性能表現(xiàn),目前主流的推理框架支持的量化精度通常在8 bit及以上,對(duì)低比特量化沒(méi)有很好的支持,而NN-EdgeBuilder支持量化感知訓(xùn)練,所以可以進(jìn)行4 bit量化并保持網(wǎng)絡(luò)精度。NN-EdgeBuilder的硬件加速算子庫(kù)提供了低延遲低功耗的算子和高性能的DSE算法,所以針對(duì)相同的FPGA平臺(tái),NNEdgeBuilder 生成的VGG加速器計(jì)算性能是Deep-Burning-SEG的兩倍。由于DNNBuilder在硬件資源更豐富的平臺(tái)上部署,并且對(duì)VGG進(jìn)行了剪枝,所以生成的加速器計(jì)算性能超過(guò)了NN-EdgeBuilder。但是NN-EdgeBuilder主要針對(duì)邊緣端FPGA進(jìn)行優(yōu)化,考慮了低功耗和低資源占用,所以生成的加速器能效比是DNNBuilder的4.4倍,DSP的計(jì)算效率提升了50.65%。所以與目前主流的推理框架相比,NN-EdgeBuilder針對(duì)邊緣端FPGA生成的加速器解決方案實(shí)現(xiàn)了明顯的性能提升。
表2 NN-EdgeBuilder和其他推理框架部署VGG網(wǎng)絡(luò)的性能對(duì)比
目前將神經(jīng)網(wǎng)絡(luò)部署在FPGA平臺(tái)還面臨開(kāi)發(fā)時(shí)間長(zhǎng)、性能優(yōu)化難等問(wèn)題,本文設(shè)計(jì)了神經(jīng)網(wǎng)絡(luò)推理框架NN-EdgeBuilder,提供了高性能的基于多目標(biāo)貝葉斯優(yōu)化的設(shè)計(jì)空間探索算法和低延遲低功耗的硬件加速算子,能夠加速開(kāi)發(fā)對(duì)邊緣端FPGA友好的神經(jīng)網(wǎng)絡(luò)硬件加速器,生成的加速器比目前主流的推理框架有顯著的性能提升。