作者 | 付浩 憲鵬 祥洲等
美團搜索與NLP團隊在圖神經(jīng)網(wǎng)絡(luò)的長期落地實踐中,基于業(yè)務(wù)實際場景,自主設(shè)計研發(fā)了圖神經(jīng)網(wǎng)絡(luò)框架Tulong,以及配套的圖學(xué)習(xí)平臺,提升了模型的規(guī)模和迭代效率。
1. 前言
萬物之間皆有聯(lián)系。圖作為一種通用的數(shù)據(jù)結(jié)構(gòu),可以很好地描述實體與實體之間的關(guān)系。例如,在社交網(wǎng)絡(luò)中,用圖來表示用戶與用戶之間的好友關(guān)系;在電商網(wǎng)站中,用圖表示用戶與商品之間的點擊購買行為;在知識圖譜構(gòu)建中,還可以用圖表示實體與實體間多樣的關(guān)系。另一方面,深度學(xué)習(xí)技術(shù)在計算機視覺、自然語言處理、語音處理等領(lǐng)域均已取得了巨大的成功。深度學(xué)習(xí)技術(shù)將圖像、文本、語音等多種多樣的數(shù)據(jù)轉(zhuǎn)化為稠密的向量表示,提供了表示數(shù)據(jù)的另一種方式。借助于硬件日益強大的計算能力,深度學(xué)習(xí)可以從海量數(shù)據(jù)中學(xué)習(xí)到數(shù)據(jù)之間復(fù)雜多樣的相關(guān)性。
這會讓人不禁思考,深度學(xué)習(xí)能否應(yīng)用到更廣闊的領(lǐng)域,比如——圖?事實上,早在深度學(xué)習(xí)興起之前,業(yè)界就已經(jīng)開始了圖嵌入(Graph Embedding)技術(shù)的探索[1]。早期的圖嵌入算法多以啟發(fā)式的矩陣分解、概率圖模型為主;隨后出現(xiàn)了以DeepWalk[2]和Node2vec[3]為代表的、較為“淺層”的神經(jīng)網(wǎng)絡(luò)模型;最后,以GCN[4]為代表的一系列研究工作,打通了圖信號處理與神經(jīng)網(wǎng)絡(luò)之間的壁壘,奠定了當(dāng)前基于消息傳遞機制的圖神經(jīng)網(wǎng)絡(luò)(GNN: Graph Neural Network)模型的基本范式。
近年來,圖神經(jīng)網(wǎng)絡(luò)逐漸成為學(xué)術(shù)界的研究熱點之一[5]。在工業(yè)界,圖神經(jīng)網(wǎng)絡(luò)在電商搜索、推薦、在線廣告、金融風(fēng)控、交通預(yù)估等領(lǐng)域也有諸多的落地應(yīng)用,并帶來了顯著收益。
由于圖數(shù)據(jù)特有的稀疏性(圖的所有節(jié)點對之間只有少量邊相連),直接使用通用的深度學(xué)習(xí)框架(例如TensorFlow和PyTorch)訓(xùn)練往往性能不佳。工欲善其事,必先利其器。針對圖神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)框架應(yīng)運而出:PyG (PyTorch Geometric)[6]和DGL (Deep Graph Library)[7]等開源框架大幅提升了圖神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度,并且降低了資源消耗[17][18],擁有活躍的社區(qū)支持。很多公司根據(jù)自身業(yè)務(wù)特點,也紛紛建設(shè)自有的圖神經(jīng)網(wǎng)絡(luò)框架。美團搜索與NLP團隊在長期的落地實踐中,總結(jié)實踐經(jīng)驗,在訓(xùn)練的規(guī)模和性能、功能的豐富性、易用性等方面進行了大量優(yōu)化。本文首先介紹我們在過往落地應(yīng)用中遇到的實際問題和挑戰(zhàn),然后再介紹具體的解決方案。
1.1 問題和挑戰(zhàn)
從工業(yè)界落地應(yīng)用的角度來看,一個“好用”的圖神經(jīng)網(wǎng)絡(luò)框架至少具備以下特點。
(1)完善支持當(dāng)前流行的圖神經(jīng)網(wǎng)絡(luò)模型。
從圖本身的類型來看,圖神經(jīng)網(wǎng)絡(luò)模型可以分為同質(zhì)圖(Homogeneous Graph)、異質(zhì)圖(Heterogeneous Graph)、動態(tài)圖(Dynamic Graph)等類型。從訓(xùn)練方式來看,又可以分為全圖消息傳遞[4]和基于子圖采樣的消息傳遞[8]等類型。從推理方式來看,還可以分為直推式和歸納式[9]。
除此之外,下游任務(wù)除了經(jīng)典的節(jié)點分類、鏈接預(yù)測和圖分類,還有許多領(lǐng)域相關(guān)端到端的預(yù)測任務(wù)。在實際應(yīng)用中,不同業(yè)務(wù)場景對圖神經(jīng)網(wǎng)絡(luò)的模型和下游任務(wù)的需求是不同的,需要個性化定制。例如在美食推薦場景中,存在用戶、商家、菜品等節(jié)點,刻畫其相互關(guān)系可以用同質(zhì)圖或異質(zhì)圖;為了刻畫用戶在不同時間的偏好,可能還需要使用動態(tài)圖模型;針對推薦系統(tǒng)的召回和排序兩個階段,還需要設(shè)計不同的訓(xùn)練任務(wù)。盡管現(xiàn)有框架都提供常見模型的實現(xiàn),但簡單調(diào)用這些模型不能滿足上述需求。此時便需要用戶自行開發(fā)模型和訓(xùn)練流程代碼,這就帶來了額外的工作量。如何幫助用戶更便捷地實現(xiàn)定制模型是一個不小的挑戰(zhàn)。
(2)以合理的代價支持大規(guī)模圖上的模型訓(xùn)練。
在業(yè)務(wù)落地應(yīng)用中,圖的規(guī)模往往很大,可以達到數(shù)十億甚至數(shù)百億條邊。我們在初期的嘗試中發(fā)現(xiàn),使用現(xiàn)有框架,只能在分布式環(huán)境下訓(xùn)練百億邊規(guī)模的模型,消耗較多的硬件資源(數(shù)千CPU和數(shù)TB內(nèi)存)。我們希望單機即可在合理的時間內(nèi)訓(xùn)練百億邊規(guī)模的模型,從而降低對硬件資源的需求。
(3)與業(yè)務(wù)系統(tǒng)無縫對接。
圖神經(jīng)網(wǎng)絡(luò)的完整落地流程至少包括:基于業(yè)務(wù)數(shù)據(jù)構(gòu)圖、離線訓(xùn)練和評測模型、線上推理、業(yè)務(wù)指標(biāo)觀測等步驟。要讓圖神經(jīng)網(wǎng)絡(luò)技術(shù)成功落地應(yīng)用,需要充分理解業(yè)務(wù)邏輯和業(yè)務(wù)需求,統(tǒng)一并高效地管理業(yè)務(wù)場景。同樣以美食推薦場景為例,線上日志記錄了曝光、點擊、下單等行為事件,知識圖譜提供了商家和菜品豐富的屬性數(shù)據(jù),如何從這些異質(zhì)的數(shù)據(jù)構(gòu)造圖,要結(jié)合業(yè)務(wù)實際多次實驗確定。合適的工具能提升對接業(yè)務(wù)數(shù)據(jù)的效率,然而現(xiàn)有的圖神經(jīng)網(wǎng)絡(luò)框架大多聚焦在模型的離線訓(xùn)練和評測,缺乏此類工具。
(4)研發(fā)人員易于上手,同時提供充足的可擴展性。
從研發(fā)效率的角度來說,自建圖神經(jīng)網(wǎng)絡(luò)框架的目的是減少建模中的重復(fù)工作,讓研發(fā)人員的精力集中在業(yè)務(wù)本身的特性上。因此,一個“好用”的圖神經(jīng)網(wǎng)絡(luò)框架應(yīng)當(dāng)易于上手,通過簡單地配置即能完成多數(shù)任務(wù)。在此基礎(chǔ)上,對于一些特殊的建模需求,也能提供適當(dāng)?shù)闹С帧?/p>
1.2 美團的解決方案
美團搜索與NLP團隊在搜索、推薦、廣告、配送等業(yè)務(wù)的長期落地實踐中,總結(jié)實踐經(jīng)驗,自主設(shè)計研發(fā)了圖神經(jīng)網(wǎng)絡(luò)框架Tulong以及配套的圖學(xué)習(xí)平臺,較好地解決了上述問題。
- 首先,我們對當(dāng)前流行的圖神經(jīng)網(wǎng)絡(luò)模型進行了細(xì)粒度的剖析,歸納總結(jié)出了一系列子操作,實現(xiàn)了一套通用的模型框架。簡單修改配置即可實現(xiàn)許多現(xiàn)有的圖神經(jīng)網(wǎng)絡(luò)模型。
- 針對基于子圖采樣的訓(xùn)練方式,我們開發(fā)了圖計算庫“MTGraph”,大幅優(yōu)化了圖數(shù)據(jù)的內(nèi)存占用和子圖采樣速度。單機環(huán)境下,相較于DGL訓(xùn)練速度提升約4倍,內(nèi)存占用降低約60%。單機即可實現(xiàn)十億節(jié)點百億邊規(guī)模的訓(xùn)練。
- 圍繞圖神經(jīng)網(wǎng)絡(luò)框架Tulong,我們構(gòu)建了一站式的圖學(xué)習(xí)平臺,為研發(fā)人員提供包括業(yè)務(wù)數(shù)據(jù)接入、圖數(shù)據(jù)構(gòu)建和管理、模型的訓(xùn)練和評測、模型導(dǎo)出上線等全流程的圖形化工具。
- Tulong實現(xiàn)了高度可配置化的訓(xùn)練和評測,從參數(shù)初始化到學(xué)習(xí)率,從模型結(jié)構(gòu)到損失函數(shù)類型,都可以通過一套配置文件來控制。針對業(yè)務(wù)應(yīng)用的常見場景,我們總結(jié)了若干訓(xùn)練模版,研發(fā)人員通過修改配置即可適配多數(shù)業(yè)務(wù)場景。例如,許多業(yè)務(wù)存在午晚高峰的周期性波動,我們?yōu)榇嗽O(shè)計了周期性動態(tài)圖的訓(xùn)練模板,可以為一天中不同時段產(chǎn)生不同的GNN表示。在美團配送業(yè)務(wù)的應(yīng)用中,需要為每個區(qū)域產(chǎn)生不同時段下的GNN表示,作為下游預(yù)測任務(wù)的輸入特征。開發(fā)過程中,從開始修改配置到產(chǎn)出初版模型僅花費三天;而在此之前,自行實現(xiàn)類似模型方案花費約兩周時間。
2. 系統(tǒng)概覽
如下圖1所示,Tulong配套圖計算庫和圖學(xué)習(xí)平臺構(gòu)成了一套完整系統(tǒng)。系統(tǒng)自底向上可以分為以下3個組件。
圖1 圖神經(jīng)網(wǎng)絡(luò)計算引擎、框架和平臺的系統(tǒng)架構(gòu)
(1)圖以及深度學(xué)習(xí)引擎
我們把圖神經(jīng)網(wǎng)絡(luò)的底層算子分為三類:圖結(jié)構(gòu)查詢、稀疏張量計算和稠密張量計算。我們開發(fā)了圖計算庫MTGraph提供圖數(shù)據(jù)的存儲和查詢功能,深度優(yōu)化了內(nèi)存占用和子圖采樣速度。MTGraph兼容PyTorch和DGL,用戶可以在MTGraph的基礎(chǔ)上直接編寫基于DGL的模型代碼。
(2)Tulong框架
Tulong框架首先封裝實現(xiàn)了訓(xùn)練圖神經(jīng)網(wǎng)絡(luò)所需的基本組件,包括圖和特征數(shù)據(jù)的預(yù)處理流程、子圖采樣器、通用的GNN模型框架,以及包括訓(xùn)練和評測在內(nèi)的基礎(chǔ)任務(wù)?;谏鲜鼋M件,Tulong框架提供豐富的預(yù)定義模型和訓(xùn)練/推理流程,用戶通過修改配置文件即可在業(yè)務(wù)數(shù)據(jù)上訓(xùn)練和評測GNN模型。
(3)圖學(xué)習(xí)平臺
圖學(xué)習(xí)平臺旨在簡化離線的模型開發(fā)和迭代過程,同時簡化業(yè)務(wù)系統(tǒng)的對接流程。圖學(xué)習(xí)平臺提供一系列的可視化工具,簡化從業(yè)務(wù)數(shù)據(jù)接入到模型上線的全流程。下文將從模型框架、訓(xùn)練流程框架、性能優(yōu)化和圖學(xué)習(xí)平臺等四個方面詳細(xì)介紹各個模塊的分析和設(shè)計方案。
3. 模型框架
我們從工程實現(xiàn)的角度,歸納總結(jié)了當(dāng)前主流圖神經(jīng)網(wǎng)絡(luò)模型的基本范式,實現(xiàn)一套通用框架,以期涵蓋多種GNN模型。以下按照圖的類型(同質(zhì)圖、異質(zhì)圖和動態(tài)圖)分別討論。
3.1 同質(zhì)圖
同質(zhì)圖(Homogeneous Graph)可以定義為節(jié)點集合和邊集合:,一條邊表示節(jié)點與節(jié)點相連。節(jié)點和邊上往往還附加有特征,我們記為節(jié)點的特征,為邊的特征。包括PyG和DGL在內(nèi)的許多圖神經(jīng)網(wǎng)絡(luò)框架,都對同質(zhì)圖上的GNN進行過歸納,提出了相應(yīng)的計算范式。例如,DGL把GNN的前向計算過程歸納為消息函數(shù)(message function)、聚合函數(shù)(reduce function)和更新函數(shù)(update function)[7]。
我們擴展了聚合函數(shù)的種類,提出一種更加通用的計算范式:
上述計算范式仍然分為生成消息、聚合消息、更新當(dāng)前節(jié)點三個步驟,具體包括:
- 層次維度的聚合函數(shù):用于聚合同一節(jié)點在模型不同層次的表示。例如,多數(shù)GNN模型中,層次維度的聚合函數(shù)為上一層的節(jié)點表示;而在JKNet[10]中,層次維度的聚合函數(shù)可以設(shè)定為LSTM[11]。
- 消息函數(shù):結(jié)合起始節(jié)點和目標(biāo)節(jié)點,以及邊的特征,生成用于消息傳遞的消息向量。
- 節(jié)點維度的聚合函數(shù):匯集了來自鄰居節(jié)點的所有消息向量。值得注意的是,也可以有不同的實現(xiàn)。例如,在GCN中為所有鄰居節(jié)點,而在GraphSage[9]中為鄰居節(jié)點的子集。
- 更新函數(shù):用于聚合節(jié)點自身在上一層和當(dāng)前層的表示。
不難看出,上述計算范式可以覆蓋當(dāng)前大多數(shù)GNN模型。在工程實踐中,我們將上述函數(shù)進一步分拆細(xì)化,預(yù)先提供了多種高效的實現(xiàn)。通過配置選項即可實現(xiàn)不同的組合搭配,從而實現(xiàn)多數(shù)主流的GNN模型。
3.2 異質(zhì)圖
相比于同質(zhì)圖,異質(zhì)圖(Heterogeneous Graph)擴充了節(jié)點類型和邊類型。比如,學(xué)術(shù)引用網(wǎng)絡(luò)[13]中包含論文、作者、機構(gòu)等類型的節(jié)點,節(jié)點直接通過“論文引用其他論文”、“作者撰寫論文”、“作者屬于機構(gòu)”等類型的邊相連,如下圖2所示:
圖2 同質(zhì)圖與異質(zhì)圖的比較
我們把異質(zhì)圖視為多個二分圖的疊加,每一個二分圖對應(yīng)于一種邊類型。上述的學(xué)術(shù)引用網(wǎng)絡(luò)可以表示成“論文-引用-論文”、“作者-撰寫-論文”、“作者-屬于-機構(gòu)”,共計三個二分圖,同質(zhì)圖的GNN模型框架稍加修改即可在二分圖上應(yīng)用。
在此基礎(chǔ)上,一個節(jié)點在不同的二分圖中會產(chǎn)生不同的表示。我們進一步提出邊類型維度的聚合函數(shù),用于聚合節(jié)點在不同二分圖中的表示(如下圖3所示)。框架中同樣提供邊類型緯度聚合函數(shù)的多種實現(xiàn),可以通過配置選項調(diào)用。例如,要實現(xiàn)RGCN,可以在二分圖上應(yīng)用GCN,然后在邊類型維度上取平均。
圖3 異質(zhì)圖模型框架
3.3 動態(tài)圖
動態(tài)圖(Dynamic Graph)是指隨時間變化的圖。與之相對的,上述的同質(zhì)圖和異質(zhì)圖可以稱為靜態(tài)圖。比如,學(xué)術(shù)引用網(wǎng)絡(luò)會隨時間不斷擴張,用戶與商品的交互圖會隨用戶興趣而變化。動態(tài)圖上的GNN模型旨在生成給定時間下的節(jié)點表示。根據(jù)時間粒度的粗細(xì),動態(tài)圖可分為離散時間動態(tài)圖和連續(xù)時間動態(tài)圖。
在離散時間動態(tài)圖中,時間被劃分為多個時間片(例如以天/小時劃分),每個時間片對應(yīng)一個靜態(tài)的圖。離散時間動態(tài)圖的GNN模型通常在每個時間片上單獨應(yīng)用GNN模型,然后聚合節(jié)點在不同時間的表征[14]。我們把聚合過程抽象為離散時間維度的聚合函數(shù),同樣提供預(yù)定義的實現(xiàn)。此外,Tulong框架還提供離散時間動態(tài)圖數(shù)據(jù)的加載和管理機制,僅在內(nèi)存中保留必須的時間片,降低硬件資源的消耗。
圖4 離散時間動態(tài)圖GNN模型框架在連續(xù)時間動態(tài)圖中,每條邊附有時間戳,表示交互事件發(fā)生的時刻。相比于靜態(tài)圖,連續(xù)時間動態(tài)圖中的消息函數(shù)還依賴于給定樣本的時間戳以及邊的時間戳。此外,鄰居節(jié)點必須與時間有關(guān),例如鄰居節(jié)點中不能出現(xiàn)時刻之后才出現(xiàn)的節(jié)點。針對此問題,我們開發(fā)了多種連續(xù)時間動態(tài)圖上的鄰居節(jié)點采樣器,可以在指定的時間范圍內(nèi),高效地采樣鄰居節(jié)點。
圖5 連續(xù)時間動態(tài)圖GNN模型框架
以上分析了同質(zhì)圖、異質(zhì)圖和動態(tài)圖的計算范式,我們從中抽取出通用的函數(shù)(算子),包括消息函數(shù)、聚合函數(shù)、更新函數(shù)、鄰居節(jié)點函數(shù),并給出多種預(yù)定義的實現(xiàn)??蚣苡脩敉ㄟ^配置選項即可拼裝組合算子,從而實現(xiàn)需要的GNN模型。
4. 訓(xùn)練流程框架
訓(xùn)練GNN模型通常包括加載數(shù)據(jù)、定義GNN模型、訓(xùn)練和評測、導(dǎo)出模型等流程。由于GNN模型和訓(xùn)練任務(wù)的多樣性,在實際開發(fā)過程中,用戶往往要針對自己的場景自行編寫模型和流程代碼,處理繁瑣的底層細(xì)節(jié)讓用戶難以集中到算法模型本身的調(diào)優(yōu)上。GraphGym[12]和DGL-Go[16]試圖解決這一問題,通過集成多種模型和訓(xùn)練任務(wù),同時簡化接口,可以讓用戶較為直接地上手和訓(xùn)練GNN模型。
我們通過更加“工業(yè)化”的方式解決這一問題(如下圖6所示),框架被分為兩層:基礎(chǔ)組件和流程組件。基礎(chǔ)組件聚焦于單一的功能,例如圖數(shù)據(jù)組件只維護內(nèi)存中的圖數(shù)據(jù)結(jié)構(gòu),不提供圖上的采樣或張量計算功能;圖上的采樣功能通過圖采樣器來提供。流程組件通過組裝基礎(chǔ)組件提供較為完整的數(shù)據(jù)預(yù)處理、訓(xùn)練和評測流程,例如訓(xùn)練流程組合了圖數(shù)據(jù)、圖采樣器、GNN模型等組件,提供完整的訓(xùn)練功能。
圖6 訓(xùn)練流程框架
更上一層,我們提供多種流程配置模板和GNN模型模板。模板對外暴露若干超參,例如訓(xùn)練數(shù)據(jù)路徑、模型類型、學(xué)習(xí)率等參數(shù),結(jié)合用戶指定的超參后就可以完整定義一次訓(xùn)練任務(wù)。換言之,基于模板和參數(shù)即可完整復(fù)現(xiàn)一次GNN模型實驗??蚣軐馕鲞@些配置,并生成可執(zhí)行的應(yīng)用。
舉例來說,用戶可以選擇GraphSage模型的配置模板,以及鏈接預(yù)測任務(wù)的訓(xùn)練模板,指定模型層數(shù)和維度,以及訓(xùn)練評測數(shù)據(jù)路徑,即可開始訓(xùn)練基于GraphSage的鏈接預(yù)測模型。
5. 性能優(yōu)化
隨著業(yè)務(wù)的發(fā)展,業(yè)務(wù)場景下圖的規(guī)模也愈發(fā)龐大。如何以合理的代價,高效訓(xùn)練數(shù)十億乃至百億邊規(guī)模的GNN模型成為亟需解決的問題。我們通過優(yōu)化單機的內(nèi)存占用,以及優(yōu)化子圖采樣算法,來解決這一問題。
5.1 圖數(shù)據(jù)結(jié)構(gòu)優(yōu)化
圖數(shù)據(jù)結(jié)構(gòu)的內(nèi)存占用是制約可訓(xùn)練圖規(guī)模的重要因素。以MAG240M-LSC數(shù)據(jù)集[13]為例,添加反向邊后圖中共有2.4億節(jié)點和35億邊。在基于子圖采樣的訓(xùn)練方式下,PyG和DGL單機的圖數(shù)據(jù)結(jié)構(gòu)均需要占用100GB以上的內(nèi)存,其它開源框架的內(nèi)存占用往往更多。在更大規(guī)模的業(yè)務(wù)場景圖上,內(nèi)存占用往往會超出硬件配置。我們設(shè)計實現(xiàn)了更為緊湊的圖數(shù)據(jù)結(jié)構(gòu),提升了單機可承載的圖規(guī)模。我們借助圖壓縮技術(shù)降低內(nèi)存占用。不同于常規(guī)的圖壓縮問題,GNN的場景下需要支持隨機查詢操作。例如,查詢給定節(jié)點的鄰居節(jié)點;判斷給定的兩個節(jié)點在圖中是否相連。我們對此提出的解決方案包括兩部分:
- 圖數(shù)據(jù)預(yù)處理和壓縮:首先分析圖的統(tǒng)計特征,以輕量級的方式對節(jié)點進行聚類和重新編號,以期讓編號接近的節(jié)點在領(lǐng)域結(jié)構(gòu)上也更為相似。隨后調(diào)整邊的順序,對邊數(shù)據(jù)進行分塊和編碼,產(chǎn)生“節(jié)點-分塊索引-鄰接邊”層次的圖數(shù)據(jù)文件(如下圖7所示)。最后,如果數(shù)據(jù)包含節(jié)點特征或邊特征,還需要將特征與壓縮后的圖對齊。
圖7 壓縮后的圖數(shù)據(jù)結(jié)構(gòu)
- 圖的隨機查詢:查詢操作分為兩步:首先定位所需的邊數(shù)據(jù)塊,然后在內(nèi)存中解壓數(shù)據(jù)塊,讀取所查詢的數(shù)據(jù)。例如在查詢節(jié)點和是否相連時,首先根據(jù)兩個節(jié)點的編號計算邊數(shù)據(jù)塊的地址,解壓數(shù)據(jù)塊后獲得少量候選鄰接邊(通常不多于16條),然后查找是否包含邊。
經(jīng)過壓縮,加載MAG240M-LSC數(shù)據(jù)集僅需15GB內(nèi)存。百億乃至千億邊規(guī)模圖的內(nèi)存占用顯著降低,達到單機可承載的程度,如下圖8所示:
圖8 圖數(shù)據(jù)結(jié)構(gòu)內(nèi)存占用對比
5.2 子圖采樣優(yōu)化
子圖采樣是GNN模型訓(xùn)練的性能瓶頸之一。我們發(fā)現(xiàn)在某些業(yè)務(wù)圖中,子圖采樣的耗時甚至占訓(xùn)練整體的80%以上。我們分別針對靜態(tài)圖和動態(tài)圖,設(shè)計實現(xiàn)了多種高效的鄰居節(jié)點采樣算法。主要的優(yōu)化手段包括:
- 隨機數(shù)發(fā)生器:相比于通信加密等應(yīng)用,圖上的采樣對于隨機數(shù)發(fā)生器的“隨機性”并沒有苛刻的要求。我們適當(dāng)放松了對隨機性的要求,設(shè)計實現(xiàn)了更快速的隨機數(shù)發(fā)生器,可以直接應(yīng)用在有放回和無放回的采樣操作中。
- 概率量化:有權(quán)重的采樣中,在可接受的精度損失下,將浮點數(shù)表示的概率值量化為更為緊湊的整型。不僅降低了采樣器的內(nèi)存消耗,也可以將部分浮點數(shù)操作轉(zhuǎn)化為整型操作。
- 時間戳索引:動態(tài)圖的子圖采樣操作要求限定邊的時間范圍。采樣器首先對邊上的時間戳構(gòu)建索引,采樣時先根據(jù)索引確定可采樣邊的范圍,然后再執(zhí)行實際的采樣操作。
經(jīng)過以上優(yōu)化,子圖采樣速度相較于DGL取得了2到4倍的提升(如下圖9所示)。某業(yè)務(wù)場景圖A(2億節(jié)點40億邊)使用DGL訓(xùn)練耗時2.5小時/epoch,經(jīng)過優(yōu)化可達0.5小時/epoch。某業(yè)務(wù)場景圖B(2.5億節(jié)點124億邊)原本只能分布式訓(xùn)練,耗時6小時/epoch;經(jīng)過優(yōu)化,單機即可訓(xùn)練,速度可達2小時/epoch。
圖9 子圖采樣速度對比(2層,每層20條鄰接邊)
6. 圖學(xué)習(xí)平臺
圖學(xué)習(xí)平臺旨在簡化離線的模型開發(fā)迭代過程,同時簡化業(yè)務(wù)系統(tǒng)的對接流程。一個完整的模型開發(fā)迭代過程至少包括三個階段:準(zhǔn)備數(shù)據(jù)集、定義模型和訓(xùn)練任務(wù)、訓(xùn)練和評測模型。我們分析用戶在這三個階段的需求,提供相應(yīng)工具提升開發(fā)效率:
- 數(shù)據(jù)集管理:從業(yè)務(wù)數(shù)據(jù)構(gòu)造圖是模型開發(fā)的第一步,圖學(xué)習(xí)平臺提供基于Spark的構(gòu)圖功能,可以將Hive中存儲的業(yè)務(wù)數(shù)據(jù)轉(zhuǎn)化為Tulong自定義的圖數(shù)據(jù)格式。業(yè)務(wù)數(shù)據(jù)經(jīng)常以事件日志的方式存儲,如何從中抽象出圖,有大量的選擇。例如,在推薦場景中,業(yè)務(wù)日志包含用戶對商家的點擊和下單記錄,除了把"用戶-點擊-商家"的事件刻畫為圖以外,還可以考慮刻畫短時間內(nèi)共同點擊商家的關(guān)系。除此之外,還可以引入額外的數(shù)據(jù),比如商家的地理位置、商家在售的菜品等。究竟使用何種構(gòu)圖方案,需要經(jīng)過實驗才能確定。對此,圖學(xué)習(xí)平臺提供了圖形化的構(gòu)圖工具(如下圖10所示),幫助用戶梳理構(gòu)圖方案;同時還提供圖數(shù)據(jù)集的版本管理,方便比較不同構(gòu)圖方案的效果。
圖10 圖形化的構(gòu)圖工具
- 實驗管理:確定圖數(shù)據(jù)之后,建模方案和訓(xùn)練策略是影響最終效果的關(guān)鍵。例如,應(yīng)該用何種GNN模型?損失函數(shù)如何選???模型超參和訓(xùn)練超參如何確定?這些問題也需要經(jīng)過大量實驗才能回答?;赥ulong框架,建模方案和訓(xùn)練策略可以通過一組配置來控制。圖學(xué)習(xí)平臺提供配置的可視化編輯器和版本管理功能,方便比較不同的方案的優(yōu)劣。
- 流程管理:有了圖數(shù)據(jù)集和建模/訓(xùn)練方案后,還需要讓整個流程自動化。這是模型上線的必要條件,同時也有利于團隊成員復(fù)現(xiàn)彼此的方案。圖學(xué)習(xí)平臺針對常見的“構(gòu)圖、訓(xùn)練、評測、導(dǎo)出”流程提供了自動化的調(diào)度,在適當(dāng)?shù)臅r候可以復(fù)用前一階段的結(jié)果,以提升效率。例如,如果數(shù)據(jù)集的定義沒有變化,可以跳過Spark構(gòu)圖階段直接使用已有的圖數(shù)據(jù)。此外,針對模型上線的需求,平臺提供構(gòu)圖和建模方案整合和定時調(diào)度等功能。?
7. 總結(jié)
本文介紹了美團搜索與NLP團隊在圖神經(jīng)網(wǎng)絡(luò)框架建設(shè)方面的實踐經(jīng)驗,包括GNN模型歸納抽象、基本框架、性能優(yōu)化,以及上層工具等方面的思考和關(guān)鍵設(shè)計??蚣艿脑O(shè)計思路來源于業(yè)務(wù)落地所遇到的實際問題,例如針對大規(guī)模圖的優(yōu)化、多人協(xié)作中的流程管理等;同時也吸收借鑒了學(xué)術(shù)界的最新研究進展,例如動態(tài)圖的計算范式等。除了技術(shù)層面的優(yōu)化,框架的建設(shè)也得益于工程團隊和算法團隊的緊密配合,基于共同的、有深度的認(rèn)知才得以讓項目順利推進。
借助于Tulong框架,圖神經(jīng)網(wǎng)絡(luò)技術(shù)已在美團搜索、推薦、廣告、配送多個業(yè)務(wù)場景落地應(yīng)用,并取得了較為可觀的業(yè)務(wù)收益。我們相信圖神經(jīng)網(wǎng)絡(luò)還有更加廣闊的應(yīng)用前景,作為基礎(chǔ)設(shè)施的圖神經(jīng)網(wǎng)絡(luò)框架也值得繼續(xù)優(yōu)化完善。
8. 作者簡介
付浩、憲鵬、祥洲、玉基、徐灝、夢迪、武威等,均來自美團平臺/搜索與NLP部。