摘" 要: 圖卷積神經(jīng)網(wǎng)絡(luò)(GCN)算法在處理圖結(jié)構(gòu)數(shù)據(jù)任務(wù)中取得了突破性的成功,然而訓(xùn)練圖卷積神經(jīng)網(wǎng)絡(luò)需要大量的內(nèi)存空間及多次的隨機(jī)內(nèi)存訪問(wèn)等,這限制該算法的進(jìn)一步部署應(yīng)用?,F(xiàn)有圖卷積神經(jīng)網(wǎng)絡(luò)的部署及加速方案大多基于VitisHLS工具,該工具利用C/C++進(jìn)行開發(fā),幾乎沒(méi)有采用硬件描述語(yǔ)言的方案,存在軟硬件加速不徹底問(wèn)題。針對(duì)上述問(wèn)題,設(shè)計(jì)一種面向GCN的FPGA部署及加速架構(gòu)。該架構(gòu)主要由計(jì)算模塊和存儲(chǔ)模塊構(gòu)成,兩者都是利用硬件描述語(yǔ)言實(shí)現(xiàn)。計(jì)算模塊主要是用硬件描述語(yǔ)言來(lái)實(shí)現(xiàn)圖卷積神經(jīng)網(wǎng)絡(luò)的關(guān)鍵算法,即將圖卷積神經(jīng)網(wǎng)絡(luò)的關(guān)鍵算法映射到現(xiàn)場(chǎng)可編程門陣列中以實(shí)現(xiàn)硬件加速;緩存模塊主要是調(diào)用ROM IP核以及定義二維寄存器組,對(duì)輸入節(jié)點(diǎn)特征、歸一化后的鄰接矩陣、各個(gè)層的量化參數(shù)以及中間變量進(jìn)行存儲(chǔ),從而提高GCN算法的并行度。首先在Pycharm平臺(tái)上進(jìn)行模型訓(xùn)練并提取參數(shù)進(jìn)行量化,然后在Vivado平臺(tái)上對(duì)圖卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行設(shè)計(jì)和仿真測(cè)試,對(duì)比CPU、GPU的運(yùn)算性能。實(shí)驗(yàn)結(jié)果表明,所設(shè)計(jì)的圖卷積神經(jīng)網(wǎng)絡(luò)加速架構(gòu)提升了模型的推理速度。
關(guān)鍵詞: 圖卷積神經(jīng)網(wǎng)絡(luò); FPGA加速器; 硬件描述語(yǔ)言; 計(jì)算模塊; 存儲(chǔ)模塊; 參數(shù)量化
中圖分類號(hào): TN919?34; TP311" " " " " " " " " "文獻(xiàn)標(biāo)識(shí)碼: A" " " " " " " " " " " 文章編號(hào): 1004?373X(2024)10?0039?08
Research on FPGA deployment and acceleration of graph convolutional neural network
Abstract: The graph convolutional neural network (GCN) algorithm has achieved breakthrough success in processing graph structured data tasks. However, training GCN requires a large amount of memory space and multiple random memory accesses, which limits the further deployment and application of the algorithm. Existing deployment and acceleration solutions for GCN mostly rely on the Vitis HLS tool, which is developed by means of C/C++. These solutions almost entirely neglect hardware description language, leading to incomplete software?hardware acceleration. To address these issues, a FPGA deployment and acceleration architecture tailored for GCN is proposed. The architecture is composed of computing modules and storage modules, which can be implemented by means of hardware description languages. In the computing module, the hardware description language is used to implement the key algorithm of GCN, mapping it to the field?programmable gate array (FPGA) for hardware acceleration. In the caching module, the read?only memory (ROM) IP core is primarily called and a two?dimensional register file is defined to store input node features, normalized adjacency matrices, quantized parameters of various layers, and intermediate variables, enhancing the parallelism of the GCN algorithm. The model training is conducted on the Pycharm platform and parameters are extracted for quantization, then the design and simulation test for GCN are conducted on the Vivado platform, and the computational performance of CPU and GPU are compared. The experimental results show that the designed GCN acceleration architecture can improve the inference speed of the model.
Keywords: GCN; FPGA accelerator; hardware description language; calculation module; storage module; parameter quantification
近年來(lái),隨著大數(shù)據(jù)和人工智能的快速發(fā)展,機(jī)器學(xué)習(xí)技術(shù)取得了革命性的進(jìn)展。在計(jì)算機(jī)視覺(jué)、語(yǔ)音識(shí)別、自然語(yǔ)言處理等任務(wù)中,常用的機(jī)器學(xué)習(xí)算法適用于大小維度確定且排列有序的歐氏(Euclidean)數(shù)據(jù)。然而,實(shí)際場(chǎng)景中的數(shù)據(jù)越來(lái)越多地以圖的形式呈現(xiàn),這是一種復(fù)雜的非歐氏(non?Euclidean)數(shù)據(jù)表示形式。這種復(fù)雜的非歐氏數(shù)據(jù)表達(dá)方式包含了數(shù)據(jù)本身以及數(shù)據(jù)之間的依賴關(guān)系。例如,社交網(wǎng)絡(luò)[1]、蛋白質(zhì)分子結(jié)構(gòu)[2]、化學(xué)分子[3]、電商平臺(tái)客戶數(shù)據(jù)[4]等都可以用圖來(lái)表示。圖數(shù)據(jù)的復(fù)雜性對(duì)傳統(tǒng)機(jī)器學(xué)習(xí)算法的設(shè)計(jì)和實(shí)現(xiàn)提出了更高的要求。然而,傳統(tǒng)的深度學(xué)習(xí)模型不能很好地處理圖結(jié)構(gòu)數(shù)據(jù),因此,研究人員開始關(guān)注如何將神經(jīng)網(wǎng)絡(luò)應(yīng)用于圖結(jié)構(gòu)數(shù)據(jù)上,并提出了各種圖神經(jīng)網(wǎng)絡(luò)模型[5]。在此背景之下,大量涌現(xiàn)出諸多基于圖結(jié)構(gòu)數(shù)據(jù)的新型機(jī)器學(xué)習(xí)算法模型——圖神經(jīng)網(wǎng)絡(luò)(Graph Neural Network, GNN)[6]。
GNN算法需要進(jìn)行大量的矩陣計(jì)算和內(nèi)存訪問(wèn)操作,對(duì)處理器的算力和存儲(chǔ)器的要求非常高。然而目前的軟件實(shí)現(xiàn)方式在效率上存在一定的不足,這使得GNN的硬件加速方案成為亟需研究的領(lǐng)域[7?9]。目前可實(shí)現(xiàn)的硬件加速方案有GPU、CPU、ASIC、FPGA,新型GPU的應(yīng)用對(duì)圖神經(jīng)網(wǎng)絡(luò)(GNN)的運(yùn)算速度和能效比有顯著的影響。然而,GPU在處理海量節(jié)點(diǎn)的圖數(shù)據(jù)時(shí)存在一些限制,主要包括:內(nèi)存擴(kuò)展性不足和高功耗[7];CPU顯然有較高的同構(gòu)性和靈活性,但它的性能最差,無(wú)法勝任需要實(shí)時(shí)計(jì)算圖數(shù)據(jù)的場(chǎng)景;專用ASIC是定制的,可以解決性能和功耗問(wèn)題,但是靈活性很差,設(shè)計(jì)周期長(zhǎng),且需要專門的定制,這使得專用ASIC硬件加速方案成本非常之高。相比之下,F(xiàn)PGA在靈活性、可擴(kuò)展性、同構(gòu)性、功耗和成本方面都達(dá)到了理想水平,能更好地適應(yīng)網(wǎng)絡(luò)模型的升級(jí)、調(diào)整,集成了以上優(yōu)點(diǎn),因此圖神經(jīng)網(wǎng)絡(luò)的FPGA部署及硬件加速方案研究具有重要意義[10]。但是,F(xiàn)PGA因其特殊硬件結(jié)構(gòu),沒(méi)有一套簡(jiǎn)易的開發(fā)流程,需要一定的硬件電路知識(shí)作為支撐,所以存在著開發(fā)復(fù)雜、耗時(shí)較多等問(wèn)題[11]。為了減輕開發(fā)難度,眾多FPGA設(shè)計(jì)公司紛紛推出高層次綜合工具(High Level Synthesis, HLS),如Xilinx公司最新推出的Vitis平臺(tái)、Intel的OpenCL等[12]。開發(fā)者可以用C、C++等語(yǔ)言更快地搭建自己的硬件平臺(tái),但是該方法存在加速不徹底問(wèn)題[13?16]。
綜合以上背景,本文基于FPGA設(shè)計(jì)一種面向圖卷積神經(jīng)網(wǎng)絡(luò)硬件加速方法,利用基于硬件描述語(yǔ)言的方法實(shí)現(xiàn)一個(gè)圖卷積神經(jīng)網(wǎng)絡(luò)架構(gòu),完成實(shí)例設(shè)計(jì)并進(jìn)行仿真驗(yàn)證。
1" 圖卷積神經(jīng)網(wǎng)絡(luò)和FPGA加速器
1.1" 圖卷積神經(jīng)網(wǎng)絡(luò)
圖神經(jīng)網(wǎng)絡(luò)(Graph Neural Network, GNN)的架構(gòu)與傳統(tǒng)的CNN存在許多相似之處,這些相似之處使得本文能夠借鑒傳統(tǒng)CNN的設(shè)計(jì)思想,并將其應(yīng)用于GNN的架構(gòu)設(shè)計(jì)中,以實(shí)現(xiàn)更高效、可擴(kuò)展的圖數(shù)據(jù)處理。
圖1所示為一個(gè)典型的GNN架構(gòu)。
GNN中的圖結(jié)構(gòu)數(shù)據(jù)Graph卷積計(jì)算與傳統(tǒng)CNN中的2D卷積計(jì)算是不同的。如圖2所示,針對(duì)黑色目標(biāo)節(jié)點(diǎn)的卷積計(jì)算,其計(jì)算過(guò)程如下。
1) Graph卷積:通過(guò)鄰居函數(shù)對(duì)周圍節(jié)點(diǎn)特征進(jìn)行采樣,并計(jì)算其均值。這些鄰居節(jié)點(diǎn)的數(shù)量是不確定的,并且它們是無(wú)序的,因此適用于處理非歐氏數(shù)據(jù)。
2) 2D卷積:通過(guò)卷積核對(duì)周圍節(jié)點(diǎn)特征進(jìn)行采樣,并計(jì)算其加權(quán)平均值。這些鄰居節(jié)點(diǎn)的數(shù)量是確定的,并且它們的順序是有序的,因此適用于處理歐氏數(shù)據(jù)。
GCN是圖神經(jīng)網(wǎng)絡(luò)的里程碑,它首次將CNN中的卷積操作應(yīng)用于圖結(jié)構(gòu)數(shù)據(jù)處理中。GCN作為一種神經(jīng)網(wǎng)絡(luò)層,其層與層之間的傳播方式為:
圖卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)示意圖如圖3所示。其中,[Xi]表示節(jié)點(diǎn)i的輸入特征向量,[C]表示節(jié)點(diǎn)特征維度,[F]為節(jié)點(diǎn)真實(shí)標(biāo)簽維度,[Zi]表示節(jié)點(diǎn)i的輸出特征向量,[Yi]表示節(jié)點(diǎn)i的真實(shí)標(biāo)簽[1]。
1.2" FPGA加速器
FPGA加速器是一種基于可編程邏輯門陣列(FPGA)的硬件加速器,如圖4所示。其基本結(jié)構(gòu)由6個(gè)部分組成:可編程輸入/輸出單元、基本可編程邏輯單元、嵌入式塊RAM、豐富的布線資源、底層嵌入功能單元和內(nèi)嵌專用硬核,通過(guò)利用FPGA的可編程性和并行處理能力,加快模型的運(yùn)算和推理速度。
FPGA加速器的原理是:將深度學(xué)習(xí)模型的關(guān)鍵算法和數(shù)據(jù)流映射到FPGA邏輯門陣列中,可以獲得比通用處理器(CPU、GPU)更高的處理性能。
2" 面向圖卷積神經(jīng)網(wǎng)絡(luò)的FPGA部署及加速設(shè)計(jì)
2.1" 圖卷積神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)及訓(xùn)練
GCN的主要思想是將每個(gè)節(jié)點(diǎn)的特征與其周圍節(jié)點(diǎn)的特征進(jìn)行聚合,形成新的節(jié)點(diǎn)表示。本文使用GCN來(lái)實(shí)現(xiàn)圖節(jié)點(diǎn)分類,其一般模型訓(xùn)練流程如圖5所示。
2.1.1" 數(shù)據(jù)集選取
本次實(shí)驗(yàn)硬件加速器是基于現(xiàn)場(chǎng)可編程門陣列,F(xiàn)PGA片內(nèi)資源有限,GCN涉及到大量的矩陣運(yùn)算,將占用很多的邏輯資源,所以選擇一個(gè)節(jié)點(diǎn)相對(duì)較少的數(shù)據(jù)集KarateClub進(jìn)行實(shí)驗(yàn)。KarateClub數(shù)據(jù)集是一個(gè)社交網(wǎng)絡(luò)數(shù)據(jù)集,記錄了一個(gè)小型空手道俱樂(lè)部的成員之間的關(guān)系。如圖6所示,它由34個(gè)成員和78個(gè)關(guān)系組成,其中數(shù)據(jù)集的節(jié)點(diǎn)代表俱樂(lè)部成員,邊則代表他們之間的友誼。本次實(shí)驗(yàn)將使用該數(shù)據(jù)集作為GCN的訓(xùn)練數(shù)據(jù)集,需把該數(shù)據(jù)集的信息轉(zhuǎn)化成矩陣作為GCN的輸入。
2.1.2" 讀取節(jié)點(diǎn)特征
KarateClub數(shù)據(jù)集并沒(méi)有節(jié)點(diǎn)特征,只有節(jié)點(diǎn)和邊(關(guān)系)兩種元素,每個(gè)節(jié)點(diǎn)被用數(shù)字1~34作為唯一標(biāo)識(shí)符和名稱。因此采用單位矩陣作為GCN模型的特征矩陣,即將每個(gè)節(jié)點(diǎn)表示為一個(gè)n維的特征向量,其中n是網(wǎng)絡(luò)中節(jié)點(diǎn)的總數(shù)。
2.1.3" 讀取鄰接矩陣并進(jìn)行歸一化
KarateClub數(shù)據(jù)集的鄰接矩陣A是一個(gè)34×34的矩陣,其中每個(gè)元素A_ij表示節(jié)點(diǎn)i和節(jié)點(diǎn)j之間是否存在一條邊(有關(guān)系)。在該數(shù)據(jù)集中,如果節(jié)點(diǎn)i和節(jié)點(diǎn)j之間存在一條邊,則A_ij=1,否則A_ij=0。由于該圖是無(wú)向圖,矩陣A也是對(duì)稱的,即A_ij=A_ji。通常鄰接矩陣還包括自己和自己連接的信息,即[A=A+IN],[IN]為34×34單位矩陣。
為了計(jì)算某個(gè)節(jié)點(diǎn)的嵌入向量,通常需要考慮其鄰居節(jié)點(diǎn)的度數(shù)。如果鄰居節(jié)點(diǎn)的度數(shù)較大,那么它們的特征將會(huì)對(duì)該節(jié)點(diǎn)的嵌入向量產(chǎn)生更大的影響。在圖神經(jīng)網(wǎng)絡(luò)中,通常會(huì)對(duì)鄰接矩陣進(jìn)行歸一化,使得每個(gè)節(jié)點(diǎn)的鄰居節(jié)點(diǎn)信息對(duì)節(jié)點(diǎn)的影響相對(duì)平衡。常見的歸一化方法包括行歸一化、列歸一化和對(duì)稱歸一化。行歸一化和列歸一化互為轉(zhuǎn)置,該方式是將每個(gè)節(jié)點(diǎn)與其相連的邊權(quán)值除以這些邊權(quán)值之和,公式如下:
因此本文選用對(duì)稱歸一化,計(jì)算過(guò)程如式(4)所示,歸一化后的節(jié)點(diǎn)特征的范數(shù)不超過(guò)一個(gè)固定的值,有效地控制不同特征之間的相對(duì)重要性。該方法既考慮了自己的度,又考慮了對(duì)方節(jié)點(diǎn)的度,防止某些特征對(duì)模型結(jié)果的貢獻(xiàn)過(guò)大,從而提高模型的泛化能力和魯棒性。
2.1.4" GCN模型的搭建及訓(xùn)練
選用三層圖卷積網(wǎng)絡(luò)層,外加一個(gè)分類器來(lái)搭建GCN模型?;镜腉CN模型搭建及訓(xùn)練的步驟如下。
步驟2:將得到歸一化后的鄰接矩陣和特征矩陣輸入圖卷積層,目標(biāo)函數(shù)為公式(1),圖卷積層的網(wǎng)絡(luò)框架如圖7所示,第一層圖卷積層中計(jì)算得到每一節(jié)點(diǎn)新的嵌入表示[H(1)],目標(biāo)函數(shù)為:
式中:[H(0)]為數(shù)據(jù)集原始特征向量,即[H(0)]=[X];[W(0)]為第一層的可學(xué)習(xí)參數(shù)矩陣;[σ(?)]激活函數(shù)選取[ReLU(?)]函數(shù),目標(biāo)函數(shù)為:
第二層圖卷積目標(biāo)函數(shù)如下:
式中:第一層的輸出特征[H(1)]作為第二層的輸入特征;[W(1)]為第二層的可學(xué)習(xí)參數(shù)矩陣。
第三層圖卷積目標(biāo)函數(shù)如下:
式中:第二層的輸出特征[H(2)]作為第三層的輸入特征;[W(2)]為第三層的可學(xué)習(xí)參數(shù)矩陣。
最后再經(jīng)過(guò)一個(gè)分類層,輸出每個(gè)節(jié)點(diǎn)的真實(shí)特征維度,目標(biāo)函數(shù)如下:
[out=H(3)W(3)]" " (9)
式中:第三層的輸出特征[H(3)]作為分類器的輸入;[W(3)]為分類器的可學(xué)習(xí)參數(shù)矩陣。
在訓(xùn)練時(shí),需要根據(jù)實(shí)際數(shù)據(jù)集情況設(shè)置各個(gè)圖卷積層中權(quán)重矩陣維度大小,在最后線性層輸出中要保證分類器輸出每個(gè)節(jié)點(diǎn)的特征維度與真實(shí)標(biāo)簽維度保持一致。
步驟3:訓(xùn)練時(shí)通過(guò)反向傳播算法更新每一層網(wǎng)絡(luò)的參數(shù),其中損失函數(shù)采用交叉熵?fù)p失函數(shù)。
步驟4:建立優(yōu)化器Adam,設(shè)置學(xué)習(xí)率為0.01。
根據(jù)上述分析,基于圖卷積神經(jīng)網(wǎng)絡(luò)的圖節(jié)點(diǎn)分類模型具體訓(xùn)練步驟和算法如下:
算法1:基于卷積神經(jīng)網(wǎng)絡(luò)的分類算法
輸入:根據(jù)公式(3)得到的歸一化后的鄰接矩陣[A]以及特征矩陣[Η(0)]、網(wǎng)絡(luò)訓(xùn)練層數(shù)L、初始化權(quán)重矩陣[W(L)]。
輸出:網(wǎng)絡(luò)模型中各個(gè)圖卷積層不同的權(quán)重參數(shù)矩陣以及節(jié)點(diǎn)的特征向量。
計(jì)算步驟:
1.for [l]=0 to [L]-1
2.for k=0 to K do
3.根據(jù)式(1),計(jì)算第L+1層圖卷積層的輸出特征[H(L+1)]
4.end for
5.end for
6.[H(L-1)]輸入到分類器,根據(jù)交叉熵?fù)p失函數(shù)計(jì)算損失值
7.使用反向傳播算法更新圖卷積層權(quán)重參數(shù)
2.2" 面向GCN的FPGA加速架構(gòu)設(shè)計(jì)
面向GCN的FPGA加速架構(gòu)是一種利用FPGA的特性加速GCN網(wǎng)絡(luò)的方法。將GCN網(wǎng)絡(luò)中的關(guān)鍵算法映射到底層的可編程邏輯單元中,通過(guò)FPGA高效的并行計(jì)算能力,以提高GCN網(wǎng)絡(luò)的計(jì)算效率和能效。其中,F(xiàn)PGA的計(jì)算速度和系統(tǒng)時(shí)鐘頻率息息相關(guān),計(jì)算模塊和數(shù)據(jù)的傳輸是依據(jù)系統(tǒng)時(shí)鐘來(lái)設(shè)計(jì)的。本實(shí)驗(yàn)的計(jì)算模塊和存儲(chǔ)模塊是采用硬件描述語(yǔ)言來(lái)設(shè)計(jì)的,可以充分利用硬件描述語(yǔ)言的優(yōu)勢(shì)來(lái)提高算法的并行度,從而加快模型的推理速度。面向GCN的FPGA加速架構(gòu)的主要設(shè)計(jì)內(nèi)容是模型參數(shù)提取量化、存儲(chǔ)模塊設(shè)計(jì)、算法模塊設(shè)計(jì)。
2.2.1" 參數(shù)的量化
由于FPGA處理浮點(diǎn)數(shù)需要調(diào)用IP核,實(shí)現(xiàn)起來(lái)相對(duì)較麻煩,但是處理整數(shù)比較容易實(shí)現(xiàn);所以在進(jìn)行參數(shù)量化時(shí)需要進(jìn)行左移取整,在FPGA資源允許的情況下,左移位寬越大計(jì)算出來(lái)的精度損失越小。
在本次設(shè)計(jì)中,選擇左移12位。首先,在Pycharm平臺(tái)中將訓(xùn)練完成的GCN網(wǎng)絡(luò)模型各個(gè)層的參數(shù)提取出來(lái)進(jìn)行量化,將各個(gè)層的參數(shù)以及歸一化后的鄰接矩陣左移12位寬再向下取整,即乘以4 096后向下取整;其次,將參數(shù)轉(zhuǎn)化為二進(jìn)制的補(bǔ)碼進(jìn)行存儲(chǔ)運(yùn)算,因?yàn)閰?shù)中有正有負(fù),使用二進(jìn)制的補(bǔ)碼表示可以方便地表示正負(fù)數(shù),其中正數(shù)的補(bǔ)碼等于其原碼,而負(fù)數(shù)的補(bǔ)碼需要進(jìn)行按位取反,并在最低位加1。補(bǔ)碼的最高位用于表示符號(hào),即最高位為1表示負(fù)數(shù),為0表示正數(shù)。這種表示方法使得正負(fù)數(shù)的表示更加一致和便捷。
2.2.2" 存儲(chǔ)模塊設(shè)計(jì)
由于GCN是屬于直推式(transductive)的學(xué)習(xí)模型,所以本次實(shí)驗(yàn)需將整個(gè)數(shù)據(jù)集量化之后存儲(chǔ)于FPGA中,設(shè)計(jì)一個(gè)合理的存儲(chǔ)結(jié)構(gòu)非常重要。根據(jù)本次實(shí)驗(yàn)的數(shù)據(jù)集的大小和參數(shù)矩陣維度,選擇ROM結(jié)合寄存器變量方式進(jìn)行存儲(chǔ),實(shí)驗(yàn)中選用單端口的ROM只讀存儲(chǔ)器。
將量化之后的參數(shù)寫入coe文件中,載入ROM IP核初始化文件時(shí),在SystemVerilog中定義二維寄存器組,相當(dāng)于一個(gè)寄存器矩陣,在Verilog中不能定義二維數(shù)組變量。然后設(shè)計(jì)一個(gè)橫向計(jì)數(shù)器和縱向計(jì)數(shù)器來(lái)對(duì)二維數(shù)組的每行和每列的位置進(jìn)行操控。具體來(lái)說(shuō),就是把各個(gè)GCN網(wǎng)絡(luò)層的權(quán)重參數(shù)矩陣[W(l)]和特征矩陣[H(l)]分別自動(dòng)存儲(chǔ)到不同的二維寄存器組中,直接供算法模塊計(jì)算,以便提高算法的并行度。其中,各個(gè)網(wǎng)絡(luò)層輸出特征矩陣也存儲(chǔ)于二維寄存器組中,作為下一網(wǎng)絡(luò)層的輸入。由于各個(gè)網(wǎng)絡(luò)層的偏置是一維的,因此直接將偏置存儲(chǔ)在寄存器中。需要注意的是,定義二維寄存器組變量時(shí),各個(gè)對(duì)應(yīng)的二維寄存器組的維度要保證和GCN網(wǎng)絡(luò)層的權(quán)重參數(shù)以及數(shù)據(jù)集的特征矩陣維度保持一致,偏置的維度要和各個(gè)網(wǎng)絡(luò)層輸出特征矩陣的列數(shù)保持一致。
2.2.3" 計(jì)算模塊設(shè)計(jì)
GCN網(wǎng)絡(luò)結(jié)構(gòu)中涉及大量的矩陣相乘運(yùn)算,其關(guān)鍵算法也是矩陣相乘運(yùn)算,因此設(shè)計(jì)一個(gè)高效的矩陣運(yùn)算架構(gòu)至關(guān)重要。在矩陣相乘操作中,用硬件描述語(yǔ)言設(shè)計(jì)了如算法2所示的架構(gòu)。設(shè)計(jì)一個(gè)三層嵌套for循環(huán)來(lái)實(shí)現(xiàn)矩陣相乘,將各個(gè)網(wǎng)絡(luò)層輸出特征矩陣的每個(gè)元素分別加上該層的偏置項(xiàng),再將結(jié)果輸入到激活函數(shù)[ReLU(?)]中。對(duì)于激活函數(shù)[ReLU(?)]的實(shí)現(xiàn),根據(jù)式(6),設(shè)計(jì)一個(gè)組合邏輯電路來(lái)判斷各個(gè)網(wǎng)絡(luò)層輸出的特征矩陣的每個(gè)元素的最高位,最高位為0則保留該數(shù)據(jù),為1則對(duì)該元素賦值為0。
算法2:基于嵌套for循環(huán)實(shí)現(xiàn)矩陣相乘操作,如[Cm×s=Am×n×Bn×s]。
輸入:矩陣[Am×n]和矩陣[Bn×s]
輸出:矩陣[Cm×s]
計(jì)算步驟:
1.for m=0 to M-1 do
2.for s=0 to S-1 do
3.C[m][s]=0
4.for n=0 to N-1 do
5.C[m][s]=C[m][s]+A[m][n]*B[n][s]
6.end for
7.end for
8.end for
在設(shè)計(jì)矩陣運(yùn)算代碼時(shí),需將中間變量定義成logic類型,而不是reg類型,否則將導(dǎo)致輸出信號(hào)為一個(gè)不確定的值。由于歸一化后的鄰接矩陣和初始特征矩陣是經(jīng)量化處理后的,根據(jù)式(1)的乘法關(guān)系,在第一個(gè)網(wǎng)絡(luò)層輸出的特征矩陣中,輸出特征向量實(shí)際上是在原始量化的基礎(chǔ)上放大了4 0962倍,所以需將第一層的偏置放大4 0963倍再向下取整;輸入到第二層的特征矩陣也是在原始量化的基礎(chǔ)上放大4 0962倍之后的結(jié)果,第二層的輸出結(jié)果將是在原始量化的基礎(chǔ)上放大4 0964倍后的結(jié)果。根據(jù)每個(gè)變量的位寬和精度損失情況,將第二層輸出的結(jié)果除以4 096,第二層的偏置就應(yīng)放大4 0964倍再向下取整。第三層的輸出結(jié)果將會(huì)是在原始量化的基礎(chǔ)上的4 0965倍,將結(jié)果除以4 0962,第三層偏置也應(yīng)放大4 0964倍再向下取整,最后線性層的輸出結(jié)果將會(huì)是在原始量化的基礎(chǔ)上的4 0964倍,將結(jié)果除以4 0962,線性層的偏置也應(yīng)放大4 0963倍再向下取整。
3" 實(shí)驗(yàn)及結(jié)果
3.1" 實(shí)驗(yàn)環(huán)境
數(shù)據(jù)集的預(yù)處理及GCN模型訓(xùn)練使用Python 3.7編程語(yǔ)言,在PyCharm 2019.2中進(jìn)行GCN對(duì)圖數(shù)據(jù)節(jié)點(diǎn)分類的實(shí)現(xiàn),CPU為9th Gen Intel Core i7?9750H,內(nèi)存大小為16 GB,GPU為 NVIDIA GeForce RTX 1650。硬件系統(tǒng)是基于XilinxArtix 7 xc7a35tfgg484實(shí)現(xiàn)的,系統(tǒng)時(shí)鐘為50 MHz,在Vivado 2019.2平臺(tái)上設(shè)計(jì)硬件架構(gòu)系統(tǒng)。
3.2" 實(shí)驗(yàn)結(jié)果
3.2.1" GCN實(shí)驗(yàn)結(jié)果
表1所示為CPU、GPU訓(xùn)練時(shí)間對(duì)比結(jié)果。
圖9所示為KarateClub網(wǎng)絡(luò)中節(jié)點(diǎn)嵌入在多次訓(xùn)練迭代中的變化過(guò)程,顏色表示類別。該模型僅依靠最小監(jiān)督和圖結(jié)構(gòu),成功實(shí)現(xiàn)了群體的線性分離。
本文采用節(jié)點(diǎn)較多的Cora數(shù)據(jù)集進(jìn)行CPU和GPU對(duì)比實(shí)驗(yàn)。該數(shù)據(jù)集是一個(gè)根據(jù)科學(xué)論文之間相互引用關(guān)系而構(gòu)建的Graph數(shù)據(jù)集合,共有2 708個(gè)頂點(diǎn),每個(gè)頂點(diǎn)有1 443個(gè)特征,共有7個(gè)類別。實(shí)驗(yàn)結(jié)果如表2所示,從中可知GPU在訓(xùn)練和推理小型模型的時(shí)候加速作用不明顯,在大型模型中效果顯著。
如圖10所示,GCN模型經(jīng)過(guò)多次半監(jiān)督訓(xùn)練迭代后得到的KarateClub網(wǎng)絡(luò)節(jié)點(diǎn)嵌入的演化,將該數(shù)據(jù)集的34個(gè)節(jié)點(diǎn)分成4類,顏色代表類別。觀察損失值隨訓(xùn)練次數(shù)的變化情況,可以發(fā)現(xiàn)訓(xùn)練次數(shù)在第1~250次之間,損失值隨著訓(xùn)練次數(shù)的增大呈大幅度下降趨勢(shì),直到第250次以后,損失值逐漸趨于穩(wěn)定。
3.2.2" 面向GCN的FPGA部署及加速實(shí)驗(yàn)結(jié)果
經(jīng)過(guò)三層GCN網(wǎng)絡(luò)結(jié)構(gòu)輸出的特征向量是2個(gè)維度的,通過(guò)一個(gè)Linear層使輸出的特征維度等于真實(shí)標(biāo)簽的維度。其中,Linear層的in_features為2,out_features為4,在最終輸出的節(jié)點(diǎn)特征向量中,每個(gè)節(jié)點(diǎn)特征向量中的最大值所在序號(hào)為該點(diǎn)的屬性類別。FPGA中Linear層所輸出的節(jié)點(diǎn)特征向量是放大4 0963后的一個(gè)結(jié)果,查看節(jié)點(diǎn)的真實(shí)輸出特征值需除以4 0963。如表3和表4所示,在FPGA平臺(tái)輸出的特征向量和Pycharm平臺(tái)輸出的特征向量進(jìn)行對(duì)比,可看出特征向量會(huì)有精度損失,但損失很小,輸出節(jié)點(diǎn)的類別一致。
表5所示為GCN模型在不同的處理器上推理的時(shí)間。從表中可以看出,F(xiàn)PGA的推理速度比CPU快約4.8倍,比GPU快約8 350倍,充分體現(xiàn)了FPGA并行度高的優(yōu)勢(shì),可以實(shí)現(xiàn)復(fù)雜的并行計(jì)算任務(wù)并提高計(jì)算效率。
4" 結(jié)" 語(yǔ)
本文設(shè)計(jì)了一種面向GCN的FPGA部署及加速架構(gòu),其主要設(shè)計(jì)內(nèi)容包括參數(shù)提取量化、算法模塊設(shè)計(jì)和存儲(chǔ)模塊設(shè)計(jì)。仿真和測(cè)試結(jié)果表明,F(xiàn)PGA的模型推理速度比CPU、GPU快,充分體現(xiàn)了FPGA并行度高的優(yōu)勢(shì),可以實(shí)現(xiàn)復(fù)雜的并行計(jì)算任務(wù)并提高計(jì)算效率。
因此,本文所述的設(shè)計(jì)方法在深度學(xué)習(xí)FPGA加速器方面具有重要意義和實(shí)用價(jià)值。
參考文獻(xiàn)
[1] YANG P, TONG L, QIAN B, et al. Hyperspectral image classification with spectral and spatial graph using inductive representation learning network [J]. IEEE journal of selected topics in applied earth observations and remote sensing, 2021(14): 791?800.
[2] GAO P, ZHANG J, SUN Y, et al. Toward accurate predictions of atomic properties via quantum mechanics descriptors augmented graph convolutional neural network: application of this novel approach in nmr chemical shifts predictions [J]. The journal of physical chemistry letters, 2020, 11(22): 9812?9818.
[3] YING R, HE R, CHEN K, et al. Graph convolutional neural networks for web?scale recommender systems [C]// Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery amp; Data Mining. London: ACM, 2018: 947?983.
[4] ZHANG Z, CUI P, ZHU W. Deep learning on graphs: a survey [J]. IEEE transactions on knowledge and data engineering, 2020, 34(1): 249?270.
[5] ZHOU J, CUI G, HU S, et al. Graph neural networks: a review of methods and applications [J]. AI open, 2020, 1: 57?81.
[6] WEN X M, FANG S L, XU Z J, et al. Joint multidimensional pattern for spectrum prediction using GNN [J]. Sensors, 2023, 23(21): 234?260.
[7] WU Z, PAN S, CHEN F, et al. A comprehensive survey on graph neural networks [J]. IEEE transactions on neural networks and learning systems, 2020, 32(1): 4?24.
[8] SUN K, LIN Z, ZHU Z. Multi?stage self?supervised learning for graph convolutional networks on graphs with few labeled nodes [J]. Proceedings of the AAAI conference on artificial intelligence, 2020, 34(4): 5892?5899.
[9] 吳李煜,張紫龍,張華君,等.基于嵌入式FPGA的航拍目標(biāo)檢測(cè)解決方案[J].現(xiàn)代電子技術(shù),2022,45(2):1?6.
[10] 張海龍,杜旭,張萌,等.基于Vitis HLS的FIR濾波器設(shè)計(jì)及其性能分析[J/OL].吉林大學(xué)學(xué)報(bào)(工學(xué)版):1?11[2023?09?15].https://doi.org/10.13229/j.cnki.jdxbgxb.20230566.
[11] 梅冰笑,滕文彬,張弛,等.FPGA平臺(tái)上動(dòng)態(tài)硬件重構(gòu)的Winograd神經(jīng)網(wǎng)絡(luò)加速器[J/OL].計(jì)算機(jī)工程與應(yīng)用:1?13[2023?10?26].http://kns.cnki.net/kcms/detail/11.2127.tp.20231025.1528.018.html.
[12] 劉彬宇.基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)硬件加速器設(shè)計(jì)及應(yīng)用研究[D].綿陽(yáng):西南科技大學(xué),2022.
[13] 吳進(jìn),趙博,汶恒等.一種異構(gòu)架構(gòu)的圖神經(jīng)網(wǎng)絡(luò)加速器優(yōu)化研究[J].北京郵電大學(xué)學(xué)報(bào),2023,46(3):19?24.
[14] 李天陽(yáng),張帆,王松,等.基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)和視覺(jué)Transformer通用加速器[J/OL].電子與信息學(xué)報(bào):1?10[2023?10?10]. http://kns.cnki.net/kcms/detail/11.4494.TN.20231008.1528.004.html.
[15] 楊正,闞宏偉,劉鐵軍,等.FPGA異構(gòu)加速卡電源完整性分析[J].北京郵電大學(xué)學(xué)報(bào),2018,41(4):76?80.