グラフ分割とメッシュ分割
メッシュ分割の質が並列性能を丸ごと固定してしまう理由を、エッジカット最小化と多層グラフ分割の原理から理解でき、METISが速く高品質な分割を出せる仕組みまで説明できる。
- 非構造メッシュの割り当てはグラフk-way分割に帰着し、ノード重みの均等化(負荷分散)とエッジカット最小化(通信量削減)を同時に満たす分割を探す問題になる。
- 厳密なエッジカット最小化はNP困難のため、粗視化・初期分割・詳細化の3段からなる多層グラフ分割(METIS系)でほぼ線形時間かつ高品質な近似解を得る。
- エッジカットは通信量の近似指標にすぎず、真に効くのは通信相手数・最大通信量であり、通信ボリューム目的やハイパーグラフ分割はこの乖離を埋めるために使う。
なぜメッシュ分割がグラフ分割になるのか
有限要素法や有限体積法で使う非構造メッシュを並列計算するには、要素(またはノード)をプロセスへ割り当てる必要があります。規則格子なら座標で機械的に短冊やブロックに切れますが、非構造メッシュは要素の隣接関係が座標から自明でないため、この割り当てをグラフ分割問題として定式化します。
対応づけは単純です。計算単位(要素やメッシュ節点)をグラフのノードに、計算で値を交換し合う隣接関係をエッジに写します。すると「メッシュをP個のプロセスへ分ける」ことは「グラフのノードをP個の部分集合に分ける」ことに一致します。この抽象化のおかげで、規則格子・非構造メッシュ・疎行列(疎行列の格納形式と演算 の隣接構造)を、同じ分割アルゴリズムで扱えるようになります。
分割結果は2つの性能指標を同時に決めます。第一に各プロセスの計算量(ノード重みの合計)で、これが偏ると最も重いプロセスが全体を律速します。第二に部分集合をまたぐエッジの本数(エッジカット)で、これが 領域分割法 でいうゴースト交換の通信量に対応します。分割は一度きりの前処理ですが、以降のすべての反復ステップの性能を固定してしまいます。
k-way分割とエッジカット最小化の定式化
グラフ G=(V,E) を考えます。各ノード v は計算コストを表す重み w(v) を持ち、各エッジは通信量を表す重みを持てます。これをk個の部分集合 {V1,...,Vk} に、重複なく分割します。満たすべき条件は次の2つです。
- バランス制約: 各部分集合の重み合計が、ほぼ均等になること。理想は総重み/k ですが、厳密な均等は難しいため許容不均衡率 ε を設け、どの部分集合も (1+ε)×平均以下に収める、という緩和条件を課すのが一般的です。
- 目的関数: 異なる部分集合に端点を持つエッジ(カットエッジ)の重み合計、すなわちエッジカットを最小化すること。
このように部分集合数 k を任意に指定して同時に分ける定式化をk-way分割と呼びます。実装上は「2分割を再帰的にlog k回繰り返す(再帰二分)」方法と、「最初からk個へ直接分ける(ダイレクトk-way)」方法があります。再帰二分は各段が独立で単純ですが、段ごとの局所最適が積み重なり全体最適から離れやすい欠点があります。ダイレクトk-wayはk個の部分集合の境界を同時に最適化できるため、通常こちらの方が高品質なカットを得ます。
バランス制約付きのエッジカット最小化は組合せ最適化としてNP困難であり、大規模メッシュ(数百万〜数十億ノード)で厳密最適を求めるのは非現実的です。したがって実務の目標は「最適解」ではなく「実用時間内に得られる十分に良い近似解」に移ります。この割り切りが、次の多層グラフ分割を生む動機です。
多層グラフ分割(METISの中核アルゴリズム)
METISに代表される現代のグラフ分割器は、多層グラフ分割(multilevel graph partitioning)という3段構成を採ります。巨大なグラフを直接分割せず、いったん小さく畳んでから分割し、元のサイズへ戻す、という発想です。
横にスクロール
多層グラフ分割の3フェーズ
1. 粗視化(coarsening)
隣接ノードをマッチングでペアにし、1つのノードへ統合する。
統合ノードの重み = 元2ノードの重みの和、
統合エッジの重み = まとめられたエッジ重みの和。
これを数十回繰り返し、数百ノード程度まで段階的に縮小する。
2. 初期分割(initial partitioning)
最小まで縮んだグラフは十分小さいので、
ここで初めて k-way 分割を計算する。
小規模なので多少重いアルゴリズムを使っても速い。
3. 詳細化を伴う逆写像(uncoarsening + refinement)
粗視化を逆にたどり、統合したノードを1段ずつ展開する。
各段で境界ノードを隣の部分集合へ移す局所改善
(KL/FM 系のヒューリスティック)を適用し、
カットとバランスを詰め直しながら元のサイズへ戻す。
このアプローチが効く理由は2つあります。第一に、粗いグラフ上での1ノードの移動が元グラフの多数ノードの一括移動に相当するため、局所改善だけでは越えられない大域的な谷を、粗い階層でまたいで探索できます。第二に、初期分割を小さいグラフに対してだけ行うので、全体の計算量がノード数・エッジ数に対してほぼ線形に収まります。空間充填曲線ほどではないものの、数百万ノードを秒単位で分割できる速度は、この線形性から来ています。
局所改善の中核はKernighan–Lin(KL)法とその高速版であるFiduccia–Mattheyses(FM)法です。境界ノードを反対側へ移したときのカット増減(ゲイン)を計算し、ゲインの高い移動から順に適用します。要点は、単発では損(負のゲイン)になる移動も一時的に許して、その先でより大きな得を狙う点にあります。これにより貪欲法が陥る局所最適から脱出でき、粗視化の各段で少しずつカットを削っていけます。
エッジカットは通信量の近似にすぎない
多層グラフ分割は「エッジカット」を最小化しますが、実際の並列性能を決めるのはエッジカットそのものではありません。ここに理論と実測の乖離が生まれます。
第一に、通信は本数ではなくメッセージ回数とレイテンシに強く影響されます。2つの部分集合の間でカットエッジが100本あっても、それらが1回の通信にまとめられるなら、コストは1メッセージ分です。したがって効くのは通信相手(隣接部分集合)の数であり、これはエッジカットとは別の量です。第二に、バリア同期のもとでは全体の所要時間は最も重い1プロセスで決まるため、総エッジカットより1プロセスあたりの最大通信量が律速になります。
| 目的関数 | 最小化する量 | 実性能との対応 |
|---|---|---|
| エッジカット | 部分集合をまたぐエッジの総本数 | 通信量の粗い近似。実装が単純で高速 |
| 通信ボリューム | 各プロセスが送受信する境界データの総量 | メッセージ本数・相手数を反映しカットより実測に近い |
| 最大負荷/最大通信 | 最も重いプロセスの計算量・通信量 | バリア同期下の実行時間に直結するが最適化が難しい |
さらに、標準のグラフ分割はエッジを「2ノードを結ぶ辺」としてしか表せないため、1つのデータが3プロセス以上で共有される状況(1つの節点が複数部分領域の境界に接する等)の通信量を正確に数えられません。これを厳密に扱うのがハイパーグラフ分割で、1本のハイパーエッジが任意個数のノードを束ねられます。ハイパーグラフのカット(何個の部分集合にまたがったか)は通信ボリュームを正しく数えられる代わりに、分割の計算コストはグラフ分割より重くなります。実務では「まず高速なグラフ分割(METIS系)で足りるか試し、通信が支配的で相手数の最適化が必要な場面でハイパーグラフ分割を検討する」のが定石です。
静的分割としての位置づけ
本記事が扱うのは、計算開始前に一度だけ質の高い分割を作る静的分割です。多層グラフ分割は高品質なカットを出せる反面、空間充填曲線による分割ほど再計算が軽くないため、科学シミュレーションの負荷分散 で扱う動的再分割(実行中に負荷が偏るたびに分割し直す)には必ずしも向きません。負荷分布が時間変化しない、または変化が遅い問題では、初期に一度だけ念入りにグラフ分割してカットを最小化しておくのが最も費用対効果が高くなります。逆に負荷が刻々と動く問題では、分割の質を多少犠牲にしても再分割の速い手法(空間充填曲線)や、前回の分割からの差分を小さく保つ並列版分割器(ParMETIS等)が選ばれます。
- 非構造メッシュの割り当ては、計算単位をノード・隣接関係をエッジとするグラフのk-way分割に帰着する。目的はノード重みの均等化(負荷分散)とエッジカット最小化(通信量削減)の同時達成。
- バランス制約付きエッジカット最小化はNP困難。多層グラフ分割(粗視化→初期分割→詳細化)はKL/FM局所改善を各段で適用し、ほぼ線形時間で高品質な近似解を得る。
- エッジカットは通信量の粗い近似にすぎない。実性能を決めるのは通信相手数・最大通信量であり、通信ボリューム目的やハイパーグラフ分割でこの乖離を埋める。
まとめ
- メッシュ分割は、計算単位をノード・データ交換をエッジとみなすことでグラフのk-way分割へ抽象化でき、規則格子・非構造メッシュ・疎行列を同じアルゴリズムで扱えるようになる。
- 分割の目的はバランス制約(ノード重みの均等化=負荷分散)を守りつつエッジカット(=通信量)を最小化することだが、この定式化はNP困難である。
- METISに代表される多層グラフ分割は、粗視化で畳んで小さくしてから分割し、KL/FMの局所改善を伴いながら展開することで、ほぼ線形時間かつ高品質な近似解を得る。
- エッジカットは通信の本数を数えるだけで、メッセージ回数・通信相手数・最大通信量という真に効く量とはずれる。通信ボリューム目的やハイパーグラフ分割はこの乖離を埋める手段であり、質の高い静的分割として動的再分割とは役割を分ける。
HPC・科学技術計算の記事ガイド
グラフ分割とメッシュ分割を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
HPC
比較で見る軸
難易度: advanced / カテゴリ: HPC・科学技術計算 / タグ数: 6
導入後に効く点
厳密なエッジカット最小化はNP困難のため、粗視化・初期分割・詳細化の3段からなる多層グラフ分割(METIS系)でほぼ線形時間かつ高品質な近似解を得る。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- HPC・科学技術計算
- タグ数
- 6
判断チェックリスト
- 自社の用途が「HPC / グラフ分割」に近いか確認する。
- 強みである「非構造メッシュの割り当てはグラフk-way分割に帰着し、ノード重みの均等化(負荷分散)とエッジカット最小化(通信量削減)を同時に満たす分割を探す問題になる。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。