Slurmの使い方¶
Warning
早期アクセスフェーズ1で利用していたジョブスクリプトは、環境変数などが現在の環境と異なります。早期アクセスフェーズ1から引き継いだスクリプトをそのまま使用しているユーザは、意図しない動作などの悪影響を受ける可能性があるため、ジョブスクリプトを新しく作り直すことをおすすめします。
本システムでプログラムを実行するには、Slurmジョブスケジューラを使ってジョブを投入します。ジョブの実行方法には、バッチジョブと対話ジョブがあります。バッチジョブは、あらかじめジョブスクリプトを作成して投入する方法で、長時間実行する場合などに適しています。一方、対話ジョブでは、ユーザがコマンドを対話的に実行できるため、バッチジョブ投入前のデバッグなどに適しています。
本ページでは、コマンドラインによるジョブの投入方法について説明します。
ジョブで利用できるGPU数、CPUコア数、メモリ量については、ジョブ実行資源を参照してください。
ジョブスクリプト例¶
逐次ジョブ¶
逐次ジョブ(MPIやOpenMPによる並列化が行われていないジョブ)のジョブスクリプト例です。--gpus=で指定した数だけGPUが利用できます。
#!/bin/bash
#SBATCH --job-name=test-job # ジョブ名
#SBATCH --time=00:10:00 # 時間指定
#SBATCH --gpus=2 # GPU数
module load nvhpc # モジュールの読み込み
./a.out # 実行コマンド
並列ジョブ¶
並列ジョブのジョブスクリプト例です。プロセス数(--ntasks=)とスレッド数(export OMP_NUM_THREADS=)は必要に応じて指定してください。
#!/bin/bash
#SBATCH --job-name=test-job # ジョブ名
#SBATCH --time=00:10:00 # 時間指定
#SBATCH --gpus=8 # GPU数
#SBATCH --ntasks=32 # プロセス数
export OMP_NUM_THREADS=1 # スレッド数
module load nvhpc # モジュールの読み込み
mpiexec ./a.out # 実行コマンド
Slurmのコマンド¶
Slurmでは、ジョブの投入、状態確認、キャンセルを行うことができます。主なSlurmコマンドは次のとおりです。
| コマンド | 説明 |
|---|---|
sbatch JOB_SCRIPT |
バッチジョブの投入 |
squeue |
ジョブの状態表示 |
salloc |
対話ジョブ用の計算資源確保 |
srun |
対話ジョブの実行 |
scancel JOB_ID |
ジョブのキャンセル |
sinfo |
計算ノードの状態表示 |
Note
各Slurmコマンドの詳細については、次のURLを参照してください。 https://slurm.schedmd.com/documentation.html
バッチジョブの投入¶
ジョブスクリプト(job.sh)を作成し、ログインノード上でsbatchコマンドを実行します。
出力例:
出力メッセージの2080はジョブIDであり、ジョブの状態確認やキャンセルなどで対象のジョブを指定するために使用します。
複数の課題に所属している場合は、Slurmの--account=または-Aオプションで、ジョブの課金対象となる課題を指定できます。ジョブスクリプトには、次のように記述します。PROJECTには、利用する課題名を指定してください。
または、sbatchコマンドの実行時に指定します。
ジョブの状態表示¶
出力例:
対話ジョブ用の計算資源確保¶
対話ジョブ用の計算資源をsallocコマンドで確保します。次の例では、2 GPUを10分間要求します。出力メッセージの2081はジョブIDです。
出力例:
salloc: Granted job allocation 2081
salloc: Waiting for resource configuration
salloc: Nodes c072 are ready for job
割り当てが開始されたら、srunコマンドを使って割り当てられたノード上でコマンドを実行します。
出力例:
終了したら、exitを実行して割り当てを解放します。
出力例:
対話ジョブの実行¶
対話ジョブをsrun --pty bashコマンドで開始します。次の例では、4 GPUを10分間要求します。
割り当てられたノード上でシェルが起動します。hostnameコマンドを実行すると、ノード名を確認できます。
出力例:
複数の課題に所属している場合は、Slurmの--account=または-Aオプションで、ジョブの課金対象となる課題を指定できます。ジョブスクリプトには、次のように記述します。PROJECTには、利用する課題名を指定してください。
終了したら、exitを実行してシェルを抜け、srunジョブを終了します。
ジョブのキャンセル¶
ジョブIDを指定して、投入済みまたは実行中のジョブをscancelコマンドでキャンセルします。
計算ノードの状態確認¶
計算ノードの状態をsinfoで確認します。
出力例: