作业调度管理系统
武大超算使用 Slurm 系统,统一管理所有计算资源、统一调度所有用户的计算任务,用户必须通过 Slurm 系统来进行计算
注意事项
- 请勿在
swarm
登录节点直接运行计算程序 - 请勿绕开
Slurm
作业管理调度系统在计算节点直接运行计算程序 - 违反上述事项可能导致用户账户被限制使用
如果用户的程序编译、数据预处理、数据后处理、压缩、解压缩等任务耗时较长,请将此类任务也作为一个作业提交
作业提交
用户应该为计算任务建立 batch script
批处理脚本,也称为作业脚本 ,用 sbatch
命令提交作业脚本,将计算任务提交给 Slurm 系统
作业脚本格式要求
UTF-8
编码的文本文档- 微软系统下的文本编辑器常常会将文本文档保存成
UTF-8 with BOM
编码,这不符合要求
- 微软系统下的文本编辑器常常会将文本文档保存成
LF
换行符格式- 也叫做
Unix
格式,或者\n
- 微软系统的文本编辑器会将文本文档保存成
CRLF
格式(也叫dos
格式、Windows
格式,或者\r\n
),这不符合要求 dos2unix
命令,可以把CRLF
格式的文本文档转换为LF
格式
- 也叫做
作业脚本基本结构
第一行是脚本语言解释器的路径,一般选择
bash
作为解释器#!/bin/bash
若干行由
#SBATCH
引导的 Slurm 设置选项,例如#SBATCH --partition=hpxg #申请分区 `hpxg` 的计算资源 #SBATCH --nodes=1 #申请 1 个节点 #SBATCH --ntasks-per-node=1 #申请每个节点上分配一个任务(进程) #SBATCH --time=06:00:00 #计划最多运行 6 小时
计算程序运行需要设置的环境变量,例如
module load cran/R-4.0.3 #加载系统预装的 R 4.0.3 cd $SLURM_SUBMIT_DIR #进入提交脚本时所在的目录
运行程序的命令,例如
R --vanilla CMD BATCH infile.R
提交作业
示例:一个运行 R 程序的作业脚本
#!/bin/bash
#SBATCH --partition=hpxg
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --time=06:00:00
module load cran/R-4.0.3
cd $SLURM_SUBMIT_DIR
R --vanilla CMD BATCH infile.R
将上面的代码保存为符合格式要求的文本文档,跟 infile.R
放在同一个目录下,命名为 myjob.sbatch
,然后运行以下命令提交作业
sbatch myjob.sbatch
sbatch
命令把作业脚本提交给 Slurm 系统,获得一个 JobID
作业编号,并显示给用户
作业编号
JobID
是一个正整数数字。
Slurm 系统将根据作业脚本选项所列出的计算资源申请需求,结合当前可用的资源现状,给计算任务排队、分配资源、启动计算程序、输出各种中间过程信息、计算结束后回收计算资源。
请用户根据上面的示例,创建自己的作业脚本,来提交计算任务。
作业管理
查看作业状态信息
运行以下命令查看作业状态信息
squeue
squeue
显示的信息包括以下内容
JobID
,作业编号PARTITION
,作业在哪个分区上运行NAME
,作业名称,默认是作业脚本的名字USER
,作业的所有者ST
,作业当前状态,详见 Job State Codes,常见的有CG
作业正在完成F
作业失败PD
作业正在等待分配资源R
作业正在运行
TIME
,作业已运行时间NODES
,作业占用的计算节点数NODELIST
,作业占用的计算节点名(REASON)
,作业正在等待执行的原因,详见 Job Reason Codes,常见的有AssoGrpCpuLimit
导师名下所有学生正在使用的CPU总数达到了导师开通的CPU数量限额AssoGrpGRES
导师名下所有学生正在使用的GPU总数达到了导师开通的GPU数量限额Priority
作业正在排队等待QOSMinGRES
提交到GPU分区的作业没有申请GPU资源
登录计算节点查看任务运行状态
squeue
显示的状态信息里包括了作业程序运行所在的计算节点名,运行以下命令可以登录到计算节点
ssh 计算节点名
- 在计算节点上,使用
top
命令可以查看程序使用 CPU 的状况 - 如果是 GPU 程序,在计算节点上使用
nvidia-smi
命令可以查看程序使用 GPU 的状况 - 用户有程序正在运行的计算节点才允许登录
取消作业
如果用户要取消作业,先运行 squeue
命令查询作业编号数字 JobID
,然后运行以下命令取消作业
scancel JobID
如果要取消用户的所有作业
scancel -u 用户名