大規模グラフアルゴリズムの最先端

51
大規模グラフアルゴリズムの 最先端 秋葉 拓哉 (@iwiwi) 2012/01/12 PFI セミナー

Upload: takuya-akiba

Post on 20-May-2015

27.918 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: 大規模グラフアルゴリズムの最先端

大規模グラフアルゴリズムの 最先端

秋葉 拓哉 (@iwiwi)

2012/01/12 PFI セミナー

Page 2: 大規模グラフアルゴリズムの最先端

1

挨拶

• 自己紹介

– 秋葉拓哉 / @iwiwi

– 東京大学 コンピュータ科学専攻 M1

– アルゴリズム系の研究室

– プログラミングコンテストが好き

– 2009 年にインターンさせてもらって以来アルバイト

アリ本 (グラフの話もあるよ)

Page 3: 大規模グラフアルゴリズムの最先端

いろんなグラフ

2

道路・交通ネットワーク

• 頂点:交差点,駅など

• 辺:道,路線など

やりたいことの例

• 案内,交通管制

• 輸送や災害のための解析

• 地理情報と絡めたサービス

• …

Page 4: 大規模グラフアルゴリズムの最先端

いろんなグラフ

ソーシャルネットワーク

• 頂点:人

• 辺:人間関係

やりたいことの例

• 「知り合いかも?」とか

• 重要度・影響度の解析

• コミュニティ解析

• 情報の伝播力の解析

• …

3

(MentionMap で作成)

映画

Page 5: 大規模グラフアルゴリズムの最先端

いろんなグラフ

4

ウェブグラフ

• 頂点:Web ページ

• 辺:リンク関係

やりたいことの例

• PageRank, HITS

• Web ページの関連性

• …

(Gephi HTTP Graph)

「ネットは広大」

Page 6: 大規模グラフアルゴリズムの最先端

大規模グラフ処理の需要

5

• みんなデカいグラフを処理したいんだ!

• 馬鹿げたサイズのものもある

• 他にも一杯あると思います

界隈 種類 頂点数 (辺数はもっと)

OR 等 交通ネットワーク 全米:> 2 × 107

Web 等 ソーシャルネットワーク・

Web グラフ

Twitter:> 2 × 108人 Facebook:> 5 × 108人 Google:> 109ページ

生物情報 タンパク質間相互作用など > 109

国防 (?) 謎 アメリカ国土安全保障省:

> 1015 [Kolda+’04]

Page 7: 大規模グラフアルゴリズムの最先端

アカデミックな方々の関心

• アルゴリズム界隈はもちろん

• VLDB (データベース界のトップ会議)

– 2011 では “Graph Data” なるセッションが 3 つ

• SC (HPC 界のトップ会議)

– 2010 でセッション “Graph Algorithms”

• 多分他でも…

6

Page 8: 大規模グラフアルゴリズムの最先端

HPC 界の関心

• Top500 の新しい仲間

• スパコンをグラフの処理能力で格付け

• 日本は現在 TSUBAME が 3 位

7

[http://blog.goo.ne.jp/sdpaninf/e/fdd6d1c59516418ccae7514a6512b0d1]

Page 9: 大規模グラフアルゴリズムの最先端

日本のアカデミック界でも関心

JST CREST にも超大規模グラフに挑戦するチーム

8

[http://blog.goo.ne.jp/sdpaninf/e/87c8bf7886310ecfab1e56c8967e4b1e]

Page 10: 大規模グラフアルゴリズムの最先端

インダストリアルからも関心

9

Graph DB 大人気!

Page 11: 大規模グラフアルゴリズムの最先端

話すこと

アルゴリズムの話をします (いっぱい話すので概要です)

• アルゴリズム界隈での話題

– 特に道路ネットワークでの最短路

• DB 界隈での話題

– 特に複雑ネットワークでの最短路

• HPC 界隈での話題

– 特に並列分散環境での最短路

10

(´・_・`)

最短路 ばっかり…

(大げさなタイトルに してすみませんでした)

Page 12: 大規模グラフアルゴリズムの最先端

1. アルゴリズム界隈の話題 特に道路ネットワークでの最短路

11 (画像: Google Maps)

Page 13: 大規模グラフアルゴリズムの最先端

アルゴリズム界隈

• トップ会議

– STOC, FOCS, SODA, …

– 理論系.証明.証明のためのアルゴリズム.

– 実装して意味のあるアルゴリズムは少ない.

• 実験系アルゴリズムの会議

– ALENEX, SEA, ESA (engineering track), …

– 実装して良い感じのアルゴリズムはこっちに.

– 最近すこし良い感じなんですか?

• SEA: workshop → symposium,ALENEX: workshop → meeting

SODA, ALENEX は来週京都で開催!!

アメリカ以外での開催は多分はじめて!! 岩間先生 (oxy 神のとこの先生) の還暦祝いという噂

12

oxyさんも まけてない!!

河原林先生 (日本が誇る世界のトップ!!)

Page 14: 大規模グラフアルゴリズムの最先端

実験系界隈でのグラフアルゴリズム

• Graph Partitioning, Graph Clustering – 超流行,最近だと毎回 2,3 本は論文がある

– 去年,5 年ぶりの DIMACS Implementation Challenge の題材に

– グラフを良い感じに分割したい

– 様々な応用: ソーシャルネットワーク解析,分散処理,CV,…

• その他,計算困難問題 – クリークカバー (ALENEX’12), TSP (SEA’11), シュタイナー木 (ALENEX’10), …

• その他,基礎的な操作 – 最短路と仲間 (いっぱい), トポロジカルソート (ALENEX’11), 直径, …

13

Page 15: 大規模グラフアルゴリズムの最先端

最短経路クエリ処理

1. 前処理

2. クエリ処理

「本郷から駒場」

「中野から秋葉原」

「札幌から那覇」

「30 分です」

「20 分です」

「7 時間です」

前計算 データ

活用

Page 16: 大規模グラフアルゴリズムの最先端

道路ネットワークでの最短路クエリ

• 構造を活かしやすい

• 様々な効率的な技法

有名な手法

• A*, ALT [HNR’72, IHI+’94, GH’05, …]

• Reach Pruning [Gut’04, …]

• Highway Hierarchy […]

• Transit Nodes […]

最新の手法

• Highway Dimension

[Abraham+, SODA’10]

+

• Hub-Based Labeling Algorithm

[Abraham+, SEA’11]

15

Page 17: 大規模グラフアルゴリズムの最先端

Dijkstra → 双方向 Dijkstra

16

最短路が得られている

頂点が広がってゆく

アルゴリズム.

s t

両側からやると

余計な頂点が減る.

s t

Dijkstra 双方向 Dijkstra

Page 18: 大規模グラフアルゴリズムの最先端

三角不等式

• 𝑑𝐺 𝑠, 𝑡 ≔ グラフ 𝐺 上での 𝑠, 𝑡 の最短距離

• 𝑑𝐺 𝑠, 𝑡 ≤ 𝑑𝐺(𝑠, 𝑢) + 𝑑𝐺(𝑢, 𝑡)

• 𝑑𝐺 𝑠, 𝑡 ≥ 𝑑𝐺 𝑠, 𝑢 − 𝑑𝐺(𝑢, 𝑡) ★今回はこっち(下界)

(𝑢 は任意の頂点)

Page 19: 大規模グラフアルゴリズムの最先端

A*, ALT アルゴリズム

18

s t s t

l

v

A* ALT

人工知能等の探索でもお馴染み.

近そうなところから探索.

ランドマークの頂点を用意.

そこからの距離と三角不等式で

距離の下界を推定し A*.

この辺は実装が楽,速度はそこそこ. (state-of-the-art と比べると全然)

Page 20: 大規模グラフアルゴリズムの最先端

双方向 Dijkstra + Reach Pruning の効果

やばすぎ!効果絶大!

19

[http://research.microsoft.com/en-us/people/goldberg/hwd.pdf]

Dijkstra 双方向 Dijkstra 双方向 RE

Page 21: 大規模グラフアルゴリズムの最先端

Highway Dimension [Abraham+, SODA’10]

• これらの手法はヒューリスティクスだった

– 「なんとなく」うまくいきそうな手法

– 実験してみるとたしかにうまくいく

• うまくいくことを解析したい!

→ 道路ネットワークを数理的にモデル化

• 道路ネットワーク ≒ “Highway Dimension” の

小さいグラフ [Abraham+, SODA’10]

「ある程度の距離になる最短路は,

必ず限られた頂点のどれかを通る」 (限られた頂点≒大都市的な. で,Highway Dimension が小さい

≒限られた頂点集合が割りと小さい.定義はもっとフォーマル)

20

Page 22: 大規模グラフアルゴリズムの最先端

• Hub-Labeling Algorithm

– DB 界隈で 2-Hop と呼ばれるものと同じ

– 各頂点に関して,中継点候補を前計算

• Highway Dimension が小さいというモデルで解析をすると,これが凄い速そう

→ 少し工夫して実装してみたら実際爆速!!

Hub-Labeling Algorithm [Abraham+, SEA’11]

21

あらゆる頂点対について, 最短路を与える共通の頂点対が 存在するようにしておく

前計算アルゴリズムの性能で, 中継点のサイズが違ってきて, 小さくできるほど良い

Page 23: 大規模グラフアルゴリズムの最先端

はやいwwww 5 ランダムアクセスぐらい?

Hub-Labeling Algorithm [Abraham+, SEA’11]

22

Page 24: 大規模グラフアルゴリズムの最先端

2. データベース界隈の話題 特に複雑ネットワークでの最短路

23

Page 25: 大規模グラフアルゴリズムの最先端

会議と話題

• DB 系の会議: SIGMOD, VLDB, ICDE, CIKM, EDBT, …

– Web, IR 界隈とも近い

– インダストリアルとの距離が近い

– プラクティカルな話題が多い

• グラフデータベース,分散グラフ処理系

• グラフアルゴリズム

– パターン検索,コミュニティ抽出,頻出パターン抽出

– RDF のクエリ処理,構造のある検索

– Uncertain Graph 上での各種処理 (枝に不確定性)

– 到達可能性クエリ,最短路クエリ (亜種もいっぱい)

24

Page 26: 大規模グラフアルゴリズムの最先端

最短路クエリの応用例: Social Search

Page 27: 大規模グラフアルゴリズムの最先端

最短路クエリの応用例: Social Search

Page 28: 大規模グラフアルゴリズムの最先端

最短路クエリの応用例: Context-Aware Search

「木」 を検索

Page 29: 大規模グラフアルゴリズムの最先端

「木」 を検索

最短路クエリの応用例: Context-Aware Search

Page 30: 大規模グラフアルゴリズムの最先端

最短路クエリの応用例

• Social Search – Social Network: 人を頂点,枝を友人関係

• Context-Aware Search – Web Graph: ページを頂点,枝をリンク

これらのグラフ上での最短距離を

結果のランキングの指標に使う

Page 31: 大規模グラフアルゴリズムの最先端

複雑ネットワークでの最短路クエリ

• 構造がカオス

• 交通ネットワークと比べ難しい

有名な手法

• 2-HOP [Cohen+, SODA’02] [Cheng+, EDBT’09]

• 対称性の活用 [Xiao+, EDBT’09]

• ランドマーク系 (近似) [Potamias+, CIKM’09]

[Das Sarma+, WSDM’10] [Gubichev+, CIKM’10]

最新の手法

• 木分解による Core-Fringe 構造の活用

[Wei, SIGMOD’10] [Akiba+, EDBT’12]

30

河原林先生 →

← Christian さん

Page 32: 大規模グラフアルゴリズムの最先端

三角不等式

• 𝑑𝐺 𝑠, 𝑡 ≔ グラフ 𝐺 上での 𝑠, 𝑡 の最短距離

• 𝑑𝐺 𝑠, 𝑡 ≤ 𝑑𝐺(𝑠, 𝑢) + 𝑑𝐺(𝑢, 𝑡) ★今回はこっち(上界)

• 𝑑𝐺 𝑠, 𝑡 ≥ 𝑑𝐺 𝑠, 𝑢 − 𝑑𝐺(𝑢, 𝑡)

(𝑢 は任意の頂点)

Page 33: 大規模グラフアルゴリズムの最先端

上界による最短距離推定 (単一ランドマーク)

• 𝑑𝐺 𝑠, 𝑡 ≤ 𝑑𝐺(𝑠, 𝑢) + 𝑑𝐺(𝑢, 𝑡) ★ これをそのまま使う

1. 前処理

– 頂点 𝑙 を1つ選ぶ(ランドマーク)

– 𝑑𝐺(∗, 𝑙), 𝑑𝐺 𝑙,∗ を全頂点に対し前計算しておく

(幅優先探索)

2. クエリ処理

𝑑𝐺 𝑠, 𝑡 = 𝑑𝐺 𝑠, 𝑙 + 𝑑𝐺(𝑙, 𝑡)

u

s t

Page 34: 大規模グラフアルゴリズムの最先端

上界による最短距離推定 (複数ランドマーク)

ランドマークを単一 (𝑙) から複数 (𝐷) にしよう

• 𝑑𝐺 𝑠, 𝑡 ≤ 𝑑𝐺(𝑠, 𝑢) + 𝑑𝐺(𝑢, 𝑡) ★

複数頂点に使う

1. 前処理 – 一定数の頂点集合 𝐷を決める(ランドマーク) – 各 𝑢 ∈ 𝐷に対し 𝑑𝐺(∗, 𝑢), 𝑑𝐺 𝑢,∗ を全長点に対し前計算 (BFS)

2. クエリ処理

𝑑𝐺 𝑠, 𝑡 = min𝑢∈𝐷{ 𝑑𝐺 𝑠, 𝑢 + 𝑑𝐺(𝑢, 𝑡)}

s t

Page 35: 大規模グラフアルゴリズムの最先端

ランドマークの選択

• ランドマークの選び方で近似性能が大きく変わる

– ベースライン:ランダム

• 実は次数が大きいものから選ぶだけで良くなる! [Potamias+’09]

– 他にも Closeness Centrality や Graph Partitioning を使う方法

– 労力の割に大差ないかも

34

[Potamias+’09, Table2]

Page 36: 大規模グラフアルゴリズムの最先端

複雑ネットワークの Core-Fringe 構造 [Lu’00]

複雑ネットワークは

以下の 2 つ (3 つ) に分けられる

• 密な “Core”

• 木に近い “Trails”

• (“Middle Layer”)

よりフォーマルには,モデルの仮定のもとで証明可

35

Core

Fringe

(恣意的な可視化)

Page 37: 大規模グラフアルゴリズムの最先端

木分解の活用 [Wei’10], [Akiba+’12]

木分解

• グラフ → 頂点集合の木

• どちらかというと理論界の道具

• グラフが“木っぽい”とオイシイ (よりフォーマルには木幅が小さいと良い)

複雑ネットワーク

• 全体としては木っぽくない

• しかし Fringe 部分は木っぽい!

– 木分解してウマウマ

• Core はやっぱしんどい

– 諦めるor頑張る

36

Page 38: 大規模グラフアルゴリズムの最先端

木分解の活用 [Akiba+’12]

数 M 頂点・辺ぐらいまでなら厳密解で爆速クエリ処理

それ以上はシンドイので,近似手法と組み合わせる

(5 M 頂点,70 M 辺 → 数十 μs,数%エラー)

37

クエリ時間 (μs)

Page 39: 大規模グラフアルゴリズムの最先端

3. HPC 界隈の話題 特に並列分散環境での最短路

38

Page 40: 大規模グラフアルゴリズムの最先端

会議と話題

• HPC 系の会議: SC, ICS, ISCA, …

• 話題 (全て並列or分散)

– 連結成分分解

– BFS, SSSP (最短路)

– Eigenvector (PageRank, HITS)

– …

特に IBM と LLNL 辺りが力いれてる

39

SC? でバイオリンを弾く 平木先生

Page 41: 大規模グラフアルゴリズムの最先端

並列・分散環境でのグラフアルゴリズム

グラフアルゴリズムの性質

• ランダムなアクセスパターン

• データの再利用がない

→ 時間的局所性・空間的局所性の両方が超低い

• 並列化はとても難しい

– 簡単には逐次を超えられない

40

Page 42: 大規模グラフアルゴリズムの最先端

Graph 500

スパコンのベンチマーク (超デカいグラフ)

• 現在 BFS のみ

• 次に SSSP が入るという噂

• 更にその次は極大独立集合

• グラフは難しいので,ベンチマークとしては逆に良い

– Top 500 の LINPACK は “簡単” ?

• 将来の需要も考慮

• 現状,アルゴリズム・実装の優劣も大きく影響

– 配られてるリファレンス実装はスケールしない

– まだまだアプローチに「決定版」がない

– アツい! (しかしスパコンのベンチマークになっているかは謎)

41

日本では CREST のチームの方々 でやっています

Page 43: 大規模グラフアルゴリズムの最先端

並列 BFS (共有メモリ)

並列 BFS の基本アルゴリズム

1. キューに始点入れる

2. キューが空でない間: ←このループを並列に

– キューから頂点 v だす

– v に隣接する全頂点で未訪問のものをキューに追加

42

Page 44: 大規模グラフアルゴリズムの最先端

並列 BFS (共有メモリ) の最適化 [Agarwal+’10]

基本

• 到達したかのフラグをビットセットに – キャッシュミス減

• ロックする前に値みてからロック

ソケット超えの最適化

• ソケットごとにキューを別に (inter-socket queue) – ソケット内での push とソケット外への push を別に

– ソケット外から push されたのは後でまとめて処理

– 良い感じの lock-free queue

• Inter-socket キューの処理の batching – 何個か頂点まとめて push/pop → 通信を整理

Page 45: 大規模グラフアルゴリズムの最先端

実験結果 (性能向上)

Nehalem-EX 8 コア × 4 ソケット (= 32 コア)

[Agarwal+’10, Figure 5]

Page 46: 大規模グラフアルゴリズムの最先端

分散 BFS (クラスタ) [Buluc+’11]他

45

× =

距離 i で到達可能な 頂点集合

距離 i+1 で到達可能な 頂点集合

全体全通信が必要となりスケールしない

1 次元分割 繰り返す

隣接行列

Page 47: 大規模グラフアルゴリズムの最先端

分散 BFS (クラスタ) [Buluc+’11]他

46

■ ■

■ ■

× =

距離 i で到達可能な 頂点集合

距離 i+1 で到達可能な 頂点集合

通信が √n 倍程度減る (n はノード数)

2 次元分割

+

■ ■

■ ■

■ ■

■ ■

繰り返す

隣接行列

(しかし,これをベースに頑張り 40K コア使っても, SMP 32 コアの数十倍程度とかだったりしたりしなかったり…?)

Page 48: 大規模グラフアルゴリズムの最先端

終わりです:まとめ

• アルゴリズム界隈の話題: 道路ネットワーク

– A*, ALT, Highway Dimension, Hub-Labeling

• DB 界隈の話題:複雑ネットワーク

– Landmark, Core-Fringe Tree-Decomposition

• HPC 界隈の話題:並列分散

– ソケット超えの最適化,1D/2D 分割法

ありがとうございました

(・__________・)/

47

Page 49: 大規模グラフアルゴリズムの最先端

宣伝

48

Page 50: 大規模グラフアルゴリズムの最先端

宣伝

第二版が出ます!!

• 4 つの新トピック

– 計算幾何

– 枝刈り探索

– 分割統治法

– 文字列アルゴリズム

• 練習問題コーナー

• 発展内容コーナー

49

Page 51: 大規模グラフアルゴリズムの最先端

宣伝

第二版が出ます!!

• 4 つの新トピック

– 計算幾何

– 枝刈り探索

– 分割統治法

– 文字列アルゴリズム

• 練習問題コーナー

• 発展内容コーナー

50

よろしくお願いします! 1/27 発売!