[Slurm] Slurm コマンド集

[Slurm] Slurm コマンド集

業務で Slurm を使用しており、私が頻繁に使っているコマンドを備忘録がてら紹介します。

本記事では下記の環境で動作確認を行っています。

  • Ubuntu Server 22.04.3 LTS
  • Slurm v22.05.2

Slurm とは

Slurm Workload Manager (Slurm) は、オープンソースのジョブ管理システムです。

クラスターのリソース(計算ノード)を効率的に管理し、ジョブのスケジューリング、実行、監視できます。

詳しい説明は以下を参照してください。

ジョブ関連のコマンド

ジョブの送信

ジョブを送信するコマンドです。

ジョブを送信
$ sbatch <ジョブ>
実行例
$ sbatch myjob.sh
Submitted batch job 12345

送信後、ジョブ ID が出力されます。 この ID を使ってジョブの状況を確認できます。

Tips

たとえば、シェルスクリプトで以下のようにして変数にジョブ ID を格納します。

実行時に変数にジョブIDを格納
job_id=$(sbatch <ジョブ> | awk '{print $4}')

以下のように依存ジョブを設定できます。

依存ジョブとして設定
sbatch <次のジョブ> --dependency=afterok:"$job_id"

--dependency=afterok:<ジョブID> は、指定したジョブIDが 正常終了(完了)した後に、次のジョブを実行するためのオプションです。

ジョブのステータス確認

現在のキューにあるジョブを確認するコマンドです。

現在のキューにあるジョブを確認
$ squeue
実行例
$ squeue
JOBID   PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
12345   example       myjob    user  R    00:00:00      1 node-001

特定のユーザーのジョブだけを表示するには、-u オプションを使います。

特定のユーザーのジョブだけを表示
$ squeue -u <ユーザー名>

ジョブ履歴の確認

ジョブの履歴を確認するにはあらかじめ設定が必要です。

設定方法については以下の記事などが参考になると思います。

ジョブの履歴を確認するためコマンドです。

全てのジョブの履歴を確認
$ sacct
実行例
$ sacct
       JobID    State  Elapsed      AllocCPUS
------------ -------- -------- ----------------
12345         COMPLETED   00:02:45             8
12346         FAILED      00:01:10             4

便利なオプション

squeue コマンドと同じように特定のユーザーのジョブの履歴を表示するには、-u オプションを使います。

特定のユーザーのジョブの履歴を表示
$ sacct -u <ユーザー名>

ジョブ ID を指定することで、特定のジョブの履歴を確認できます。

ジョブの履歴を確認
$ sacct -j <ジョブID>

期間を指定して履歴を表示

期間を指定して履歴を表示
$ sacct -S 2024-11-01 -E 2024-11-20

これにより、指定した期間内のジョブ履歴を確認できます。

詳細情報を表示

formatを指定
$ sacct -j <ジョブID> --format=JobID,State,Elapsed
実行例
$ sacct -j 12345 --format=JobID,State,Elapsed
       JobID    State  Elapsed
------------ -------- --------
12345         COMPLETED   00:02:45

--format オプションで表示する情報をカスタマイズできます。

--format オプションで指定できる内容のリストは以下のコマンドで出力できます。

指定できる内容のリストを出力
$ sacct --helpformat

以下、--format オプションで指定できる内容です。

formatオプションで指定できる内容のリスト
Fields available:

Account             AdminComment        AllocCPUS           AllocGRES
AllocNodes          AllocTRES           AssocID             AveCPU
AveCPUFreq          AveDiskRead         AveDiskWrite        AvePages
AveRSS              AveVMSize           BlockID             Cluster
Comment             Constraints         ConsumedEnergy      ConsumedEnergyRaw
CPUTime             CPUTimeRAW          DBIndex             DerivedExitCode
Elapsed             ElapsedRaw          Eligible            End
ExitCode            Flags               GID                 Group
JobID               JobIDRaw            JobName             Layout
MaxDiskRead         MaxDiskReadNode     MaxDiskReadTask     MaxDiskWrite
MaxDiskWriteNode    MaxDiskWriteTask    MaxPages            MaxPagesNode
MaxPagesTask        MaxRSS              MaxRSSNode          MaxRSSTask
MaxVMSize           MaxVMSizeNode       MaxVMSizeTask       McsLabel
MinCPU              MinCPUNode          MinCPUTask          NCPUS
NNodes              NodeList            NTasks              Priority
Partition           QOS                 QOSRAW              Reason
ReqCPUFreq          ReqCPUFreqMin       ReqCPUFreqMax       ReqCPUFreqGov
ReqCPUS             ReqGRES             ReqMem              ReqNodes
ReqTRES             Reservation         ReservationId       Reserved
ResvCPU             ResvCPURAW          Start               State
Submit              Suspended           SystemCPU           SystemComment
Timelimit           TimelimitRaw        TotalCPU            TRESUsageInAve
TRESUsageInMax      TRESUsageInMaxNode  TRESUsageInMaxTask  TRESUsageInMin
TRESUsageInMinNode  TRESUsageInMinTask  TRESUsageInTot      TRESUsageOutAve
TRESUsageOutMax     TRESUsageOutMaxNode TRESUsageOutMaxTask TRESUsageOutMin
TRESUsageOutMinNode TRESUsageOutMinTask TRESUsageOutTot     UID
User                UserCPU             WCKey               WCKeyID
WorkDir

ジョブのキャンセル

送信済みのジョブをキャンセルするコマンドです。

送信済みのジョブをキャンセル
$ scancel <ジョブID>

特定のユーザーのすべてのジョブをキャンセルするコマンドです。

特定のユーザーのすべてのジョブをキャンセル
$ scancel -u <ユーザー名>

ノード関連のコマンド

ノードの詳細確認

特定のノードの状態を確認するコマンドです。

特定のノードの状態を確認
$ scontrol show node <ノード名>

ちなみに、以前このコマンドを使用して問題を対処しました。

そちらも記事にしています。

まとめ

Slurm の基本的なコマンドを紹介しました。

この記事が、Slurm を使う皆さんの役に立てれば幸いです。

それではまた!

参考

Ryotaro49