[Slurm] UnkillableStepTimeout を設定することでノードが意図せず DRAIN 状態になるのを防ぐ
Slurm でジョブを実行していると、またまた PD 状態のまま実行されない問題に遭遇しました。
ノードの状態が DRAIN になっていたので、[Slurm] ジョブが PD 状態のまま実行されない場合の解決方法 で紹介した方法で IDLE に戻して対処しました。
しかし、これでは根本的な解決になっていません。
そこで今回は UnkillableStepTimeout
という設定を変更し、ノードが意図せず DRAIN 状態になるのを防ぐ方法を紹介します。
本記事では下記の環境で動作確認を行っています。
- Ubuntu Server 22.04.3 LTS
- Slurm v22.05.2
UnkillableStepTimeout
とは
Slurm Workload Manager - slurm.conf の日本語訳を読むと以下のように書かれています。
UnkillableStepTimeout
Slurmがジョブステップ内のプロセスが強制終了できないと判断する前に(SIGKILLで通知された後)待機し、上記のようにUnkillableStepProgramを実行する時間の長さ(秒単位)。
デフォルトのタイムアウト値は60秒です。
超過すると、計算ノードはドレインされ、ノードで将来のジョブがスケジュールされないようにします。
Slurm がジョブの終了を命令しても、プロセスがなかなか終わらないときに「待つ秒数」です。
プロセスの終了にかかる時間がこの設定値を越えてしまうと、 Slurm ジョブ上では「終了できない」と判断されて Kill task failed
という理由でノードが DRAIN 状態になります。
デフォルトのタイムアウト値では短い場合があるため、引き延ばします。
設定方法
1. slurm.conf
ファイルを開く
$ sudo vi /etc/slurm/slurm.conf
2. UnkillableStepTimeout
を設定
UnkillableStepTimeout を適切な値に書き換えます。
UnkillableStepTimeout=180
以下の issue のように 180秒を設定しているケースが多かったので、とりあえず180秒を設定しています。
Since setting UnkillableStepTimeout to 180 this has been happening far less frequently
Slurm nodes that go into drain ‘DUE TO JOB NOT ENDING WITH SIGNALS’ #1849
3. Slurm を再起動
設定ファイルを保存したら、Slurm デーモンを再起動して設定を反映させます。
$ sudo systemctl restart slurmctld
$ sudo systemctl restart slurmd
4. 確認
コマンドで設定が反映されているか確認できます。
$ scontrol show config | grep UnkillableStepTimeout
このコマンドで、UnkillableStepTimeout=180 sec
のような出力が表示されれば、設定が正しく反映されています。
まとめ
slurm.conf
の UnkillableStepTimeout
を 180
に設定し、ノードが意図せず DRAIN 状態になるのを防ぐ方法を紹介しました。
この記事が、同じ問題に直面した方々の役に立てば幸いです。
それではまた!