GNN加速器頂層架構(gòu)
此GNN加速器是為GraphSAGE算法設(shè)計(jì)的,但是它的設(shè)計(jì)也可以應(yīng)用于其他類似的GNN算法加速。其頂層架構(gòu)如下圖所示。
該架構(gòu)由以下模塊組成:
圖中的GNN內(nèi)核是算法實(shí)現(xiàn)的核心部分(詳情如下)。
RoCE-Lite是RDMA協(xié)議的輕量級(jí)版本,用于通過(guò)高速以太網(wǎng)進(jìn)行遠(yuǎn)程存儲(chǔ)訪問(wèn),以支持海量節(jié)點(diǎn)的圖計(jì)算。
400GE以太網(wǎng)控制器用于承載RoCE-Lite協(xié)議。
GDDR6存儲(chǔ)器用于存儲(chǔ)GNN處理過(guò)程中所需的高速訪問(wèn)數(shù)據(jù)(DDR4作為備用大容量存儲(chǔ)器)。該存儲(chǔ)器用于存儲(chǔ)訪問(wèn)頻率相對(duì)較低的數(shù)據(jù),例如待預(yù)處理的圖形數(shù)據(jù)。
PCIeGen5 ×16 接口提供高速主機(jī)接口,用于與服務(wù)器軟件進(jìn)行數(shù)據(jù)交互。
上述所有模塊均通過(guò)具有高帶寬的NoC實(shí)現(xiàn)互連。
GNN內(nèi)核微架構(gòu)
在開(kāi)始討論GNN內(nèi)核的微架構(gòu)之前,有必要先回顧一下GraphSAGE算法。其內(nèi)層循環(huán)的聚合和合并(包括卷積)占據(jù)了該算法的大部分計(jì)算和存儲(chǔ)訪問(wèn)。通過(guò)研究,我們得出這兩個(gè)步驟的特點(diǎn),具體如下。
表2:GNN算法中聚合和合并操作的對(duì)比(來(lái)源:https://arxiv.org/abs/1908.10834)
步驟 | 聚合操作 | 合并操作 |
存儲(chǔ)訪問(wèn)方式 | 間接訪問(wèn),不規(guī)則 | 直接訪問(wèn),規(guī)則 |
數(shù)據(jù)重用 | 低 | 高 |
計(jì)算模式 | 動(dòng)態(tài),不規(guī)則 | 靜態(tài),規(guī)則 |
計(jì)算量 | 低 | 高 |
性能瓶頸 | 存儲(chǔ) | 計(jì)算 |
可以看出,聚合操作和合并操作在計(jì)算和存儲(chǔ)訪問(wèn)模式上有著完全不同的需求。聚合操作涉及相鄰節(jié)點(diǎn)的采樣。然而,圖形是一種非歐幾里得數(shù)據(jù)類型——它的大小和維度是不確定且無(wú)序,矩陣稀疏,節(jié)點(diǎn)位置隨機(jī)。因此,存儲(chǔ)訪問(wèn)是不規(guī)則的,并且難以重復(fù)利用數(shù)據(jù)。
在合并操作中,輸入數(shù)據(jù)是聚合結(jié)果(節(jié)點(diǎn)的低維表示)和權(quán)重矩陣。它的大小和維度是固定的,具有線性存儲(chǔ)位置。因此對(duì)存儲(chǔ)訪問(wèn)沒(méi)有挑戰(zhàn),但是矩陣的計(jì)算量非常大。 基于上述分析,我們決定在GNN內(nèi)核加速器設(shè)計(jì)中選擇使用兩種不同的硬件結(jié)構(gòu)來(lái)分別處理聚合和合并操作(如下圖示):
聚合器——通過(guò)單指令多數(shù)據(jù)(SIMD)處理器陣列,對(duì)圖形相鄰節(jié)點(diǎn)進(jìn)行采樣和聚合。單指令可以預(yù)定義為mean()平均值計(jì)算,或其他適用的聚合函數(shù);多數(shù)據(jù)是指單次mean()均值計(jì)算中需要多個(gè)相鄰節(jié)點(diǎn)的特征數(shù)據(jù)作為輸入,這些數(shù)據(jù)來(lái)自子圖采樣器。SIMD處理器陣列通過(guò)調(diào)度器Agg Scheduler進(jìn)行負(fù)載平衡。子圖采樣器通過(guò)NoC從GDDR6或DDR4讀回的鄰接矩陣和節(jié)點(diǎn)特征數(shù)據(jù)h0v分別緩存在鄰接列表緩沖區(qū)(Adjacent ListBuffer)和節(jié)點(diǎn)特征緩沖區(qū)(Node Feature Buffer)。聚合的結(jié)果hkN(v)存儲(chǔ)在聚合緩沖區(qū)(Aggregation Buffer)中。
合并器——通過(guò)脈動(dòng)矩陣PE對(duì)聚合結(jié)果進(jìn)行卷積運(yùn)算。卷積核是Wk權(quán)重矩陣。卷積結(jié)果由ReLU激活函數(shù)進(jìn)行非線性處理,同時(shí)也存儲(chǔ)在PartialSum Buffer中,以用于下一輪迭代。
合并結(jié)果經(jīng)過(guò)L2BN標(biāo)準(zhǔn)化處理后,即為最終的節(jié)點(diǎn)表示hkv。在一個(gè)典型的節(jié)點(diǎn)分類預(yù)測(cè)應(yīng)用中,節(jié)點(diǎn)表示hkv可以通過(guò)一個(gè)全連接層(FC)來(lái)獲取節(jié)點(diǎn)的分類標(biāo)簽。這個(gè)過(guò)程是傳統(tǒng)的機(jī)器學(xué)習(xí)處理方法之一,在GraphSAGE文獻(xiàn)資料中沒(méi)有體現(xiàn),這個(gè)功能也沒(méi)有包含在這個(gè)架構(gòu)中。