胡延步 邵翠萍 李慧云
1(中國科學(xué)院深圳先進(jìn)技術(shù)研究院 深圳 518055)2(西安電子科技大學(xué) 西安 710071)
3(中國科學(xué)院人機(jī)智能協(xié)同系統(tǒng)重點(diǎn)實驗室 深圳 518055)
4(粵港澳人機(jī)智能協(xié)同系統(tǒng)聯(lián)合實驗室 深圳 518055)
隨著大數(shù)據(jù)、人工智能等領(lǐng)域[1-2]的發(fā)展,數(shù)據(jù)的產(chǎn)生量、存儲量和運(yùn)算量都在飛快地發(fā)展。另一方面,摩爾定律的持續(xù)放緩使得傳統(tǒng)中央處理器(Central Processing Unit,CPU)難以滿足人工智能領(lǐng)域的高算力要求。而異構(gòu)計算[3]融合了不同的芯片架構(gòu),如 CPU、現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)、圖形處理器(Graghics Processing Unit,GPU)、專用集成電路等。整個異構(gòu)平臺通過合理地控制與分配運(yùn)算使得架構(gòu)中的芯片各專所長,從而構(gòu)成了強(qiáng)大的異構(gòu)計算系統(tǒng)。與 GPU 相比,F(xiàn)PGA[4-5]的功耗更低,不僅能利用硬件單元進(jìn)行并行計算,同時還具有可編程的優(yōu)點(diǎn),故比專用集成電路更具靈活性。將 FPGA 與嵌入式 CPU 相結(jié)合,可以有效補(bǔ)充 CPU 算力不足與功耗高的問題。以賽靈思(Xilinx)和英特爾為代表的 FPGA 廠商[6]在認(rèn)識到異構(gòu)計算的重要性后,紛紛推出搭建安謀架構(gòu)的 CPU(ARM)+FPGA 的片上系統(tǒng)異構(gòu)芯片。但在運(yùn)行日益復(fù)雜的深度學(xué)習(xí)模型時,單塊 FPGA 芯片[7-9]往往會出現(xiàn)硬件資源不足的情況,而在追求高算力和低功耗的深度學(xué)習(xí)推理模型下,多 FPGA 異構(gòu)平臺成為了一種新的探索目標(biāo)和解決方案。
多 FPGA 異構(gòu)平臺中,ARM 負(fù)責(zé)多 FPGA 的控制與調(diào)度。目前國內(nèi)外常用的多 FPGA 異構(gòu)控制方法為并行控制、分布式控制和流水線控制。與并行控制和分布式控制相比,流水線控制在控制邏輯上更簡單,也更符合深度學(xué)習(xí)算法推理的數(shù)據(jù)流過程。但國內(nèi)外在 FPGA 板之間分配算法任務(wù)等流水線問題仍缺乏系統(tǒng)性方法。首先,在任務(wù)劃分方面,大多數(shù)案例僅依據(jù)算法中運(yùn)算量大的層級,如卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)的卷積層,進(jìn)行簡單的主觀劃分。因此,需要多次劃分比較甚至遍歷才能獲得理想的流水線平衡,同時這也限制了獲得更優(yōu)良流水線性能及吞吐率的可能。例如,Morisita 等[10]設(shè)計的多 FPGA 平臺由于任務(wù)不均衡導(dǎo)致其流水線利用率僅 60%。其次,在通信延遲方面,Yoshimi 等[11]構(gòu)建了超長的流水線結(jié)構(gòu),但并未考慮板間傳輸延遲造成的顯著影響,故而吞吐率不高;Guo 等[12]雖然針對特定任務(wù)進(jìn)行了合理劃分與部署,但由于缺少通用性且通信方案固定,因此限制了流水線優(yōu)化的靈活性。此外,在模塊內(nèi)優(yōu)化方面,大多數(shù)研究在使用高層次綜合(High-level Synthesis,HLS)工具進(jìn)行 FPGA 板內(nèi)模塊開發(fā)時,并未充分利用數(shù)據(jù)關(guān)系與循環(huán)流水線技術(shù)進(jìn)行并行加速設(shè)計。
本文通過搭建多 FPGA 流水線異構(gòu)平臺,充分發(fā)揮多 FPGA 與流水線技術(shù)的優(yōu)勢,以提高異構(gòu)平臺的吞吐率。具體地,從三方面對多 FPGA 異構(gòu)平臺的流水線技術(shù)進(jìn)行優(yōu)化:①利用二分法將任務(wù)劃分問題求解難度降低,并將任務(wù)均衡地劃分部署到各 FPGA 中,從而提高了流水線的平衡度;②根據(jù)板間傳輸延遲的相對大小優(yōu)化流水線結(jié)構(gòu),若延遲較小或任務(wù)運(yùn)行延遲較大則將板間延遲加入流水線的級內(nèi),反之則將板間延遲作為模塊級流水線的單獨(dú)一級;③并行優(yōu)化計算單元模塊,考察任務(wù)中多層嵌套循環(huán)的數(shù)據(jù)關(guān)系并重新部署代碼結(jié)構(gòu),通過使用循環(huán)展開與循環(huán)流水線技術(shù)在時間和空間上進(jìn)行并行加速,同時合理使用 FPGA 內(nèi)的塊級隨機(jī)訪問存儲器(BlockRAM,BRAM)以優(yōu)化訪存。
異構(gòu)計算是指使用不同體系結(jié)構(gòu)的硬件設(shè)備或不同類型指令集的硬件設(shè)備組成一個系統(tǒng)進(jìn)行計算的方法。使用異構(gòu)系統(tǒng)將不同的計算任務(wù)交由不同的平臺處理,可以充分發(fā)揮各類設(shè)備的優(yōu)勢,以獲得更高的計算性能。
常見的異構(gòu)計算平臺[13]包括 GPU、FPGA 和數(shù)字信號處理器等。GPU 具有多核多線程、高度并行、高存儲帶寬等特點(diǎn),在高性能計算中的應(yīng)用日益廣泛。2019 年超威公司推出了更為先進(jìn)的 Zen 2 架構(gòu)[14],進(jìn)一步提升了 GPU 性能,此應(yīng)用處理器更是實現(xiàn)了異構(gòu)系統(tǒng)的單片化,將 CPU 和 GPU 集成于同一芯片上,大幅縮減了主機(jī)與從機(jī)間數(shù)據(jù)傳輸?shù)臅r間。FPGA 作為一種可編程器件,于 2012 年正式加入異構(gòu)計算的行列。從硬件架構(gòu)上來看,F(xiàn)PGA 與異構(gòu)計算加速設(shè)備的平臺模型沒有明顯的對應(yīng)關(guān)系,但可編程的優(yōu)點(diǎn)使其成為一種更加靈活的異構(gòu)計算平臺。例如,在處理分支跳轉(zhuǎn)指令時,F(xiàn)PGA 采用邏輯電路同時執(zhí)行各個分支語句,而 GPU 則需要串行處理不同分支語句。異構(gòu)計算作為面對大規(guī)模處理任務(wù)時的通用解決方案,已經(jīng)部署應(yīng)用于越來越多的場合中。異構(gòu)計算一般由一組異構(gòu)機(jī)器、將各異構(gòu)機(jī)器連接起來的高速網(wǎng)絡(luò)及相應(yīng)異構(gòu)計算支撐軟件組成。
由于單板 FPGA 片上計算資源與高速緩存較少,在運(yùn)行規(guī)模龐大的算法任務(wù)時不能滿足高性能和高能源效率的要求,因此搭建多 FPGA 異構(gòu)平臺成為一種需要。多 FPGA 異構(gòu)平臺具有不同的布置與處理方式,如分布式計算平臺與并行計算平臺。Lin 等[15]和林常航等[16]提出基于 Zynq 開發(fā)板的 Hadoop 集群 Z Cluster。該平臺整體采取主從結(jié)構(gòu),由 1 臺 PC 機(jī)作為主設(shè)備(用作任務(wù)調(diào)配和對外通信),8 塊 Zynq 板作為從設(shè)備(用作并行計算的運(yùn)行設(shè)備)。這種 ARM+FPGA 的模式既能在一定程度上彌補(bǔ)嵌入式處理器計算能力不足的缺陷,又能發(fā)揮其低功耗的優(yōu)勢,組成具有較好拓展性及較高性能的分布式計算環(huán)境。Neshatpour 等[17-18]提出一種由一個主設(shè)備和多個從設(shè)備共同組成的并行計算平臺。其中,該平臺的主設(shè)備采用臺式機(jī)(負(fù)責(zé)任務(wù)的分配和調(diào)度),從設(shè)備是 Zedboard(負(fù)責(zé)被分配任務(wù)的計算,并將計算的結(jié)果反饋給主設(shè)備進(jìn)行綜合處理),二者通過 PCIe 相連。
分布式計算平臺適合用于同時計算不同的算法任務(wù),而并行計算方式適合用于分支結(jié)構(gòu)復(fù)雜的算法任務(wù)。但是,這兩種方式并不適合數(shù)據(jù)流形式的深度學(xué)習(xí)推理,因而在多板控制上應(yīng)用流水線技術(shù)[19-20]成為最佳選擇。與多周期方式相比,流水線處理方式在連續(xù)運(yùn)行的情況下極大地提高了吞吐率。但在應(yīng)用流水線技術(shù)設(shè)計多 FPGA 平臺時,仍存在較多問題,如任務(wù)劃分問題、流水線結(jié)構(gòu)問題和板內(nèi)設(shè)計問題。
本文采用的多 FPGA 異構(gòu)流水線方式[21]如圖 1 所示。首先,把每個 FPGA 節(jié)點(diǎn)作為流水線的一級,使用 RapidIO 對板間的傳輸進(jìn)行連接,并通過片內(nèi) AXI 總線將中間數(shù)據(jù)傳輸?shù)?SRIO 的 IP 核進(jìn)行編碼打包;然后,通過 GTX 協(xié)議,在物理層上以 SFP+的光纖接口連接到下一個 FPGA 節(jié)點(diǎn)的 SFP+光纖接口中;最后,通過 SRIO 核進(jìn)行解碼,恢復(fù)出傳輸?shù)臄?shù)據(jù)并送到該節(jié)點(diǎn) FPGA 計算單元中。
本文針對基于多 FPGA 異構(gòu)的流水線平臺,進(jìn)行如下整體設(shè)計與優(yōu)化方案:①對整體的總?cè)蝿?wù)進(jìn)行劃分并將劃分后的各個子任務(wù)部署在多 FPGA 節(jié)點(diǎn)之中;②針對不同 FPGA 節(jié)點(diǎn)板間傳輸延遲的影響,對流水線結(jié)構(gòu)進(jìn)行優(yōu)化;③優(yōu)化部署后對不同 FPGA 節(jié)點(diǎn)內(nèi)負(fù)責(zé)執(zhí)行各子任務(wù)的計算單元進(jìn)行并行加速優(yōu)化設(shè)計。
任務(wù)劃分的目的是平衡各 FPGA 的流水線以最大化吞吐率。具體地,先拆分任務(wù)層級結(jié)構(gòu),再將拆分的多個子層級劃分部署于多個 FPGA 節(jié)點(diǎn)中。假設(shè)對于一個任務(wù)網(wǎng)絡(luò)(如 CNN 網(wǎng)絡(luò)),在不破壞網(wǎng)絡(luò)層級結(jié)構(gòu)的前提下,按照該任務(wù)的層級結(jié)構(gòu)將網(wǎng)絡(luò)拆分為多個細(xì)小的子層級,若數(shù)量為m,按照網(wǎng)絡(luò)的運(yùn)行順序分別表示為M1,M2,…,Mm,則m個子層級的相應(yīng)運(yùn)行延遲為L(Mi),其中i=1, 2, …,m,而這些排列好的L(Mi)組成數(shù)組M。當(dāng) FPGA 節(jié)點(diǎn)內(nèi)部使用近似并行優(yōu)化策略時,各子層級的運(yùn)行延遲與運(yùn)算量近似成正比。因此,任務(wù)劃分即為優(yōu)化板級流水線結(jié)構(gòu),亦即將流水線中最長的一級延遲降至最低,同時也是將任務(wù)量盡量均衡地部署在多 FPGA 中。對于任務(wù)劃分問題,有多種方法可求解。為了適配問題求解的通用性與易用性,需要設(shè)計一個對任意數(shù)組M以及 FPGA 節(jié)點(diǎn)數(shù)K進(jìn)行自動計算劃分結(jié)果的程序或方法,因此本文提出任務(wù)二分迭代法。
二分法是單調(diào)函數(shù)求根中的常用方法,其基本思想是利用零點(diǎn)定理確定根的存在區(qū)間,將含根的區(qū)間對分,通過判別對分點(diǎn)函數(shù)的符號,將有根區(qū)間縮小一半。然后,重復(fù)以上過程,將根的存在區(qū)間縮到充分小,從而求出滿足精度要求的根的近似值。二分法尋根具有計算量低的優(yōu)勢,同時,二分法的引入是為了通過迭代方式逐步求得每個 FPGA 應(yīng)該部署到哪些子層級中。為達(dá)到這一目標(biāo)還需引入約束值LM,其中LM的引入是對 FPGA 設(shè)備運(yùn)算量部署/運(yùn)行延遲進(jìn)行約束或參考。由于數(shù)組M的元素都是正數(shù),如果以元素的角標(biāo)作為函數(shù)x的自變量、以元素的累加和減去約束值LM作為函數(shù)因變量f(x),那么離散函數(shù)f(x)就構(gòu)成了單調(diào)遞增函數(shù),這符合利用二分法求值的前提。
首先設(shè)置約束值LM,再根據(jù)二分法使選取子層級的運(yùn)行延遲L(Mi)之和盡可能接近LM,即做出了 1 次單次劃分。由于每次單次劃分后的結(jié)果相對約束值存在一定的偏差,因此在每次單次劃分后需要不斷迭代上述過程,最終得出一個優(yōu)良的任務(wù)劃分結(jié)果,因此該法稱為任務(wù)二分迭代法。 設(shè)運(yùn)算量/執(zhí)行延遲最大的子層級為Mt,其對應(yīng)的執(zhí)行延遲為L(Mt),則LM表示為:
在多 FPGA 系統(tǒng)中應(yīng)用流水線,不可避免地要考慮板間傳輸延遲的影響。由于板間傳輸延遲與任務(wù)劃分部署結(jié)果及板間通信方案均有關(guān),因此為了探索不同場景下板間傳輸延遲的影響及其應(yīng)對方法,提出 2 種針對板間延遲的流水線結(jié)構(gòu)優(yōu)化方案:(a)將板間延遲加入到板內(nèi)作為流水線的一部分;(b)將板間延遲單獨(dú)作為流水線的一級。
圖2 任務(wù)二分迭代法的劃分示意圖Fig. 2 Schematic diagram of task dichotomy iteration method
圖3 針對板間延時的流水線結(jié)構(gòu)的設(shè)計優(yōu)化方案Fig. 3 Design optimization scheme of pipeline structure for interboard delay
圖4 優(yōu)化前后的卷積計算代碼Fig. 4 The convolution computation code before and after optimization
表1 數(shù)據(jù)共享關(guān)系Table 1 Data sharing relationship
對數(shù)據(jù)關(guān)系進(jìn)行重排和將循環(huán)展開后,循環(huán)個數(shù)將變?yōu)?4 個嵌套的完美循環(huán)。在展開后的循環(huán)層級中使用流水線技術(shù),可以達(dá)到時間上的優(yōu)化,提高模塊內(nèi)的吞吐率。也就是說,循環(huán)展開是一種空間優(yōu)化技術(shù),而流水線是一種時間優(yōu)化技術(shù),兩者結(jié)合將得到良好的模塊內(nèi)并行優(yōu)化結(jié)果。優(yōu)化前后的卷積計算代碼如圖 4 所示,綜合后的硬件框架如圖 5 所示。
實驗選擇的任務(wù)為經(jīng)典 CNN 網(wǎng)絡(luò)——AlexNet。由于全連接層參數(shù)多會導(dǎo)致 BRAM 資源不足且功耗較高,因此舍棄全連接層,并對 AlexNet 進(jìn)行修改。按照前文所述方法列出各子層級信息并使用 HLS 得到各子層級的延遲信息與資源信息,具體如表 2 所示。為說明任務(wù)二分迭代法的通用性,實驗平臺為由 3/4 塊 Zynq7035 搭建的K=3/4 的 FPGA 異構(gòu)開發(fā)平臺,而流水
表2 初步綜合后的網(wǎng)絡(luò)子層級信息Table 2 Network sub-level information after preliminary synthesis
圖5 代碼優(yōu)化綜合后的硬件框架示意圖Fig. 5 The hardware framework diagram after code optimization and synthesis
圖6 傳統(tǒng)的任務(wù)劃分結(jié)果Fig. 6 Traditional task segmentation results
圖7 使用二分迭代法后的任務(wù)劃分結(jié)果Fig. 7 The results of task partition after using dichotomy iteration method
圖8 不同任務(wù)數(shù)下兩種方案的總時間比較Fig. 8 The total time of the two schemes is compared with the number of tasks
4.2.3 計算單元并行優(yōu)化結(jié)果
圖9 不同階段優(yōu)化方法的吞吐率與能效比實驗結(jié)果(K=4 )Fig. 9 Experimental results of throughput and energy efficiency of optimization methods in each stage are compared when K=4
在任務(wù)劃分與流水線結(jié)構(gòu)優(yōu)化后,根據(jù) 3.3 小節(jié)所述優(yōu)化卷積層代碼從而并行優(yōu)化各 FPGA 節(jié)點(diǎn)的計算單元。各階段優(yōu)化方法的吞吐率與能效比實驗結(jié)果如圖 9 所示,圖中從左到右為優(yōu)化的順序。傳統(tǒng)方法采用圖 6 方法部署任務(wù),且未優(yōu)化流水線結(jié)構(gòu)與計算單元。此方法單次任務(wù)運(yùn)行延遲為 517.7 ms,吞吐率為 7.73 imgs/s,總功耗為 8.57 W,能效比為 0.9 imgs/J。而采用本文的任務(wù)劃分方法后,吞吐率提升為 9.09 imgs/s;之后針對板間延遲優(yōu)化流水線結(jié)構(gòu),吞吐率提升為 9.48 imgs/s;最后并行優(yōu)化計算單元,單次任務(wù)運(yùn)行延遲為 328 ms,吞吐率為 24.4 imgs/s,總功耗為 13.18 W,能效比為 1.85 imgs/J。與傳統(tǒng)方法相比,本文方法完成所有優(yōu)化步驟后的平臺吞吐率提高了 215.6%,能效比提高了 105.5%,單次任務(wù)的運(yùn)行時間也減少了 36.6%。
現(xiàn)有的異構(gòu)計算研究主要以單板為主,盡管目前對多 FPGA 異構(gòu)平臺的研究還比較少,但其具有良好的應(yīng)用前景,同時構(gòu)建多 FPGA 流水線結(jié)構(gòu)非常契合深度學(xué)習(xí)推理的需求。然而,在多 FPGA 異構(gòu)平臺的流水線結(jié)構(gòu)中,對流水線技術(shù)各方面的優(yōu)化還缺乏系統(tǒng)方法。Zhang 等[22]在多 FPGA 的任務(wù)劃分問題上提出吞吐率最大化和單次延遲最小化的窮舉法,時間復(fù)雜度為O(m2×K)(m為子任務(wù)的數(shù)量,K為 FPGA 數(shù)量),但該方法沒有具體討論板間通信延遲的影響。Liang 等[23]針對多 FPGA 流水線問題提出板間延遲模塊化流水線方法,但在任務(wù)劃分方面仍使用傳統(tǒng)方法,且在計算單元并行優(yōu)化中沒有分析數(shù)據(jù)關(guān)系。
與上述多 FPGA 異構(gòu)平臺流水線方式相比,本文提出的任務(wù)劃分法降低了吞吐率最大化問題的求解次數(shù)與難度,最壞情況下時間復(fù)雜度僅為O(K/2×log2m)。不僅針對板間通信延遲優(yōu)化了流水線結(jié)構(gòu),而且在板內(nèi)也優(yōu)化了循環(huán)流水線,并根據(jù)數(shù)據(jù)關(guān)系重排數(shù)據(jù)結(jié)構(gòu)。同時,本文方法合理利用 BRAM,最終在時間、空間方面提高了吞吐率與能效比。
本文提出一種基于多 FPGA 異構(gòu)平臺的流水線技術(shù)優(yōu)化方法:①將總體任務(wù)采用任務(wù)二分迭代法合理劃分部署于多 FPGA 中,該方法滿足通用性,克服了人工劃分的諸多缺點(diǎn),達(dá)到了更好的流水線平衡,提高了吞吐率;②基于板間延遲影響優(yōu)化流水線結(jié)構(gòu),比較了兩種流水線結(jié)構(gòu)處理辦法,其中選擇將板間延遲作為流水線一級的優(yōu)化方法提高了吞吐率;③并行優(yōu)化計算單元模塊,包括重排數(shù)據(jù)關(guān)系、循環(huán)展開和使用流水線技術(shù),該優(yōu)化既提高了吞吐率也提高了能效比。AlexNet 的實驗結(jié)果表明,與傳統(tǒng)方法相比,本文方法吞吐率提高了 215.6%,能效比提高了 105.5%,單次任務(wù)運(yùn)行時間減少了 36.6%。未來將對上述優(yōu)化方法作進(jìn)一步的研究,如其對資源利用率的影響等,同時采用更多的方法對該平臺進(jìn)行優(yōu)化。