Lifematics Corporate Blog

Lifematics社のコーポレートブログへようこそ!

Slurmメール通知機能でジョブ管理をスマートに!

皆さん、こんにちは!

高性能計算(HPC)環境において、Slurmクラスタは多くの研究機関や企業で利用されています。

しかし、使用率が高いクラスタでは、ご自身のジョブがいつ実行開始されるか、また長時間かかるプログラムがいつ終了するのか、気になったことはありませんか?

通常、ジョブの状況を確認するにはsqueueやsacctといったコマンドを定期的に実行したり、Job Scriptの出力ファイルをチェックしたりする方法があります。

しかし、これでは常に監視する手間がかかり、特に複数のジョブや長時間ジョブを扱う場合には煩雑になりがちです。

そこで今回は、Slurmの便利なメール通知機能をご紹介します!

この機能を活用することで、ジョブの状況をリアルタイムで把握し、より効率的にHPC環境を運用できるようになります。

Slurmでメール通知を使用するメリット

Slurmのメール通知機能は、ジョブの状況を即座に把握できるため、HPC環境での作業効率を飛躍的に向上させます。

具体的な利点は以下の通りです。

  1. ジョブ完了・失敗の即時把握

    • ジョブの終了時や失敗時に自動的に通知が届くため、squeueやsacctコマンドを繰り返し実行して確認する手間が省けます。
  2. 長時間ジョブの監視が不要に

    • 数時間、あるいは数日かかるような長時間ジョブでも、通知を待つだけでよいため、ジョブに張り付いて監視する必要がなくなります。
  3. トラブル対応の迅速化

    • ジョブの異常終了(失敗)を早期に検知できるため、すぐにログを確認し、原因究明や再実行といったトラブルシューティングを迅速に行うことが可能になります。
  4. チーム運用での情報共有に有効

    • 通知メールを共有アドレスに送信することで、関係者全員がジョブの状況を把握でき、プロジェクトやチームでの運用管理が効率化されます。
  5. ジョブ依存制御との連携が容易に

    • 前段のジョブが終了したことをメールで知ることで、次の手作業が必要なステップの開始タイミングを判断しやすくなり、ワークフロー全体の円滑な進行に貢献します。
メール通知の設定例(スクリプト

Slurmでメール通知を設定するには、ジョブスクリプトに以下のSBATCHディレクティブを追加します。

$ cat 1g-mem_ok.sh
#!/bin/bash
#SBATCH --job-name=1g-mem_ok
#SBATCH --partition=debug
#SBATCH --output=%x_%j.out
#SBATCH --error=%x_%j.err
#SBATCH --time=00:45:00
#SBATCH --mail-type=BEGIN,END,FAIL
#SBATCH --mail-user=lifeuser@lifematics.co.jp

python3 /home/life/memory_test.py 1
  • --mail-type=BEGIN,END,FAIL

    • このオプションは、ジョブの開始時、終了時、失敗時にメール通知を行うようSlurmに指示します。
  • --mail-user=lifeuser@lifematics.co.jp

    • メールの送信先アドレスを指定します。

💡 ポイント:

メール通知機能を利用するには、Slurmクラスタ側でMailProg(例: mailコマンド)やMTA(例: postfixなど)が適切に設定されている必要があります。

これらの設定がされていない場合、メールは送信されませんのでご注意ください。

それでは、実際にジョブを実行して通知されるメールを確認してみましょう!

$ sbatch 1g-mem_ok.sh 
Submitted batch job 721

$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
               721     debug 1g-mem_o     life  R       0:03      1 node01

ジョブが実行されると、すぐにキューインぐされて、まず開始メールが届きます。

件名:Slurm Job_id=721 Name=1g-mem_ok Began, Queued time 00:00:00

その後、ジョブが正常に完了すると終了メールが届きます。

件名:Slurm Job_id=721 Name=1g-mem_ok Ended, Run time 00:01:02, COMPLETED, ExitCode 0

squeue、sacctコマンドで確認しても、ジョブが正常に完了していることがわかります。

$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)

$ sacct --format=JobID,JobName%15,User,Partition,State%15,ExitCode,Elapsed,Start,End
JobID                JobName      User  Partition           State ExitCode    Elapsed               Start                 End
------------ --------------- --------- ---------- --------------- -------- ---------- ------------------- -------------------
721                1g-mem_ok      life      debug       COMPLETED      0:0   00:01:02 2025-08-07T11:47:34 2025-08-07T11:48:36
721.batch              batch                            COMPLETED      0:0   00:01:02 2025-08-07T11:47:34 2025-08-07T11:48:36

次に、エラーが発生した場合の動作を見てみましょう。

エラーとなるジョブを実行した場合でも、同様に開始メールと失敗メールが通知されます。

開始メール:

Slurm Job_id=722 Name=5g-mem_ng Began, Queued time 00:00:00

失敗メール:

Slurm Job_id=722 Name=5g-mem_ng Failed, Run time 00:00:01, OUT_OF_MEMORY

sacctで確認すると、OUT_OF_MEMORYで失敗していることがわかります。

$ sacct --format=JobID,JobName%15,User,Partition,State%15,ExitCode,Elapsed,Start,End
JobID                JobName      User  Partition           State ExitCode    Elapsed               Start                 End
------------ --------------- --------- ---------- --------------- -------- ---------- ------------------- -------------------
722                5g-mem_ng      life      debug   OUT_OF_MEMORY    0:125   00:00:01 2025-08-07T11:53:18 2025-08-07T11:53:19
722.batch              batch                        OUT_OF_MEMORY    0:125   00:00:01 2025-08-07T11:53:18 2025-08-07T11:53:19

最後に、キューに複数のジョブが待機している状態で試してみます。

ジョブがPending状態の場合、すぐに開始メールは届きません。

$ sbatch 1g-mem_ok.sh

$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
               728     debug 1g-mem_o     life PD       0:00      1 (Priority)
               727     debug 5g-mem_o     life PD       0:00      1 (Priority)
               726     debug 5g-mem_o     life PD       0:00      1 (Priority)
               725     debug 5g-mem_o     life PD       0:00      1 (Priority)
               724     debug 5g-mem_o     life PD       0:00      1 (Resources)
               723     debug 5g-mem_o     life  R       0:12      1 node01

しばらくしてジョブが開始されると、キューイング時間を含んだ開始メールが届きます。

Slurm Job_id=728 Name=1g-mem_ok Began, Queued time 00:05:19

これで、自分のジョブが実際に実行キューに入ったことを確認できます。

$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
               728     debug 1g-mem_o     life  R       0:08      1 node01
まとめ

今回は、Slurmのメール通知機能をご紹介しました。

ジョブの開始、終了、失敗を自動で通知してくれるこの機能は、特に高稼働のクラスタや長時間ジョブを扱う際に非常に役立ちます。

コマンドを繰り返し実行する手間を省き、ジョブの状況をリアルタイムで把握できるため、HPC環境での作業効率が大きく向上することでしょう。

💡 注意点:

現在のSlurmの標準機能では、メール本文は空です。

ジョブの実行結果やエラー内容をメール本文に含める場合は、別途スクリプトを用意する必要がありますので、ご留意ください。


私たちライフマティックス株式会社では、今回ご紹介したSlurmの効率的な運用をサポートするため、Slurmの構築/保守サービスをご提供しています。

HPC環境の構築・運用でお困りの際は、ぜひお気軽にご相談ください!

このブログ記事が、皆さんの研究や開発を加速させる一助となれば幸いです!