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