やりたいこと
Slurmにおいて、下記のように1nodeに複数のジョブを詰め込むPartitionと1nodeに複数のジョブを詰め込みできないPartitionを共存させたい。
この例だと、以下のようになっている。
- PARTITION名; cpu_queueのは1ノードに複数のジョブを詰め込み可能
- 以下の例ではcompute01に2ジョブ投入されていることがわかる。
- PARTITION名; gpu_queueのは1ノードに複数のジョブを詰め込み不可
- 以下の例では必ずジョブがノードを専有している。
command
$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
1946 cpu_queue test1 xdu-0590 R 0:03 1 compute01
1947 cpu_queue test2 xdu-0590 R 0:00 1 compute01
1949 gpu_queue test3 xdu-0590 R 0:00 1 gpu01
1950 gpu_queue test4 xdu-0590 R 0:00 1 gpu02
1951 gpu_queue test5 xdu-0590 R 0:00 1 gpu03
実現方法
slurm.confに下記を追記する。
SelectType
とSelectTypeParameters
の指定
command
SelectType=select/cons_tres
SelectTypeParameters=CR_CORE
PartitionName
にてOverSubscribe
の設定
command
PartitionName=gpu_queue Nodes=gpu[01-08] Default=Yes MaxTime=INFINITE State=UP OverSubscribe=Exclusive
PartitionName=cpu_queue Nodes=cpu[01-16] Default=Yes MaxTime=INFINITE State=UP OverSubscribe=YES
変更したslurm.confの適用方法
- 変更した、slurm.confはかならずすべてのノードで更新し、slurmctldとslurmdをstop/startしてください(restartでなくてstop/start)。
- pdshがインストールされていることを前提としています。
- 以下の例では、slurmctldを起動しているホストにおいても、debugキュー(Partition) としてslurmdを起動していることを前提としています。実際の対象ノードは環境に応じて変更してください。
変数の定義
command
# 変更させたいslurm.confの雛形。すべてのノードからアクセス可能なこと
SHARED_CONF="/scratch/slurm.conf.tmp"
# 反映先(実際のslurm.conf)
SLURM_CONF="/etc/slurm/slurm.conf"
# pdshで実行するノード
NODE="lssr630-cs[01-08],dellc6525-cs[01-04],lssr630-hs04"
slurm.confの更新
command
# slurm.confのバックアップ
sudo pdsh -w ${NODE} "cp ${SLURM_CONF} ${SLURM_CONF}.bak$(date +'%Y%m%d%H%M%S')"
# 編集済みslurm.confのコピー
sudo pdsh -w ${NODE} "cp ${SHARED_CONF} ${SLURM_CONF}"
# 変更確認
sudo pdsh -w ${NODE} "cat -n ${SLURM_CONF} | grep -Ev '^\#' | grep -e SelectType -e OverSubscribe"
slurmctld, slurmdの再起動
slurmctldだけでなく、slurmdの更新も忘れないこと
command
# slurmctldとslurmdの停止
sudo systemctl stop slurmctld
sudo pdsh -w ${NODE} "systemctl stop slurmd"
# slurmctldとslurmdの起動
sudo systemctl start slurmctld
sudo pdsh -w ${NODE} "systemctl start slurmd"