HOME > 使い方と注意事項 > 計算サービス

計算サービスの使い方と注意事項

ジョブ投入システム

ジョブ投入システム

ジョブ投入システムとは

ジョブ投入システムとは、多くのユーザが同じ計算サーバ(計算をメインとするコンピュータ)を共有し、メモリやCPUなどの リソース(計算資源)を公平に利用するためのシステムです。

スーパーコンピュータシステムでは、ジョブ投入システムとして代表的なもののひとつである PBS(Portable Batch System)を導入しています。

ユーザのジョブを"qsub"というコマンドを使って計算サーバへ投入されると、PBSはジョブを一旦保留します。 リソースが空いている場合にはすぐにジョブが実行されますが、多くのユーザがジョブを投入していることで計算サーバが 混み合っている場合、あるいはすでにユーザが多くのジョブを実行していることで、ユーザごとに割り当てられたリソースを 使い切ってしまった場合などは、他のジョブが終了するまで保留し続けることになります。

このような処理(バッチ処理と呼びます)を行うことで、一度に大量のジョブが実行されることを防ぐとともに、 多くのユーザが公平に共有リソースを利用することが可能になります。

以下では、特に断らない限り、バッチ処理によって実行されるジョブ(バッチジョブ)を単にジョブと呼びます。 また、バッチジョブではないジョブをインタラクティブジョブと呼びます。

バッチジョブの制限値

バッチジョブは利用できるコア数・メモリ容量・演算時間により、複数のキューと呼ばれるクラスに分類されており、 ジョブが必要とする計算リソースに応じて使い分けます。

バッチキュー

現在利用可能なバッチキューは以下の通りです。なお、運用状況により、以下の制限値は今後変更される場合があります。

キュー名
QUICK
SMALL
APC
APG
SDF
計算サーバ
クラスタ(CPU/GPU)
大規模メモリ
クラスタ(CPU)
クラスタ(CPU)
クラスタ(GPU)
大規模メモリ(CPU)
キューの
実行順位
100
70
50
50
90
(ジョブあたりの)
最大コア数
(デフォルト)
4 core
(1 core)
12 core
(1 core)
40 core (※)
(1 core)
40 core
(1 core)
144 core
(18 core)
(ジョブあたりの)
最大メモリ
(デフォルト)
72 GB
(9 GB)
108 GB
(9 GB)
720 GB (※)
(9 GB)
720 GB
(18 GB)
6 TB
(768 GB)
(ジョブあたりの)
経過時間
(デフォルト)
1 h
12 h
(6 h)
制限なし
(2880 h)
制限なし
(2880 h)
制限なし
(2880 h)
(ユーザあたりの)
最大ジョブ数
(ソフトリミット)
2
(1)
制限なし
制限なし
4
(1)
8
(4)
(ユーザあたりの)
合計コア数
(ソフトリミット)
制限なし
36 core
制限なし
制限なし
288 core
(144 core)
(ユーザあたりの)
合計メモリ
(ソフトリミット)
制限なし
324 GB
制限なし
制限なし
8 TB
(6 TB)
ジョブの特徴
テスト
小規模
中~大規模
GPU
大規模メモリ
(ユーザあたり)同時実行ジョブの合計コア数 (カッコ内はソフトリミット)
500 (300)
(ユーザあたり)同時実行ジョブの合計メモリ (カッコ内はソフトリミット)
12 TB (3 TB)

【補足】
デフォルトとは:
特に何も指定していない場合に自動的に設定される値です。 例えば、SMALLキューの経過時間は何も設定しない場合には6時間ですが、-l walltime= で具体的に値を設定した場合には、 その値が経過時間となります。ただし、SMALLキューの場合の最大の経過時間は12時間ですので、 それよりも長い時間を設定することはできません。
ソフトリミットとは:
ソフトリミットとはそれ以上の計算リソースは利用可能であるものの、その優先順位が低く設定される閾値です。 具体的には、ソフトリミットを越えたジョブは、ソフトリミットを越えていないすべての待機ジョブが実行開始した後に、 まだ計算リソースが空いている場合に初めて実行が開始されます。

キューの概要

システムでは、バッチキューはQUICK, SMALL, APC, APG, SDFの5種類が用意されています。

QUICKキューは投入後、すぐにジョブが実行されることを目的としたキューです。そのため、キューの実行順位は 最も高く、QUICKキューのみが利用可能なノードも用意されています。 バッチスクリプトが正しく実行されるか、ジョブが問題なく実行を開始するか、といったテスト的な利用を 想定したキューですので、ユーザあたり最大2ジョブまでとなります。 もちろん、短時間で終わる、計算リソースもさほど必要ない、といったジョブで利用していただいても構いません。

SMALLキューは小規模なジョブを対象としたキューです。 比較的短時間でジョブが終了するにもかかわらず、ジョブ実行開始まで長時間待つことがないよう、 中~大規模なジョブに比べてジョブの実行順位が高く設定されています。 ただし、その分、ユーザあたりの計算リソースには制限が設けられています。 また、経過時間もデフォルトでは6時間、最大で12時間となります。

APCキューは大規模計算クラスタにおけるCPUノードでのジョブ実行を目的としたキューです。 CPUノードには40coreが搭載されていますので、pthread や OpenMPでの並列化ではジョブあたり最大40coreまで利用できます。 また、メモリ搭載サイズが異なる2種類の計算ノード(360GBと720GB)がありますが、台数としては360GBのほうが圧倒的に多いため、 可能であれば必要なメモリサイズは360GBよりも小さくすることで比較的早くジョブが実行開始されます。 もしくは、360GBを越えるジョブを実行したい場合にはSDFキューのご利用をご検討ください。
(※)このキューでは複数のノードにまたがってジョブを実行することが可能であり、 その場合最大コア500core、最大メモリ4.5TBまでの計算リソースが利用できます。 MPIで並列化された大規模ジョブを実行したい場合は、このAPCキューもしくは後で説明しますSDFキューをご利用ください。

APGキューはGPUノードでのジョブ実行を目的としたキューです。 GPUノードには1枚のGPUカードが搭載されています。GPUノードは18ノードと、CPUノードに比べて少ないため、 ユーザあたりのジョブ数には制限を設けています。

SDFキューはpthread や OpenMPでの大規模ジョブ、 あるいは使用するコア数は少ないがメモリを大規模に使いたいといった目的で用意されたキューです。最大で6TBほどのメモリを利用したジョブの実行が可能です。 ただし、2ノードのみであるため、ユーザ当たりの利用可能なリソースには制限を設けています。

【Q&A】
SMALLキューとAPCキューはジョブの特徴にもあるように計算規模が違う程度で、どちらも大規模クラスタでのCPUノードでの計算になります。 SMALLキューですでに数本を実行し、SMALLキューで自分のジョブが待機状態(Q)になっている場合、 APCキューにジョブを投入したほうが実行されやすいでしょうか。
SMALLキューにおける、ユーザあたりの合計コア数や合計メモリのリミット(64coreおよび576GB)にはまだ達していないのであれば、 キューの実行順位はSMALLキューが高いため、SMALLキューに投入したほうがジョブが早く実行を開始します。

大規模なMPIジョブを実行したい場合、APCキューとSDFキューのどちらを使うのが良いのでしょうか。
利用できる計算リソースの観点でいえば、coreあたりに利用できるメモリサイズは、 APCキューでは9GB、SDFキューでは42GBぐらいです。したがって、coreあたりに必要なメモリの大きさでどちらのキューを使うべきかを 判断するという考え方があります。 ただ、このcoreあたりのメモリサイズはあくまでも目安であり、そうしなくてはいけないということでもありません。 そのため、実際にはどちらがより性能が出やすいのか、あるいはその時の混み具合などで総合的に判断していただくのがよいと思います。

計算サーバ
ジョブが実行される計算サーバはキューにより異なりますが、 CPUのアーキテクチャは全く同じであり、違いはCPU動作周波数です。 したがって、どちらの計算サーバにおいても同じバイナリでのジョブ実行が可能です。

キューの実行順位
ジョブが投入されると、指定キューのジョブ列の最後に並びます。 そして、定期的に、実行順位が高い(数字が大きい)キュー(つまり、最初はQUICKキュー、次はSDFキュー、という順序で) そのジョブ列の先頭(最も以前に投入されたジョブ)から最後(最も最後に投入されたジョブ)まで 順番にジョブの実行を試みます。 したがって、リソース的に実行可能であれば、まずはSMALLキューでのジョブ実行を検討していただくのがよいでしょう。 SDFはキューの実行順位は高いですが、計算サーバはSMALLやAPC,APGと異なりますので、SDFを利用するのであれば キューの実行順位を特に気にする必要はありません。

最大コア数
1つのジョブが利用できる最大のコア数です。特に、APCキューでは大規模なMPIジョブの実行により、 最大500コアまで利用できます。また、SDFキューでは大規模なpthreadやOpenMPジョブの実行により最大144コアまで利用できます。

最大メモリ
1つのジョブが利用できる最大メモリです。バッチスクリプトで特に指定されない場合には、カッコ内のメモリ容量が設定されます。 もし、ジョブが指定されたメモリを超えた場合にはPBSによって自動的にkillされますのでご注意ください。

経過時間
1つのジョブが利用できる経過時間です。経過時間とはジョブの実行開始時刻と終了時刻の差になります。 CPU時間とは異なります。QUICKおよびSMALLキューのみ最大の経過時間が設定されていますが、それ以外はデフォルト値のみの設定です。 したがって、ジョブの経過時間が12時間を超える可能性がある場合には、APC/APG/SDFキューをご利用ください。 また、APC/APG/SDFキューではデフォルトの経過時間は120日(2880時間)となっています。 そのため、もしそれ以上経過時間がかかる可能性がある場合には、バッチスクリプトにて経過時間を指定してください。 もし、ジョブ実行後にAPC/APG/SDFキューで経過時間を延長したい場合には、スパコンシステムまでご相談ください。
なお、インタラクティブバッチジョブでは経過時間は1時間に設定されています。

最大ジョブ数
ユーザがそのキューで実行可能なジョブの数の上限値です。SMALLやAPCには上限がありませんが、 計算リソースが限られているAPGやSDFには上限を設けています。
()内の数字はソフトリミットと呼ばれる制限値です。これは、この数以上にジョブが実行されている場合、 その後にユーザが投入したジョブの実行順位は、ソフトリミット以内のユーザの待機ジョブに比べて、 低くなります。

合計コア数
ユーザがそのキューで実行可能なジョブの合計コア数に対する上限値です。 SMALLには最大ジョブ数に制限はありませんが、合計コア数には96という上限を設けています。 つまり、1ジョブあたり8coreを使うジョブであれば12ジョブ、1ジョブあたり1coreしか使わないジョブであれば 96ジョブを同時に実行することが可能となります。(メモリ容量についても制約がありますが、ここの説明では無視しています。)

合計メモリ
合計コア数と同様に、ユーザがそのキューで実行可能なジョブの合計メモリに対する上限値です。 たとえば、SDFキューの場合には12TBとなっていますので、 6TBを使用するジョブであれば合計で2つのジョブを同時に実行することが可能です。

ユーザあたりの同時実行ジョブの合計コア数および合計メモリ
すべてのキューを対象に、ユーザが利用できる同時実行可能なジョブの合計コア数および 合計メモリの制限値です。 この制限値以内であることを条件に、各キューに対する制限がジョブ実行に適用されることになります。

ログインノードでのジョブ実行

ログインノードは多くのユーザが利用するノードですので、バッチ経由で実行可能なジョブについては、可能な限り、 バッチでの実行をお願いします。 ただし、コンパイラによるソースコードのコンパイル、インタプリタ言語(シェル、perl、python など)でのスクリプト実行は 例外とします。
ログイン時のジョブの制限は以下の通りです。

インタラクティブ・ジョブ
制限リソース制限値
ジョブあたりのCPU時間30分
ジョブあたりの最大メモリ容量8 GB

マニュアル