適応的並列計算を支援する プロトコルの設計と検証

適応的並列計算を支援する
プロトコルの設計と正当性の証明
電子情報工学科
近山・田浦研究室
関谷岳史
背景
• 長時間を要する分散計算
– CPU/ネットワーク負荷の変化
– 利用可能資源の増減
• 資源の効率的な利用のためには、計算
中にプロセスを参加・脱退させたい
適応的並列計算の必要性
適応的並列計算
• 正しく記述・実装するのが
困難
– プロセスの脱退によるメッ
セージの喪失が起き得る
(図)
– 同時に複数のプロセスが脱
退する場合はさらに複雑
• 実用的には単純なモデル・
接続のトポロジーで実装
– 複数プロセスの脱退であれ
ば、中央サーバが調停して
脱退を順次行うなど
本研究の目的
• 「安全な」脱退を支援するプロトコルの設
計
– 任意のトポロジー
– 任意の時点で脱退を希望可能
– メッセージが喪失・複製することがない
• そのプロトコルのフォーマルな証明
• 動作確認・性能評価のための実装
発表の流れ
•
•
•
•
•
関連研究
問題設定
提案するプロトコル
実装と評価
まとめ
関連研究
適応に対するアプローチ
1. 単純なモデルでメッセージが通信路にない瞬間に脱
退するもの
–
–
クライアント・サーバモデル(Ninf [Sato et al. 1997]など)
バリア同期をとって脱退 ([松原 et al. 2003]など)
メッセージの喪失を許容するもの
2.
–
–
→
分散Cilk [Robert et al.1997]
P2P通信システム (Tapestry [Ben et al. 2000]など)
それらに対して本研究では
–
–
–
非同期メッセージパッシングシステム
接続トポロジーを制限しない・各プロセスが自律的に脱退で
きる
故障がない限りメッセージを失うことがない
問題設定
• 仮定
– 通信路はFIFO・故障なし・双方向リンク
– プロセスは脱退を完了する前までは任意の時点で
メッセージを生産し、送信する
– プロセスは脱退を完了する前までは受け取ったメッ
セージを消費または転送する
– 参加プロセス間のトポロジーが変化しない
– 脱退を希望していないプロセスの集合がなすグラフ
は連結
• プロトコルの満たすべきこと
– メッセージが喪失・複製しない
– 脱退を希望したプロセスは有限ステップで脱退を完
了できる
提案プロトコルの概要
• 安全に脱退するには
– 脱退直前のプロセス宛に通信路中をメッセージが飛
行していない
– 脱退後のプロセス中にメッセージが取り残されない
• プロトコルの基本方針
– プロトコルメッセージ+ポート(通信チャネルの端点)
の状態変化
– 脱退を希望するプロセス宛にメッセージが来ないよ
うにする
– メッセージが取り残されないよう、転送できる隣接プ
ロセスを見つける
プロトコルの流れ
n
p
ACK
NMS
n
p
NMS
n n
h
h
h
n
ACK
ACK
n
p
NMS
n : normal
h : half close
p : parent
c : child
l : closed
• ポートの状態はnormal
で初期化
• 脱退を希望するとまわ
りにNMS (send no
more)を送り、ポートの
状態をhalf_closeにす
る
• NMSを受け取るとポー
トの状態をparentにして
ACKを返す
プロトコルの流れ
pl
ACK
ACK
p
ACK
pl h
h
cl
hl
p
ACK
ACK
pl
ACK
n : normal
h : half close
p : parent
c : child
l : closed
• ひとつACKを受け取る
と、ポートの状態をchild
にして、他のチャネルに
ACKを送り、ポートの状
態をparentにする
• parentのポートにACK
を受け取るとポートの状
態をclosedにする
• 残ったプロセスにACK
を送り状態をclosedに
する
提案プロトコルによる脱退の例(1)
開始前
提案プロトコルによる脱退の例(2)
1プロセス以外が脱退を開始
脱退したい
脱退したい
脱退したい
脱退したい
脱退したい
脱退したい
脱退したい
脱退したい
脱退したい
脱退したい
提案プロトコルによる脱退の例(3)
NMSを隣接プロセスに送信
提案プロトコルによる脱退の例(4)
脱退しないプロセスはACKを返す
提案プロトコルによる脱退の例(5)
ACKを受信したら他のプロセスにACK送信
提案プロトコルによる脱退の例(6)
木構造の葉のほうから順に脱退
プロトコルの記述
Event user send:
∃p ∈ P (p.state = normal or half close or child) ⇒
m := new message
p.send(DATA(m))
Event want to leave:
leave = 0 and ∀p ∈ P ( p.state = normal or closed)
⇒
leave := 1
forall p ∈ P such that p.state = normal:
p.send(NMS)
p.state := half close
Event user receive:
received(DATA(m)) from p ⇒
if leave = 0:
deliver DATA(m) to user
else:
add DATA(m) to M
Event forwarding:
M is not empty and ∃p ∈ P (p.state = normal or half
close or child) ⇒
pop DATA(m) from M
p.send(DATA(m))
Event receive NMS:
received(NMS) from p ⇒
if p.state = normal:
p.send(ACK)
p.state := parent
Event receive ACK:
received(ACK) from p ⇒
if p.state = half close:
p.state := child
forall q ∈ P such that q.state = half close:
q.send(ACK)
q.state := parent
else if p.state = parent:
p.state := closed
Event finish leaving:
M is empty and ∃p ∈ P (p.state = child (others are
closed)) ⇒
p.send(ACK)
p.state := closed
正当性の証明の概要
• メッセージが喪失しない(Safety)
– アルゴリズムを追っていくことで証明
• 希望したプロセスはいつか脱退できる
(Progress)
– 不変条件(A),(B)が成り立つことを証明
– チャネルの状態変化がいずれ進行し、完了
することを示す
不変条件
F parent->childの有
向エッジの集合
D parent->half_close
の有向エッジの集
合
n
n p
NMS
c
h
c p
p
c
ACK
pp
ACK
ACK
不変条件
A) Fはforestをなす
B) F+Dはdagをなす
n : normal
h : half close
p : parent
c : child
p c
p
h
h
ACK
h
実装と動作確認・性能評価
• TCPを用いた通信ライブラリとして実装
• 動作の様子のデモ
– 実験環境:情報理工istbsクラスタ
– ノード数190中128ノードが脱退
– 実験結果のログをjava Appletを用いて表示
脱退に要する時間の評価
0.8
0.7
• 実験環境
順次脱退プロトコル
0.5
time(sec)
– istbsクラスタ
– 190ノード×2プロセス
– プロセス数分のメッセージ
が転送され続ける
– 同時に複数ノード脱退
0.6
0.4
0.3
0.2
提案プロトコル
0.1
0
0
20
40
60
80
脱退したノード数
• 順次脱退プロトコルとの比較実験
– 順次脱退プロトコルでは線形に時間が増加
– 提案プロトコルでは比較的増加がゆるやか
100
120
140
まとめと課題
• 安全な脱退を支援するプロトコルの設計・
正当性の証明
– 任意のトポロジー・任意のプロセスが脱退す
るモデル
– ほぼ自律的な脱退が可能
• 今後の課題
– プロセスの参加に対応
– ルーティング