これはrioyokotalab Advent Calendar 2020 16日目の記事です.

何の話か

Slurmのscontrolコマンドは,クラスタの追加・設定やジョブの管理など,Slurmを使って複数ノードのジョブスケジューリングをしている場合は頻繁に使います.
その中で,自分がよく使うコマンドをいくつか書いていきます.


scontrol update

sinfoでノードがdownと表示されるようになった場合などによく使うコマンドです.
こんな感じで状態をidleにできます.

scontrol update nodename=node_name state=idle

いくつかのノードのstateをまとめて更新することもできます.

scontrol update nodename=node1,node2,node3 state=idle

idleにする場合は上記のコマンドで十分なのですが,逆にdownにしたい場合などはreasonを付与する必要があります.

scontrol update nodename=node_name state=down reason='hoge'

down*のように*が付いている場合は,Slurmのデータベース上でdownなだけではなく,ノードやネットワーク自体にも問題があるため,そちらを直さない限りidle*になったところでジョブは割り当てられません.


scontrol show

このコマンドではノードやパーティション,ジョブの状態をみることができます.
例えば,jobに割り当てられている計算資源や時間制限を見たければ,

scontrol show job=job_id
とすることで見ることができます.

また,ノードの持つ計算資源やOSの種類,最終起動時間などを見たければ,

scontrol show node=node_name
とすることで見ることができます.

このようにENTRY=IDを指定することで,どの情報を表示させるかを指定するのですが,ENTRYjobnode以外にも多くのものを指定することができます.
詳細はSlurmの公式ページをご覧ください.
scontrol - Slurm

scontrol write batch_script

バッチジョブを実行するためにはジョブスクリプトを書きますが,このコマンドで指定したジョブを実行するために使ったジョブスクリプトを出力できます.
使い方はこんな感じです.

scontrol write batch_script job_id
実行すると,デフォルトではslurm-job_id.shといったファイル名で書き出されます.
標準出力で見たい場合は
scontrol write batch_script job_id -
というように-を付けることでそうできます.

おわりに

個人的にはscontrolはユーザとしても管理者としても使いやすいものとなっていると思っていて重宝しています.
ドキュメントもちゃんと整備されていてありがたいです.