How to Partition a Billion-Node Graph
-
Lu Wang, Yanghua Xiao, Bin Shao, Haixun Wang
-
ICDE 2014
概要
-
分散メモリシステムにグラフを載せることを考える
-
どうやって分割すればイイ?
-
部分グラフのサイズ、辺カット、等が評価基準
-
提案手法
-
G頂点のグラフでも数時間で処理できたよ!
背景
Kerninghan-Lin
-
メモリベース
-
グラフを二分していく
-
クラスタ間の頂点を辺カットが小さくなるように交換
METIS
-
Graph Coarseningをする
-
先にある程度小さくする(クラスタをまとめるとか
-
そのあとKLを適用する
-
問題点: この処理が超重い
-
Coarsening the graph
-
partitioning the coarsened graph
-
uncoarsening
Label Propagation (LP)
-
ホントはクラスタリング手法
-
拡張頂点にユニークなラベルを割り当てる
-
ラベルを更新、というかマージしていく
-
変化がなくなるまで反復
利点
-
軽い、メモリとか
-
ソートもインデクシングも必要ない
-
つまりO(t|E|)、反復回数tは5~6とか
-
semantic-aware(意味論
挑戦
-
Imbalance
-
各部分グラフのサイズがバランスしていない
-
やばお!
-
コミュニティサイズが歪んでるせい
-
Efficiency
-
Parallelization
-
Convergence
-
収束の理論的補償なし
-
二部グラフとか振動する
-
やばお!
-
しょーがないので、ランダムに頂点を選んだり
問題定義
-
Edge cut
-
Communication volume
-
vの近傍が属する分割の個数の和
-
近傍を処理する時どのくらい分割をチェックしないといけないか?
-
Graph partitioning
-
V を P = {C_1, C_2, …, C_k} に分割
-
|C_i|≒|V|/k
-
minimize ec(P) or cv(P)
提案手法 Multi-level propagation
-
繰り返しcoarsening
-
パラメータ
-
αラベル以下になるまで
-
高々βiteration
-
各分割のサイズ?は|V|(/kγ)以下
-
coarsenedグラフを分割(KLとかMETIS
-
元のグラフに対応させる(Refinement
-
ラベルの更新
-
沢山同じ近傍を共有している頂点対は同じ分割に入れたい!
-
近傍のラベルをランダムに選ぶ? or 一番値の小さいラベルを選ぶ?
-
後者の方が条件を満たしやすい
-
さらに、何回もつぶすので、重み付きの更新も考えちゃう
-
Refinement
-
multiprocessor scheduling (MS)とweighted graph partitioning (WGP)を考えた
-
{C_1, C_2, …, C_n}がもらえるので、イイ感じにマージして{S_1, S_2, …, S_k}にしてね
-
n > k
-
max{|S_i|}を最小化したい
実験
-
METISだけは、質がよいんだけど、時間がやばすぎる
-
Randomは当然早いんだけど、質はおわてる
-
MLP+METISとLP+MSは良い
まとめ
-
あんまちゃんと読めなかった
-
メモリにどのくらいのるのか?とかよくわからんかった
-
とりあえずデカイグラフを扱うのは大変だなー
ICDE graph partitioning
2013-12-27 01:05:31 (Fri)
最終更新:2013年12月27日 01:05