本文最后更新于:November 10, 2022 pm
Slurm 作业调度系统使用指南
1. Slurm 命令
Slurm命令
功能
sinfo
查看集群分区状态
squeue
查看作业队列
srun, salloc
交互式运行作业
sbatch
提交作业
scancel
取消作业
scontrol
查看和修改作业参数
2. Sinfo
1 2 3 4 5 sinfo sinfo -a sinfo -N sinfo -n node-name sinfo --help
2.1 节点状态
alloc
idle
mix
down
drain
节点在用
节点可用
部分占用
节点下线
节点故障
3. Squeue
1 2 3 4 squeue squeue -l squene -j job-id squeue -u username
3.1 作业状态
R
PD
CG
CD
正在运行
正在排队
即将完成
已完成
4. 提交作业
Slurm提交作业有3种模式,分别为交互模式,批处理模式,分配模式,这三种方式只是用户使用方式的区别,在管理,调度,记账时同等对待。
4.1 参数说明
以下所有参数在 srun, sbatch, salloc
中均可以使用。更多参数见srun --help
, sbatch --help
, salloc --help
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 -c, --cpu-per-task=NCPUs -e, --error=error_filename -J, --job-name=JOBNAME --mail-type=END/FAIL/ALL --mail-user=mail_address -n, --ntask=NTASKs --ntask-per-node=N -N, --nodes=N -o, --output=out_filename -p, --partion=debug -t, --time=dd-hh:mm:ss -w, --nodelist=node[1,2] -x, --exclude=node[3,5-6] --mem-per-cpu=MB
4.2 交互模式 Srun
交互式作业提交,提交命令后,等待作业执行完成之后返回命令行窗口。
Demo of srun
1 srun -J JOBNAME -p debug -N 2 -c 1 -n 32 --ntasks-per-node=16 -w node[3,4] -x node[1,5-6] --time=dd-hh:mm:ss --output=file_name --error=file_name --mail-user=address --mail-type=ALL mpirun -n 64 ./iPic3D ./inputfile/test.inp
同 Demo of sbatch
4.3 批处理模式 Sbatch
批处理作业是指用户编写作业脚本,指定资源需求约束,提交后台执行作业。提交批处理作业的命令为 sbatch,用户提交命令即返回命令行窗口,但此时作业在进入调度状态,在资源满足要求时,分配完计算结点之后,系统将在所分配的第一个计算结点(而不是登录结点)上加载执行用户的作业脚本。批处理作业的脚本为一个文本文件,脚本第一行以 “#!” 字符开头,并制定脚本文件的解释程序,如 sh,bash。由于计算节点为精简环境,只提供 sh 和 bash 的默认支持。
运行 sbatch filename
来提交任务;计算开始后,工作目录中会生成以 slurm 开头的.out 文件为输出文件(不指定输出的话)。
Demo of sbatch
保存在运行程序目录下即可,文件名随意(可以无后缀,内容文本格式即可);作业提交命令sbatch filename
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #!/bin/bash source /public/home/yyhua/.bashrc mpirun -n 32 ./iPic3D ./inputfiles/test.inp
同 Demo of srun
4.4 分配模式 Salloc
结点资源抢占命令。该命令支持用户在提交作业前,抢占所需计算资源(此时开始计算所用机时)。需请求资源,然后在获取节点后登录到计算节点,暂不适用组里服务器。
5. Scontrol
5.1 信息查看
1 2 3 4 5 scontrol show job JOBID scontrol show node scontrol show node node-name scontrol show node | grep CPU scontrol show node node-name | grep CPU
5.2 更新作业
在任务开始前却发现作业的属性写错了(例如提交错了分区,修改名字),取消了重新排队似乎很不划算。如果作业恰好 没在运行 ,我们是可以通过 scontrol
命令来更新作业的属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 scontrol update jobid=JOBID ... reqnodelist=<nodes> reqcores=<count> name=<name> nodelist=<nodes> excnodelist=<nodes> numcpus=<min_count-max_count> numnodes=<min_count-max_count> numtasks=<count> starttime=yyyy-mm-dd partition=<name> timelimit=d-h:m:s mincpusnode=<count> minmemorycpu=<megabytes> minmemorynode=<megabytes>
References
作业调度系统 · 北京大学高性能计算使用指南
SLURM 使用参考
Slurm 作业调度系统 — 上海交大超算平台用户手册 文档
SLURM使用基础教程 - 曙光先进计算
Slurm User Guide for Great Lakes | ITS Advanced Research Computing