ジョブ投入システム
ジョブ投入システムとは
ジョブ投入システムとは、多くのユーザが同じ計算サーバ(計算をメインとするコンピュータ)を共有し、メモリやCPUなどの
リソース(計算資源)を公平に利用するためのシステムです。
スーパーコンピュータシステムでは、ジョブ投入システムとして代表的なもののひとつである
PBS(Portable Batch System)を導入しています。
ユーザのジョブを"qsub"というコマンドを使って計算サーバへ投入されると、PBSはジョブを一旦保留します。
リソースが空いている場合にはすぐにジョブが実行されますが、多くのユーザがジョブを投入していることで計算サーバが
混み合っている場合、あるいはすでにユーザが多くのジョブを実行していることで、ユーザごとに割り当てられたリソースを
使い切ってしまった場合などは、他のジョブが終了するまで保留し続けることになります。
このような処理(バッチ処理と呼びます)を行うことで、一度に大量のジョブが実行されることを防ぐとともに、
多くのユーザが公平に共有リソースを利用することが可能になります。
以下では、特に断らない限り、バッチ処理によって実行されるジョブ(バッチジョブ)を単にジョブと呼びます。
また、バッチジョブではないジョブをインタラクティブジョブと呼びます。
バッチジョブの制限値
バッチジョブは利用できるコア数・メモリ容量・演算時間により、複数のキューと呼ばれるクラスに分類されており、
ジョブが必要とする計算リソースに応じて使い分けます。
バッチキュー
新システムにて利用可能なバッチキューは以下の通りです。
なお、運用状況により、以下の制限値は今後変更される場合があります。
キュー名 |
SMALL |
APC |
APG |
SDF |
計算サーバ |
クラスタ |
クラスタ |
クラスタ |
大規模メモリ |
キューの 実行順位 |
70 |
50 |
80 |
90 |
ジョブあたりの 最大コア数 (デフォルト) |
12 (1) |
|
64 (1) |
144 (18) |
ジョブあたりの 最大メモリ (デフォルト) |
48 GB (4 GB) |
|
980 GB (4 GB) |
12 TB (768 GB) |
ジョブあたりの 最大経過時間 (デフォルト) |
12 h (6 h) |
制限なし (120 days) |
制限なし (120 days) |
制限なし (120 days) |
ジョブあたりの 最大GPU数 |
- |
- |
2 |
- |
ユーザあたりの 最大ジョブ数 (ソフトリミット) |
- |
- |
- |
8 (4) |
ユーザあたりの 最大使用コア数 (ソフトリミット) |
96 |
- |
- |
288 (144) |
ジョブの特徴 |
小規模 |
中~大規模 |
GPU |
大規模メモリ |
(ユーザあたり)同時実行ジョブの合計コア数 (カッコ内はソフトリミット) |
500 (300)
|
(ユーザあたり)同時実行ジョブの合計メモリ (カッコ内はソフトリミット) |
18 TB (3 TB) |
(ユーザあたり)同時実行ジョブの合計GPU数 (カッコ内はソフトリミット) |
4 (1) |
【補足】
デフォルトとは:
特に何も指定していない場合に自動的に設定される値です。
例えば、SMALLキューの経過時間は何も設定しない場合には6時間ですが、-l walltime=(時間):(分):(秒) で具体的に値を設定した場合には、
その値が経過時間となります。ただし、SMALLキューの場合の最大の経過時間は12時間ですので、
それよりも長い時間を設定することはできません。
ソフトリミットとは:
ソフトリミットとはそれ以上の計算リソースは利用可能であるものの、その優先順位が低く設定される閾値です。
具体的には、ソフトリミットを越えたジョブは、ソフトリミットを越えていないすべての待機ジョブが実行開始した後に、
まだ計算リソースが空いている場合に初めて実行が開始されます。
- キューの概要
-
システムでは、バッチキューは SMALL, APC, APG, SDFの4種類が用意されています。
SMALLキューは小規模なジョブを対象としたキューです。
比較的短時間でジョブが終了するにもかかわらず、ジョブ実行開始まで長時間待つことがないよう、
中~大規模なジョブに比べてジョブの実行順位が高く設定されています。
ただし、その分、ユーザあたりの計算リソースには制限が設けられています。
また、経過時間もデフォルトでは6時間、最大で12時間となります。
APCキューは大規模計算クラスタにおけるCPUノードでのジョブ実行を目的としたキューです。
CPUノードには56コアが搭載されていますので、pthread や OpenMPでの並列化ではジョブあたり最大56コアまで利用できます。
また、メモリ搭載サイズが異なる3種類の計算ノード(256GB, 512GB, 1,024GB)がありますが、
台数としては256GBおよび512GBのメモリを搭載した計算ノードが多いため、
メモリサイズは不必要に大きくせず、適切なサイズに設定することで比較的早くジョブ実行が開始されます。
もしくは500GBを越えるジョブを実行したい場合にはSDFキューのご利用も併せてご検討ください。
(※)
このキューでは複数のノードにまたがってジョブを実行することで
より多くのコアおよびメモリリソースを利用することが可能です。
APGキューはGPUノードでのジョブ実行を目的としたキューです。
GPUノードは9ノードあり、ノード当たり2枚のNVIDIA H100を搭載しています。
GPUは全体で18枚と限りがあるため、ユーザが利用できるGPU数は最大4枚までとしています。
SDFキューはpthread や OpenMPでの大規模ジョブ、
あるいは使用するコア数は少ないがメモリを大規模に使いたいといった目的で用意されたキューです。
最大で12TBのメモリを利用したジョブの実行が可能です。
ただし、2ノードのみであるため、ユーザあたりの利用可能なリソースには制限を設けています。
【Q&A】
[Q] SMALLキューとAPCキューはどちらも大規模クラスタCPUノードでの計算になります。
SMALLキューですでに数本を実行し、SMALLキューで自分のジョブが待機状態(Q)になっている場合、
APCキューにジョブを投入したほうが実行されやすいでしょうか。
[A] SMALLキューにおける、ユーザあたりの合計コア数や合計メモリの制限にはまだ達していないのであれば、
キューの実行順位はSMALLキューが高いため、SMALLキューに投入したほうがジョブが早く実行を開始します。
[Q] 大規模なMPIジョブを実行したい場合、APCキューとSDFキューのどちらを使うのが良いのでしょうか。
[A] 利用できる計算リソースの観点でいえば、コアあたりに利用できるメモリサイズが APCキューよりもSDFキューのほうが多いため、
コアあたりに必要なメモリサイズが判断の目安の一つとなります。
- キューの実行順位
- ジョブが投入されると、指定したキューのジョブ列の最後に並びます。
そして、実行順位が高い(数字が大きい)キュー(つまり、SDF => SMALL => APG => APC)から、
そのキューのジョブ列の先頭(最も以前に投入されたジョブ)から最後(最も最近投入されたジョブ)まで
順次ジョブの実行を試みていきます。
その後は、次に優先度が高いキューに対して、同様にジョブ列の先頭からジョブの実行を試みていきます。
SDFはキューの実行順位は高いですが、計算サーバはSMALLやAPC,APGと異なりますので、SDFを利用するのであれば
キューの実行順位を特に気にする必要はありません。
したがって、SDF以外のキューについては、リソース的に実行可能であれば、
まずはSMALLキューでのジョブ実行を検討していただくのがよいでしょう。
- 最大コア数
- 1つのジョブが利用できる最大のコア数です。APCキューでは大規模なMPIジョブの実行により、
より多くのコアを利用できます。また、SDFキューでは大規模なpthreadやOpenMPジョブの実行により最大144コアまで利用できます。
- 最大メモリ
- 1つのジョブが利用できる最大メモリです。バッチスクリプトで特に指定されない場合には、カッコ内のメモリ容量が設定されます。
もしジョブが指定されたメモリを超えた場合にはPBSによって自動的にkillされますのでご注意ください。
(補) ジョブが実際に使用したメモリサイズは、ジョブの終了後に PbsExitStatus コマンドで確認することができます(resources_used.mem= の部分)。
$ PbsExitStatus xxxxx.fe3-adm
20200313:03/13/2020 20:51:10;0010;Server@fe3-adm;Job;xxxxx.fe3-adm;Exit_status=0
resources_used.cpupercent=777 resources_used.cput=12:32:16 resources_used.mem=1747604kb
resources_used.ncpus=80 resources_used.vmem=6431224kb resources_used.walltime=01:37:54
- 経過時間
- 1つのジョブが利用できる経過時間です。経過時間とはジョブの実行開始時刻と終了時刻の差であり、CPU時間とは異なります。
SMALLキューのみ最大の経過時間が設定されていますが、それ以外はデフォルト値のみの設定です。
したがって、ジョブの経過時間が12時間を超える可能性がある場合には、APC/APG/SDFキューをご利用ください。
また、APC/APG/SDFキューではデフォルトの経過時間は120日(2880時間)となっています。
そのため、もしそれ以上経過時間がかかる可能性がある場合には、バッチスクリプトにて経過時間を指定してください。
もし、ジョブ実行後にAPC/APG/SDFキューで経過時間を延長したい場合には、スパコンシステムまでご相談ください。
- 最大ジョブ数
- ユーザがそのキューで実行可能なジョブの数の上限値です。SMALLやAPCには上限がありませんが、
計算リソースが限られているSDFには上限を設けています。
()内の数字はソフトリミットと呼ばれる制限値です。これは、この数以上にジョブが実行されている場合、
その後にユーザが投入したジョブの実行順位は、ソフトリミット以内のユーザの待機ジョブに比べて、
低くなります。
- 最大使用コア数
- ユーザがそのキューで実行可能なジョブの合計コア数に対する上限値です。
SMALLには最大ジョブ数に制限はありませんが、合計コア数には96という上限を設けています。
つまり、1ジョブあたり16コアを使うジョブであれば6ジョブ、1ジョブあたり1コアしか使わないジョブであれば
96ジョブを同時に実行することが可能となります。
- ユーザあたりの同時実行ジョブの合計コア数/合計メモリ/合計GPU数
-
すべてのキューを対象に、ユーザが利用できる同時実行可能なジョブの合計コア数/合計メモリ/合計GPU数の制限値です。
この制限値以内であることを条件に、各キューに対する制限がジョブ実行に適用されることになります。
原則として、ログインノードでは下記の様な処理のジョブのみを実行して下さい。
- エディタによるファイルの編集
- ファイルの閲覧
- ファイルコピー
- コンパイラによるソースコードのコンパイル
- ジョブのテスト実行(短時間、使用コア数・メモリ量が小さいものに限る)。使用コア数としては最大でも8程度でお願いします。
ログインノード上でのジョブの制限は以下の通りです。
インタラクティブ・ジョブ |
制限リソース | 制限値 |
ジョブあたりのCPU時間 | 30分 |
ジョブあたりの最大メモリ容量 | 8 GB |
|