OmniRPC:グリッド環境での並列プログラミングのためのGrid RPC システム
6
0
0
全文
(2) Local-area network Multi-threaded client in OpenMP rsh& TCP/IP OmniRPC. 2. OmniRPC システムの概要と設計 remote nodes in a cluster node node. node. node. remote nodes Globus toolkit node in a grid environment wide-area node node network. 図1. OmniRPC によるプログラミング. り当てを意識することなく、このような計算を行える ことが望ましい。そのための遠隔計算機へのインター フェースとして、遠隔手続き呼び出し (RPC: Remote Procedure Call) を用いて、遠隔の計算資源でのプロ グラムの実行を可能にする OmniRPC システムを試 作実装した。 グリッドの計算資源を RPC を用いて利用する Grid RPC は、グリッドでのプログラミングインタフェー スとしてこれまでもいくつか提案されている。広域 ネットワーク向けの RPC として提案された Ninf1),4) の Globus 向けの実装である Ninf-G5) は、その Grid RPC の一つである。OmniRPC も、基本的な API と して Ninf システムを踏襲しており、Ninf システムか ら派生したグリッド 向け RPC である。この他にも、 netSolve や従来 LAN 内の RPC であった CORBA を グリッド 環境上で利用する試みも行われている。 我々の想定する典型的なグリッド 環境は、複数の計 算機クラスタが計算資源としてグリッド 上に接続され ており、これらのクラスタを相互に利用する環境であ る。クラスタの各計算機はローカルなネットワークで 構成されている場合があり、外部のネットワークから のアクセスをサポートする機能を提供する必要があ る。また、並列プログラムの開発は個々のクラスタで 行うことができるようにし 、大きなプログラムの変更 なしに大規模な計算資源を利用できるグリッド 環境に 移行できることが望ましい。そのため、図 1に示すよ うに、OmniRPC はローカルなクラスタから、グリッ ド 環境まで、同様なプログラミングができる環境を提 供する。OmniRPC では、RPC システムがスレッド セーフになっており、並列プログラミングには並列プ ログラミングインタフェースである OpenMP を用い ることができるため、指示文による並列記述を可能に し 、プログラマの負担を軽減することができる。 次章において、OmniRPC システムの設計の概要を 述べ、3 章において、実装について述べる。4 章にて OpenMP による OmniRPC を用いた並列プログラミ ングの例について述べ、簡単な実行例を示す。5 章に 課題を挙げる。. 2.1 設 計 目 標 OmniRPC の設計目標は、以下のものである。 • サポートするするプログラミングモデルとして、 master-slave 型の並列プログラミングをサポート する。 • 簡便な並列プログラミング環境を提供する。非同 期呼出しによる並列プログラミングの他に、RPC をスレッドセーフにすることにより、OpenMP の 指示文による並列プログラミングをサポートし 、 ベースとなる既存の逐次プログラムをなるべく書 き換えずに並列化できるようにする。 • 遠隔の計算資源として、クラスタを想定する。特 に、クラスタ内のネットワークとしてプライベー トなアドレスを用いて構成されたクラスタについ てもサポートする。 • 大規模なプログラムでは 100 ホストから 1000 ホ スト規模までの計算資源をサポートできるように する。 • 各計算資源の管理ポリシーを考慮したジョブ起動 をサポートする。例えば 、クラスタでは PBS な どのバッチシステムで運用されていることが多い が、このような場合は指定された起動方法で遠隔 のプログラムを起動する。 • 簡便な環境設定。あらかじめ特定のサーバなどの プログラムの設定をしなくても、利用できるよう にする。 • グリッド 環境においては、通信の確立に認証を行 うなど 、セキュリティについて配慮できるように する。遠隔の計算機で実行されるプログラムにつ いては個々のユーザのアカウントで実行されるよ うにする。 • 複数のグリッド 環境のサポート。グリッド 環境と して 、Globus で構成されたグ リッド 環境の他、 ssh を用いた遠隔計算機の利用環境構築も可能に する。また、プログラムの開発など 、ローカルな クラスタにおいても rsh による環境を構築できる ようにする。 • 動的な環境への対応。実行中に利用可能なホスト の変更に対応できるようにする。また、実行中の ホストの障害などに対応できるようにする。 2.2 OmniRPC の概要 OmniRPC は 、ローカルホストで実行されるプロ グラムにおいて、指定された手続き (procedure) をリ モートホスト上で実行する機構を提供する。 リモートホストで実行される、その手続きを含む プログラムをリモート実行プログラム (remote executable) と呼ぶ。リモート実行プログラムを作成する ためには、まず、Ninf IDL(interface description lan-. 2 −38−.
(3) guage) を用いて、遠隔呼出をする関数のインタフェー スを定義する。これをリモートプログラム生成プログ ラム omrpc-gen を用いて、ローカルホストと通信す るためのスタブルーチンを生成し 、呼び出す関数や必 要なライブラリとリンクすることによって、リモート 実行プログラムを作る。 例えば 、行列積のルーチンのインタフェースは次の 様に定義できる。 Module MatrixMult; ... Define dmmul(long mode_in int n, mode_in double A[n][n], mode_in double B[n][n], mode_out double C[n][n]) "... description ..." Calls "C" dmmul(n,A,B,C); mode_in と mode_out は 、入力パラメータであるか 、 出力パラメータであるかを指定する。配列の引数に対 しては入力パラメータを使ってサイズを指定すること ができる。 リモート実行プログラムは、リモートホスト上に登 録することによって、モジュール内の関数をローカル ホスト上のプログラムから呼び出すことができるよう になる。例えば 、上の行列積のルーチンに対しては、 #define N 100 double A[N][N],B[N][N],C[N][N] ... OmniRpcCall("dmul",N,A,B,C); OmniRPC の最も基本的な API である OmniRpcCall は、その名前 dmul から、その関数が登録されている リモート実行プログラムがあるリモートホストを探し、 遠隔呼び出しを行う。 一つのリモート実行プログラムは複数の関数を含 むことができる。このため、インタフェースを記述す る IDL 記述において、複数の関数のインタフェース をまとめてモジュールとして定義する。一つのリモー ト実行プログラムに含まれる関数群をリモート実行モ ジュールと呼ぶ。 2.3 再初期化可能リモート 実行モジュールと実行 モジュールの persistency OmniRpcCall では遠隔手続呼び出しに関して、基 本的に、persistency を保証しない。すなわち、リモー ト実行プログラムは一つの関数呼び出しが終ると終了 することがある。これは、関数呼び出しを動的に任意 のリモートホストに割り当てることができるようにす るためである。 しかし 、複数の関数が一つのリモート実行プログラ ムに定義されているため、一つの関数でセットした変 数を他の関数で利用するといった、persistency を利用 したプログラミングが可能である。例えば 、パラメー タ検索のようなプログラムでも、基本的なデータをあ. らかじめリモート実行モジュールに送りセットしてお き、実際のパラメータ検索は必要なパラメータのみを 変えて実行することによって、不必要な通信を省くこ とができる。しかし 、このような persistency を利用 したプログラムではリモート実行プログラムの実行状 態をユーザが管理しなくてはならなくなり、負荷分散 をする場合にプログラムの簡便性を失うことなる。 このため、OmniRPC ではリモート実行モジュール の起動時に実行される初期化手続きを定義することに よって、実行モジュールを起動時に自動的に初期化す る機構を提供している。このような実行モジュールを 再初期化可能モジュールと呼ぶ。他のホストに手続呼 び出しが割り当てられた時には、再度実行モジュール を起動し 、自動的に初期化を行う。 例えば、上の行列積の例において、行列 B が初期化 された以降、変化しないという場合には、 Module MatrixMult; ... Initialize(long int n, double B[n][n]){ storeB(n,B); /* store B somewhere */ } Define dmmulB(long mode_in int n, mode_in double A[n][n], mode_out double C[n][n]) Calls "C" dmmulB(n,A,C); と定義しておき、呼び出し側のプログラムでは、以下 のようにモジュールに対し 、初期化の指定を行う。 #define N 100 double A[N][N],B[N][N],C[N][N] ... OmniRpcInitModule("MatrixMult",n,B); .... OmniRpcCall("dmulB",N,A,C); OmniRpcInitModule は初期化のデータを登録するの みで、OmniRpcCall が実行された時点で、実行され るモジュールが提供されているリモートホストを探し、 リモート実行プログラム起動時に初期化を行う。負荷 の状況や障害によって、リモート実行プログラムの実 行を終了しても、他のリモートホストで初期化し 、再 実行できる。 このような再初期化可能リモート実行モジュールを 設けることによって、基本的なデータをリモートホス トにあらかじめ転送しておき、関数ごとに必要なパラ メータを指定するといったプログラミングができるよ うになる。 この他に、リモート実行モジュールの persistency をユーザが管理する API も提供している。この場合、 リモートホストを指定し 、モジュールを起動し 、OmniRpcHandle という構造体を得る。この handle を用 いて、特定の実行中のリモート実行モジュールに対し、 遠隔関数呼び出しを行うことができる。. 3 −39−.
(4) 2.4 OmniRPC の環境設定 OmniRPC の 環 境 設 定 を 行 う た め の デ ィレ ク ト リを 、レ ジ スト リと 呼 ぶ 。デ フォールト で は 、 $(HOME)/.omrpc_registry が用いられる。 クライアントプログラムを実行するホストにおいて は、どのホストをリモーホストとして用いるかをレジ ストリの hostfile で指定する。この hostfile では、以 下の項目を指定する。 • リモートホストのホスト名 • 実行できるジョブの最大数 • リモートホストのレジストリのパス • リモートホストの remote shell のタイプ (rsh, ssh, globus のいずれか ) • リモートホストのジョブ起動のスケジューラ。具 体的には 、pbs や Sun Grid Engine などのロー カルスケジューラの名前。 • リモートホストとの通信を多重化するか。 リモートホストが、1台の計算機の場合には単に fork をつかってジョブを起動することになる。それに対し、 リモートホストがクラスタである場合にはホストの名 前としてクラスタホストを登録し 、ジョブ起動の種類 を指定する必要がある。プライベートアドレスで構成 されたクラスタの場合は、通信の多重化の指定を行い、 クラスタホストとを経由して通信を行うようにしなく てはならない。 リモートホストのレジストリには、そのリモートホ スト上で登録されたリモート実行プログラムと実行モ ジュールで提供されている手続きに関するデータベー スが格納されており、omrpc-register コマンドを用い て、登録しておく。 2.5 OmniRPC の API 基本的な API として、Ninf システム (Ninf v1) の API を踏襲している。以下に、主な API を挙げる。 • int OmniRpcCall(char *proc_name,...) proc_name で指定された手続きを、この手続きが 実行できる適当なリモートホストを選択して、実 行する。 • OmniRpcRequest *OmniRpcCallAsync( char *proc_name,...) 非同期の呼び出しを行う。リクエストに対する handle を返す。 • int OmniRpcWait(OmniRpcRequest *req) リクエストに対応する手続き呼び出しが終了する まで、待つ。 • int OmniRpcWaitAll() これまで、発行された非同期呼び出しを待つ。 • int OmniRpcWaitAnd(int n_req, OmniRpcRequest req[]) n 個のリクエストの handle への配列を与え、全 てのリクエストが終了したするまで待つ。 • int OmniRpcWaitOr(int n_req,. • •. •. •. • •. OmniRpcRequest req[],int *done_idx) n 個のリクエストの handle への配列を与え、どれ かのリクエストが終了した時に、終了したリクエ ストに対応するインデックスをdone_idx に返す。 int OmniRpcProbe(OmniRpcRequest *req) リクエストが終了したかど うかを確かめる。 OmniRpcHandle *OmniRpcCreateHandle( char *hostname,char *module) 指定されたモジュールをリモートホストで起動し、 それへの handle を得る。 OmniRpcCallbyHandle(OmniRpcHandle *handle,— char *proc_name,...) 起動しているリモート実行モジュールに対し 、手 続き呼び出しを行う。 OmniRpcDestroyHandle(OmniRpcHandle *handle) 起動しているリモート実行モジュールを終了させ、 handle を開放する。 OmniRpcInit(int *argc,char **argv[]) ライブラリの初期化を行う。 OmniRpcFinalize() ライブラリの finalize を行う。. 3. OmniRPC の実装 3.1 omrpc-mgr: リモート実行プログラムの起動 リモートホストでのリモート実行プログラムを起動 するために、ライブラリ初期化時に hostfile に登録さ れているリモートホストに対し 、omrpc-mgr を起動 してする。omrpc-mgr の起動は、rsh や ssh 、globus では GRAM を用いて行われる。omrpc-mgr は 、ク ライアントプログラムの実行ごとに起動され、以下の 機能を提供している。 • リモートホストごとに設定されている起動方法に したがって、リモート実行プログラムを起動する。 • 実行したリモート実行プログラムのプロセスの 管理。 • レジストリの情報などの、リモートホストの情報 の取得。 • 通信の多重化による、ローカルアドレスクラスタ との通信の中継。 omrpc-mgr でリモート実行プログラムを起動する理 由の一つは、rsh などでは短時間に多数のジョブの起 動が行われるとセキュリティ管理上、サービスが拒否 されて、起動できなくなってしまうからである。また、 globus 環境ではリモート実行プログラムの起動は直 接 GRAM を用いて行うことができるが、GRAM で はリクエストごとに認証を行うために非常に時間がか かってしまうことがある。そのため、どの環境におい ても、omrpc-mgr を使うことで実装を統一した。 なお、omrpc-mgr や個々のリモート実行プログラ ムとの通信は TCP/IP を用いているが、コネクション. 4 −40−.
(5) に関しては、クライアントプログラムにおいて、ロー カルホスト上の空きポートを取得し 、リモートのプロ グラム起動時にそのポートを指定することによって、 コネクションを行っている。あらかじめ、固定のポー トを必要しないため、固定ポートでのサービスにあり がちなセキュリティの問題を避けることができる。ま た、全て、ユーザの設定で済むために、インストール、 環境設定が容易になる。 3.2 コネクションの維持とスケジューリング omrpc-mgr を起動した後、クライアントプログラム は omrpc-mgr を用いて、それぞれのリモートホスト で登録されているリモート実行モジュールの情報を収 集する。OmniRpcCall で、手続呼び出しが行われる と、指定された手続があるリモートホストを検索し 、 そのホストに対して、omrpc-mgr を使って、リモー ト実行プログラムを起動する。起動されたリモート実 行プログラムに対しての手続き呼び出しは、Ninf と 同様、IDL に記述されたインタフェースの情報を実行 時に取得することによって、リモートプログラムの引 数データの送受信を行う。初期化が必要なリモート実 行モジュールに対しては、起動時に他の呼び出しと同 様の手順を使って、初期化が行われる。 一度起動されたリモート実行モジュールは、次の呼 び出しに備えて、コネクションが維持され、待機中に なる。次に、同じリモート実行モジュールの手続呼び出 しがあった場合には、待機中のリモート実行モジュー ルに対し、呼び出しが行われる。これによって、リモー ト実行プログラムの起動の手間を省くことができる。 リモート実行プログラムは必要に応じて、hostfile で指定されたホスト毎の最大のジョブ数まで起動され る。そして、待機中になったリモート実行プログラム に対して、順次、手続呼び出しが行われる。 リモート実行プログラムが終了するのは以下の場合 である。 • ホスト毎のリモート実行プログラムのジョブの数 が上限に達しており、手続呼び出しを行う手続が どの現在実行中のリモート実行プログラムにない 場合 (つまり、別のモジュール)。この場合、適当 な待機中のリモート実行プログラムを終了させ、 そこに呼び出しを行おうとしているリモート実行 プログラムを起動する。 • 強制的、あるいは障害で、リモート実行プログラ ムが停止した場合。例えば、長時間待機中のリモー ト実行プログラムは終了する場合も含まれる。 • クライアントプログラム終了時。 3.3 omrpc-mgr による通信の多重化 omrpc-mgr により、クライアントプログラムと複 数のリモート実行プログラムとの通信を多重化し 、一 つのコネクションで行うことができる。これにより、 次の利点が得られる: • リモートホストがクラスタであり、クラスタが. ローカルアドレスで構成されたネットワークの場 合、この機能を使って、omrpc-mgr が各クラス タノードで実行されるリモート実行プログラムと の通信を中継する。 • 1000 台規模のリモートホストを用いる場合には、 クライアントプログラムでは通信に対するファイ ルティスクプリプタが不足してしまう。この場合 には、数十のホストごとにリモートホストを作り、 ここに omrpc-mgr を起動し 、中継させることに よって、クライアントプログラムへの直接コネク ションされる数を削減させることができる。 3.4 ssh による port forwarding の利用 グリッド 環境として、globus が利用されることが多 いが、今だにインストール管理の繁雑さから利用され ていない場合が多い。OmniRPC では、最も一般的に 使われているリモートシェルである ssh(secure shell) を用いて、リモート手続呼び出しができるようにした。 ssh 環境では、ssh を用いて、omrpc-mgr をリモート ホストで起動する。ssh が用いられている環境では通 常、ポートが制限されていることが普通である。その ため、omrpc-mgr とクライアントプログラムの通信 は、ssh の port forwarding の機能を用いて行う。ま た、omrpc-mgr が起動するリモート実行プログラム との通信も、omrpc-mgr で多重化することによって、 omrpc-mgr が中継することになる。なお、ssh 環境で は、ssh-agent による自動認証が必要となる。. 4. OmniRPC を用いた並列プログラミング OmniRPC による並列プログラミングには、非同期 呼び出しを用いることもできるが、ここでは OmniRPC の一つの特徴である OpenMP による並列プログ ラミングについて述べる。 4.1 OpenMP による並列プログラム OmniRPC は、スレッドセーフに実装されているた め、クライアントのプログラムに OpenMP を用いて 並列プログラミングすることができる。本来、OpenMP は共有メモリの並列マシンにおいて並列プログラ ミングをするための API であるが、ここではマルチ スレッドのプログラミング環境として用いる。 Omni OpenMP コン パ イラ2) では 、linux では pthread を用いて、- omniconfg=mutex オプションを 付けることによって、pthread の同期操作を mutex で 行い、オペレーティングシステム下でスケジューリン グさせることができる。ローカルホストが単一 CPU のマシンであっても、複数のスレッドで実行するため に、それぞれのスレッドからのリモートマシンへの関 数実行要求はスレッドごとに並列に行われることにな る。次に、簡単な例を示す。 OmniRpcInit(...); /* initialize RPC */ ..... 5 −41−.
(6) #pragma omp parallel for for(i = 0; i < N; i++) OmniRpcCall("work",i,...); この例では、リモート関数 work が、違う i について、 スレッド 数分だけ遠隔手続き呼び出しが並列に実行さ れる。 Omni OpenMP システムの実行環境として、リモー トマシンの数分だけのスレッドを指定しておくことに よって、すべてのリモートマシンで並列に実行させる ことができる。この他にも、OpenMP の section 指示 構文などを用いて、タスク並列の記述を用いることが できる。 4.2 プログラムの実行例 プログラム例として、0-1 ナップサック問題を取り上 げる。この問題はいわゆる探索問題の一つで、組み合 わせをノードとする木を探索する問題になる。OpenMP を用いて解く方法の一つはまず、最初に幅優先で 検索を行い、部分問題を作り、その一つ一つの部分問 題を別々のスレッドで、深さ優先で最適値を計算すれ ばよい。この検索には分枝限定法が使えるために、並 列に行う深さ優先の検索の実行時間は一定ではない。 以下に、プログラムの主要な部分を示す。 main(int argc,char *argv[]){ OmniRpcInit(&argc,&argv); ... r = knap_bfs(Cap,breadth); #pragma omp parallel for private(rr) for(k=0;k<breadth;k++){ OmniRpcCall("knap_dfs", N,W,P, states[k].i,states[k].cp,states[k].M,&GLow,&rr); #pragma omp critical { if(rr > r) r = rr; } } ... OmniRpcFinalize(); }. knap_bfs で幅優先で部分問題を生成し 、深さ優先 検索knap_dfs を RPC で実行している。 最初に幅優先で見付ける部分問題を 1000,4000,8000 にした時の実行時間を表 1に示す。実験環境の各ホス トは 、ADM AthonMP processor 1800+ (1.5GHz) の dual CPU で 、100BaseT ethernet で接続されて いる。問題データは 、45 個の item をほとんど 同じ 価値 (0-1 問題) でランダムに生成したものある。な お、OmniRPC で 、4 ホスト、8 ホスト使用時には 、 OpenMP のスレッド 数をそれぞれ 10,20 に設定した。 この問題では、それぞれの部分問題の深さ優先の探 索が、1ms 以下から、4 秒とバラツキが大きく、そのた めに、8 ホスト (16CPU) でも、13 倍程度になってい ると思われる。部分問題の数を多くすると、問題は細 分化されて負荷分散がうまくいく可能性が増えるが、 RPC のオーバーヘッドは増えることになる。 本稿ではローカルな環境での評価に留まったが、広. No. of hosts. seq. OpenMP 1 host. OmniRPC 4 hosts. OmniRPC 8 hosts. 1000 345.28 189.56 67.143 47.16 4000 345.36 175.12 46.10 25.08 8000 345.16 175.29 44.73 23.71 表 1 ナップサック問題の実行時間 (dual Althon MP 1.5GHz クラスタ、実行時間は秒単位). 域ネットワーク環境での評価については 、評価中で ある。. 5. お わ り に 本稿では、グリッド 環境での並列プログラミングの ための Grid RPC システム OmniRPC の概要と実装 について述べた。本稿では設計と実装、簡単な評価に ついて述べたが、これから広域ネットワーク環境での 評価を行い、実際のアプリケーションに用いて、改良 を行っていく予定である。 これから課題として、実行状況の確認を行うための ツールとデバック環境がある。また、リモートホスト での実行プログラムの登録などの設定を手動で行って いるが 、これについてもホスト数が多くなるにした がって、適当な支援ツールが必要となる。 設計目標の一つに動的な環境への対応や故障ホス トの検出処置があるが 、これについても課題として 残されている。特に、大規模なプログラムの場合、長 時間実行されることが想定されるため、リモートホス トの追加、削除など設定変更は必要になると思われる。 謝辞:本研究を遂行するにあたり、日頃議論頂く Ninf プ ロジェクトメンバー諸氏に感謝いたします。本研究の一部は、 科学研究費補助金特定領域研究 (2) 課題番号 14019011「計 算物理学分野の Grid アプリケーションと並列プログラミン グシステムの研究」およ JST-ACT「創薬プラットフォーム のためのグリッド 環境の開発」による。. 参 考 文 献 1) Ninf Project. http://ninf.apgrid.org/. 2) Omni OpenMP Compiler Project. http://www.hpcc.jp/Omni. 3) I. Foster and C. Kesselman. Globus: A metacomputing infrastructure toolkit. In Proc. of Workshop on Environments and Tools. SIAM, 1996. http://www.globus.org/. 4) M.Sato, H.NakadaS. Sekiguchi, , S.Matsuoka, U. Nagashima, and H. Takagi. Ninf: A Network based Information Library for Global WorldWide Computing Infrastructure. Proc. of HPCN’97 (LNCS 1225), pages 491–502, 1997. 5) 田中, 中田, 平野, 佐藤, 関口. Globus による Grid RPC システムの実装と評価. In 情報処理学会研 究会報告 HPC87, pages 165–170, 2001.. 6 −42−.
(7)
関連したドキュメント
基本波を用いる近似はピクセル単位の時間放射能曲線に対しては用いることができる
2021] .さらに対応するプログラミング言語も作
本節では本研究で実際にスレッドのトレースを行うた めに用いた Linux ftrace 及び ftrace を利用する Android Systrace について説明する.. 2.1
0.1uF のポリプロピレン・コンデンサと 10uF を並列に配置した 100M
AMS (代替管理システム): AMS を搭載した船舶は規則に適合しているため延長は 認められない。 AMS は船舶の適合期日から 5 年間使用することができる。
備考 1.「処方」欄には、薬名、分量、用法及び用量を記載すること。
○事業者 今回のアセスの図書の中で、現況並みに風環境を抑えるということを目標に、ま ずは、 この 80 番の青山の、国道 246 号沿いの風環境を
洋上環境でのこの種の故障がより頻繁に発生するため、さらに悪化する。このため、軽いメンテ