您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)如何解析一站式圖計算平臺GraphScope,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
圖數(shù)據(jù)對一組對象(頂點)及其關(guān)系(邊)進行建模,可以直觀、自然地表示現(xiàn)實世界中各種實體對象以及它們之間的關(guān)系。在大數(shù)據(jù)場景下,社交網(wǎng)絡(luò)、交易數(shù)據(jù)、知識圖譜、交通和通信網(wǎng)絡(luò)、供應(yīng)鏈和物流規(guī)劃等都是典型的以圖建模的例子。圖 1 顯示了阿里巴巴在電商場景下的圖數(shù)據(jù),其中有各種類型的頂點(消費者、賣家、物品和設(shè)備)和邊(表示了購買、查看、評論等關(guān)系)。此外,每個頂點還有豐富的屬性信息相關(guān)聯(lián)。
實際場景中的這種圖數(shù)據(jù)通常包含數(shù)十億個頂點和數(shù)萬億條邊。除了規(guī)模大之外,這個圖的持續(xù)更新速度也非??欤棵肟赡苡薪偃f的更新。隨著近年來圖數(shù)據(jù)應(yīng)用規(guī)模的不斷增長,探索圖數(shù)據(jù)內(nèi)部關(guān)系以及在圖數(shù)據(jù)上的計算受到了越來越多的關(guān)注。根據(jù)圖計算的不同目標(biāo),大致可以分為交互查詢、圖分析和基于圖的機器學(xué)習(xí)三類任務(wù)。
1、 圖的交互查詢
在圖計算的應(yīng)用中,業(yè)務(wù)通常需要以探索的方式來查看圖數(shù)據(jù),以進行一些問題的及時定位和分析某個深入的信息,如圖 2 (左)中的(簡化)圖模型可被用于金融反欺詐(信用卡非法套現(xiàn))檢測。通過使用偽造的標(biāo)識符,“犯罪分子”可以從銀行獲得短期信用(頂點 4)。他嘗試通過商家(頂點3)的幫助,以虛假購買( 邊 2->3)來兌現(xiàn)貨幣。一旦從銀行(頂點4)收到付款(邊 4->3),商家再通過其名下的多個帳戶將錢(通過邊 3->1 和 1->2)退還給“犯罪分子”。這種模式最終形成一個圖上的閉環(huán)(2->3->1...->2)。真實場景中,圖數(shù)據(jù)在線上的規(guī)??赡馨瑪?shù)十億個頂點(例如,用戶)和數(shù)千億至萬億條邊(例如,支付交易),并且整個欺詐過程可能涉及到許多實體之間包含各種約束的動態(tài)交易鏈,因此需要復(fù)雜的實時交互分析才能很好的識別。
2、 圖分析
關(guān)于圖分析計算的研究已經(jīng)持續(xù)了數(shù)十年,產(chǎn)生了很多圖分析的算法。典型的圖分析算法包括經(jīng)典圖算法(例如,PageRank、最短路徑和最大流),社區(qū)檢測算法(例如,最大團/clique、聯(lián)通量計算、Louvain 和標(biāo)簽傳播),圖挖掘算法(例如,頻繁集挖掘和圖的模式匹配)。由于圖分析算法的多樣性和分布式計算的復(fù)雜性,分布式圖分析算法往往需要遵循一定的編程模型。當(dāng)前的編程模型有點中心模型“Think-like-vertex”,基于矩陣的模型和基于子圖的模型等。在這些模型下,涌現(xiàn)出各種圖分析系統(tǒng),如 Apache Giraph、Pregel、PowerGraph、Spark GraphX、GRAPE 等。
3、 基于圖的機器學(xué)習(xí)
經(jīng)典的 Graph Embedding 技術(shù),例如 Node2Vec 和 LINE,已在各種機器學(xué)習(xí)場景中廣泛使用。近年來提出的圖神經(jīng)網(wǎng)絡(luò)(GNN),更是將圖中的結(jié)構(gòu)和屬性信息與深度學(xué)習(xí)中的特征相結(jié)合。GNN 可以為圖中的任何圖結(jié)構(gòu)(例如,頂點,邊或整個圖)學(xué)習(xí)低維表征,并且生成的表征可以被許多下游圖相關(guān)的機器學(xué)習(xí)任務(wù)進行分類、鏈路預(yù)測、聚類等。圖學(xué)習(xí)技術(shù)已被證明在許多與圖相關(guān)的任務(wù)上具有令人信服的性能。與傳統(tǒng)的機器學(xué)習(xí)任務(wù)不同,圖學(xué)習(xí)任務(wù)涉及圖和神經(jīng)網(wǎng)絡(luò)的相關(guān)操作(見圖 2 右),圖中的每個頂點都使用與圖相關(guān)的操作來選擇其鄰居,并將其鄰居的特征與神經(jīng)網(wǎng)絡(luò)操作進行聚合。
不僅僅是阿里巴巴,近年來圖數(shù)據(jù)和計算技術(shù)一直是學(xué)術(shù)界和工業(yè)界的熱點。特別是,在過去的十年中,圖計算系統(tǒng)的性能已提高了 10~100 倍,并且系統(tǒng)仍在變得越來越高效,這使得通過圖計算來加速AI和大數(shù)據(jù)任務(wù)成為了可能。實際上,由于圖能十分自然地表達各種復(fù)雜類型的數(shù)據(jù),并且可以為常見的機器學(xué)習(xí)模型提供抽象。與密集張量相比,圖能提供更豐富的語義和更全面的優(yōu)化功能。此外,圖是稀疏高維數(shù)據(jù)的自然表達,并且圖卷積網(wǎng)絡(luò)(GCN)和圖神經(jīng)網(wǎng)絡(luò)(GNN)中越來越多的研究證明,圖計算是對機器學(xué)習(xí)的有效補充,在結(jié)果的可解釋性、深層次推理因果等方面將扮演越來越重要的作用。
可以預(yù)見,圖計算將在下一代人工智能的各種應(yīng)用中發(fā)揮重要作用,包括反欺詐,智能物流,城市大腦,生物信息學(xué),公共安全,公共衛(wèi)生,城市規(guī)劃,反洗錢,基礎(chǔ)設(shè)施,推薦系統(tǒng),金融技術(shù)和供應(yīng)鏈等領(lǐng)域。
經(jīng)過這些年的發(fā)展,已有針對各種圖計算需求的多種系統(tǒng)和工具。例如在交互查詢方面,有圖數(shù)據(jù)庫Neo4j、ArangoDB和OrientDB等、也有分布式系統(tǒng)和服務(wù)JanusGraph、Amazon Neptune和Azure Cosmos DB等;在圖分析方面,有 Pregel、Apache Giraph、Spark GraphX、PowerGraph 等系統(tǒng);在圖學(xué)習(xí)上有 DGL、pytorch geometric 等。盡管如此,面對豐富的圖數(shù)據(jù)和多樣化的圖場景,有效利用圖計算增強業(yè)務(wù)效果依然面臨著巨大的挑戰(zhàn):
現(xiàn)實生活中的圖計算場景多樣,且通常非常復(fù)雜,涉及到多種類型的圖計算。現(xiàn)有的系統(tǒng)主要是為特定類型的圖計算任務(wù)設(shè)計的。因此,用戶必須將復(fù)雜的任務(wù)分解為涉及許多系統(tǒng)的多個作業(yè)。在系統(tǒng)之間可能會產(chǎn)生大量例如集成、IO、格式轉(zhuǎn)換、網(wǎng)絡(luò)和存儲方面的額外開銷。
難以開發(fā)大型圖計算的應(yīng)用。為了開發(fā)圖計算的應(yīng)用,用戶通常使用簡單易用的工具(例如 Python 中的 NetworkX 和 TinkerPop)在一臺機器上從小規(guī)模圖數(shù)據(jù)開始。但是,對于普通用戶而言,擴展其單機解決方案到并行環(huán)境處理大規(guī)模圖是極其困難的?,F(xiàn)有的用于大規(guī)模圖的分布式系統(tǒng)通常遵循不同的編程模型,并且缺乏單機庫(例如 NetworkX)中豐富的即用算法/插件庫。這使得分布式圖計算的門檻過高。
處理大圖的規(guī)模和效率仍然有限。例如,由于游歷模式的高度復(fù)雜性,現(xiàn)有的交互式圖查詢系統(tǒng)無法并行執(zhí)行 Gremlin 查詢。對于圖分析系統(tǒng),傳統(tǒng)的點中心編程模型使圖級別的現(xiàn)有優(yōu)化技術(shù)不再可用。此外,許多現(xiàn)有系統(tǒng)也基本未在編譯器級別上做過優(yōu)化。
下面我們通過一個具體的示例看看現(xiàn)有系統(tǒng)的局限性。
數(shù)據(jù)集 ogbn-mag 是一個來自于微軟學(xué)術(shù)的數(shù)據(jù)集。數(shù)據(jù)中包含四種類型的點,分別表示論文、作者、機構(gòu)、研究領(lǐng)域;在這些點之間有表示關(guān)系的四種邊:分別是作者“撰寫”了論文,論文“引用”了另一篇論文,作者“隸屬于”某個機構(gòu),和論文“屬于”某個研究領(lǐng)域。這個數(shù)據(jù)很自然的可以用圖來建模。
一個用戶期望在這個圖上對 2014-2020 年間發(fā)表的“論文”做一個分類任務(wù),期望能根據(jù)論文在數(shù)據(jù)圖中的結(jié)構(gòu)屬性、自身的主題特征、以及 kcore、三角計數(shù) triangle-counting 等團聚度的衡量參數(shù),將其歸類并預(yù)測文章的主題類別。實際上,這是一個十分常見和有意義的任務(wù),這個預(yù)測由于考慮了論文的引用關(guān)系和論文的主題,可以幫助研究人員更好的發(fā)現(xiàn)領(lǐng)域內(nèi)的潛在合作和研究熱點。
讓我們分解一下這個計算任務(wù):首先我們需要對論文及其相關(guān)的點邊做一個根據(jù)年份的篩選,再需要在這個圖上計算 kcore、triangle-counting 等全圖計算,最后將這兩個參數(shù)和圖上的原始特征一起,放入一個機器學(xué)習(xí)框架進行分類訓(xùn)練和預(yù)測。我們發(fā)現(xiàn)當(dāng)前已有的系統(tǒng)并不能很好的端到端解決這個問題,我們只能通過將多個系統(tǒng)組織成一個 pipeline 的形式運行。這個任務(wù)看起來是解決了,實際上這樣流水線的方案背后隱藏著許多問題。例如多個系統(tǒng)之間互相獨立和割裂,中間數(shù)據(jù)頻繁落盤進行系統(tǒng)間的數(shù)據(jù)傳遞;圖分析的程序不是聲明性語言,沒有固定范式;圖的規(guī)模影響機器學(xué)習(xí)框架的效率等等。這些都是我們在現(xiàn)實圖計算場景中常遇到的問題,總結(jié)一下可以概括為以下三點:
圖計算問題十分復(fù)雜,計算模式多樣,解決方案碎片化。
圖計算學(xué)習(xí)難度強,成本大,門檻高。
圖的規(guī)模和數(shù)據(jù)量大,計算復(fù)雜,效率低。
為了解決以上的問題,我們設(shè)計并研發(fā)了一站式開源圖計算系統(tǒng):GraphScope。
GraphScope 是阿里巴巴達摩院智能計算實驗室研發(fā)并開源的一站式圖計算平臺。依托于阿里海量數(shù)據(jù)和豐富場景,與達摩院的高水平研究,GraphScope 致力于針對實際生產(chǎn)中圖計算的上述挑戰(zhàn),提供一站式高效的解決方案。
GraphScope 提供 Python 客戶端,能十分方便的對接上下游工作流,具有一站式、開發(fā)便捷、性能極致等特點。它具有高效的跨引擎內(nèi)存管理,在業(yè)界首次支持 Gremlin 分布式編譯優(yōu)化,同時支持算法的自動并行化和支持自動增量化處理動態(tài)圖更新,提供了企業(yè)級場景的極致性能。在阿里巴巴內(nèi)部和外部的應(yīng)用中,GraphScope 已經(jīng)證明在多個關(guān)鍵互聯(lián)網(wǎng)領(lǐng)域(如風(fēng)控,電商推薦,廣告,網(wǎng)絡(luò)安全,知識圖譜等)實現(xiàn)重要的業(yè)務(wù)新價值。
GraphScope 集合了達摩院的多項學(xué)術(shù)研究成果,其中的核心技術(shù)曾獲得數(shù)據(jù)庫領(lǐng)域頂級學(xué)術(shù)會議 SIGMOD2017 最佳論文獎、VLDB2017 最佳演示獎、VLDB2020 最佳論文提名獎、世界人工智能創(chuàng)新大賽SAIL獎。GraphScope 的交互查詢引擎的論文也已被 NSDI 2021 錄用,即將發(fā)表。還有其它圍繞 GraphScope 的十多項研究成果發(fā)表在領(lǐng)域頂級的學(xué)術(shù)會議或期刊上,如 TODS、SIGMOD、VLDB、KDD 等。
1、 架構(gòu)介紹
圖 5:GraphScope 系統(tǒng)架構(gòu)圖
GraphScope 的底層是一個分布式內(nèi)存數(shù)據(jù)管理系統(tǒng) vineyard[1]。vineyard 也是我們開源的一個項目,它提供了高效和豐富的 IO 接口負責(zé)與更底層的文件系統(tǒng)交互,它提供了高效和高層次的數(shù)據(jù)抽象(包括但不限于圖,tensor,vector 等),支持管理數(shù)據(jù)的分區(qū)、元數(shù)據(jù)等,可以為上層應(yīng)用提供本機零拷貝的數(shù)據(jù)讀取。正是這一點支持了 GraphScope 的一站式能力:在跨引擎之間,圖數(shù)據(jù)按分區(qū)的形式存在于 vineyard,由 vineyard 統(tǒng)一管理。
中間是引擎層,分別由交互式查詢引擎 GIE,圖分析引擎 GAE,和圖學(xué)習(xí)引擎 GLE 組成,我們將在后續(xù)的章節(jié)中詳細介紹。
最上層是開發(fā)工具和算法庫。GraphScope 提供了各類常用的分析算法,包括連通性計算類、社區(qū)發(fā)現(xiàn)類和 PageRank、中心度等數(shù)值計算類的算法,后續(xù)會不斷擴展算法包,在超大規(guī)模圖上提供與 NetworkX 算法庫兼容的分析能力。此外也提供了豐富的圖學(xué)習(xí)算法包,內(nèi)置支持 GraphSage、DeepWalk、LINE、Node2Vec 等算法。
2、 重解問題:論文分類預(yù)測
有了一站式計算平臺 GraphScope,我們可以用一種更簡單的方式解決前面示例中的問題。
GraphScope 提供 Python客戶端, 讓數(shù)據(jù)科學(xué)家可以在自己熟悉的環(huán)境中完成所有圖計算相關(guān)的工作。打開 Python 后,我們首先需要建立一個 GraphScope 會話。
import graphscope from graphscope.dataset.ogbn_mag import load_ogbn_mag sess = graphscope.sesson() g = load_ogbn_mag(sess, "/testingdata/ogbn_mag/")
在上面的代碼中,我們建立了一個 GraphScope 的 session,并載入了圖數(shù)據(jù)。
GraphScope 面向云原生設(shè)計,一個 session 的背后對應(yīng)了一組 k8s 的資源,該session 負責(zé)這個會話中所有資源的申請和管理。具體來說,在用戶這行代碼的背后,session首先會請求一個后端總?cè)肟?Coordinator 的 pod。Coordinator 負責(zé)跟 Python 客戶端的所有通信,在完成自身的初始化后,它會拉起一組引擎 pod。這組 pod 中每一個 pod 都有一個 vineyard 實例,共同組成一個分布式內(nèi)存管理層;同時,每一個 pod 中都有 GIE、GAE、GLE 三個引擎,它們的啟停狀態(tài)由 Coordinator 在后續(xù)按需管理。當(dāng)這組 pod 拉起并與 Coordinator 建立穩(wěn)定連接、完成健康檢查后,Coordinator 會返回狀態(tài)到客戶端,告訴用戶,session 已拉起成功,資源就緒可以開始載圖或計算了。
interactive = sess.gremlin(g) # count the number of papers two authors (with id 2 and 4307) have co-authored papers = interactive.execute("g.V().has('author', 'id', 2).out('writes').where(__.in('writes').has('id', 4307)).count()").one()
首先我們在圖 g 上建立了一個交互式查詢對象 interactive。這個對象在引擎 pod 中拉起了一組交互式查詢引擎 GIE。接著下面是一個標(biāo)準(zhǔn)的 Gremlin 查詢語句,用戶想在這個數(shù)據(jù)中查看兩個具體作者的合作論文。這個 Gremlin 語句會發(fā)送給 GIE 引擎進行拆解和執(zhí)行。
GIE 引擎由并行化 Compiler、內(nèi)存和調(diào)度管理、Operator 運行時、自適應(yīng)的游歷策略和分布式 Dataflow 引擎等核心組件組成。在收到交互式查詢的語句后,該語句首先會被 Compiler 拆分,編譯成多個運行算子。這些算子再以分布式數(shù)據(jù)流的模型被驅(qū)動和執(zhí)行,在這個過程中,每一個持有分區(qū)數(shù)據(jù)的計算節(jié)點都跑一份該數(shù)據(jù)流的拷貝,并行處理本分區(qū)的數(shù)據(jù),并在過程中按需進行數(shù)據(jù)交換,從而并行化的執(zhí)行 Gremlin 查詢。
Gremlin 復(fù)雜的語法下,游歷策略至關(guān)重要并影響著查詢的并行度,它的選擇直接影響著資源的占用和查詢的性能。只靠簡單的 BFS 或是 DFS 在現(xiàn)實中并不能滿足需求。最優(yōu)的游歷策略往往需要根據(jù)具體的數(shù)據(jù)和查詢動態(tài)調(diào)整和選擇。GIE 引擎提供了自適應(yīng)的游歷策略配置,根據(jù)查詢數(shù)據(jù)、拆解的 Op 和 Cost 模型選擇游歷策略,以達到算子執(zhí)行的高效性。
# extract a subgraph of publication within a time range sub_graph = interactive.subgraph("g.V().has('year', inside(2014, 2020)).outE('cites')") # project the projected graph to simple graph. simple_g = sub_graph.project_to_simple(v_label="paper", e_label="cites") ret1 = graphscope.k_core(simple_g, k=5) ret2 = graphscope.triangles(simple_g) # add the results as new columns to the citation graph sub_graph = sub_graph.add_column(ret1, {"kcore": "r"}) sub_graph = sub_graph.add_column(ret2, {"tc": "r"})
在通過一系列單點查看的交互式查詢后,用戶通過以上語句開始做圖分析任務(wù)。
首先它通過一個 subgraph 的操作子從原圖中根據(jù)篩選條件抽取了一個子圖。這個操作子的背后,是交互式引擎 GIE 執(zhí)行了一個查詢,再將結(jié)果圖寫入了 vineyard。
然后用戶在這個新圖上抽取了 label 為論文的點和他們之間關(guān)系為引用(cites)的邊,產(chǎn)出了一張同構(gòu)圖,并在上面調(diào)用了 GAE 的內(nèi)置算法 k-core 和三角計數(shù) triangles 在全圖做了分析型計算。產(chǎn)出結(jié)果后,這兩個結(jié)果被作為點上的屬性加回了原圖。這里,借助于 vineyard 元數(shù)據(jù)管理和高層數(shù)據(jù)抽象,新的 sub_graph 是通過原圖上新增一列的變換來生成的,不需要重建整張圖的全部數(shù)據(jù)。
GAE 引擎核心繼承了曾獲得 SIGMOD2017 最佳論文獎的 GRAPE 系統(tǒng)[2]。它由高性能運行時、自動并行化組件、多語言支持的 SDK 等組件組成。上面的例子用到了 GAE 自帶的算法,此外,GAE 也支持用戶十分簡單的編寫自己的算法并在其上即插即用。用戶以基于子圖編程的 PIE 模型編寫算法,或者重用已有圖算法,而不用考慮分布式細節(jié),由 GAE 來做自動并行化,大幅降低了分布式圖計算對用戶的高門檻。目前,GAE 支持用戶通過C++、Python(后續(xù)將支持 Java)等多語言編寫自己的算法邏輯,即插即用在分布式環(huán)境。GAE 的高性能運行時基于 MPI,對通訊、數(shù)據(jù)排布,硬件特征做了十分細致的優(yōu)化,以達到極致性能。
# define the features for learning paper_features = [] for i in range(128): paper_features.append("feat_">
接下來我們開始用圖學(xué)習(xí)引擎為論文分類。首先我們配置將數(shù)據(jù)中論文類節(jié)點的 128 維特征以及我們在上一步中計算出的 kcore 和 triangles 兩個屬性共同作為訓(xùn)練特征。然后我們從 session 中拉起圖學(xué)習(xí)引擎 GIE。在拉起 GIE中 圖 lg 時,我們配置了圖數(shù)據(jù),特征屬性,指定了哪一類的邊,以及將點集劃分為了訓(xùn)練集、驗證集和測試集。
from graphscope.learning.examples import GCN from graphscope.learning.graphlearn.python.model.tf.trainer import LocalTFTrainer from graphscope.learning.graphlearn.python.model.tf.optimizer import get_tf_optimizer # supervised GCN. def train_and_test(config, graph): def model_fn(): return GCN(graph, config["class_num"], ...) trainer = LocalTFTrainer(model_fn, epoch=config["epoch"]...) trainer.train_and_evaluate() config = {...} train_and_test(config, lg)
然后我們通過上面的代碼選用模型以及做一些訓(xùn)練相關(guān)的參數(shù)配置就可以十分便捷的用 GLE 開始做圖分類任務(wù)。
GLE 引擎包含 Graph 與 Tensor 兩部分,分別由各種 Operator 構(gòu)成。Graph 部分涉及圖數(shù)據(jù)與深度學(xué)習(xí)的對接,如按 Batch 迭代、采樣和負采樣等,支持同構(gòu)圖和異構(gòu)圖。Tensor 部分則由各類深度學(xué)習(xí)算子構(gòu)成。在計算模塊中,圖學(xué)習(xí)任務(wù)被拆解成一個個算子,算子再被運行時分布式的執(zhí)行。為了進一步優(yōu)化采樣性能,GLE 將緩存遠程鄰居、經(jīng)常訪問的點、屬性索引等,以加快每個分區(qū)中頂點及其屬性的查找。GLE 采用支持異構(gòu)硬件的異步執(zhí)行引擎,這使 GLE 可以有效地重疊大量并發(fā)操作,例如 I/O、采樣和張量計算。GLE 將異構(gòu)計算硬件抽象為資源池(例如 CPU 線程池和 GPU 流池),并協(xié)作調(diào)度細粒度的并發(fā)任務(wù)。
GraphScope 不僅在易用性上一站式的解決了圖計算問題,在性能上也達到極致,滿足了企業(yè)級需求。我們使用 LDBC Benchmark 對 GraphScope 的性能進行了評估和對比測試。
如圖 6 所示,在交互式查詢測試 LDBC SNB Benchmark上,單節(jié)點部署的 GraphScope 與開源系統(tǒng) JanusGraph 相比,多數(shù)查詢快一個數(shù)量級以上;在分布式部署下,GraphScope 的交互式查詢基本能達到線性加速的擴展性。
在圖分析測試 LDBC GraphAnalytics Benchmark 上,GraphScope 與 PowerGraph 以及其他最新系統(tǒng)比較,幾乎在所有算法和數(shù)據(jù)集的組合中居于領(lǐng)先水平。在某些算法和數(shù)據(jù)集上,跟其他平臺比較最低也有五倍的性能優(yōu)勢。
上述就是小編為大家分享的如何解析一站式圖計算平臺GraphScope了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。