Slurmの概要#

Slurm とは#

Slurm Workload Manager (Slurm) はジョブ管理システム(ジョブスケジューラー)です。Slurm を利用することで、これまで1台のマシン上で実行していたプログラムを、複数の計算ノード上で円滑に実行することが可能となります。

ジョブとは#

CPUやメモリ等の計算資源が割り当てられる処理単位です。シェルスクリプト(コマンドやパラメータを記載したファイル)を実行すると、1つのジョブとして扱われます。

ジョブ実行の流れ#

  1. ご自身の端末(UnitA)、もしくはシンクラ仮想デスクトップ(UnitB,C)からスーパーコンピューターのログインノードにログインする。

  2. シェルスクリプトの作成、ジョブのテストを行い、ジョブ投入の準備をする。

  3. sbatchコマンドでジョブを投入する。

  4. ジョブの状態確認はsqueueコマンドで行う。

  5. ジョブの実行結果を確認する。

ヒント

sbatchsqueueはSlurmが提供するコマンドです。

パーティションとは#

ジョブを投入するキューです。キューに投入されたジョブは、SlurmによりCPUやメモリ等のリソースが割り当てられ次第、実行されます。

パーティション毎に、計算ノードのスペックや用途が決められているため、実行したいジョブに最適なパーティションを選ぶことが重要です。

実行時間の制限#

複数のユーザが限られたリソースを共有するため、パーティション毎に実行時間の制限を設けています。制限時間を超過すると、Slurmによりジョブは破棄されます。

ジョブ投入数の制限#

複数のユーザが限られたリソースを共有するため、プロジェクト毎にジョブ投入数の上限値を設定しています。ジョブ投入上限値を超えてジョブを投入しようとするとエラーになります。プロジェクトで投入中のジョブ数の確認は、slurminfoコマンドで確認が可能です。

ジョブ投入上限値

10,000(プロジェクトごと)

ヒント

sbatchコマンド 、slurmloginコマンド でジョブ投入上限値を超過してジョブを投入した場合、以下のエラーメッセージが出力します。

  1. sbatchコマンドでジョブ投入上限値超過時のエラー

sbatch: error: AssocGrpSubmitJobsLimit
sbatch: error: Batch job submission failed: Job violates accounting/QOS (Job submit limit, user's size and/or time limits)
  1. slurmloginコマンドでジョブ投入上限値超過時のエラー

srun: error: AssocGrpSubmitJobsLimit
srun: error: Unable to allocate resource: Job violates accounting/QOS (Job submit limit, user's size and/or time limits)

パーティションの区分#

パーティションには大きく分けて、バッチパーティションインタラクティブパーティションがあります。

バッチパーティション#

ジョブはスクリプトに記述した通り、計算ノード上で実行されます。ジョブを実行するためのパーティションです。

インタラクティブパーティション#

計算ノードにログインし、対話的にコマンドを実行します。主に、バッチパーティションへジョブを大量投入する前に、スクリプトの挙動や必要リソースを確認するために利用します。

パーティション区分ごとの使用例#

  • バッチパーティションの使用例
    1. 投入するジョブの準備をします(スクリプト作成など)。

    2. sbatchコマンドにより、ジョブを投入します。

    3. squeueコマンドにより、ジョブが計算ノード上で実行されることを確認します。

    4. 実行終了後、ジョブの結果を確認します

  • インタラクティブパーティションの使用例
    1. slurmloginコマンドにより、計算ノードにログインします。

    2. 計算ノード上で対話的に任意のコマンドを実行します。

    3. 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で最低10ノード割り当てられており、状況に応じてノード数が変化します。

UnitA#

パーティション名

ノード数

1ノードのスペック

実行時間上限

CPUコア数

メモリ

GPU台数

mjobs

10~

128

512GB

-

1 week

mjobs2

3~

40

192GB

-

1 week

intr

10~

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

20~

128

512GB

-

1 week

mjobs2

3~

40

192GB

-

1 week

intr

20~

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)