1 / 25

並列スクリプト言語 gluepy を用いた InTrigger での活用

並列スクリプト言語 gluepy を用いた InTrigger での活用. 弘中 健 倉沢 央 東京大学. Using InTrigger. It’s a Grid! : 現在 11 拠点 様々利用目的 多数の単体ジョブを並列処理 Grid 上で分散計算 Harness the Power of the Grid! Real Peer-to-Peer applications アプリの並列化 : Cloud Computing “wall-socket Grid” 「自分のアプリを Grid コンセントにつなぐと Grid の計算能力が手に入る」.

radley
Download Presentation

並列スクリプト言語 gluepy を用いた InTrigger での活用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 並列スクリプト言語 gluepyを用いたInTriggerでの活用 弘中 健倉沢 央 東京大学 www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  2. Using InTrigger • It’s a Grid! : 現在11拠点 • 様々利用目的 • 多数の単体ジョブを並列処理 • Grid上で分散計算 • Harness the Power of the Grid! • Real Peer-to-Peer applications • アプリの並列化: Cloud Computing • “wall-socket Grid” • 「自分のアプリをGridコンセントにつなぐと Gridの計算能力が手に入る」 www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  3. But How? www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  4. Because… ? ? ? ? • Task - Interaction • マシン間の通信・協調? • Socket Programming • 何で書くの? • workflow framework scripts • some good choices: Ibis Satin, Hadoop Map-Reduce • NATs/firewall • imade/kyoto クラスタ • 通信もややこしい • 動的な資源 • 途中追加・故障 • Configuration, Configuration, Configuration … • たくさん設定ファイルを書かないと • 何を書けばいいのかわからない • E.g., XML files ? gluepy … www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  5. But what if? • We take care of… • Socket Communication • Socket APIは触らなくてOK • Programmingでhigh-level interaction • NAT/firewall work arounds • connect() / routingしなくてOK • most configuration done automatically • デフォルトで大抵OK • カスタマイズの時のみ設定ファイル www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  6. gluepy • 今発表の流れ • gluepyの紹介 (弘中) • gluepyでのプログラミング + DEMO • Mini-Benchmarks • InTriggerで使うには • gluepyの実用例 (倉沢) • 「著者同定システム」の並列化 www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  7. gluepy (“glue-pii”) object • “glue python” • Python Library • 並列分散計算ライブラリ • 分散オブジェクト指向 • グリッド上にobjectを分散 • objectに対する呼び出し (RMI) で分散計算 • Remote Method Invocation • 並列計算サポート • 非同期呼び出し • 同期 (e.g., sync) • 参加・脱退対応 • NAT / firewall 含めた接続性を自動解決 • Overlay construction obj.f() RMI leave join www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  8. Programming with gluepy • server-client model : クライアントで計算する server.py import glue, time class Server: def __init__(self): self.clients = [] def join(self, c): self.clients.append(c) def run(self): while True: for c in self.clients: try: print c.run() except: print “error:”, c time.sleep(1) s = glue.ro.RemoteObject(Server()) s.register( “server” ) s.run() import library loop and continuous RMI on client wrap as RemoteObject and export object www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  9. Programming with gluepy client.py import glue, time from socket import gethostname class Client: def run(self): for i in xrange(100000000): pass return “hello: ” + gethostname() c = glue.ro.RemoteObject(Client()) s = glue.ro.RemoteRef(“server”) s.join(c) while True: time.sleep(3600) some calculation… Look-up server object RMI and pass ref. to join www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  10. Demo • Let’s see this all in action! www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  11. Quick Recap • 1. startup a bootstrap server • set everyone’s bootstrap url: • 2. start server code • 3. start client code(s) • 4. enjoy the terribly interesting console output :D • $ export GLUE_BOOTSTRAP_URL=tcp://HOST:PORT www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  12. Get Some Parallelism • Serial ⇒ Parallel invocation • 非同期呼び出し • まとめて呼び出す、まとめて集める www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  13. Code for Parallelism • サーバコードを編集 parallel_server.py def run(self): while True: futures = [] for c in self.clients: f = c.run.future() futures.append(f) glue.ro.waitall(futures) for f in futures: try: print f.get() except: print “error:” server.py def run(self): while True: for c in self.clients: try: print c.run() except: print “error:”, c async. RMI on all get placeholder wait forallresults read forallresults www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  14. Better Parallelism • waitall() wait() を使って暇なclientにRMI lb_server.py def run(self): futures = {} while True: while len(self.clients) > 0: c = self.clients.pop() f = c.run.future() futures[f] = c readys = glue.ro.wait(futures.keys()) for f in readys: c = futures.pop(f) try: print f.get() self.clients.append(c) except: print “error:”, c rmi onany idle clients wait foranyresults record idle client www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  15. Parallel deployment • たくさんの資源を使う場合 • 逐一、consoleで叩くのも大変 • 並列 deployerを使う • Batch schedulerを使う • InTriggerの場合:torque, qsub • GXPを使う • gxpc e command で一括投入 • gxpc mw command を使う • bootstrap serverが不要になる $ gxpc export VAR=VALUE が使える • $ gxpc e python client.py • $ gxpc mw python server_client.py www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  16. gluepy Common Design Patterns “master” lookup • Common Style: Master-Worker • Master: • 1. export object • Workers: • 2. lookup object • 3. join master’s worker set • Master: • 4. master gives jobs • Tree-like: hierarchical MW • do steps similar to MW • Establish parent-child relationship • Each process: • do RMI on children objects using recursion • “P2P-like” • Each process: • 1. create object on few others • 2. do RMIs w.run(args) “master” m.join(w) child.run() child.run() www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  17. Other APIs… • Generally RemoteObject Wrappables • Object instances, class instances, file pointers, functions • SerialObjects • RemoteObjects with implicit mutual exclusion • NodeObjects • Unique object on each process • Useful for remote file open, remote object instanciation • wait() • equivalent to “wait for any” • indispensible for efficient load-balancing • Group : NEW • Group Method Invocation (GMI) • RMI on group of objects with same interface • Documentation available at Home Page www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  18. Connection Workings NAT Global IP • Overlay構築 • 各プロセスは数人に接続 • 連結グラフを作る • ルーティング • Bootstrap • 初期化にbootstrap serverにREQ • 初めてgluepy primitive実行する時に行われる • Contact points を得る • SSH only nodes: • automatic port-forwarding • 対応点 • TCP connectionscalability • NAT/firewall 越え • SSH-only clusters (設定必要) Firewall Attempt connection SSH established connections www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  19. Micro-Benchmarks • Latency • Overlay上でno-opのRMI : ping() • Bandwidth • Overlay上で大きい引数のRMI : send_data() • Data-Intensive Task の Scalability • MW-styleで大きい引数のRMIをN個する: send_data_and_wait() X N • Speedupを測定 www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  20. Latency Overhead • Chiba100 から chiba, imade, hiro, kyoto, mirai のノードのobjectへRMI : ping() • pingで測定したRTTと比較 • overlay, 1 hop = ~1.5 [ms] www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  21. Bandwidth Throughput • 引数 (de)serialization overhead 大 • Full 1Gbit Ethernetで理想最大値: 40[MB/sec] • iperf 測定値から算出される最大値と比較 • overlayでhopをするたびにバンド幅が減少 Overlay hop数 でクラスタ内でもバンド幅が変化 www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  22. Parallel Data Intensive Processing • 710 workers • method 実行時間: 1[sec] • 入力引数サイズNを変化 • master nodeのbandwidthが bottleneck • 約36[MB/s] 50KB mark www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  23. InTriggerで使うには • 使う各拠点で • gluepyをダウンロード • install • “glue”モジュールへのパスをPYTHONPATHに通す • もしくは自分のpythonで • $ python setup.py install www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  24. InTrigger上の注意点 • IGNORE IP address • 10.*.*.* IPMI IP • 172.*.*.* camera IP • 対策: CWD に connect.confを書く • Signalがmaskされることが多い • Python+ threads + signal ⇒ ? ? ? • CTRL + Cでもほぼ必ずゴミが残る • GXPで投入する場合、bombによるごみ回収を忘れずに • 複数のクラスタで全コア使って一斉立ち上げ • 初期化に非常に時間がかかるプロセスもある • connection handshakeでcongestion/packet lossが原因? • 根拠: send()中に“connection timed out” COPY & PASTE #ignore ipmi ips ignore .* 10\. #ignore imade camera ips ignore .* 172\. www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

  25. まとめ • gluepy: GridProgramming Framework • gluepy • 分散オブジェクト指向 • 並列計算サポート • NAT / firewall 含めた接続性を自動解決 www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy • DEMO programs in package: ./ex/demo • まだまだ開発中です • 要望・コメント・バグレポート承ります www.logos.ic.i.u-tokyo.ac.jp/~kenny/gluepy

More Related