Slurmの概要¶
Slurm とは¶
Slurm Workload Manager (Slurm) はジョブ管理システム(ジョブスケジューラー)です。Slurm を利用することで、これまで1台のマシン上で実行していたプログラムを、複数の計算ノード上で円滑に実行することが可能となります。
ジョブとは¶
CPUやメモリ等の計算資源が割り当てられる処理単位です。シェルスクリプト(コマンドやパラメータを記載したファイル)を実行すると、1つのジョブとして扱われます。
ジョブ実行の流れ¶
ご自身の端末(UnitA)、もしくはシンクラ仮想デスクトップ(UnitB,C)からスーパーコンピューターのログインノードにログインする。
sbatch
コマンドでジョブを投入する。ジョブの状態確認は
squeue
コマンドで行う。ジョブの実行結果を確認する。
ヒント
sbatch
やsqueue
はSlurmが提供するコマンドです。
パーティションとは¶
ジョブを投入するキューです。キューに投入されたジョブは、SlurmによりCPUやメモリ等のリソースが割り当てられ次第、実行されます。
パーティション毎に、計算ノードのスペックや用途が決められているため、実行したいジョブに最適なパーティションを選ぶことが重要です。
実行時間の制限¶
複数のユーザが限られたリソースを共有するため、パーティション毎に実行時間の制限を設けています。制限時間を超過すると、Slurmによりジョブは破棄されます。
ジョブ投入数の制限¶
複数のユーザが限られたリソースを共有するため、プロジェクト毎にジョブ投入数の上限値を設定しています。ジョブ投入上限値を超えてジョブを投入しようとするとエラーになります。プロジェクトで投入中のジョブ数の確認は、slurminfo
コマンドで確認が可能です。
ジョブ投入上限値 |
10,000(プロジェクトごと) |
ヒント
sbatch
コマンド 、slurmlogin
コマンド でジョブ投入上限値を超過してジョブを投入した場合、以下のエラーメッセージが出力します。
sbatch
コマンドでジョブ投入上限値超過時のエラー
sbatch: error: AssocGrpSubmitJobsLimit
sbatch: error: Batch job submission failed: Job violates accounting/QOS (Job submit limit, user's size and/or time limits)
slurmlogin
コマンドでジョブ投入上限値超過時のエラー
srun: error: AssocGrpSubmitJobsLimit
srun: error: Unable to allocate resource: Job violates accounting/QOS (Job submit limit, user's size and/or time limits)
パーティションの区分¶
パーティションには大きく分けて、バッチパーティションとインタラクティブパーティションがあります。
バッチパーティション¶
ジョブはスクリプトに記述した通り、計算ノード上で実行されます。ジョブを実行するためのパーティションです。
インタラクティブパーティション¶
計算ノードにログインし、対話的にコマンドを実行します。主に、バッチパーティションへジョブを大量投入する前に、スクリプトの挙動や必要リソースを確認するために利用します。
パーティション区分ごとの使用例¶
- バッチパーティションの使用例
投入するジョブの準備をします(スクリプト作成など)。
sbatch
コマンドにより、ジョブを投入します。squeue
コマンドにより、ジョブが計算ノード上で実行されることを確認します。実行終了後、ジョブの結果を確認します
- インタラクティブパーティションの使用例
slurmlogin
コマンドにより、計算ノードにログインします。計算ノード上で対話的に任意のコマンドを実行します。
exit
コマンドで計算ノードからログアウトします。
パーティションの一覧¶
パーティションの使い分け方法¶
mjobs |
1週間以内の通常バッチジョブの実行(デフォルトパーティション) AMD製CPU搭載 |
mjobs2 |
1週間以内の通常バッチジョブの実行 Intel製CPU搭載 |
intr |
インタラクティブパーティションとして使用 AMD製CPU搭載 |
intr2 |
インタラクティブパーティションとして使用 Intel製CPU搭載 |
lljobs |
2ヶ月以内の長期バッチジョブの実行 AMD製CPU搭載 |
tmem |
大量のメモリを要するバッチジョブの実行(共有メモリ型計算機を使用) AMD製CPU搭載 |
gpu |
48時間以内のGPUバッチジョブを実行 |
gpu_intr |
GPUを要するジョブ用のインタラクティブパーティションとして使用 |
注釈
mjobsは各Unitで最低5ノード割り当てられており、状況に応じてノード数が変化します。
UnitA¶
パーティション名 |
ノード数 |
1ノードのスペック |
実行時間上限 |
||
---|---|---|---|---|---|
CPUコア数 |
メモリ |
GPU台数 |
|||
mjobs |
5~ |
128 |
512GB |
- |
1 week |
mjobs2 |
3~ |
40 |
192GB |
- |
1 week |
intr |
5~ |
128 |
512GB |
- |
12 hours |
intr2 |
3~ |
128 |
192GB |
- |
12 hours |
lljobs |
2 |
128 |
512GB |
- |
2 months |
tmem |
1 |
128 |
4TB |
- |
2 weeks |
gpu |
1 |
128 |
512GB |
8 |
48 hours |
gpu_intr |
1 hour |
UnitB¶
パーティション名 |
ノード数 |
1ノードのスペック |
実行時間上限 |
||
---|---|---|---|---|---|
CPUコア数 |
メモリ |
GPU台数 |
|||
mjobs |
5~ |
128 |
512GB |
- |
1 week |
mjobs2 |
3~ |
40 |
192GB |
- |
1 week |
intr |
5~ |
128 |
512GB |
- |
12 hours |
intr2 |
3~ |
40 |
192GB |
- |
12 hours |
lljobs |
2~ |
128 |
512GB |
- |
2 months |
tmem |
1 |
128 |
4TB |
- |
2 weeks |
gpu |
1 |
128 |
512GB |
8 |
48 hours |
gpu_intr |
1 hour |
UnitC¶
パーティション名 |
ノード数 |
1ノードのスペック |
実行時間上限 |
||
---|---|---|---|---|---|
CPUコア数 |
メモリ |
GPU台数 |
|||
mjobs |
20~ |
128 |
512GB |
- |
1 week |
mjobs2 |
14~ |
40 |
192GB |
- |
1 week |
intr |
20~ |
128 |
512GB |
- |
12 hours |
intr2 |
20~ |
40 |
192GB |
- |
12 hours |
lljobs |
2 |
128 |
512GB |
- |
2 months |
tmem |
1 |
128 |
4TB |
- |
2 weeks |
gpu |
1 |
128 |
512GB |
8 |
48 hours |
gpu_intr |
1 hour |
ジョブのデフォルト値¶
ジョブ投入時にパーティションを指定しない場合、mjobsが自動的に選択されます(デフォルトパーティション)。
CPUコア数とメモリに関するデフォルト値は下表のとおりです。
要求項目 |
デフォルト値 |
変更する場合のオプション |
備考 |
---|---|---|---|
CPUコア数 |
1CPUコア / ジョブ |
-c CPUコア数 |
|
10CPUコア / GPU |
-c CPUコア数 |
gpu、gpu_intrを利用する場合のみ。 n CPUコア数は10未満に設定することはできません。 |
|
メモリ |
3.9GB / CPUコア |
--mem-per-cpu=メモリ数(MB) |