拡張ジョブと高度なジョブは、より複雑なジョブ発行形式です。これらのジョブを発行しようとする前に、プロセスに関する重要な内容説明を理解する必要があります。次の節では、これらのジョブプロセスについて説明します。
「Submit Job」ダイアログボックスの「General」タブでは、拡張ジョブに対して次のパラメータを設定できます。「General」タブは、 図 3–2 に示されています。
Prefix – スクリプト組み込み発行オプションで使用する接頭辞。詳細は、「有効なコメント」を参照してください。
Job Script – 使用されるジョブスクリプト。ファイル選択ボックスを開くには、「Job Script」フィールドの右のアイコンをクリックします。ファイル選択ボックスは、図 3–4 に示されています。
Job Tasks – 配列ジョブを発行するためのタスク ID の範囲。詳細は、「配列ジョブの発行」を参照してください。
Job Name – ジョブの名前。デフォルトは、ジョブスクリプトの選択後に設定されます。
Job Args – ジョブスクリプトの引数。
Priority – ジョブの初期状態での優先順位を設定するカウントボックス。この優先順位は、1 人のユーザーのジョブ間でのジョブの順番です。優先順位によって、同時に 1 人のユーザーの複数のジョブがシステム内に存在する場合に、どのようにしてそのユーザーのジョブから選択を行うかがスケジューラに伝えられます。
ユーザーが自分のジョブの優先順位を設定できるように、管理者はスケジューラ構成の weight_priority パラメータで優先順位を有効にしなければなりません。詳細は、『Sun N1 Grid Engine 6.1 管理ガイド』の第 5 章「ポリシーとスケジューラの管理」を参照してください。
Job Share – その他のジョブに関連するジョブのチケット共有の定義。ジョブの共有は、共有ツリーポリシーと機能ポリシーにだけ影響します。
Start At – ジョブが実行可能とみなされる時点。正しい書式の時間を入力するダイアログボックスを開くには、「Start At」フィールドの右のアイコンをクリックします。
Project – ジョブを下位に持つプロジェクト。「Project」フィールドの右にあるアイコンをクリックして、使用可能なプロジェクトの中からプロジェクトを選択します。
Current Working Directory – 現在の作業ディレクトリでジョブを実行するかどうかを示すフラグ。このフラグは、発行ホストと潜在実行ホスト間の同一のディレクトリ階層に対してのみ使用してください。
Shell – ジョブスクリプトの実行に使用されるコマンドインタプリタ。詳細は、「コマンドインタプリタの選択方法」を参照してください。ジョブのコマンドインタプリタ指定を入力するダイアログボックスを開くには、「Shell」フィールドの右のアイコンをクリックします。
Merge Output – ジョブの標準出力と標準エラー出力を標準出力ストリームにマージするかどうかを示すフラグ。
stdout – 使用される標準出力先。詳細は、「出力のリダイレクト」を参照してください。指定がない場合は、デフォルトが使用されます。代わりの出力先を入力するダイアログボックスを開くには、「stdout」フィールドの右のアイコンをクリックします。
stderr – 使用される標準エラー出力。標準出力と同じようなものです。
stdin – 使用される標準入力ファイル。標準出力先と同じようなものです。
Request Resources – ジョブのリソース要件を定義するには、このボタンをクリックします。ジョブにリソースが必要な場合、ボタンの色が変わります。
Restart depends on Queue – システムクラッシュなどのイベントで中止されたあと、ジョブを再開できるかどうかを定義するには、このボタンをクリックします。このボタンはまた、再開動作をキューによって決めるか、ジョブの要求によって決めるかも制御します。
Notify Job – ジョブが一時停止またはキャンセルされる場合に、SIGUSR1 または SIGUSR2 信号によってジョブを通知するかどうかを示すフラグ。
Hold Job – ユーザーの待機またはジョブ依存関係がジョブに割り当てられることを示すフラグ。ジョブになんらかの種類の待機が割り当てられている間は、ジョブを実行することはできません。詳細は、「ジョブの監視と制御」を参照してください。「Hold Job」フィールドでは、特定の範囲の配列ジョブのタスクだけに待機を限定することができます。配列ジョブについては、「配列ジョブの発行」を参照してください。
Start Job Immediately – 可能であればすぐにジョブを強制的に開始し、不可能な場合は拒否するフラグ。このフラグが選択されている場合、ジョブはキューには入れられません。
Job Reservation – リソースをこのジョブ用に予約する必要があることを示すフラグ。詳細は、『Sun N1 Grid Engine 6.1 管理ガイド』の「リソース予約およびバックフィリング」を参照してください。
「Submit Job」ダイアログボックスの右にあるボタンを使用すると、次のようなさまざまな操作を開始できます。
Submit – 現在指定されているジョブを発行します。
Edit – vi、または EDITOR 環境変数によって定義されたエディタを使用して、選択したスクリプトファイルを X 端末で編集します。
Clear – 指定されたリソース要求など、「Submit Job」ダイアログボックス内のすべての設定を消去します。
Reload – 指定したスクリプトファイルを再読込みし、スクリプト組み込みオプションの構文解析やデフォルト設定の構文解析を行い、これらの設定への中間的な手動による変更を廃棄します。詳細は、「有効なコメント」と 「デフォルト要求ファイル」を参照してください。この操作は、「Clear」操作の後に前のスクリプトファイルを指定するのと同じです。このオプションが有効なのは、スクリプトファイルがすでに選択されている場合だけです。
Save Settings – 現在の設定をファイルに保存します。ファイル選択ボックスを使用して、ファイルを選択します。保存されたファイルは、あとで読み込みをしたり、デフォルト要求として使用したりできます。詳細は、Load Settings と 「デフォルト要求ファイル」を参照してください。
Load Settings – 以前「Save Settings」ボタンで保存した設定を読み込みます。読み込んだ設定は、現在の設定を上書きします。Save Settings を参照してください。
Done – 「Submit Job」ダイアログボックスを閉じます。
図 3–5 に、大部分のパラメータが設定された「Submit Job」ダイアログボックスを示します。
この例で設定されているジョブのパラメータは、次のとおりです。
ジョブは、スクリプトファイル flow.sh を持っています。このファイルは、QMON の作業ディレクトリになければなりません。
ジョブの名前は Flow です。
スクリプトファイルは、1 つの引数 big.data を取ります。
ジョブは、優先順位 3 で開始されます。
ジョブは、2004 年 4 月 22 日の午前 4 時 30 分 44 秒より前には実行できません。
プロジェクト定義は、ジョブがプロジェクト crash の下位にあることを示しています。
ジョブは、発行作業ディレクトリで実行されます。
ジョブは、tcsh コマンドインタプリタを使用します。
標準出力と標準エラー出力は flow.out ファイルにマージされます。このファイルは、現在の作業ディレクトリに作成されます。
コマンド行から 図 3–5 に示されている拡張ジョブ要求を発行するには、次のコマンドを入力します。
% qsub -N Flow -p -111 -P devel -a 200404221630.44 -cwd \ -S /bin/tcsh -o flow.out -j y flow.sh big.data |
「Submit Job」ダイアログボックスの「Advanced」タブでは、次の追加パラメータを定義できます。
Parallel Environment – 使用される並列環境インタフェース
Environment – ジョブの実行前にジョブに対して設定される一連の環境変数。エクスポートする環境変数を定義するためのダイアログボックスを開くには、「Environment」フィールドの右のアイコンをクリックします。
環境変数は QMON の実行環境から得ることができます。また、独自の環境変数を定義することもできます。
Context – ジョブ関連情報の保存または転送に使用できる名前と値のペアのリスト。この情報には、クラスタ内のどこからでもアクセスできます。コンテキスト変数は、コマンド行から qsub、 qrsh、qsh、qlogin、および qalter の -ac、 -dc、および -sc オプションを使用して変更できます。コンテキスト変数の検索は、 qstat -j コマンドで行うことができます。
Checkpoint Object – ジョブのチェックポイントの設定が必要で適切な場合に使用されるチェックポイントの設定環境。詳細は、「ジョブチェックポイント設定の使用」を参照してください。
Account – ジョブと関連付けられるアカウント文字列。アカウント文字列は、ジョブのために維持されるアカウンティングレコードに追加されます。アカウンティングレコードは、あとでアカウンティング分析に使用できます。
Verify Mode – ジョブの一貫性チェックモードを決定する確認フラグ。ジョブ要求の一貫性をチェックするために、Grid Engine システムは空で読み込み解除されたクラスタを想定します。システムは、ジョブを実行できるキューを 1 つ以上見つけようとします。次のようなチェックモードを使用できます。
Skip – 一貫性はチェックされません。
Warning – 不一致は報告されますが、ジョブは受け付けられます。警告モードは、ジョブの発行後にクラスタ構成を変更しなければならない場合に適しています
Error – 不一致が報告されます。不一致がある場合、ジョブは拒否されます。
Just verify – ジョブは発行されません。ジョブがクラスタ内の各ホストとキューに適しているかどうかについての詳しいレポートが生成されます。
Mail – ユーザーに電子メールで通知するイベント。イベントの開始、終了、中止、および一時停止が、現在ジョブに対して定義されています。
Mail To – これらの通知を送信する電子メールアドレスのリスト。メーリングリストを定義するダイアログボックスを開くには、「Mail To」フィールドの右のアイコンをクリックします。
Hard Queue List、Soft Queue List – ジョブの実行の必須選択項目として必要なキュー名のリスト。「Hard Queue List」と「Soft Queue List」は、対応するリソース要件と同様に処理されます。
Master Queue List – 並列ジョブのマスターキューとして実行可能なキュー名のリスト。 並列ジョブはマスターキューで開始されます。ジョブが並列タスクを生成するその他のすべてのキュー は、スレーブキューと呼ばれます。
Job Dependencies – 発行したジョブを開始する前に終了しなければならないジョブの ID のリスト。新たに作成されるジョブは、ジョブの完了によって異なります。
Deadline – 期限付きジョブの開始期限。開始期限は、期限付きジョブが指定期限前に終了されるために最高の優先順位を持つ時点を定義します。開始期限を決定するには、最高の優先順位での期限付きジョブの実行時間を指定の期限から引いて差を求めます。期限を設定するためのダイアログボックスを開くには、「Deadline」フィールドの右のアイコンをクリックします。
一部のユーザーは、期限付きジョブを発行できません。自分が期限付きジョブを発行できるかどうかは、システム管理者にお問い合わせください。期限付きジョブに与えられる最高の優先順位については、クラスタ管理者にお問い合わせください。
図 3–6 に、高度なジョブの発行例を示します。
「拡張ジョブの例」で定義されているジョブは、「QMON による拡張ジョブの発行」のジョブ定義と比較すると、さらに次のような特徴を備えています。
並列環境 mpi を使用する必要があります。4 つ以上のプロセスを作成する必要があり、使用可能な場合、プロセスを 16 個まで使用できます。
ジョブに対して 2 つの環境変数が設定され、エクスポートされます。
2 つのコンテキスト変数が設定されます。
アカウント文字列 FLOW が、ジョブアカウンティングレコードに追加されます。
ジョブの開始と終了直後に、me@myhost.org にメールが送信されます。
ジョブは、できるだけキュー big_q 内で実行するようにします。
コマンド行から図 3–6 に示されている高度なジョブ要求を発行するには、次のコマンドを入力します。
% 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 -m s,e -q big_q\ -M me@myhost.com,me@other.address \ flow.sh big.data |
前のコマンドは、特に同じような要求を頻繁に発行する必要がある場合に、高度なジョブ要求は複雑で扱いにくくなる可能性があることを示しています。スクリプトファイルに qsub オプションを組み込むことによって、またはデフォルト要求ファイルを使用することによって、このようなコマンドを入力するという、面倒でエラーを引き起こしやすい作業を回避できます。詳細は、「有効なコメント」を参照してください。
-binary yes|no オプションで y 引数を指定すると、qrsh を使用してスクリプトラッパーなしで実行可能ジョブを発行できます。詳細は、qsub のマニュアルページを参照してください。
クラスタ管理では、すべての Grid Engine システムユーザーに対してデフォルト要求ファイルを設定できます。一方ユーザーは、ホームディレクトリに保存される個人用デフォルト要求ファイルを作成できます。ユーザーはまた、作業ディレクトリに保存されるアプリケーション固有のデフォルト要求ファイルを作成することもできます。
デフォルト要求ファイルには、デフォルトでは 1 行以上のジョブに適用される qsub オプションが含まれます。グローバルクラスタデフォルト要求ファイルは、sge-root /cell/common/sge_request に保存されます。個人用一般デフォルト要求ファイルは、$HOME/.sge_request に保存されます。アプリケーション固有のデフォルト要求ファイルは、 $cwd/.sge_request に保存されます。
これらのファイルを複数使用できる場合、これらのファイルは次の優先順位で 1 つのデフォルト要求にマージされます。
アプリケーション固有のデフォルト要求ファイル
個人用一般デフォルト要求ファイル
グローバルデフォルト要求ファイル
スクリプト組み込みと qsub コマンド行は、デフォルト要求ファイルより優先されます。よって、スクリプト組み込みはデフォルト要求ファイル設定を無効にします。また、qsub コマンド行オプションは、これらの設定を無効にします。
前の設定を破棄するには、デフォルト要求ファイル、組み込みスクリプトコマンド、または qsub コマンド行で qsub -clear コマンドを実行してください。
次に個人用デフォルト要求ファイルの例を示します。
-A myproject -cwd -M me@myhost.com -m b e -r y -j y -S /bin/ksh |
無効にされない限り、このユーザーのすべてのジョブで次のことが言えます。
アカウント文字列は、myproject です。
ジョブは、現在の作業ディレクトリ内で実行されます。
メールの通知は、ジョブの最初と最後に me@myhost.com に送信されます。
標準出力と標準エラー出力はマージされます。
ksh がコマンドインタプリタとして使用されます。
ここまでの例では、発行オプションはジョブが実行されるホストに対するリソース要件を表していませんでした。Grid Engine システムは、このような場合のジョブはどのホストで実行してもよいとみなします。しかし、実際には、ほとんどのジョブで正常終了のために、実行ホストに関する前提条件が満たす必要があります。この前提条件には、十分な使用可能なメモリー、インストールが必要なソフトウェア、または特定のオペレーティングシステムアーキテクチャーなどがあります。また、クラスタ 管理は通常、クラスタ内のマシンの使用に制限を加えます。たとえば、ジョブが消費できる CPU 時間はしばしば制限されます。
Grid Engine システムでは、クラスタの装置や使用ポリシーの正確な知識を持たなくても、ジョブに適したホストを見つけることができます。ユーザーはジョブの要件を指定し、適切で負荷が少ないホストの検出作業を Grid Engine システムに管理させます。
リソース要件は、「要求可能な属性」で説明されている要求可能な属性によって指定します。 QMON を使用すると、ジョブの要件を指定するのに便利です。「Requested Resources」ダイアログボックスには、現在実行可能な「Available Resource」リストの属性だけが表示されます。「Requested Resources」ダイアログボックスを開くには、「Submit Job」ダイアログボックスの「Request Resources」をクリックします。例については、図 3–7 を参照してください。
属性をダブルクリックすると、その属性はジョブの「Hard Resources」または「Soft Resources」に追加されます。True に設定される BOOLEAN 属性以外の属性に値を入力するためのダイアログボックスが表示されます。詳細は、「Grid Engine システムによるリソースの割り当て方法」を参照してください。
図 3–7 に、有効な permas ライセンスを持ち 750M バイト以上のメモリーを備えた solaris64 ホストを必要とするジョブのリソースプロファイルを示します。この指定を満たすキューが複数見つかった場合は、定義されているソフトリソース要件が考慮されます。ハードとソフト要件を満たすキューが見つからなかった場合は、ハード要件を満たすキューが適切なものとみなされます。
複数のキューが 1 つのジョブに適している場合のみ、スケジューラ構成の queue_sort_method パラメータによってジョブの開始場所が決まります。詳細は、sched_conf (5) のマニュアルページを参照してください。
整数である属性 permas は、グローバルリソース属性の管理者向け拡張属性です。文字列である属性 arch は、ホストリソース属性です。メモリーの属性 h_vmem は、キューリソース属性です。
qsub コマンド行からも、これと同じリソース要件プロファイルを次のように発行できます。
% qsub -l arch=solaris64,h_vmem=750M,permas=1 \ permas.sh |
最初の -l オプションの前の暗黙的な -hard スイッチはスキップされます。
750M バイトを表す 750M は、Grid Engine システムの量を表す構文の例です。メモリー消費が必要な属性に対しては、10 進数の整数、10 進数の浮動小数、8 進数の整数、および 16 進数の整数を指定できます。これらの数には次の乗数を加える必要があります。
k – 値に 1000 を掛ける。
K – 値に 1024 を掛ける。
m – 値に 1000 × 1000 を掛ける。
M – 値に 1024 × 1024 を掛ける。
8 進数の定数は、最初が 0 で次が 0 から 7 の数字でのみ指定されます。16 進数を指定する場合は、数の前に 0x を付けてください。また、0 から 9、a から f、A から F を使用します。乗数が使用されない場合、値はバイトとしてカウントするとみなされます。10 進数の浮動小数を使用する場合、結果は整数値に切り上げられます。
時間制限を課す属性の時間値は、時間単位、分単位、秒単位、またはこれらを組み合わせて指定することができます。時間、分、秒は、コロンで区切られた 10 進数で指定されます。3:5:11 という時間は 11111 秒に変換されます。時間、分または秒の指定が 0 の場合、コロンが残っていれば指定をしなくても構いません。よって、:5: という値は 5 分と解釈されます。 図 3–7 に示されている「Requested Resources」ダイアログボックスの形式は拡張形式で、QMON 内でのみ有効です。
前の節で示されているように、Grid Engine ソフトウェアがどのようにリソース要求を処理し、割り当てているのかを理解することは大切です。Grid Engine ソフトウェアのリソース割り当てアルゴリズムの概略は、次のようになります。
すべてのデフォルト要求ファイルを読み込み、構文解析します。詳細は、「デフォルト要求ファイル」を参照してください。
組み込みオプションのスクリプトファイルを処理します。詳細は、「有効なコメント」を参照してください。
ジョブの発行時には、スクリプトファイル内の位置に関わらず、すべてのスクリプト組み込みオプションを読み取ります。
コマンド行からすべての要求を読み取り、構文解析します。
すべての qsub 要求が収集されるとすぐに、ハード要件とソフト要求が別々に処理されます。まず、ハード要求が処理されます。要求は、次の優先順位で評価されます。
スクリプトまたはデフォルト要求ファイルの左から右
スクリプトまたはデフォルト要求ファイルの上から下
コマンド行の左から右
言い換えると、コマンド行を使用して組み込みフラグを無効にすることができます。
ハードとして必要なリソースが割り当てられます。要求が有効でない場合、発行は拒否されます。1 つ以上の要求を発行時に満足できない場合、ジョブはスプールされ、後で実行するように再スケジューリングされます。たとえば、要求されたキューがビジーの場合、要求は満たされません。すべてのハード要求が満たされると、要求は割り当てられジョブを実行できます。
ソフトとして必要なリソースがチェックされます。これらの要求の一部またはすべてを満足できない場合もジョブは実行できます。ハード要求を満たす複数のキューがソフトリソースリストの一部を提供している場合、Grid Engine ソフトウェアはもっとも多くのソフト要求を提供しているキューを選択します。
ジョブが開始され、割り当てられたリソースが使用されます。
引数リストオプション、組み込みオプション、ハードおよびソフト要求が互いにどのような影響し合うのかを実際に試すとよいでしょう。hostname または date などの UNIX コマンドを実行する小さなテストスクリプトファイルで実験することができます。
大部分の場合、複雑なタスクを作成するのに一番便利なのは、タスクをサブタスクに分割することです。これらの場合、依存サブタスクを開始する前にその他のサブタスクの完了を待つ必要があります。たとえば、依存タスクが読み取って処理する出力ファイルが前のタスクによって作成されることなどがあります。
Grid Engine システムは、ジョブ依存関係機能で相互に依存するタスクをサポートしています。ユーザーは、1 つまたは複数のほかのジョブの完了に依存するジョブを設定できます。この機能は、qsub -hold_jid コマンドによって実行されます。発行ジョブが依存するジョブのリストを指定することもできます。ジョブのリストには、配列ジョブのサブセットも含まれます。依存関係リスト内のすべてのジョブが終了しなければ、発行ジョブは実行できません。
Grid Engine システムの 配列ジョブ機能の理想的な適用は、ジョブスクリプト内に含まれる操作のセットをパラメータ化して繰り返し実行することです。この典型例は、レンダリングなどで、デジタルコンテンツ作成業界でよくみられます。アニメーションのコンピュータ処理はフレームに分割されます。同じレンダリング処理が、各フレームに対して別々に行われます。
配列ジョブ機能によって、このような適用での発行、監視、および制御が便利になります。Grid Engine システムは、1 つのジョブに結合された別々のタスクの配列としてコンピュータ処理を行い、配列ジョブを効率的に実行します。配列ジョブのタスクは、配列インデックス番号によって参照されます。すべてのタスクのインデックスは、配列ジョブ全体のインデックス範囲に及びます。インデックス範囲は、配列ジョブの発行時に qsub コマンドによって定義されます。
ユーザーは、 配列ジョブの監視および制御を行うことができます。たとえば、全体として、またはそれぞれのタスクやタスクのサブセットごとに、配列ジョブを一時停止、再開、取り消しすることができます。タスクを参照するために、対応するインデックス番号が ジョブ ID の前に付けられています。タスクは、一般的なジョブとほぼ同じように実行されます。タスクは、環境変数 SGE_TASK_ID を使用して、独自のタスク インデックス番号を検索し、そのこのタスク 識別子に対する入力データセットにアクセスすることができます。
次の情報も考慮しながら、「QMON により単純なジョブを発行する」の手順に従ってください。
QMON による配列ジョブの発行は、 「QMON により単純なジョブを発行する」に説明されている単純なジョブの発行方法とほぼ同じです。 唯一の違いは、 図 3–5 の「Job Tasks」タスク入力ウィンドウにタスク範囲指定があることです。タスク範囲の指定では、qsub -t コマンドと同じ構文を使用します。配列インデックスの構文については、 qsub(1) のマニュアルページを参照してください。
一般的なジョブの監視と制御および特定の配列ジョブについては、「ジョブの監視と制御」と 「コマンド行からのジョブの監視と制御」を参照してください。qstat(1)、qhold(1)、 qrls(1)、qmod(1)、および qdel(1) のマニュアルページを参照してください。
配列ジョブは、通常のジョブで使用可能な Grid Engine システムの全機能にフルアクセスできます。特に、配列ジョブは同時に並列ジョブとなることもできます。配列ジョブも、その他のジョブと相互依存関係を持つことができます。
配列タスクは、その他のジョブまたはその他の配列タスクとの相互依存関係を持つことはできません。
コマンド行から配列ジョブを発行するには、適切な引数を指定して qsub コマンドを入力します。
次に、配列ジョブの発行方法の例を示します。
% qsub -l h_cpu=0:45:0 -t 2-10:2 render.sh data.in |
-t オプションは、タスクインデックスの範囲を指定します。この場合、2-10:2 は、2 が最小インデックス番号で、10 が最大インデックス番号という範囲を指定します。 :2 という指定により、1 つ飛ばしのインデックスだけが指定されます。よって、配列ジョブはタスクインデックス 2、4、6、8、10 の 5 つのタスクによって構成されます。各タスクは、-l オプションで 45 分のハード CPU 時間制限を要求します。タスクが Grid Engine システムによって振り分けられ、開始されると、各タスクはジョブスクリプト render.sh を実行します。タスクは SGE_TASK_ID を使用してインデックス番号を探し、その番号を使用してデータファイル data.in 内の入力データレコードを見つけることができます。