並列環境 (PE) は、ネットワーク環境での並列プラットフォームにおける並列コンピューティングを実現するソフトウェアパッケージです。
この何年もの間にさまざまなシステムが発展を遂げ、さまざまなハードウェアプラットフォームで分散、並列処理技術が実用的なものになってきました。もっとも一般的なメッセージ引き渡し環境には、次の 2 つの例があります。
PVM – Parallel Virtual Machine (Oak Ridge National Laboratories)
MPI – Message Passing Interface (the Message Passing Interface Forum)
両方のツールとも、ハードウェアベンダー提供の実装だけでなく、パブリックドメインのものもあります。
これらのシステムはどれも異なる特徴を持ち、要求される使用条件がそれぞれに異なります。そうしたシステム上で実行中の並列ジョブに対応できるよう、Grid Engine システムには、さまざまなニーズを満たす柔軟で強力なインタフェースが用意されています。
Grid Engine システムには、次のプログラムにより並列ジョブを実行する手段が用意されています。
PVM や MPI などの任意のメッセージ引き渡し環境。詳細については、『PVM User's Guide』および『 MPI User's Guide』を参照してください。
分散メモリー並列ジョブのための、単一キュー内に収まる、または複数のキューおよびマシンに分散された、複数スロット上の共有メモリー並列プログラム。
任意の数のさまざまな並列環境インタフェースを同時並行的に構成することができます。
起動および停止手続きが用意されていれば、並列環境と Grid Engine システムとの間でインタフェースを実装できます。起動手続きと停止手続きは、それぞれ 「並列環境の起動手続き」および 「並列環境の終了」で説明されています。
「QMON Main Control」ウィンドウで「Parallel Environment Configuration」ボタンをクリックします。「Parallel Environment Configuration」ダイアログボックスが表示されます。
現在構成されている並列環境は、「PE List」の下に表示されます。
並列環境の内容を表示するには、並列環境を選択します。選択した並列環境の構成は、「Configuration」の下に表示されます。
並列環境を削除するには、並列環境を選択してから「Delete」をクリックします。
新しい並列環境を追加するには「Add」をクリックし、並列環境を変更するには並列環境を選択してから「Modify」をクリックします。
「Add」または「Modify」をクリックすると、「Add/Modify PE」ダイアログボックスが表示されます。
新しい並列環境を追加する場合、「Name」フィールドにその名前を入力します。並列環境を変更する場合、「Name」フィールドにはその名前が表示されます。
「Slots」ボックスでは、並行して実行中のすべての並列環境ジョブにより占有可能なジョブスロットの合計数を入力します。
「User Lists」には、並列環境にアクセスできるユーザーアクセスリストが表示されます。「Xuser Lists」には、 並列環境にアクセスできないユーザーアクセスリストが表示されます。ユーザーアクセスリストの詳細については、「ユーザーアクセスリストの構成」を参照してください。
リストの内容を変更するには、各リストの右側にあるアイコンをクリックします。「Select Access Lists」ダイアログボックスが表示されます。
「Start Proc Args」フィールドおよび「Stop Proc Args」フィールドはオプションです。これらのフィールドを使用して、並列環境の起動および停止手続きの正確な起動シーケンスを入力します。それぞれ、「並列環境の起動手続き」および 「並列環境の終了」を参照してください。ある種の並列環境にこのような手続きが必要でない場合は、これらのフィールは空のままにできます。
通常、先頭の引数は、起動または停止手続きそのものの名前になります。残りのパラメータは、その手続きに対するコマンド行引数です。
内部実行時情報を手続きに渡すための各種の特殊な識別子 ($ 接頭辞から始まる) が用意されています。使用可能なすべてのパラメータのリストは、 sge_pe(5) のマニュアルページに記載されています。
「Allocation Rule」フィールドでは、並列環境で使用する各マシンに割り当てる並列プロセス数を定義します。正の整数で、適切な各ホストのプロセス数を決定します。特別な分母 $pe_slots を使用すると、ジョブのプロセスの完全な範囲を、シングルホスト (SMP) 上に割り当てることになります。分母 $fill_up および $round_robin を使用すると、各ホストでのプロセスの分配がアンバランスになります。これらの割り当て規則の詳細については、 sge_pe(5) のマニュアルページを参照してください。
「Urgency Slots」フィールドでは、スロット範囲を持つ保留中のジョブが取得するスロット数のアクセスに Grid Engine システムが使用する方法を指定します。想定されたスロット割り当てが意味を持つのは、数値リソースに関するリソース要求ベースの優先順位関係を決定する場合です。スロットの数には、整数値を指定できます。min を指定すると、スロット範囲の最小値を使用します。max を指定すると、スロット範囲の最大値を使用します。avg を指定すると、ジョブの並列環境の範囲要求内で発生するすべての数値の平均を使用します。
「Control Slaves」チェックボックスでは、Grid Engine システムが並列タスクを生成するかどうか、または対応する並列環境が独自のプロセスを作成するかどうかを指定します。Grid Engine システムでは、sge_execd および sge_shepherd を使用して並列タスクを生成します。システムにより正確なアカウンティングとリソース制御が実現されるため、Grid Engine システムによりスレーブタスクを完全に制御することを推奨します。ただし、この機能が使用可能であるのは、Grid Engine システムシステム用に特別にカスタマイズされた並列環境インタフェースのみです。詳細については、「並列環境と Grid Engine ソフトウェアの密統合」を参照してください。
「Job Is First Task」チェックボックスが意味を持つのは、「Control Slaves」が選択されている場合のみです。「Job Is First Task」を選択した場合は、ジョブスクリプト、またはその子プロセスの 1 つが、並列アプリケーションの並列タスクの 1 つとして動作します。たとえば PVM では、通常、ジョブスクリプトを並列アプリケーションの一部にする必要があります。「Job Is First Task」チェックボックスをクリアすると、ジョブスクリプトは並列アプリケーションを開始しますが、参加はしません。たとえば MPI では、mpirun を使用する場合、通常はジョブスクリプトを並列アプリケーションの一部にする必要はありません。
変更を保存するには「OK」をクリックし、ダイアログ ボックスを閉じます。変更を保存せずにダイアログボックスを閉じるには、「Cancel」をクリックします。
「QMON Main Control」ウィンドウで「Parallel Environment Configuration」ボタンをクリックします。「Parallel Environment Configuration」ダイアログボックスが表示されます。詳細については、「QMON を使用した並列環境の構成」を参照してください。
次の例では、発行される並列ジョブを定義しています。ジョブは、4 から 16 個のプロセスとともに、並列環境インタフェース mpi (メッセージ引き渡しインタフェース) を使用するよう要求しています。推奨値は 16 です。
使用可能な並列環境のリストから並列環境を選択するには、「Parallel Environment」フィールドの右側にあるボタンをクリックします。選択ダイアログボックスが表示されます。
「Parallel Environment」フィールドの並列環境名のあとに、ジョブにより開始される並列タスクの数の範囲を追加できます。
以前に説明した並列ジョブの指定に対応する qsub コマンドは、次のようになります。
% qsub -N Flow -p -111 -P devel -a 200012240000.00 -cwd \ -S /bin/tcsh -o flow.out -j y -pe mpi 4-16 \ -v SHARED_MEM=TRUE,MODEL_SIZE=LARGE \ -ac JOB_STEP=preprocessing,PORT=1234 \ -A FLOW -w w -r y -m s,e -q big_q\ -M me@myhost.com,me@other.address \ flow.sh big.data |
この例は、qsub -pe コマンドを使用して、同等の要求を定式化する方法を示しています。qsub(1) のマニュアルページには、-pe オプションの詳細が記載されています。
次の考慮事項に留意し、並列ジョブに適した並列環境インタフェースを選択します。
並列環境インタフェースはさまざまなメッセージ引き渡しシステムを使用でき、またメッセージシステムを使用しない場合もあります。
並列環境インタフェースは、単一のホストにプロセスを割り当てることもあれば、複数のホストに割り当てることもあります。
一部のユーザーに対しては、並列環境へのアクセスを拒否されることもあります。
特定のキューしか利用しない並列環境インタフェースもあります。
いつでも特定の個数のキュースロットしか占有しない並列環境インタフェースもあります。
ご使用の種類の並列ジョブに最適な、使用可能な並列環境インタフェースについては、Grid Engine システムの管理者にお問い合わせください。
並列環境要求とともにリソース要件を指定することができます。リソース要求を指定すると、並列環境インタフェースに適したキューのセットが、要求に合うキューにさらに絞られます。『Sun N1 Grid Engine 6.1 ユーザーズガイド』の「リソース要件の定義」を参照してください。
たとえば、次のコマンドを実行する場合を考えます。
% qsub -pe mpi 1,2,4,8 -l nastran,arch=osf nastran.par |
このジョブに適したキューは、並列環境の構成で並列環境インタフェース mpi に関連付けられたキューになります。適したキューは、qsub -l コマンドで指定されたリソース要求の指定も満たします。
並列環境インタフェースは、構成の自由度が大きい機能です。特に、管理者は、サイトに固有のニーズに合わせて並列環境の起動および停止手続きを構成することができます。詳細については、sge_pe(5) のマニュアルページを参照してください。起動および停止手続きにジョブを発行するユーザーから、情報を渡すには、qsub -v および qsub -V コマンドを使用します。これらの 2 つのオプションは環境変数をエクスポートします。特定の環境変数をエクスポートする必要があるかどうかについて不明な点がある場合は、管理者にお尋ねください。
適切なオプションを使用して、qconf コマンドを入力します。
qconf オプション |
次のオプションを使用できます。
-ap オプション (並列環境の追加) を使用すると、並列環境の構成テンプレートが含まれるエディタが表示されます。このエディタは、デフォルトの vi エディタか、EDITOR 環境変数により定義されたエディタのいずれかです。pe-name で並列環境の名前を指定します。この名前は、テンプレートの対応するフィールドにすでに入力されています。並列環境の構成は、テンプレートを変更してディスクに保存することで行います。変更すべきテンプレートエントリの詳細については、 sge_pe(5) のマニュアルページを参照してください。
-Ap オプション (ファイルからの並列環境の追加) を使用すると、指定したファイル filename が解析され、新しい並列環境の構成が追加されます。
ファイルは、並列環境の構成テンプレートの形式である必要があります。
-dp オプション (並列環境の削除) を使用すると、指定した並列環境が削除されます。
-mp オプション (並列環境の変更) を使用すると、構成テンプレートとして指定した並列環境を含むエディタが表示されます。このエディタは、デフォルトの vi エディタか、EDITOR 環境変数により定義されたエディタのいずれかです。並列環境の変更は、テンプレートを変更してディスクに保存することで行います。変更すべきテンプレートエントリの詳細については、sge_pe(5) のマニュアルページを参照してください。
-Mp オプション (ファイルからの並列環境の変更) を使用すると、指定したファイル filename が解析され、既存の並列環境の構成が変更されます。
ファイルは、並列環境の構成テンプレートの形式である必要があります。
-sp オプション (並列環境の表示) を使用すると、指定した並列環境の構成が標準出力に出力されます。
-spl オプション (並列環境リストの表示) を使用すると、現在構成されているすべての並列環境の名前が表示されます。
並列ジョブを実行するには、キューを並列環境に関連付ける必要があります。queue_conf(5) の pe_list 属性を使用して、適した並列環境を特定してください。次に、QMON ユーティリティーか次の形式の qconf コマンドを使用して、並列環境とキューを関連付けます。
# qconf -mq <queue_name> |
Grid Engine システムは、exec システムコールを使用して起動手続きを呼び出すことによって並列環境を起動します。起動用の実行可能ファイル名とそのファイルに渡すパラメータは、Grid Engine システムの中から設定することができます。
Grid Engine システムの配布ツリーには、PVE 環境用のこのような起動手続きのサンプルが含まれています。起動手続きは、シェルスクリプト 1 つとそのスクリプトによって呼び出される C プログラム 1 つで構成されています。シェルスクリプトは C プログラムを使用して、PVM をクリーンに起動します。そのほかの必要な処理はすべて、シェルスクリプトが行います。
このシェルスクリプトのパスは sge-root/pvm/startpvm.sh です。C プログラムファイルのパスは sge-root /pvm/src/start_pvm.c です。
起動手続きが、C プログラム 1 つだけであってもかまいません。シェルスクリプトを使用することによって、サンプルの起動手続きのカスタマイズが容易になります。
サンプルスクリプトの startpvm.sh には、次の 3 つの引数が必要です。
Grid Engine ソフトウェアによって生成されたホストファイルのパス (PVM が起動されるホスト名を含む)
startpvm.sh 手続きの起動元のホスト
通常は、PVM_ROOT 環境変数に含まれる、PVM ルートディレクトリのパス
これらのパラメータは、「QMON を使用した並列環境の構成」で説明されている方法で、起動スクリプトに渡すことができます。実行中、Grid Engine システムによって並列環境の起動および停止スクリプトに提供されるパラメータは、このほかにもあります。たとえば、必要なホストファイルは Grid Engine システムによって生成されます。そのファイル名は、並列環境の構成で特殊パラメータ名 $pe_hostfile を使用して起動手続きに渡すことができます。使用可能なすべてのパラメータの説明は、 sge_pe(5) のマニュアルページに記載されています。
ホストファイルの形式は次のとおりです。
ファイルの各行は、並列プロセスを実行するキューを表します。
各行の最初のエントリはキュー名を示します。
2 つ目のエントリは、このキューで実行する並列プロセス数を示します。
3 つ目のエントリは、キューを示します。
4 つ目のエントリは、マルチプロセッサマシンの場合に使用するプロセッサ範囲を示します。
このファイル形式は Grid Engine システムにより生成されます。このファイル形式は固定されています。異なるファイル形式を必要とする並列環境は、起動手続き内で形式を変換する必要があります。startpvm.sh ファイルを参照してください。異なるファイル形式を必要とする並列環境の例は PVM です。
Grid Engine システムによって並列環境の起動手続きが実行されると、起動手続きにより並列環境が起動されます。起動手続きは、ゼロの終了ステータスで終了するようにします。起動手続きの終了ステータスがゼロ以外の場合、Grid Engine ソフトウェアはエラーを報告し、並列ジョブを実行しません。
最初は Grid Engine システムを使用せずに、コマンド行から起動手続きをテストする必要があります。こうすることで、手続きを Grid Engine システムの枠組みに組み込んだ場合の、追跡が困難なすべてのエラーを回避できます。
並列ジョブが正常終了するか、qdel などによって異常終了すると、その並列環境を停止する手続きが呼び出されます。この手続きの定義と構文は、起動プログラムに関して説明したものと非常によく似ています。停止手続きは、並列環境の構成で定義することもできます。たとえば、「QMON を使用した並列環境の構成」を参照してください。
停止手続きの目的は、並列環境を停止して、関係するすべてのプロセスを刈り取ることにあります。
停止手続きが並列環境プロセスの後処理に失敗すると、Grid Engine システムが、並列環境の制御下で動作しているプロセスの情報を得られないことがあります。このため、停止手続きはこれらのプロセスの後処理を行えません。当然、Grid Engine ソフトウェアは、システムが起動したジョブスクリプトに直接関係するすべてのプロセスの後処理をします。
Grid Engine システムの配布ツリーには、PVM 並列環境用のサンプル停止手続きも含まれています。このサンプルは sge-root/pvm/stoppvm.sh の下にあり、次の 2 つの引数を取ります。
Grid Engine システムによって生成されたホストファイルのパス
停止手続きの実行元ホスト名
起動手続きと同様に、停止手続きは、実行成功時にゼロの終了ステータス、失敗時にゼロ以外の終了ステータスを返すとみなされます。
最初は Grid Engine システムを使用せずに、コマンド行から停止手続きをテストする必要があります。こうすることで、手続きを Grid Engine システムの枠組みに組み込んだ場合の、追跡が困難なすべてのエラーを回避できます。
「QMON を使用した並列環境の構成」 では、sge_execd および sge_shepherd を使用して並列タスクを作成する方が、独自の並列タスクを作成する並列環境よりメリットが多いと記載されています。これは、UNIX オペレーティングシステムでは、プロセス階層の作成者だけが信頼性の高いリソース制御を行えるためです。並列アプリケーションのための適切なアカウンティング、リソースの利用制限、プロセス制御などの機能は、すべての並列タスクの作成者だけが適用できます。
大部分の並列環境には、こうした機能は実装されていません。このため、Grid Engine システムなどのリソース管理システムと統合するための十分なインタフェースが用意されていません。この問題を克服するために、Grid Engine システムの側で、並列環境と密に統合するための高度な並列環境インタフェースを提供しています。この並列環境インタフェースは、タスクの生成の仕事を並列環境から Grid Engine ソフトウェアに移します。
Grid Engine システムの配布には、PVM のパブリックドメイン版用の例と、Argonne National Laboratories の MPICH MPI 実装用の例の、このような密統合の 2 つの例が用意されています。例は、それぞれディレクトリ sge-root/pvm および sge-root/mpi に含まれています。これらのディレクトリには、使用方法と現在の制限事項を記した README ファイルも含まれています。詳細については、これらの README ファイルを参照してください。
比較のため、sge-root/mpi/sunhpc/loose-integration ディレクトリには、Sun HPC ClusterToolsTM ソフトウェアとの疎統合のサンプルが含まれ、sge-root/mpi ディレクトリには、比較用に疎統合版のインタフェースが含まれています。
並列環境との密統合は高度な作業であり、その並列環境と Grid Engine システムの並列環境インタフェースに関する専門的な知識が必要になることがあります。サポートについては、Sun のサポート担当者にお問い合わせください。