天天看點

圖神經網絡(AliGraph)在阿裡巴巴的發展與應用

作者:機器學習PAI 趙昆

背景

為什麼做GNN?

在大資料的背景下,利用高速計算機去發現資料中的規律似乎是最有效的手段。為了讓機器計算的有目的性,需要将人的知識作為輸入。我們先後經曆了專家系統、經典機器學習、深度學習三個階段,輸入的知識由具體到抽象,由具體規則到特征再到模式,越來越宏觀。相對來說,抽象的層次變高了,覆寫面變廣了,但我們對底層的感覺變弱了,模型的可解釋程度變差了。事物發展往往遵循這樣的規律,先有客觀事實,再有原理支撐,之後是普遍推廣。深度學習的應用已經讓我們看到了非常可觀的價值,但其背後的可解釋性工作進展緩慢,也因為如此,當我們用深度學習去解決一些風控、安全等業務場景,那數字效果不足以支撐這項技術的應用,我們更需要知道結果後面的原因。

Graph是知識的載體,其間的實體聯系蘊含了很強的因果關系。重要的是,這是一種直覺的、人們能夠讀懂的結構。把Graph作為知識支撐,利用深度學習的泛化技術,看上去是一個可行的方向,在某些問題上,離我們的可解釋性目标更近了一步。各種深度學習相關的頂會在近年來的paper分布上,圖神經網絡(GNN)一直處于蓬勃态勢。GNN不一定是可解釋性的全部,但對于集團内複雜的生态網資料,無論從技術儲備還是業務效果上來說,都是一個非常值得投入的方向。

再者說,GNN是一種解決問題的思路,覆寫範圍很廣,不僅僅是為了學Graph而存在。目前基于行為曆史的搜尋推薦類算法,都可以納入到GNN範式,而這類算法在集團内有着大規模應用。用Graph去組織曆史資料,相比現有方式資訊量隻增不減,理論上模型效果會更好。

面向哪些使用者>

相比CNN、RNN等成熟技術而言,GNN還處于探索階段,Graph之于GNN,不如圖像之于CNN、自然語言之于RNN來的理所當然。即便有Graph資料,如何使用GNN沒有可遵循的固定模式,更沒有沉澱下來的類似卷積一樣的算子可直接調用。GNN的有效性需要更多的場景去驗證,而每一個場景都需要開發者的深入了解,開發者有能力處理Graph資料和編寫之上的深度學習模型。有了百花齊放的應用場景做鋪墊,才有可能抽象出共性的GNN算子,再将這些相對成熟的能力賦給使用者,GNN才會真正的推廣開來。出于這些考慮,比起開發一個成熟算法供使用者使用,平台目前階段會更側重提供API給開發者,讓開發者有能力貼近自己的場景去實作GNN。

另一方面,Graph大多是場景相關,一個電商場景的圖和社交網絡的圖有本質不同,不僅僅是資料構成上,上層的模型計算也很大程度不一樣。這是另外一點與圖像和自然語言的差別,後兩者在不同的場景間具有較好的可複用性,或是結果可複用(FineTune),或是計算模型複用。是以GNN的應用需要更貼近場景,由開發者定制化,平台需要盡可能降低開發成本,加快模型疊代頻率。

什麼樣的産品?

早期的GNN稱為GraphEmbedding更合适,因為整個模型的輸出就是頂點或邊的向量化表示,如RandomWalk、Node2Vec,這些向量通過學習Graph本身得到,不涉及跟上層業務的關聯。這些向量會作為業務模型的輸入,建構深度神經網絡。很多深度學習模型調優的經驗告訴我們,端到端訓練往往帶來更多的效果收益,對于貼近場景解決問題的開發者來說,結合業務進行端到端訓練而不是隻學習Graph本身,方案更為徹底。再者,端到端會省去巨大的中間過程開銷,如TB級的訓練樣本和向量臨時存盤。退一步講,隻學習Graph本身的過程是端到端的一個特例,如果需要,完全可以退化成這樣。端到端對使用者是友好的,在一套IDE裡,使用者既可以操作複雜的Graph資料,又可以将資料與深度神經網絡對接,自由編寫上層模型,而不是靠多套系統的拼湊來完成。

是以,我們定位為一個GNN平台,可擴充且與生态相容,面向GNN開發者提供一體化的解決方案,同時能将通過場景打磨的成熟算法沉澱到平台,推廣GNN的應用,緻力于為可解釋的AI做技術儲備。這是一個長期投入的過程,平台作為載體,需要厚實的底座。針對集團内現狀,前期我們優先解決圖資料與深度學習架構的對接,讓二者高效的bridge起來,再投入到GNN程式設計模型的建設。

技術棧

AliGraph涵蓋了從原始圖資料到GNN應用的整體鍊路,把GNN算法的探索成本降低到和傳統深度學習算法同等水準。平台可以分層來看:資料層,引擎層,應用層。

圖神經網絡(AliGraph)在阿裡巴巴的發展與應用

資料層,支援大規模同構圖、異構圖、屬性圖。資料無需提前build好,平台提供API來簡化資料解析和建圖的過程。資料層接口易擴充,友善對接不同格式、不同媒體的Graph資料。

引擎層,包含Graph Engine和Tensor Engine。Graph Engine又可分為邏輯對象層與算子層。邏輯對象層,描述的是把原始資料加載到系統後展現給使用者的形态是什麼。每一個對象實體都會提供相關的語義接口,比如對于一個Graph對象而言,可以擷取圖的拓撲資訊、異構程度、點邊數量等。對于使用者而言,實際使用中隻需要聲明一個邏輯對象并指定其資料源即可。

import aligraph as ag

g = ag.Graph(...)

print(g.get_topology())

算子層,在邏輯對象之上可以進行的計算操作。比如對于Graph對象而言,支援各種Sampler算子,用于對上層GNN算法提供輸入。算子層具有很強的擴充性,以滿足場景多樣化對算子種類的需求。目前,内置支援的算子圍繞GNN算法及生态展開,包括圖查詢、圖采樣、負采樣、KNN等。後續我們會開放支援算子開發的SDK,允許使用者自定義算子。

s = g.negative_sampler(type="by_indegree", ...)

print(s.get(ids))

Tensor Engine指深度學習引擎,如TensorFlow、PyTorch,或者其他支援Python接口的Library。Graph Engine的輸出為格式對齊的NumPy對象,可無縫與深度學習引擎對接。GNN開發者可自由編寫Graph之上的NN邏輯,并可與業務需求相結合,組成一個深度網絡模型進行端到端訓練。

應用層,強調與業務端到端結合,而非把Graph Embedding的結果割裂開使用。經場景打磨的成熟算法,也會沉澱到應用層,以算法元件的形式提供給使用者。

系統實作

一體化架構

由GCN架構引申,典型的GNN程式設計範式可概括如下,系統是為了高效支援該範式而設計。

圖神經網絡(AliGraph)在阿裡巴巴的發展與應用

其中,向量化和聚合操作可以利用深度學習引擎的表達能力,是以,為實作上述計算模式,主要在于圖相關的操作以及這些操作如何與深度學習引擎對接。我們将技術棧細化成如下圖所示,其中Storage、Sampler、Operator是系統要解決的主要問題。資訊自底向上在層與層之間前向傳播,梯度則自頂向下更新每一層的參數,整個GNN應用在一張深度網絡裡描述。Storage層的Graph對象是邏輯存儲,在其之下有一層抽象的檔案接口,可适配多種資料源,這是系統具備可遷移性的前提。Sampler提供豐富的算子,且可獨立擴充,不依賴系統架構,滿足多樣化的需求。Operator進行圖語義操作的封裝,把性能優化、資料對接隐藏在簡潔的接口之下。

圖神經網絡(AliGraph)在阿裡巴巴的發展與應用

高效圖引擎

再具體的,圖引擎是連接配接圖資料與深度學習架構的橋梁,保證資料傳遞的高效與穩定。這裡的圖操作是面向GNN的,和一般意義的圖計算有很大差別。Graph Engine是一個分布式服務,具有高性能和高可用的特點,支援百億級邊的異構圖在2分鐘以内完成建構、十毫秒級按batch多跳跨機采樣,支援從失敗中狀态無損的failover。Graph Engine内部深度優化了RPC過程,實作了資料零拷貝,并且Server間的連接配接是線程級的,在最大化帶寬使用率的同時,每個線程可獨立無鎖的處理請求。這也是系統性能優異的主要原因。此外,我們通過有效的Cache、去中心化等手段來加速采樣和負采樣,性能具有明顯提升。關于線程模型、Cache加速等細節可參考AliGraph paper。

圖神經網絡(AliGraph)在阿裡巴巴的發展與應用

算子可擴充

為支援GNN的快速發展需求,系統允許算子自由擴充。系統架構包括使用者接口、分布式運作時、分布式存儲,3大部分。通過使用者接口調用某個算子,算子讀取資料并完成分布式計算。我們把分布式運作時和存儲的接口進行提煉,将程式設計接口控制在安全範圍内,使用者可以基于這些接口開發一個自定義的算子。自定義算子可以統一注冊到使用者接口上,無需新增使用者API。具體的,每種Operator都是一個分布式算子,計算所需的資料會分布在Service的各個Server上,我們抽象了Partition()和Stitch()語義,Partition()用于把計算請求拆分并轉發到對應的Server上,保證資料和計算colocate進而避免資料搬遷的代價,Stitch()則把每個Server的結果進行整合。Operator還需實作Process(),用于本地計算,資料序列化、分布式通信等則無需關心。

圖神經網絡(AliGraph)在阿裡巴巴的發展與應用

舉個例子,KNN可以檢測點與點的相似性(向量召回),再基于相似性來“構圖”,是以可作為GNN生态的一部分。基于上述抽象架構,我們把KNN作為一種算子,很容易的實作了大規模KNN。除了作為擴充算子的程式設計架構,Partition()和Stitch()也可做為Message Passing程式設計的基礎組成部分。

靈活的部署

整體上看,GraphEngine是典型的CS架構。輕量級的Client,可嵌入到TF、PyTorch等主流的DL架構使用。Client不做任何資料切片、轉發、合并等操作,隻是把Request發給對應的Server。Client與Server的連接配接是一個抽象的Channel,可以是RPC Channel,也可以是In Memory Channel,這也使得AliGraph有靈活的部署方式,即可以獨立Service部署,也可以和TF等同程序部署,隻要Channel聯通Client與Server即可。輕量Client的另一個好處是可以作為Server之間通信的載體,而無需對Server間互相通信再開發新的協定。

圖神經網絡(AliGraph)在阿裡巴巴的發展與應用

效果

系統

資料種類:支援同構圖、異構圖、屬性圖,有向圖、無向圖,與ODPS資料無縫對接。

資料規模:支援百億級邊、十億級頂點的超大規模圖(原始存儲TB級)。

算子種類:支援幾十種可與深度學習相結合的圖查詢、采樣算子,支援向量檢索,支援算子按需自定義。

性能名額:支援分鐘級超大規模圖建構,毫秒級多跳異構圖采樣,毫秒級大規模向量檢索。

使用者接口:與PAI-TF構成一體化IDE,支援notebook,開發成本相比一般TF模型無異。

算法

已支援業界主流的GraphEmbedding算法,包括:DeepWalk、Node2Vec、GraphSAGE、GATNE等。多種自研算法正在計劃公開,已發表的相關paper參考如下。

Representation Learning for Attributed Multiplex Heterogeneous Network. KDD, 2019.

Is a Single Vector Enough? Exploring Node Polysemy for Network Embedding. KDD, 2019.

Towards Knowledge-Based Personalized Product Description Generation in E-commerce. KDD, 2019.

Sequential Scenario-Specific Meta Learner for Online Recommendation. KDD, 2019.

AliGraph: A Comprehensive Graph Neural Network Platform. VLDB, 2019.

Large Scale Evolving Graphs with Burst Detection. IJCAI, 2019.

Hierarchical Representation Learning for Bipartite Graphs. IJCAI, 2019.

Cognitive Graph for Multi-Hop Reading Comprehension at Scale. ACL, 2019.

業務

在集團内,已覆寫淘寶推薦搜尋、新零售、網絡安全、線上支付、優酷、阿裡健康等相關業務,百億級邊、十億級頂點的異構圖,單任務節省300TB存儲、萬CPU時算力,訓練時間縮短2/3,線上CTR提升12%。

此外,AliGraph已在阿裡雲

機器學習PAI

釋出,為更多客戶提供服務。我們希望看到GNN為更多的場景帶去更優的解決方案,也希望更多的研究者願意投入到這個方向。

獲獎

榮獲2019世界人工智能大會最高榮譽SAIL獎項。

繼續閱讀