[OSDI 12] PoweGraph: 分布式图并行计算框架 学习总结
????????今天要講的文章是OSDI 2012年的一篇文章,PowerGraph:Distributed Graph-Parallel Computation on Natural Graphs。本文主要想解決的問(wèn)題就是:現(xiàn)有的圖數(shù)據(jù),如社交網(wǎng)絡(luò)、Web網(wǎng)頁(yè)等都是一種Power-law冪律圖的特征。所謂Power-law冪律圖就是指在圖數(shù)據(jù)中頂點(diǎn)的度數(shù)分配不均勻。有的圖頂點(diǎn)的度數(shù)很高,有的頂點(diǎn)度數(shù)很低。并且頂點(diǎn)度數(shù)呈現(xiàn)著冪律分布的特征,對(duì)于這種Power-law的圖數(shù)據(jù),會(huì)存在很大的計(jì)算分配不均勻的特征。針對(duì)這個(gè)問(wèn)題:PowerGraph分析了在冪律圖的特征情況下,采用vertex-cut劃分的策略。采用vertex-cut,切分成若干個(gè)Mirror頂點(diǎn)。利用Mirror頂點(diǎn)減少了高度頂點(diǎn)計(jì)算任務(wù)繁重的問(wèn)題,并且采用vertex-cut劃分策略產(chǎn)生很少一部分的Mirror。
1.?Graphs are ubiquitous
????????我們都知道,圖在我們生活中是無(wú)所不在的。
????? ? 社交媒體、科學(xué)中分子結(jié)構(gòu)關(guān)系、電商平臺(tái)的廣告推薦、網(wǎng)頁(yè)信息。圖是能夠?qū)⑷恕a(chǎn)品、想法、事實(shí)、興趣愛(ài)好之間的關(guān)系進(jìn)行編碼,轉(zhuǎn)成一種結(jié)構(gòu)進(jìn)行存儲(chǔ)。圖的一個(gè)特點(diǎn)是:Big,數(shù)十億的點(diǎn)和邊以及豐富的元數(shù)據(jù)。各種場(chǎng)景下的信息都能轉(zhuǎn)成圖來(lái)表示,同時(shí)我們可以利用圖來(lái)進(jìn)行數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí),比如 ,識(shí)別出有影響力的人和信息、社區(qū)發(fā)現(xiàn)、尋找產(chǎn)品和廣告的投放用戶(hù)、給有依賴(lài)關(guān)系的復(fù)雜數(shù)據(jù)構(gòu)建模型等等這些都可以使用圖來(lái)完成。
2. Natural Graphs
????????從不同平臺(tái)或?qū)嶋H應(yīng)用中產(chǎn)生的圖我們稱(chēng)為:Natural Graphs。面對(duì)各種應(yīng)用中如此海量的Natural Graphs,現(xiàn)有分布式的圖處理平臺(tái)處理性能還是比較低效的。作者選用Twitter數(shù)據(jù)集測(cè)試目前幾個(gè)主流分布式平臺(tái)在處理這種Natural Graph的性能,這里是利用PageRank算法每次迭代的時(shí)間作為橫軸,縱坐標(biāo)是不同的分布式平臺(tái),可以看到Hadoop和原生態(tài)的GraphLab的處理時(shí)間還是很長(zhǎng)的,性能最好的是Piccolo,這里舉一個(gè)明星效應(yīng)的例子,比如這里表示社交網(wǎng)絡(luò)中的一個(gè)子圖,中間紅色點(diǎn)表示某個(gè)用戶(hù),旁邊黑點(diǎn)表示的是所有的粉絲,比如這里我們一個(gè)黑點(diǎn)表示100w的用戶(hù),那么這個(gè)人可能就是obama,但像obama這樣擁有這么多粉絲的人是非常少的,大部分人粉絲只有大黑點(diǎn)中的一個(gè)點(diǎn),幾百或者多者上千。這就是我們說(shuō)的密率度分布圖的特點(diǎn)。它是Google的Pregel的C++實(shí)現(xiàn) 。
????? ? 現(xiàn)有的分布式圖處理系統(tǒng)在自然圖中的處理性能都很差。這是為什么會(huì)造成這個(gè)原因呢?下面我們來(lái)看一下自然圖到底有什么特征。
2.1?Power-Law Degree Distribution
????????下面我們來(lái)看一下,Natural Graph這種圖到底有什么特點(diǎn),為什么大部分分布式處理系統(tǒng)性能都比較低效,PowerGraph在Natural Graph有如此好的性能。Natural Graphs的屬性特點(diǎn)是滿(mǎn)足密率度分布。下面我們來(lái)看下什么叫冪律度分布。?
????????簡(jiǎn)單來(lái)說(shuō),冪律有兩個(gè)通俗的解釋,一個(gè)是“長(zhǎng)尾”理論,只有少數(shù)明星是有很多人關(guān)注的,但是還有大部分人只有少部分人關(guān)注。長(zhǎng)尾理論就是對(duì)冪律通俗化的解釋。 另外一個(gè)通俗解釋就是馬太效應(yīng),窮者越窮富者越富。 從這幅圖可以看出,只有一個(gè)鄰居的點(diǎn)的數(shù)目有超過(guò)10的8次方個(gè),而僅有那1%的點(diǎn)卻占了整個(gè)圖50%的邊。這些點(diǎn)被稱(chēng)為高緯度點(diǎn)。
????????這里舉一個(gè)明星效應(yīng)的例子,比如這里表示社交網(wǎng)絡(luò)中的一個(gè)子圖,中間紅色點(diǎn)表示某個(gè)用戶(hù),旁邊黑點(diǎn)表示的是所有的粉絲,比如這里我們一個(gè)黑點(diǎn)表示100w的用戶(hù),那么這個(gè)人可能就是obama,但像obama這樣擁有這么多粉絲的人是非常少的,大部分人粉絲只有大黑點(diǎn)中的一個(gè)點(diǎn),幾百或者多者上千。這就是我們說(shuō)的密率度分布圖的特點(diǎn)。
????? ? 現(xiàn)有的大部分研究表明,對(duì)于這樣的冪律圖來(lái)說(shuō):Power-law 是很難去分區(qū)的。傳統(tǒng)的圖劃分方法對(duì)于Power-law 圖來(lái)說(shuō),執(zhí)行圖算法會(huì)造成性能很差。比如書(shū)傳統(tǒng)的圖劃分方法:隨機(jī)劃分和edge-cut邊劃分。
3. PowerGraph Main Idea
????????PowerGraph中在計(jì)算時(shí)會(huì)切分高緯度點(diǎn),被切分的點(diǎn)形成了一個(gè)新的抽象。但是在節(jié)點(diǎn)切分策略下要解決的一個(gè)問(wèn)題是如何運(yùn)行節(jié)點(diǎn)程序?在之前的邊切分策略下節(jié)點(diǎn)是單一的、完整的,節(jié)點(diǎn)擁有所有鄰居的信息,可以獨(dú)立完成節(jié)點(diǎn)程序的運(yùn)算。但是在節(jié)點(diǎn)切分策略下,每個(gè)節(jié)點(diǎn)看到的只是部分的鄰居,無(wú)法完成整個(gè)計(jì)算。在節(jié)點(diǎn)切分策略下,分布在不同的CPU或者機(jī)器上的節(jié)點(diǎn)如何對(duì)其進(jìn)行編程?下面將介紹兩種目前最具代表性的圖計(jì)算方法是如何對(duì)圖進(jìn)行并行化抽象計(jì)算的。
4. Graph-Parallel Abstraction
圖并行化抽象目前流行的兩種方法是 :
——使用Message-Passing Pregel?
——使用Shared-Memory GraphLab
????????但對(duì)于我們前面提到的冪律圖,Pregel和GraphLab都不能很好地處理這種節(jié)點(diǎn)。最大的挑戰(zhàn)就是如何來(lái)處理這些高維度的點(diǎn)。最簡(jiǎn)單也最低效的方法是順序處理這些邊,說(shuō)白了就是遍歷所有點(diǎn)。第二種方法就是剛才提到的Pregel,它處理高緯度點(diǎn)的缺陷是單個(gè)worker要發(fā)送大量消息給鄰居節(jié)點(diǎn)。GraphLab的方法的缺點(diǎn)是會(huì)觸到圖的大部分(GraphLab)并且對(duì)于單臺(tái)機(jī)器邊的元數(shù)據(jù)太大,GraphLab共享狀態(tài)是異步執(zhí)行,需要大量鎖 。Pregel同步執(zhí)行但容易產(chǎn)生straggler,straggler可以理解為執(zhí)行比較慢的節(jié)點(diǎn)(木桶的短板效應(yīng))。導(dǎo)致這些系統(tǒng)中存在這些問(wèn)題主要原因是他們對(duì)圖的切分策略是采用邊分割的方式。下面我們來(lái)比較一下邊劃分和點(diǎn)劃分的區(qū)別。下面對(duì)比了Pregel、GraphLab和PowerGraph在運(yùn)行PageRank算法上通信開(kāi)銷(xiāo)和執(zhí)行的時(shí)間,可以看出PowerGraph不僅通信開(kāi)銷(xiāo)小而且運(yùn)行時(shí)間短,對(duì)高緯度點(diǎn)有很強(qiáng)的健壯性。這時(shí)在人工合成的數(shù)據(jù)集上的一個(gè)性能。
5. Edge-Cut and Vertex-Cut
????????還有一種是點(diǎn)切分的方式,下面我們看下邊切分的方式和點(diǎn)切分方式有什么不同,?我們現(xiàn)在要將一個(gè)有4個(gè)頂點(diǎn)的圖存儲(chǔ)到3臺(tái)機(jī)器上,這三臺(tái)機(jī)器分別叫1,2,3。那么按照邊切分的方式,這且邊被切人后在3臺(tái)機(jī)器的分布如右邊圖。?從圖中可以看出,切分的過(guò)程中,總共有AB,BC,CD三條邊被切開(kāi),保存到3臺(tái)機(jī)器后,邊的總數(shù)目由原來(lái)的3條,變成了6條,多了一倍,外加5個(gè)節(jié)點(diǎn)副本。第二種方式是點(diǎn)切分方式,同樣是4個(gè)節(jié)點(diǎn)的圖,我們將B、C節(jié)點(diǎn)切分開(kāi)來(lái)。存儲(chǔ)到3臺(tái)機(jī)器后,得到右邊這個(gè)圖,可以看出我們的邊的數(shù)目還是3臺(tái),只多了兩個(gè)節(jié)點(diǎn)的副本。所以當(dāng)邊的數(shù)量比節(jié)點(diǎn)數(shù)量大很多的情況下,這種兩種切分方式差異會(huì)更加明顯。
圖的切分問(wèn)題又叫著圖分區(qū)。圖并行抽象的性能要依賴(lài)于圖的分區(qū)方式,?而我們的目標(biāo)是?
—— 最小化通信?——權(quán)衡圖計(jì)算和存儲(chǔ)開(kāi)銷(xiāo)?
????????而前面提到的兩種流行的圖處理框架GraphLab和Pregel采用的都是邊切分方式的隨機(jī)Hash分區(qū)策略這種策略只保證了節(jié)點(diǎn)均勻分布在整個(gè)集群中,邊被切分成雙份分散在整個(gè)集群中。對(duì)于一般圖來(lái)說(shuō),邊的數(shù)量是要遠(yuǎn)大于點(diǎn)的數(shù)量,因此按邊分區(qū)會(huì)帶來(lái)存儲(chǔ)和計(jì)算上的不均衡。 論文中總結(jié)了這種邊切分方式帶來(lái)的影響,給出了一個(gè)公式用來(lái)求被切的邊除以總的邊的均值,p表示隨機(jī)被分的機(jī)器數(shù)目,當(dāng)p等于10時(shí)有90%的邊被切分,當(dāng)p等于100時(shí),有99%的邊會(huì)被切。 可以看出,當(dāng)我們集群規(guī)模越大,按照邊來(lái)切分方式進(jìn)行分區(qū)是非常劃不來(lái)的,圖中大部分邊會(huì)變切分開(kāi)來(lái)。所以作者提出了PowerGraph:一種基于點(diǎn)劃分的分布式圖處理系統(tǒng)。
6. PowerGraph
????????這里總結(jié)一下目前對(duì)于專(zhuān)門(mén)的圖處理框架GraphLab和Pregel是不適合處理這種natural graphs。主要的兩大挑戰(zhàn)是高緯度的點(diǎn)和低質(zhì)量的分區(qū)策略。本文提出的PowerGraph即是為了解決這2個(gè)問(wèn)題而設(shè)計(jì)的,其中Power的意思就是冪律分布的意思。
下面就來(lái)介紹PowerGraph的詳細(xì)設(shè)計(jì)細(xì)節(jié),PowerGraph的主要貢獻(xiàn)或者說(shuō)創(chuàng)新點(diǎn)可歸結(jié)為以下兩點(diǎn):
第一,提出了GAS計(jì)算模型,將高維度的點(diǎn)進(jìn)行并行化
第二是采用點(diǎn)切分策略,來(lái)保證整個(gè)集群的均衡性,該策略對(duì)大量密率圖分區(qū)是非常高效的。
6.1 GAS Decomposition
????????下面以PageRank為例,頂點(diǎn)程序的通用模板大致如圖所示,第一步收集鄰居節(jié)點(diǎn)信息,第二步更新節(jié)點(diǎn)權(quán)值,如果還沒(méi)有收斂,觸發(fā)節(jié)點(diǎn)鄰居再次運(yùn)行頂點(diǎn)程序。?這是一種通用的處理模板 。
GAS分解過(guò)程如下,
Gather:收集鄰居信息?
先收集同一臺(tái)機(jī)器的信息,然后對(duì)不同主機(jī)收集的信息進(jìn)行匯總。得到最后的求和信息。
Apply:對(duì)中心點(diǎn)應(yīng)用收集點(diǎn)的值,得到y(tǒng)一撇
Scatter(分散):更新鄰居點(diǎn)和邊,并且激活鄰居頂點(diǎn),觸發(fā)鄰居點(diǎn)進(jìn)行下一輪迭代。
????????那么就PowerGraph的GAP模型應(yīng)用到RageRank算法中,是什么樣的過(guò)程?該公式中i表示目標(biāo)節(jié)點(diǎn),我們需要對(duì)這個(gè)節(jié)點(diǎn)求PageRank值,wij表示從j點(diǎn)到i點(diǎn)的權(quán)值,Gather階段,先求i所有鄰居節(jié)點(diǎn)的權(quán)值,用戶(hù)自定義一個(gè)sum操作,統(tǒng)計(jì)所有鄰居節(jié)點(diǎn)的權(quán)值之和。Apply階段更新i點(diǎn)的權(quán)值,利用上一階段的sum值加上一個(gè)偏置值,計(jì)算得到i的新的權(quán)值;Scatter階段如果i值被修改,就觸發(fā)相應(yīng)的鄰居節(jié)點(diǎn)j重新計(jì)算。
????????下面用一個(gè)動(dòng)畫(huà)演示PowerGraph是如何執(zhí)行頂點(diǎn)程序。當(dāng)頂點(diǎn)按點(diǎn)切分方式被分到4臺(tái)機(jī)器之后,在多個(gè)節(jié)點(diǎn)上指派一個(gè)為Master,其余的為Mirror。Mirror上可以運(yùn)行Gather程序來(lái)收集所有鄰居的信息,并進(jìn)行聚合計(jì)算(sum)后發(fā)送給Master。Master上的Gather程序收集這些結(jié)果,最終將這個(gè)結(jié)果應(yīng)用到Apply程序上,得到新的節(jié)點(diǎn)狀態(tài)。然后通過(guò)Scatter程序?qū)⑿碌墓?jié)點(diǎn)狀態(tài)廣播給各個(gè)Mirror,Mirror進(jìn)而廣播給各個(gè)鄰居。
6.2?Constructing Vertex-Cuts
????????PowerGraph提出了一種均衡圖劃分方案,在減少計(jì)算中通信量的同時(shí)保證負(fù)載均衡。實(shí)際上通信開(kāi)銷(xiāo)是和節(jié)點(diǎn)所跨的機(jī)器數(shù)目成線性關(guān)系,但點(diǎn)切分的方式可以最小化每個(gè)頂點(diǎn)所跨的機(jī)器數(shù)目。PowerGraph使用的不是邊切分,邊切分前面已經(jīng)提到會(huì)同步大量的邊的信息。而是采用點(diǎn)切分,點(diǎn)切分只要同步一個(gè)點(diǎn)的節(jié)點(diǎn)信息。
????????論文中給出了一個(gè)新的理論(定理):對(duì)于任何邊切分我們都可以直接構(gòu)造一個(gè)點(diǎn)切分,能夠嚴(yán)格減少通信和存儲(chǔ)開(kāi)銷(xiāo)。下面將介紹該論文是如何來(lái)構(gòu)造這個(gè)點(diǎn)分割。
論文提出了3種分配方式?
隨機(jī)邊分配?
貪婪協(xié)同邊分配?
非貪婪邊分配(Oblivious遺忘)
6.2.1?隨機(jī)的邊分配策略
????????第一種策略是隨機(jī)的邊放置策略,按照點(diǎn)切分的方式,隨機(jī)放置邊 。
????????這里數(shù)據(jù)集選用的是Twitter數(shù)據(jù)集,有410w個(gè)頂點(diǎn),14億條邊 。橫坐標(biāo)是實(shí)際集群中機(jī)器的數(shù)目,縱坐標(biāo)表示1個(gè)頂點(diǎn)期望跨了機(jī)器數(shù)目,關(guān)于這兩者的數(shù)量關(guān)系公式,作者在論文中給出了一個(gè)定理。藍(lán)色的線表示表示理論推測(cè)期望值,紅線是實(shí)際隨機(jī)邊放置的曲線圖。可以看出期望值和理論值之間基本是能夠match上的。所以針對(duì)隨即邊放置策略,就可以做到精確的估計(jì)內(nèi)存和通信開(kāi)銷(xiāo)。?
6.2.2 貪婪的點(diǎn)切分策略
????????如果新加進(jìn)來(lái)的邊,它的某個(gè)節(jié)點(diǎn)已經(jīng)存在于某臺(tái)機(jī)器上,就將該邊分到對(duì)應(yīng)的機(jī)器上,比如在1號(hào)機(jī)器上已經(jīng)存在AB這條邊,2號(hào)機(jī)器上已經(jīng)存在BC這條邊,那門(mén)當(dāng)一條新的邊AD在要加進(jìn)來(lái)時(shí),發(fā)現(xiàn)A節(jié)點(diǎn)已經(jīng)在1號(hào)機(jī)器上,所以就將該邊放置到1號(hào)機(jī)器上。如果再來(lái)一條邊BE,發(fā)向兩臺(tái)機(jī)器上都存有B節(jié)點(diǎn),這時(shí)候貪婪策略會(huì)選擇機(jī)器中分配的邊最少的機(jī)器進(jìn)行分配。所以會(huì)將BE分配到2號(hào)機(jī)器,這里只是簡(jiǎn)單的舉了個(gè)例子,論文中是用集合的表示方式將這種貪婪策略歸納了4種case,這里不詳細(xì)介紹,具體可以參考論文第8頁(yè)相關(guān)內(nèi)容。
????????上面提到的貪婪策略,作者論文中稱(chēng)之為De-randomiztion。de的含義這里因該是去除,與隨機(jī)化剛好是反義詞。De-randomization就是Greedy的含義,貪婪點(diǎn)切分能夠最小化機(jī)器所跨的機(jī)器數(shù)目。實(shí)際的貪婪的放置策略性能要比隨即放置策略要好。關(guān)于貪婪邊切分策略,作者給出了兩種實(shí)現(xiàn)方式:
????????第一種是協(xié)同邊放置策略,這需要維護(hù)一張全局u頂點(diǎn)放置的歷史紀(jì)錄表,在執(zhí)行貪心切分之前都要去查詢(xún)這張表,在執(zhí)行的過(guò)程中需要更新這張表。協(xié)同點(diǎn)切分的策略,它的特點(diǎn)是慢但點(diǎn)切分的質(zhì)量高 ,
????????第二種方式是Oblivious的貪婪策略,它是一種近似的貪婪策略,不需要做全局的協(xié)同。貪婪算法的運(yùn)行不依賴(lài)每一臺(tái)機(jī)器,不需要維護(hù)全局的記錄表,而是每臺(tái)機(jī)器自己維護(hù)這張表,不需要做機(jī)器間的通信。這種策略速度快,但切分質(zhì)量比較低。關(guān)于這種方式,論文只用了一段話(huà)來(lái)描述,具體如何操作明白。
6.2.3 對(duì)比三種分區(qū)策略的性能
????????下面是對(duì)比這三種分區(qū)策略的性能,對(duì)比的是平均的機(jī)器跨度和構(gòu)建時(shí)間。?
????????協(xié)同的貪婪分區(qū)算法平局機(jī)器跨度最小,但構(gòu)建時(shí)間最長(zhǎng)。而隨機(jī)策略構(gòu)建時(shí)間短,但平局的機(jī)器跨度最大。而Oblivious的貪婪分區(qū)策略能夠在平局機(jī)器跨度和構(gòu)建時(shí)間上獲得一個(gè)折中的性能。?
7. System Desgin
????整個(gè)PowerGraph的架構(gòu)是這樣一個(gè)結(jié)構(gòu),最上層是PowerGraph 系統(tǒng),它和GraphLab集成到一起,實(shí)現(xiàn)的接口是C++,利用HDFS進(jìn)行數(shù)據(jù)的輸入和輸出,利用檢查點(diǎn)來(lái)實(shí)現(xiàn)容錯(cuò)。
在這個(gè)系統(tǒng)上實(shí)現(xiàn)了許多經(jīng)典算法,比如:?
Alternating Least Squares 交替最小二乘法?
Stochastic Gradient Descent隨機(jī)梯度下降?
SVD(Singular Value Decomposition)奇異值分解?
Statistical Inference統(tǒng)計(jì)推斷?
Loopy Belief Propagation(LBP)循環(huán)信度傳播算法?
Gibbs Sampling吉布斯采樣?
Image stitching圖像拼接?
LDA(Latent Dirichlet Allocation)隱含狄利克雷分布文檔主題生成模型?
????????下面對(duì)比了Pregel、GraphLab和PowerGraph在運(yùn)行PageRank算法上通信開(kāi)銷(xiāo)和執(zhí)行的時(shí)間,可以看出PowerGraph不僅通信開(kāi)銷(xiāo)小而且運(yùn)行時(shí)間短,對(duì)高緯度點(diǎn)有很強(qiáng)的健壯性。這時(shí)在人工合成的數(shù)據(jù)集上的一個(gè)性能。
7. Summary
總結(jié)
以上是生活随笔為你收集整理的[OSDI 12] PoweGraph: 分布式图并行计算框架 学习总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [PVLDB 12] GraphLab
- 下一篇: Hadoop详解(一):Hadoop简介