本發(fā)明涉及圖神經(jīng)網(wǎng)絡(luò)硬件加速的,具體而言,涉及一種圖卷積神經(jīng)網(wǎng)絡(luò)聚合計算加速裝置及方法。
背景技術(shù):
1、隨著大數(shù)據(jù)的出現(xiàn)和計算資源的飛速發(fā)展,圖數(shù)據(jù)因其強(qiáng)大的表達(dá)與適應(yīng)能力得到廣泛的應(yīng)用。由于圖結(jié)構(gòu)的特殊性,在各大應(yīng)用領(lǐng)域帶來深刻變革的深度學(xué)習(xí)技術(shù)并不能直接應(yīng)用到圖數(shù)據(jù)領(lǐng)域,圖神經(jīng)網(wǎng)絡(luò)應(yīng)運(yùn)而生。圖神經(jīng)網(wǎng)絡(luò)使得機(jī)器學(xué)習(xí)能夠應(yīng)用于非歐幾里得空間的圖結(jié)構(gòu)中。圖卷積神經(jīng)網(wǎng)絡(luò)(gcn)作為應(yīng)用最為廣泛的圖神經(jīng)網(wǎng)絡(luò)模型之一,在推薦系統(tǒng)、計算機(jī)視覺、自然語言處理、實(shí)況預(yù)測、金融風(fēng)控等領(lǐng)域發(fā)揮著不可或缺的作用并取得了顯著的成果。
2、圖卷積神經(jīng)網(wǎng)絡(luò)的執(zhí)行過程分為兩個階段,分別是聚合(aggregation)和組合(combination)階段,聚合階段為不規(guī)則的稀疏運(yùn)算,而組合階段為規(guī)則的密集運(yùn)算。當(dāng)前圖卷積神經(jīng)網(wǎng)絡(luò)硬件加速的主要瓶頸集中在聚合階段,由于圖數(shù)據(jù)極度稀疏的特性,不規(guī)則的訪存與計算模式使得難以高效重復(fù)利用圖數(shù)據(jù);各目的節(jié)點(diǎn)的入度高度不匹配導(dǎo)致聚合階段難以保證計算單元間的負(fù)載均衡,如何高效執(zhí)行聚合階段是圖卷積神經(jīng)網(wǎng)絡(luò)硬件加速關(guān)鍵。
3、采用通用計算設(shè)備如cpu、gpu中執(zhí)行圖聚合計算時,不規(guī)則的訪存模式會導(dǎo)致cpu的l2和l3緩存的命中率極低。而gpu的simt(single-instruction,multiple-thread,單指令多線程)執(zhí)行模型也會面臨大量的訪存歧義,不同線程需要訪問相同或相近的內(nèi)存地址,導(dǎo)致訪存沖突和延遲。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的目的在于:設(shè)計一種硬件加速方法對圖數(shù)據(jù)進(jìn)行處理與計算,滿足圖卷積神經(jīng)網(wǎng)絡(luò)聚合階段的計算需求。
2、本發(fā)明的技術(shù)方案是:提供了一種圖卷積神經(jīng)網(wǎng)絡(luò)聚合計算加速裝置,該裝置包括:前置模塊、片外存儲模塊、聚合控制單元、源節(jié)點(diǎn)特征存儲模塊、塊偏移存儲模塊、邊存儲模塊、邊預(yù)取器、數(shù)據(jù)分配模塊、源節(jié)點(diǎn)特征導(dǎo)航模塊、目的節(jié)點(diǎn)特征存儲模塊、聚合計算單元;
3、前置模塊接收圖數(shù)據(jù)并完成組合運(yùn)算,計算圖數(shù)據(jù)中的所有源節(jié)點(diǎn)特征,并將圖數(shù)據(jù)中的圖鄰接矩陣進(jìn)行csb編碼壓縮,按源節(jié)點(diǎn)索引將圖鄰接矩陣分塊,每個分塊內(nèi)存儲固定數(shù)量的源節(jié)點(diǎn)特征,計算出的源節(jié)點(diǎn)特征與壓縮后的圖鄰接矩陣一同傳輸至片外存儲模塊儲存;
4、聚合控制單元連接片外存儲模塊、源節(jié)點(diǎn)特征存儲模塊、塊偏移存儲模塊、邊存儲模塊、目的節(jié)點(diǎn)特征存儲模塊,用于協(xié)調(diào)各模塊間的數(shù)據(jù)傳輸并控制計算過程;
5、源節(jié)點(diǎn)特征存儲模塊暫存多個分塊對應(yīng)的源節(jié)點(diǎn)特征;塊偏移存儲模塊存儲圖鄰接矩陣的塊偏移信息;邊存儲模塊存儲邊信息,包括源節(jié)點(diǎn)索引、目的節(jié)點(diǎn)索引以及邊值;邊預(yù)取器根據(jù)塊偏移存儲模塊中的塊偏移信息,控制邊存儲模塊中邊數(shù)據(jù)的加載和計算啟停,確保邊數(shù)據(jù)在正確時機(jī)傳輸給數(shù)據(jù)分配模塊;
6、數(shù)據(jù)分配模塊接收邊存儲模塊提供的邊數(shù)據(jù),并將源節(jié)點(diǎn)索引傳遞給源節(jié)點(diǎn)特征導(dǎo)航模塊,將目的節(jié)點(diǎn)索引傳遞給目的節(jié)點(diǎn)特征存儲模塊,將邊值傳輸至聚合計算單元;
7、源節(jié)點(diǎn)特征導(dǎo)航模塊根據(jù)源節(jié)點(diǎn)索引從源節(jié)點(diǎn)特征存儲模塊中讀取相應(yīng)的源節(jié)點(diǎn)特征,并傳遞給聚合計算單元;
8、聚合計算單元連接源節(jié)點(diǎn)特征導(dǎo)航模塊和目的節(jié)點(diǎn)特征存儲模塊,將源節(jié)點(diǎn)特征與邊值相乘并將結(jié)果加到目的節(jié)點(diǎn)特征中,更新目的節(jié)點(diǎn)特征并寫回目的節(jié)點(diǎn)特征存儲模塊;
9、目的節(jié)點(diǎn)特征存儲模塊連接數(shù)據(jù)分配模塊和聚合計算單元,存儲更新后的目的節(jié)點(diǎn)特征,并在計算過程中向聚合計算單元提供目的節(jié)點(diǎn)特征。
10、本發(fā)明還提供了一種基于上述圖卷積神經(jīng)網(wǎng)絡(luò)聚合計算加速裝置實(shí)現(xiàn)的聚合計算加速方法,該方法包括:
11、s1、對圖卷積神經(jīng)網(wǎng)絡(luò)的圖數(shù)據(jù)進(jìn)行csb編碼壓縮處理,將圖鄰接矩陣按源節(jié)點(diǎn)索引分塊,每個分塊內(nèi)存儲固定數(shù)量的源節(jié)點(diǎn)特征,僅保留非零邊的源節(jié)點(diǎn)索引、目的節(jié)點(diǎn)索引及邊的值,并記錄塊偏移信息;
12、s2、將步驟s1中的源節(jié)點(diǎn)特征與經(jīng)過csb編碼壓縮的圖鄰接矩陣數(shù)據(jù)共同寫入片外存儲模塊,作為聚合階段的數(shù)據(jù)輸入;
13、s3、聚合控制單元從片外存儲模塊加載每個分塊的源節(jié)點(diǎn)特征至源節(jié)點(diǎn)特征存儲模塊,同時將塊偏移信息及邊信息分別加載到塊偏移存儲模塊和邊存儲模塊;
14、s4、邊預(yù)取器依據(jù)塊偏移存儲模塊中的塊偏移信息,控制邊數(shù)據(jù)的逐條加載和運(yùn)算啟停,并將加載的邊數(shù)據(jù)依次傳送至數(shù)據(jù)分配模塊;
15、s5、數(shù)據(jù)分配模塊將每條邊的源節(jié)點(diǎn)索引送至源節(jié)點(diǎn)特征導(dǎo)航模塊,將目的節(jié)點(diǎn)索引送至目的節(jié)點(diǎn)特征存儲模塊,并將邊的值傳送至聚合計算單元;
16、s6、源節(jié)點(diǎn)特征導(dǎo)航模塊依據(jù)輸入的源節(jié)點(diǎn)索引輸出相應(yīng)的源節(jié)點(diǎn)特征至聚合計算單元,目的節(jié)點(diǎn)特征存儲模塊依據(jù)目的節(jié)點(diǎn)索引輸出相應(yīng)的目的節(jié)點(diǎn)特征至聚合計算單元;
17、s7、聚合計算單元將源節(jié)點(diǎn)特征與邊的值相乘,并將乘積結(jié)果累加至目的節(jié)點(diǎn)特征,生成更新后的目的節(jié)點(diǎn)特征并寫回目的節(jié)點(diǎn)特征存儲模塊;
18、s8、依次完成所有邊的數(shù)據(jù)計算后,聚合控制單元將下一分塊的源節(jié)點(diǎn)特征更新至源節(jié)點(diǎn)特征導(dǎo)航模塊,并按上述步驟依次完成所有分塊的聚合運(yùn)算。
19、上述任一項技術(shù)方案中,進(jìn)一步地,步驟s1中壓縮步驟包括:
20、按照源節(jié)點(diǎn)索引將圖鄰接矩陣分割為多個分塊,每個分塊包含固定數(shù)量的源節(jié)點(diǎn)特征;每個分塊內(nèi)僅保留非零元素,并將其值與相應(yīng)的源節(jié)點(diǎn)和目的節(jié)點(diǎn)索引一同存儲;通過塊偏移信息記錄每個分塊內(nèi)的邊數(shù),減少了存儲空間。
21、上述任一項技術(shù)方案中,進(jìn)一步地,圖卷積神經(jīng)網(wǎng)絡(luò)算法每層數(shù)據(jù)運(yùn)算關(guān)系為:
22、
23、其中,為帶自環(huán)鄰接矩陣,xl為當(dāng)前層輸出特征,xl-1為上一層輸出特征即當(dāng)前層輸入特征,wl為當(dāng)前層輸入權(quán)重,δ表示激活函數(shù)relu,經(jīng)典兩層圖卷積神經(jīng)網(wǎng)絡(luò)運(yùn)算表示為:
24、
25、其中,主要的運(yùn)算分為兩個部分,組合運(yùn)算表示節(jié)點(diǎn)特征于權(quán)重相乘的過程以實(shí)現(xiàn)特征的降維,即:
26、
27、聚合運(yùn)算為圖鄰接矩陣與特征矩陣相乘的過程,此部分為稀疏的不規(guī)則運(yùn)算,表示為:
28、
29、為xl的組合運(yùn)算部分,為xl的聚合運(yùn)算部分。
30、上述任一項技術(shù)方案中,進(jìn)一步地,步驟s3中的邊預(yù)取步驟包括:
31、邊預(yù)取器依據(jù)塊偏移存儲模塊中的塊偏移信息,控制從邊存儲模塊加載邊數(shù)據(jù),并將加載的邊數(shù)據(jù)傳送至數(shù)據(jù)分配模塊;
32、邊預(yù)取器確保每次僅加載當(dāng)前分塊需要的邊數(shù)據(jù),從而減少冗余數(shù)據(jù)的加載和延遲。
33、上述任一項技術(shù)方案中,進(jìn)一步地,步驟s4中的數(shù)據(jù)分配步驟包括:
34、數(shù)據(jù)分配模塊將加載的源節(jié)點(diǎn)特征數(shù)據(jù)與邊數(shù)據(jù)進(jìn)行拆分,并按源節(jié)點(diǎn)索引將源節(jié)點(diǎn)特征傳送給源節(jié)點(diǎn)特征導(dǎo)航模塊,按目的節(jié)點(diǎn)索引將目的節(jié)點(diǎn)特征傳送給目的節(jié)點(diǎn)特征存儲模塊;將邊值傳遞給聚合計算單元,進(jìn)行特征計算。
35、上述任一項技術(shù)方案中,進(jìn)一步地,步驟s5中的特征導(dǎo)航步驟包括:源節(jié)點(diǎn)特征導(dǎo)航和目的節(jié)點(diǎn)特征導(dǎo)航:
36、源節(jié)點(diǎn)特征導(dǎo)航模塊根據(jù)輸入的源節(jié)點(diǎn)索引,從源節(jié)點(diǎn)特征存儲模塊中讀取相應(yīng)的源節(jié)點(diǎn)特征,并傳遞至聚合計算單元;
37、目的節(jié)點(diǎn)特征存儲模塊根據(jù)目的節(jié)點(diǎn)索引讀取相應(yīng)的目的節(jié)點(diǎn)特征,并將其傳遞至聚合計算單元。
38、上述任一項技術(shù)方案中,進(jìn)一步地,步驟s6中的聚合計算步驟包括:
39、聚合計算單元將源節(jié)點(diǎn)特征與邊值相乘,生成臨時特征;臨時特征通過加法操作累加到目的節(jié)點(diǎn)特征中,得到更新后的目的節(jié)點(diǎn)特征;更新后的目的節(jié)點(diǎn)特征被寫回目的節(jié)點(diǎn)特征存儲模塊,以供后續(xù)計算使用。
40、上述任一項技術(shù)方案中,進(jìn)一步地,步驟s7中的特征更新步驟包括:
41、每個分塊計算完成后,聚合計算單元將源節(jié)點(diǎn)特征與邊值乘積加到目的節(jié)點(diǎn)特征上,更新該節(jié)點(diǎn)的特征;更新后的目的節(jié)點(diǎn)特征被寫回目的節(jié)點(diǎn)特征存儲模塊,準(zhǔn)備下一輪計算。
42、上述任一項技術(shù)方案中,進(jìn)一步地,步驟s8中的迭代計算步驟包括:
43、按照步驟s6和步驟s7中的描述,依次對每個分塊進(jìn)行聚合計算,直到所有分塊的邊數(shù)據(jù)計算完畢;
44、所有分塊計算完成后,目的節(jié)點(diǎn)特征存儲模塊將存儲的目的節(jié)點(diǎn)特征匯總,形成最終的計算結(jié)果。
45、本發(fā)明的有益效果是:
46、本發(fā)明中的技術(shù)方案主要針對圖卷積神經(jīng)網(wǎng)絡(luò)聚合階段的計算瓶頸,尤其是由于圖數(shù)據(jù)稀疏性、訪存不規(guī)則以及計算負(fù)載不均衡所帶來的性能問題,通過對圖數(shù)據(jù)進(jìn)行壓縮、優(yōu)化特征重用、采用并行計算和減少訪存沖突,本發(fā)明顯著提高了聚合階段的計算效率,具體有以下幾方面的有益效果:
47、提高了計算效率:本發(fā)明通過采用csb(compressed?sparse?blocks)編碼格式對圖鄰接矩陣進(jìn)行壓縮,保留每個分塊內(nèi)的非零元素,極大減少了內(nèi)存占用并減少了對零元素的計算;這一壓縮方法有效降低了存儲帶寬和計算帶寬的需求,使得數(shù)據(jù)的讀取和處理更加高效;通過對圖數(shù)據(jù)進(jìn)行優(yōu)化存儲,大幅減少了計算過程中無效數(shù)據(jù)的訪問,提升了整體計算效率。
48、減少了內(nèi)存訪問沖突:傳統(tǒng)的圖卷積神經(jīng)網(wǎng)絡(luò)在聚合階段由于圖數(shù)據(jù)的稀疏性和不規(guī)則性,常常面臨較高的內(nèi)存訪問沖突,尤其是在多線程計算時,通過本發(fā)明提出的索引驅(qū)動的mac結(jié)構(gòu),當(dāng)多個處理單元(pe)訪問同一目的節(jié)點(diǎn)特征時,避免了重復(fù)讀取內(nèi)存,減少了訪存沖突的可能性;通過暫存目的節(jié)點(diǎn)特征和動態(tài)調(diào)整訪問順序,本發(fā)明有效地避免了數(shù)據(jù)沖突,從而減少了訪問延遲。
49、優(yōu)化了負(fù)載均衡與并行計算:本發(fā)明通過對計算過程的并行化處理,確保了計算單元之間的負(fù)載均衡,每個處理單元獨(dú)立地處理不同的邊數(shù)據(jù),并進(jìn)行源節(jié)點(diǎn)特征與邊值的乘法計算,并行計算不僅提高了計算速度,還避免了由于計算負(fù)載不均衡而導(dǎo)致的性能下降;此外,通過設(shè)計高效的數(shù)據(jù)分配與導(dǎo)航機(jī)制,源節(jié)點(diǎn)特征和邊值的傳輸在不同模塊間得到了優(yōu)化,進(jìn)一步增強(qiáng)了計算的并行性和效率。
50、提升了數(shù)據(jù)重用率:在圖卷積神經(jīng)網(wǎng)絡(luò)的聚合階段,由于計算數(shù)據(jù)的高度稀疏性和不規(guī)則性,傳統(tǒng)方法難以有效地重用已加載的數(shù)據(jù),導(dǎo)致頻繁的內(nèi)存訪問和計算冗余;本發(fā)明通過源節(jié)點(diǎn)特征導(dǎo)航模塊和目的節(jié)點(diǎn)特征存儲模塊的協(xié)作,大幅提高了數(shù)據(jù)重用率;當(dāng)多個處理單元訪問相同的源節(jié)點(diǎn)特征時,源節(jié)點(diǎn)特征僅需加載一次,并被多個處理單元共享。這一策略有效減少了內(nèi)存帶寬的消耗,并提升了計算效率。
51、降低了功耗與能效:通過優(yōu)化計算過程中的內(nèi)存訪問模式和減少冗余計算,本發(fā)明減少了硬件資源的浪費(fèi),特別是在大規(guī)模并行計算環(huán)境中,通過提高內(nèi)存重用率和減少訪存沖突,降低了系統(tǒng)的功耗;結(jié)合高效的硬件實(shí)現(xiàn),該方法不僅提升了計算效率,還提高了能效,適應(yīng)了現(xiàn)代高性能計算設(shè)備對能效優(yōu)化的要求。