Slurm作业调度系统简单使用

国内多数超算中心使用的调度系统均为Slurm,现将Slurm的简单使用方法记录于此:

作业提交方式

1
sbatch sub.sh

sub.sh 脚本的内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
#SBATCH -J jobName # 作业名称
#SBATCH -p pName # 队列名称
##SBATCH --exclude=node1,node2 # 不要把作业分配到节点node1和node2
##SBATCH --nodelist=node3,node4 # 把作业分配到节点node3和node4,多个节点之间使用逗号分隔
#SBATCH -N 1 # 请求的节点数
#SBATCH --cpus-per-task=1 # 请求的cpu数
#SBATCH --gres=gpu:1 # 请求的gpu数
#SBATCH --error=out-%J.txt # STDERR的输出位置
#SBATCH --output=out-%J.txt # STDOUT的输出位置
#SBATCH --no-requeue # 出错之后不再重新计算

# 作业监控
STATE_FILE="state_${SLURM_JOB_ID}"
/usr/bin/touch ${STATE_FILE}
hostname > ${STATE_FILE}
function gcpus_collection(){
while [[ `cat "${STATE_FILE}" | grep "over" | wc -l` == "0" ]]; do
/usr/bin/sleep 60
nvidia-smi >> "gpu_${SLURM_JOB_ID}.log"
/usr/bin/top -bn 1 -i -u $USER >> "cpu_${SLURM_JOB_ID}.log"
done
}
gcpus_collection &

echo "Hello world!"

echo "over" >> "${STATE_FILE}"

作业管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sancel jobid    # 取消作业 
squeue # 查看所有作业的运行/排队情况
squeue -j jobid # 查看指定作业的运行/排队情况
sinfo # 查看节点使用情况

scontrol show job jobid # 查看作业详细信息
scontrol show partition QueueName # 查看队列详细信息

sacct -j jobid -X -o elapsed,state,nodelist # 查看历史作业的指定信息
sacct -u $USER # 当前用户的历史作业

alias sq='squeue'
alias si='sinfo'
alias sqo='squeue --format "%10i | %12P | %.19j | %.8u | %t | %12M | %25R"' # 定制squeue输出格式
alias sqj='squeue --format "%Z" -j' # 显示作业路径

sacct -X -T -u $USER -S 2023-06-19 -E now -T --format=user,jobid,partition,jobname,nnodes,nodelist,start,end,elapsed,state,cputimeraw | grep NODE_FAIL |wc -l

sacct -X -T -u $USER -S 2023-06-19 -E now -T --format=user,jobid,partition,jobname,nnodes,nodelist,start,end,elapsed,state,cputimeraw | grep NODE_FAIL | awk -F " " '{print $6}' | sort | uniq |wc -l


References: