劉騰達(dá),朱君文,張一聞
1.武警工程大學(xué) 研究生大隊(duì),西安710086
2.武警工程大學(xué) 信息工程學(xué)院,西安710086
近年來,隨著大數(shù)據(jù)時(shí)代的來臨,人們?cè)诙潭處啄曛袆?chuàng)造的數(shù)據(jù)呈爆發(fā)式增長(zhǎng)[1-3],得益于數(shù)據(jù)量的上漲、運(yùn)算力的提升和深度學(xué)習(xí)的出現(xiàn),人工智能開始迅猛發(fā)展。作為實(shí)現(xiàn)人工智能的重要技術(shù)和研究方向,深度學(xué)習(xí)已經(jīng)廣泛應(yīng)用于計(jì)算機(jī)視覺[4-6]、語(yǔ)音識(shí)別[7-9]和自然語(yǔ)言處理[10-12]等諸多領(lǐng)域。為了提高計(jì)算性能以適應(yīng)神經(jīng)網(wǎng)絡(luò)模型的增大及其參數(shù)的增多,研究者在尋找各種軟、硬件解決方案上花費(fèi)了大量努力,目前廣泛應(yīng)用的方法有CPU、GPU、FPGA 和ASIC 等加速技術(shù),其中GPU 加速技術(shù)由于其強(qiáng)大的計(jì)算能力已經(jīng)成為深度學(xué)習(xí)加速方式的首選?,F(xiàn)場(chǎng)可編程邏輯門陣列(field programmable gate array,F(xiàn)PGA)由邏輯單元陣列構(gòu)成,內(nèi)部包括可配置的邏輯模塊、輸入輸出模塊和內(nèi)部互聯(lián)網(wǎng)連線[13]。與其他加速方式相比,F(xiàn)PGA 具有可重構(gòu)、高能效比、高性能、便攜、延遲低等優(yōu)勢(shì)?;谶@些優(yōu)勢(shì),F(xiàn)PGA 近年來迅速發(fā)展,逐漸成為GPU 在算法加速領(lǐng)域的有力競(jìng)爭(zhēng)者。目前基于FPGA 的神經(jīng)網(wǎng)絡(luò)加速器種類較多,其設(shè)計(jì)理念和加速方案各不相同,根據(jù)設(shè)計(jì)理念和滿足需求的不同,可以分為:針對(duì)神經(jīng)網(wǎng)絡(luò)模型的加速器、針對(duì)具體問題定制的加速器、針對(duì)優(yōu)化策略的加速器和針對(duì)硬件模板的加速器框架[14]。本文在深度學(xué)習(xí)的典型模型的基礎(chǔ)上,歸納列舉了各種FPGA 加速器并對(duì)比了典型加速器的性能特點(diǎn),理清了FPGA 加速深度學(xué)習(xí)的研究現(xiàn)狀,為進(jìn)一步深入研究深度學(xué)習(xí)的FPGA 加速技術(shù)奠定了基礎(chǔ)。
2006 年,加拿大多倫多大學(xué)教授、機(jī)器學(xué)習(xí)領(lǐng)域的泰斗Hinton 和他的學(xué)生在Science上發(fā)表了一篇文章,正式提出深度學(xué)習(xí)[15]的概念并開啟了深度學(xué)習(xí)在學(xué)術(shù)界和工業(yè)界的浪潮。深度學(xué)習(xí)的概念源于人工神經(jīng)網(wǎng)絡(luò)的研究,是機(jī)器學(xué)習(xí)研究中的一個(gè)新的領(lǐng)域,可以簡(jiǎn)單理解為神經(jīng)網(wǎng)絡(luò)的發(fā)展,其動(dòng)機(jī)在于建立模擬人腦進(jìn)行分析學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò),模仿人腦的機(jī)制來解釋數(shù)據(jù)。深度學(xué)習(xí)的實(shí)質(zhì),是通過構(gòu)建具有很多隱層的機(jī)器學(xué)習(xí)模型和海量的訓(xùn)練數(shù)據(jù),來學(xué)習(xí)更有用的特征,從而最終提升分類或預(yù)測(cè)的準(zhǔn)確性。目前,廣泛使用的深度學(xué)習(xí)模型有深度神經(jīng)網(wǎng)絡(luò)(deep neural network,DNN)、卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)[16]等。
深度神經(jīng)網(wǎng)絡(luò)是在單層感知機(jī)的基礎(chǔ)上通過增加隱含層的數(shù)量及相應(yīng)的節(jié)點(diǎn)數(shù)而形成的,它的出現(xiàn)克服了單層感知機(jī)性能低下的缺陷[17],結(jié)構(gòu)如圖1所示。
Fig.1 Illustration of deep neural network圖1 深度神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)示例
深度神經(jīng)網(wǎng)絡(luò)的相鄰層之間全連接,其隱含層的數(shù)量和節(jié)點(diǎn)的數(shù)目更多,因而要訓(xùn)練的參數(shù)規(guī)模非常大。DNN 主要用于圖像識(shí)別和語(yǔ)音識(shí)別領(lǐng)域,在圖像識(shí)別時(shí)可以忽略圖像的空間幾何關(guān)系,將其變?yōu)橐痪S數(shù)據(jù)進(jìn)行處理,因此相比于單層感知機(jī)有著更優(yōu)秀的性能表現(xiàn)。
隨著神經(jīng)網(wǎng)絡(luò)層數(shù)的不斷加深,參數(shù)數(shù)量的膨脹導(dǎo)致過擬合的現(xiàn)象愈發(fā)嚴(yán)重,并且優(yōu)化函數(shù)越來越容易陷入局部最優(yōu)解。為了克服這一問題,卷積神經(jīng)網(wǎng)絡(luò)應(yīng)運(yùn)而生。
對(duì)卷積神經(jīng)網(wǎng)絡(luò)的研究始于20 世紀(jì)80 年代,卷積神經(jīng)網(wǎng)絡(luò)模仿生物視覺系統(tǒng)結(jié)構(gòu),其隱含層包括卷積層、池化層和全連接層三類常見構(gòu)筑[18-19],網(wǎng)絡(luò)結(jié)構(gòu)如圖2 所示。
Fig.2 Illustration of convolutional neural network圖2 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)示例
卷積層和池化層通過運(yùn)算提取出數(shù)據(jù)的特征圖,在全連接層將特征圖映射成特征向量,從而把數(shù)據(jù)中的特征保存下來以達(dá)到識(shí)別分類的目的[20]。對(duì)于CNN 來說,并不是所有上下層神經(jīng)元都能直接相連,而是通過“卷積核”作為中介,利用權(quán)重共享極大地減少了網(wǎng)絡(luò)的參數(shù)量,使得訓(xùn)練大規(guī)模網(wǎng)絡(luò)變得可行。相比于其他網(wǎng)絡(luò),卷積神經(jīng)網(wǎng)絡(luò)的適應(yīng)性更強(qiáng),正逐漸成為圖像識(shí)別和自然語(yǔ)言處理等領(lǐng)域的主流網(wǎng)絡(luò)。
由于每層信號(hào)只能單向傳播并且樣本處理在各個(gè)時(shí)刻相互獨(dú)立,DNN 和CNN 無(wú)法對(duì)時(shí)間序列上的變化進(jìn)行建模。但是在自然語(yǔ)言處理、語(yǔ)音識(shí)別、手寫體識(shí)別等領(lǐng)域,樣本出現(xiàn)的時(shí)間順序十分關(guān)鍵,循環(huán)神經(jīng)網(wǎng)絡(luò)就是為了適應(yīng)這種需求而誕生的。
循環(huán)神經(jīng)網(wǎng)絡(luò)是一類以序列數(shù)據(jù)為輸入,在序列的演進(jìn)方向進(jìn)行遞歸且所有節(jié)點(diǎn)按鏈?zhǔn)竭B接的遞歸神經(jīng)網(wǎng)絡(luò)[21]。如圖3 所示,循環(huán)神經(jīng)網(wǎng)絡(luò)具有記憶性、參數(shù)共享并且圖靈完備,因此更擅長(zhǎng)學(xué)習(xí)序列的非線性特征[22],常被用于自然語(yǔ)言處理和時(shí)間序列預(yù)報(bào)等領(lǐng)域。
Fig.3 Illustration of recurrent neural network圖3 循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)示例
隨著人工智能的迅猛發(fā)展,神經(jīng)網(wǎng)絡(luò)模型層數(shù)和節(jié)點(diǎn)數(shù)量日趨增多,模型的復(fù)雜程度越來越高,深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)對(duì)硬件的計(jì)算能力提出了更嚴(yán)格的要求。相比于CPU 和GPU,F(xiàn)PGA 加速技術(shù)因其可重構(gòu)和低功耗等優(yōu)勢(shì)受到了人們的極大關(guān)注。根據(jù)設(shè)計(jì)理念和滿足需求不同,基于FPGA 的深度學(xué)習(xí)加速器大體可分為針對(duì)神經(jīng)網(wǎng)絡(luò)模型的加速器、針對(duì)具體問題定制的加速器、針對(duì)優(yōu)化策略的加速器和針對(duì)硬件模板的加速器框架等,下面作以歸納比較。
針對(duì)某種神經(jīng)網(wǎng)絡(luò)模型加速思路最直接,設(shè)計(jì)目的也最明確,這種加速器在用于特定場(chǎng)合時(shí),通常只需要對(duì)程序或參數(shù)作以微調(diào)便可使用,十分方便。圖4 展示了基于FPGA 的神經(jīng)網(wǎng)絡(luò)加速器的發(fā)展演進(jìn)歷史以及在IEEE 上發(fā)表有關(guān)論文的數(shù)量趨勢(shì),從中可以看出,近年來FPGA 加速神經(jīng)網(wǎng)絡(luò)的研究愈發(fā)受到人們的重視。
Fig.4 Development history of neural network accelerator based on FPGA圖4 基于FPGA 的神經(jīng)網(wǎng)絡(luò)加速器發(fā)展趨勢(shì)
FPGA 加速卷積神經(jīng)網(wǎng)絡(luò)的關(guān)鍵在于提高計(jì)算能力和數(shù)據(jù)傳輸速度[23-26],通常采用提高卷積神經(jīng)網(wǎng)絡(luò)中并行計(jì)算能力的方法來提升計(jì)算效率以及利用減少數(shù)據(jù)量、減少訪存次數(shù)等方式來解決數(shù)據(jù)傳輸開銷大的問題。
為了解決卷積神經(jīng)網(wǎng)絡(luò)中制約計(jì)算能力的計(jì)算吞吐和內(nèi)存帶寬不匹配的問題進(jìn)而提高計(jì)算能力,文獻(xiàn)[27]設(shè)計(jì)了如圖5 所示的硬件結(jié)構(gòu)。
Fig.5 Block diagram of proposed accelerator圖5 基礎(chǔ)硬件結(jié)構(gòu)圖
這種結(jié)構(gòu)在輸入和輸出部分分別采用兩個(gè)緩沖區(qū)并使用“乒乓”的數(shù)據(jù)傳輸機(jī)制,得以使用計(jì)算時(shí)間來掩蓋數(shù)據(jù)傳輸時(shí)間,并且計(jì)算引擎內(nèi)部是底層乘法器聯(lián)合多層加法器的“樹形”結(jié)構(gòu),多個(gè)計(jì)算引擎并行進(jìn)行不同卷積核的卷積操作,由此減少了程序執(zhí)行時(shí)間,進(jìn)而很好地改善了計(jì)算吞吐和內(nèi)存帶寬不匹配的問題。這種結(jié)構(gòu)在Virtex7 VX485T 平臺(tái)上達(dá)到了61.62 GFLOPS 的峰值性能,遠(yuǎn)超CPU(Xeon E5-2430)的12.87 GFLOPS[27]。雖然這種結(jié)構(gòu)設(shè)計(jì)取得了優(yōu)異的性能,但是從整體來看,該結(jié)構(gòu)并未考慮全連接層的模型參數(shù)優(yōu)化,因此處理更為大量的數(shù)據(jù)所產(chǎn)生的傳輸開銷可能會(huì)限制實(shí)際的性能表現(xiàn);并且這種“樹形”結(jié)構(gòu)的計(jì)算引擎只能處理規(guī)則的卷積操作,不適應(yīng)于經(jīng)過稀疏性處理的卷積神經(jīng)網(wǎng)絡(luò)。由此可見,隨著不規(guī)則卷積計(jì)算越來越多的應(yīng)用,該結(jié)構(gòu)的使用場(chǎng)景可能會(huì)受限。
另外一些研究在努力提高卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算能力的同時(shí),通過使用大量寄存器代替BRAM 的方法來降低結(jié)構(gòu)對(duì)外部接口的帶寬需求[28],其最終速度在FPGA(Virtex7)平臺(tái)上比CPU(i7 4790K)快16.42倍[28]。還有學(xué)者使用基于移位寄存器的串矩轉(zhuǎn)換結(jié)構(gòu)和基于脈動(dòng)陣列的卷積層和池化層運(yùn)算單元[29],這種架構(gòu)可以搭建任意規(guī)模的CNN 模型,并且提高了頻率和計(jì)算吞吐量,減小了輸入、輸出帶寬需求。另外,還可以將FPGA 的片上資源劃分成多個(gè)小處理器來提高計(jì)算能力[30],使用多個(gè)FPGA 加速卷積神經(jīng)網(wǎng)絡(luò)來提高整體的計(jì)算吞吐等[31-32]。為了有效解決片上存儲(chǔ)器帶寬對(duì)性能的限制,學(xué)者提出一種新的內(nèi)核設(shè)計(jì)[33],在計(jì)算、片上和片外存儲(chǔ)器訪問之間提供最佳的平衡。
此外,可以使用二值神經(jīng)網(wǎng)絡(luò)來降低數(shù)據(jù)精度提高數(shù)據(jù)傳輸速度,進(jìn)而提高卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算效率[34-35]。文獻(xiàn)[34]使用如圖6 所示結(jié)構(gòu)的處理單元和乘法單元。在處理單元中,使用一個(gè)本地RAM 來保持網(wǎng)絡(luò)權(quán)重并且將權(quán)重打包成bit 值來提高處理效率;在乘法單元中,使用同或門替代乘法器來降低計(jì)算難度并提高計(jì)算效率。這種降低FPGA 片上資源的使用、減小計(jì)算難度來實(shí)現(xiàn)加速的優(yōu)化思路十分值得借鑒,在后續(xù)其他相關(guān)研究中也有很多應(yīng)用。在150 MHz的頻率條件下的VGG8 模型中,此方法獲得的能效比是GPU(GTX Titan X)的10 倍[34]。由于該設(shè)計(jì)重點(diǎn)關(guān)注的是計(jì)算結(jié)構(gòu),而忽略了數(shù)據(jù)交互相關(guān)的優(yōu)化,其加速性能還有提升的空間。
Fig.6 Proposed accelerator for binarized neural networks圖6 二值神經(jīng)網(wǎng)絡(luò)硬件結(jié)構(gòu)
同時(shí),還有學(xué)者提出了一種動(dòng)態(tài)精度數(shù)據(jù)量化的方法[36],這種方法可以使神經(jīng)網(wǎng)絡(luò)不同層對(duì)應(yīng)的定點(diǎn)數(shù)的整數(shù)和小數(shù)位數(shù)不同,進(jìn)而實(shí)現(xiàn)了在找到更短的定點(diǎn)數(shù)位數(shù)的同時(shí)保持需要的準(zhǔn)確率。
基于FPGA 的遞歸神經(jīng)網(wǎng)絡(luò)加速器是新興的研究領(lǐng)域,其設(shè)計(jì)思想在本質(zhì)上與卷積神經(jīng)網(wǎng)絡(luò)加速器是一致的,都是從提高FPGA 的計(jì)算性能和資源利用的角度出發(fā)進(jìn)行加速設(shè)計(jì)。目前這方面的文獻(xiàn)主要集中在LSTM(long short-term memory)和GRU(gated recurrent unit)兩種模型。
文獻(xiàn)[37]在文獻(xiàn)[28]設(shè)計(jì)模型的基礎(chǔ)之上增加了LSTM 緩沖區(qū),實(shí)現(xiàn)了基于FPGA 的LSTM-RNNs 加速器,這樣做的好處是緩沖區(qū)可以保存狀態(tài)參數(shù)而下一級(jí)計(jì)算就無(wú)需重新加載,從而降低了對(duì)帶寬的要求。后面的研究利用深度壓縮的算法對(duì)LSTM 進(jìn)行壓縮并設(shè)計(jì)了專用的編譯器和處理器架構(gòu)與之匹配,進(jìn)一步提高了性能[38]。
對(duì)于GRU模型來說,加速的技術(shù)難點(diǎn)在于如何減少矩陣向量乘法操作所占用的大量時(shí)間。Nurvitadhi等通過將矩陣拆分成多個(gè)列塊進(jìn)而進(jìn)行并行計(jì)算,最終用減少2/3 內(nèi)存空間的代價(jià)換取了矩陣向量乘法減少一半的效果[39],證明了此研究方向的可行性。
在實(shí)際工作中,人們往往會(huì)為了解決特定的問題專門定制具有所需功能的FPGA 加速器,這種定制的加速器設(shè)計(jì)難度相對(duì)較小并且能很好地解決相應(yīng)的問題,因而是目前FPGA 加速器最廣泛的應(yīng)用形式,尤其在語(yǔ)音識(shí)別、圖像識(shí)別和自然語(yǔ)言處理等特定領(lǐng)域,F(xiàn)PGA 的表現(xiàn)十分優(yōu)異。
語(yǔ)音識(shí)別是指能夠讓計(jì)算機(jī)自動(dòng)地識(shí)別語(yǔ)音中所攜帶信息的技術(shù),具有實(shí)時(shí)性強(qiáng)和集成度高的特點(diǎn)。近年來,深度神經(jīng)網(wǎng)絡(luò)模型的發(fā)展給處在瓶頸階段的傳統(tǒng)GMM-HMM 語(yǔ)音識(shí)別技術(shù)帶來了巨大變革,將識(shí)別的準(zhǔn)確率和實(shí)時(shí)性提升到了新的高度,微軟、百度、科大訊飛等多家公司將CNN、RNN 等各種網(wǎng)絡(luò)模型成功地應(yīng)用到語(yǔ)音識(shí)別中并不斷改善系統(tǒng)的識(shí)別率??梢姡疃葘W(xué)習(xí)技術(shù)對(duì)語(yǔ)音識(shí)別的發(fā)展有著極為重要的影響。
在加速語(yǔ)音識(shí)別方面,針對(duì)LSTM 模型壓縮后出現(xiàn)的多核并行負(fù)載不均衡的問題,學(xué)者設(shè)計(jì)了專門用來加速LSTM 的剪枝算法和相應(yīng)的ESE(efficient speech recognition engine)新架構(gòu)[38],其硬件結(jié)構(gòu)如圖7 所示。
Fig.7 Overall architecture of ESE system圖7 ESE 系統(tǒng)整體結(jié)構(gòu)
該結(jié)構(gòu)的核心在于FPGA 上的ESE 加速器,該加速器通過使用多個(gè)由處理單元和激活向量隊(duì)列單元組成的通道單元來解決多核并行負(fù)載不均衡的問題。處理單元均采用雙緩沖區(qū)結(jié)構(gòu)和“乒乓”數(shù)據(jù)傳輸方式以提高執(zhí)行效率;運(yùn)行較快的處理單元可以從激活向量隊(duì)列單元中獲取數(shù)據(jù)繼續(xù)工作而無(wú)需等待其他處理單元,從而解決了不同處理單元工作負(fù)載不平衡所帶來的問題。
這種結(jié)構(gòu)取得了十分優(yōu)異的性能表現(xiàn),在計(jì)算矩陣大小相同的前提下,與CPU(i7 5930k)和GPU(GTX Titan X)相比,Xilinx XCKU060 FPGA 平臺(tái)上ESE 結(jié)構(gòu)的語(yǔ)音識(shí)別速度分別比CPU 和GPU 快43倍和3 倍,并且能效比分別提高了40 倍和11.5 倍[38]。ESE 系統(tǒng)的一個(gè)優(yōu)化難點(diǎn)也是制約其性能的關(guān)鍵在于FPGA 硬件加速器、CPU 軟件程序以及外部存儲(chǔ)器三者之間的任務(wù)分配和調(diào)度協(xié)調(diào)問題,處理好此問題可以使該結(jié)構(gòu)在語(yǔ)音識(shí)別領(lǐng)域獲得更為廣泛的應(yīng)用與發(fā)展。
在實(shí)際應(yīng)用過程中,近幾年韓國(guó)SK 公司推出的AIX(artificial intelligence axellerator)就是在ESE 結(jié)構(gòu)的基礎(chǔ)上為語(yǔ)音識(shí)別提供的一個(gè)解決方案,其應(yīng)用于微軟的開源語(yǔ)音識(shí)別框架Kaldi。AIX 使用了Xilinx 的FPGA 平臺(tái),充分利用了FPGA 能提供的外存訪問帶寬和DSP 資源。在自動(dòng)語(yǔ)音識(shí)別中,其能效比分別是CPU 的10.2 倍和GPU 的20.1 倍,充分體現(xiàn)了FPGA 平臺(tái)加速語(yǔ)音識(shí)別的強(qiáng)大性能。
圖像識(shí)別是指利用計(jì)算機(jī)對(duì)圖像進(jìn)行處理、分析和理解以識(shí)別各種不同模式的目標(biāo)和對(duì)象的技術(shù),是深度學(xué)習(xí)最早嘗試應(yīng)用的領(lǐng)域。2012 年,深度學(xué)習(xí)技術(shù)首次出現(xiàn)在ImageNet 競(jìng)賽中,成功應(yīng)用到圖像識(shí)別領(lǐng)域并以壓倒性的優(yōu)勢(shì)超越了之前最優(yōu)秀的支持向量機(jī)方案,使識(shí)別錯(cuò)誤率大幅降低了40%,并且近年來在圖像分類、圖像檢測(cè)、人臉識(shí)別等領(lǐng)域最優(yōu)秀的系統(tǒng)都是基于深度學(xué)習(xí)開發(fā)的。
在加速圖像識(shí)別方面,針對(duì)圖像識(shí)別的并行計(jì)算性能受硬件資源和帶寬影響的問題,屈偉根據(jù)roofline模型選取最合適的并行展開因子使得在FPGA 上具有最高的性能峰值[40]。其加速架構(gòu)如圖8 所示。
Fig.8 Overall architecture of FPGA acceleration圖8 FPGA 算法加速架構(gòu)
這種架構(gòu)將圖像從DDR 輸入到FPGA 片上緩存,并且在片上本地緩存只緩存正在計(jì)算的權(quán)值,緩存的特征圖作為下一卷積層的輸入與卷積核再次卷積,直到得到最后輸出。該方法還使用流式架構(gòu)分別優(yōu)化卷積層和全連接層,并且將全連接層并行展開來充分利用FPGA 的片上資源。使用ZCU102 評(píng)估板,該方法的性能峰值可達(dá)81.2 GFLOPS,遠(yuǎn)超CPU(i7 8750H)的11.7 GFLOPS,而功耗只有CPU 的25%,模型的識(shí)別精度也比GPU 高出3%[40]。此架構(gòu)在實(shí)際應(yīng)用過程中,由于很大程度受到計(jì)算和內(nèi)存訪問不具有連續(xù)一致性的影響,導(dǎo)致實(shí)際性能并無(wú)明顯提升的同時(shí)反而增加了數(shù)據(jù)流控制的復(fù)雜性,因而從整體實(shí)用性來看,在圖像識(shí)別領(lǐng)域相比于GPU 并無(wú)絕對(duì)優(yōu)勢(shì)。
在產(chǎn)品實(shí)現(xiàn)方面,針對(duì)工業(yè)、物聯(lián)網(wǎng)和機(jī)器視覺等專業(yè)視覺應(yīng)用領(lǐng)域,米爾科技推出的FPGA 圖像處理平臺(tái)展現(xiàn)出強(qiáng)大的圖像處理能力,在圖像識(shí)別、圖像去噪和圖像還原等方面均有優(yōu)異的表現(xiàn),具有4K級(jí)視覺處理能力的同時(shí)將延時(shí)控制在了亞毫秒級(jí)。
自然語(yǔ)言處理(natural language processing,NLP)也是深度學(xué)習(xí)的一個(gè)重要應(yīng)用領(lǐng)域,目前基于統(tǒng)計(jì)的模型已成為NLP 的主流,同時(shí)人工神經(jīng)網(wǎng)絡(luò)在NLP 領(lǐng)域也受到了理論界的足夠重視。在自然語(yǔ)言處理領(lǐng)域,基于FPGA 的處理器模型具有最先進(jìn)的成果,推進(jìn)了人類與嵌入式設(shè)備自然交互的應(yīng)用。
在加速自然語(yǔ)言處理方面,針對(duì)自然語(yǔ)言模型數(shù)量巨大且更新較快的特點(diǎn),Khan 等提出的基于FPGA的覆蓋式處理器NPE(FPGA-based overlay processor for NLP model inference at the edge)可以高效地執(zhí)行各種自然語(yǔ)言處理模型,其架構(gòu)如圖9所示[41]。該架構(gòu)的設(shè)計(jì)思路是利用各種功能單元和對(duì)應(yīng)的內(nèi)存緩沖區(qū)以及FPGA 配置靈活性的特點(diǎn)搭建一個(gè)具有類似軟件可編程性的架構(gòu)以適應(yīng)自然語(yǔ)言處理極為廣泛多樣且復(fù)雜多變的應(yīng)用環(huán)境。
這種結(jié)構(gòu)的矩陣乘法單元(matrix multiply unit,MMU)包含大量的處理單元來高速執(zhí)行矩陣乘法,并將結(jié)果寫入存儲(chǔ)器,非線性向量單元(nonlinear vector unit,NVU)從MMU 存儲(chǔ)器讀取,并將結(jié)果寫入MIB(MMU input buffer)[41]。其中NVU 是一個(gè)數(shù)據(jù)并行向量加載/存儲(chǔ)體系結(jié)構(gòu),它在每個(gè)時(shí)鐘周期中對(duì)多個(gè)元素執(zhí)行算術(shù)和邏輯操作,可以在最小的資源開銷下處理高通量非線性函數(shù)計(jì)算,由此來達(dá)到預(yù)期的加速效果,并且為了滿足每個(gè)加速器不同的FPGA的設(shè)計(jì),可以為未來的NLP 模型升級(jí),而無(wú)需重新配置,因此NPE可以有效地執(zhí)行各種NLP模型。
在Ultrascale+VCU118 FPGA 平臺(tái)上,NPE 在可以滿足實(shí)時(shí)對(duì)話式AI 延遲目標(biāo)的同時(shí),其功耗是CPU(i7 8700k)的1/4,是GPU(RTX 5000)的1/6[41]。除了優(yōu)異的性能表現(xiàn),NPE 高適應(yīng)性的特點(diǎn)十分契合NLP 的未來發(fā)展形式,這展示出該架構(gòu)以及FPGA在自然語(yǔ)言處理領(lǐng)域的廣闊應(yīng)用前景。
Fig.9 Overall architecture of NPE圖9 NPE 整體架構(gòu)
研究人員在設(shè)計(jì)FPGA 加速器時(shí)也要考慮優(yōu)化策略,合理的優(yōu)化可以明顯提高加速器的性能以及資源利用率,目前研究較多的優(yōu)化策略主要包括計(jì)算優(yōu)化和內(nèi)存優(yōu)化。
(1)計(jì)算優(yōu)化。包括提高并行計(jì)算能力、循環(huán)流水技術(shù)、循環(huán)分塊和循環(huán)展開等。對(duì)于計(jì)算并行優(yōu)化,Motamedi 等指出神經(jīng)網(wǎng)絡(luò)中的并行方式主要有四種,即不同層之間的并行、不同輸出特征圖之間的并行、像素點(diǎn)之間的并行和像素點(diǎn)計(jì)算的并行[42]。由于相鄰的層與層之間存在數(shù)據(jù)依賴,實(shí)現(xiàn)不同層之間的并行優(yōu)化最為復(fù)雜,其他三種并行方式的優(yōu)化通常是研究人員考慮的重點(diǎn)。
對(duì)于循環(huán)展開和循環(huán)流水技術(shù),學(xué)者通過使用循環(huán)展開形成有效的流水,流水線架構(gòu)能夠縮短整體執(zhí)行時(shí)間[43]。
循環(huán)展開在消耗一定硬件資源的前提下形成流水線型架構(gòu),從而提高了并行度,節(jié)省了計(jì)算所需時(shí)間。文獻(xiàn)[43]使用循環(huán)展開大幅降低了load 模塊和store 模塊的操作數(shù),內(nèi)核的執(zhí)行時(shí)間也從未展開時(shí)的1 110.096 ms 降低為循環(huán)展開后的46.620 ms。但循環(huán)展開并不是萬(wàn)能法則,在使用循環(huán)展開時(shí)必須要充分考慮循環(huán)中數(shù)據(jù)之間的關(guān)系、卷積核大小等問題并以此來確定對(duì)應(yīng)的硬件設(shè)計(jì),防止出現(xiàn)事倍功半的結(jié)果。
(2)內(nèi)存優(yōu)化。包括減小數(shù)據(jù)精度和層間數(shù)據(jù)復(fù)用等。對(duì)于計(jì)算的操作數(shù),在不損失準(zhǔn)確率或者準(zhǔn)確率損失較小的情況下用定點(diǎn)數(shù)代替浮點(diǎn)數(shù)是可行的[44]。
神經(jīng)網(wǎng)絡(luò)通常是流式結(jié)構(gòu),因此每層的計(jì)算都需要片下存儲(chǔ)的訪問,文獻(xiàn)[45]使用了層與層之間融合的方法,更好地解決層與層之間數(shù)據(jù)復(fù)用的問題。這種方法使用金字塔狀的多層滑動(dòng)窗口對(duì)輸入數(shù)據(jù)進(jìn)行處理,進(jìn)而可以得到后面幾層的結(jié)果。四層單金字塔和多金字塔結(jié)構(gòu)示例如圖10 所示。
在單金字塔結(jié)構(gòu)中,所有層都融合成一個(gè)金字塔,這樣只能加載第一層的數(shù)據(jù)并且只有第四層的輸出存儲(chǔ)到動(dòng)態(tài)隨機(jī)存儲(chǔ)器。相比之下,在多金字塔結(jié)構(gòu)中,第三層輸出必須存儲(chǔ)到動(dòng)態(tài)隨機(jī)存儲(chǔ)器并且需要讀回以組成第二個(gè)金字塔,這種結(jié)構(gòu)使得輸入和輸出的結(jié)果更小,從而減少了所用模型的計(jì)算量。
Fig.10 Example of single pyramid and multi-pyramid applied over four layers圖10 四層單金字塔和多金字塔示例
實(shí)驗(yàn)使用VGGNet-E 中的前五個(gè)卷積層融合的CNN 加速器與賽靈思Virtex-7 FPGA 加速器進(jìn)行比較,結(jié)果證明這種多金字塔融合卷積層的方法減小了95%的片外存儲(chǔ)訪問[45],計(jì)算效率得以提高。
不論是面向計(jì)算還是內(nèi)存的優(yōu)化,其目的都在于降低FPGA 的計(jì)算復(fù)雜度,提高數(shù)據(jù)交換能力以及資源利用率。由于其思路簡(jiǎn)潔、成效頗豐,這些針對(duì)優(yōu)化策略的加速設(shè)計(jì)在未來將會(huì)獲得科研人員持久且廣泛的關(guān)注與重視。
研究人員使用現(xiàn)成的硬件模板來設(shè)計(jì)加速器是另一種可行方案,因?yàn)檫@些FPGA 硬件模板已經(jīng)實(shí)現(xiàn)了某些編程模型,人們只需針對(duì)自己的具體問題再進(jìn)行模塊完善和配置參數(shù)即可,但是目前對(duì)于這種通用硬件加速器框架的研究還很少。在深度神經(jīng)網(wǎng)絡(luò)研究中,傳統(tǒng)的加速器設(shè)計(jì)流程可能使得FPGA 開發(fā)人員難以跟上深度神經(jīng)網(wǎng)絡(luò)創(chuàng)新的快速步伐,針對(duì)這一問題,有學(xué)者提出了一種FP-DNN 的框架[46],如圖11 所示。
這種端到端的框架使用TensorFlow 描述的DNN作為輸入,并用RTL-HLS 混合模板作為硬件生成器在FPGA 上自動(dòng)生成硬件實(shí)現(xiàn):使用RTL 來設(shè)計(jì)高性能計(jì)算引擎并使用基于OpenCL 的HLS 框架來實(shí)現(xiàn)RTL 部分的控制邏輯,從基于軟件的模型描述到基于FPGA 的模型推理實(shí)現(xiàn),此程序都是自動(dòng)完成,無(wú)需任何人工干預(yù)。
Fig.11 FP-DNN framework圖11 FP-DNN 框架
實(shí)驗(yàn)結(jié)果表明,在VGG-19 模型中,Stratix-V GSMD5 FPGA 平臺(tái)的16 位定點(diǎn)計(jì)算性能大概是CPU(Xeon E5-2650v2)平臺(tái)的2 到3 倍,能量利用率也達(dá)到了20 倍,并且相比于傳統(tǒng)開發(fā)設(shè)計(jì)流程,所用開發(fā)實(shí)現(xiàn)時(shí)間縮短了20%左右[46]。在實(shí)際使用過程中,由于計(jì)算內(nèi)核需要與芯片外的DRAM 進(jìn)行輸入輸出通信,帶寬問題可能會(huì)成為整體性能的瓶頸,因此必須選擇恰當(dāng)?shù)姆桨竵韮?yōu)化不同層的DRAM 帶寬,例如在卷積層使用Row-major 的方式存儲(chǔ)輸入特性以避免數(shù)據(jù)重復(fù),或者使用Channel-major 的方式來扁平輸入矩陣等。
通過前面對(duì)各種FPGA 加速深度學(xué)習(xí)的模型和框架的分析,將其測(cè)試和仿真結(jié)果與相應(yīng)的CPU 和GPU 平臺(tái)的結(jié)果相比較,客觀評(píng)價(jià)FPGA 加速深度學(xué)習(xí)的各種性能表現(xiàn)。
在LSTM、VGG 和Res-Net 三種模型中,F(xiàn)P-DNN(Stratix-V GSMD5)、CPU(Xeon E5-2650v2)和GPU(GTX TITAN X)性能對(duì)比如表1[46]所示。
根據(jù)表1 可以得到,F(xiàn)PGA 加速VGG 模型的效果最好,其性能稍高于LSTM,明顯高于Res-Net,并且16 位定點(diǎn)數(shù)相比于32 位浮點(diǎn)數(shù)的表現(xiàn)更為出色[46]。不論何種網(wǎng)絡(luò)模型,采用16 位定點(diǎn)數(shù)的FP-DNN 的功耗和能效相對(duì)于CPU 和GPU 有較大優(yōu)勢(shì),其性能峰值是CPU 的1.9~3.06 倍。
雖然FP-DNN 在性能上無(wú)法與GPU 競(jìng)爭(zhēng),但是這種設(shè)計(jì)和使用通用加速器框架的思路仍然具有進(jìn)一步的研究?jī)r(jià)值。同樣,由于人工智能的網(wǎng)絡(luò)結(jié)構(gòu)越來越不局限于傳統(tǒng)的卷積形式,具有可重構(gòu)性的FPGA 便脫穎而出,未來關(guān)于FPGA 加速神經(jīng)網(wǎng)絡(luò)的研究成果會(huì)越來越多,其應(yīng)用也會(huì)越來越廣泛。
Table 1 Performance comparison of different networks on different platforms表1 不同模型在不同平臺(tái)的性能對(duì)比
針對(duì)語(yǔ)音識(shí)別的加速器性能對(duì)比如表2[38]所示,所用硬件平臺(tái)為i7 5930k(CPU)、GTX Titan X(GPU)和XCKU060(FPGA),網(wǎng)絡(luò)模型為L(zhǎng)STM。
Table 2 Performance comparison of speech recognition on different platforms表2 語(yǔ)音識(shí)別在不同平臺(tái)的性能對(duì)比
針對(duì)圖像識(shí)別的加速器性能對(duì)比如表3[40]所示,所用硬件平臺(tái)為i7 8750H(CPU)、GTX 1070(GPU)和ZCU102(FPGA),網(wǎng)絡(luò)模型為VGG。
Table 3 Performance comparison of image recognition on different platforms表3 圖像識(shí)別在不同平臺(tái)的性能對(duì)比
針對(duì)自然語(yǔ)言處理的加速器性能對(duì)比如表4[41]所示,所用硬件平臺(tái)為i7 8700K(CPU)、RTX 5000(GPU)和Zynq-7100(FPGA),所用基準(zhǔn)為FTRANS(Ultrascale+VCU118)加速器。
Table 4 Performance comparison of natural language processing on different platforms表4 自然語(yǔ)言處理在不同平臺(tái)的性能對(duì)比
觀察表2~表4 可以得出,在三個(gè)領(lǐng)域之中,F(xiàn)PGA在語(yǔ)音識(shí)別和自然語(yǔ)言處理領(lǐng)域獲得的加速效果更明顯,在功耗以及速度方面均擊敗了CPU 和GPU,但FPGA 在圖像識(shí)別領(lǐng)域的峰值速度不及GPU,在這種情況下,F(xiàn)PGA 的優(yōu)勢(shì)在于其識(shí)別精度略高于后者。
綜合仿真結(jié)果以及FPGA 在這些領(lǐng)域的發(fā)展現(xiàn)狀,F(xiàn)PGA 在語(yǔ)音識(shí)別以及自然語(yǔ)言處理領(lǐng)域有著巨大的發(fā)展?jié)摿蛷V闊的應(yīng)用前景,尤其在人工智能實(shí)時(shí)會(huì)話等實(shí)時(shí)性要求很高的領(lǐng)域,F(xiàn)PGA 憑借其低延時(shí)、高性能的優(yōu)勢(shì)可以很好地滿足人們的需要。相比之下,F(xiàn)PGA 在圖像識(shí)別和處理領(lǐng)域也有其一席之地,特別是在可定制、可升級(jí)、需求量不大的軍工和醫(yī)療等領(lǐng)域,但是就總體的應(yīng)用廣泛程度而言,F(xiàn)PGA 還遠(yuǎn)不能撼動(dòng)GPU 的地位。
FPGA 集群的性能對(duì)比如表5[32]所示,所用硬件平臺(tái)為Virtex7 XC7VX690T(FPGA)、GTX Titan X(GPU),網(wǎng)絡(luò)模型為VGG。
Table 5 Performance comparison of different cluster-levels表5 不同集群級(jí)的性能對(duì)比
從表5 結(jié)果可以得出,15*FPGA 集群相比于單FPGA 在性能和能效上有較大提升,并且性能峰值已經(jīng)接近GPU,但是4*FPGA 集群性能和能效卻不及單FPGA,這說明了多FPGA 集成時(shí)需要注意的問題:各個(gè)FPGA 之間的權(quán)重分配、各種映射策略的平衡以及通信帶寬的限制,一旦沒有很好地解決這些問題,F(xiàn)PGA 集成取得的結(jié)果可能是事倍功半,這也在一定程度上限制了其發(fā)展。
隨著深度學(xué)習(xí)的不斷發(fā)展,加速深度學(xué)習(xí)的研究近年來備受關(guān)注,雖然FPGA 憑借其可重構(gòu)、低能耗等優(yōu)勢(shì)在加速深度學(xué)習(xí)方面取得了一定成績(jī),但是也存在硬件編程困難以及重構(gòu)過程時(shí)間成本較大等不可忽視的劣勢(shì),因此FPGA 要達(dá)到更加為人們所熟知和更為廣泛應(yīng)用的階段仍然有很長(zhǎng)的路要走。根據(jù)目前的發(fā)展形勢(shì)可知,未來重點(diǎn)研究方向主要為以下幾點(diǎn):
(1)激活函數(shù)優(yōu)化。目前在FPGA 計(jì)算優(yōu)化中對(duì)矩陣運(yùn)算的循環(huán)部分研究居多,而對(duì)激活函數(shù)優(yōu)化改進(jìn)的研究很少,因而這是一個(gè)有待挖掘的領(lǐng)域。
(2)數(shù)據(jù)優(yōu)化。采用低位數(shù)據(jù)可以提高模型的加速性能,但是也帶來了精度較低等劣勢(shì),未來可以加強(qiáng)動(dòng)態(tài)精度數(shù)據(jù)量化的研究,使神經(jīng)網(wǎng)絡(luò)不同層對(duì)應(yīng)的定點(diǎn)數(shù)的整數(shù)和小數(shù)位數(shù)不同,進(jìn)而實(shí)現(xiàn)在找到更短的定點(diǎn)數(shù)位數(shù)的同時(shí)保持需要的準(zhǔn)確率。
(3)FPGA 集群。集成多個(gè)FPGA 芯片的性能表現(xiàn)十分優(yōu)異,問題在于如何處理好各個(gè)芯片之間的處理調(diào)度和分配問題,下一步可以從各種細(xì)粒度的劃分以及各芯片之間的權(quán)重分配出發(fā)來研究提高片上存儲(chǔ)器利用率,降低存儲(chǔ)需求。
(4)通信效率的提升。帶寬始終限制著FPGA 加速深度學(xué)習(xí)的實(shí)際效果,在未來可以從減少深度學(xué)習(xí)模型的帶寬需求以及變更體系結(jié)構(gòu)的角度出發(fā)優(yōu)化通信機(jī)制,進(jìn)而提高FPGA 與其他硬件之間的通信效率。
可以預(yù)見,深度學(xué)習(xí)作為機(jī)器學(xué)習(xí)的革命性實(shí)現(xiàn)方法在未來有廣闊的發(fā)展前景。同樣,基于FPGA的深度學(xué)習(xí)加速技術(shù)也會(huì)漸入佳境、日新月異,最終促進(jìn)整個(gè)人工智能領(lǐng)域的變革和發(fā)展。