Slurm 作业调度系统 (Sugon)
SLURM 是一种开源的、功能强大的工作负载管理器,广泛用于高性能计算 (HPC) 集群。其主要功能包括作业调度、分配计算资源和管理作业队列。SLURM 通过将集群中的资源划分为多个作业队列,使研究人员能够高效地提交和管理计算任务。
官方用户指南 Slurm Documentation
作业队列和账户说明
作业队列 (paritition) 在 SLURM 中是用于管理和组织计算任务的逻辑结构。队列通过提供对集群资源的有序访问,帮助优化计算资源的利用率。
队列 A40-autoEM 和 RTX3090-autoEM 为电镜方向专用队列,使用该队列需显式声明账户 --account=cryoem
常用命令
查看节点
# 节点状态及使用情况总览
pestat -G
# 查看队列
sinfo
# 查看所有作业
squeue
# 查看特定节点状态
scontrol show node <NODENAME>
# 查看特定作业状态
scontrol show job <JOBID>
命令行提交任务
# 在 3 个节点上分别执行 /bin/hostname,并在输出行标记分任务编号
# 使用默认分区,并且默认每个节点执行 1 个任务
srun -N3 -l /bin/hostname
srun --nodes=3 --label /bin/hostname
# 指定 4 个任务执行 /bin/hostname,默认每个任务使用一个处理器
srun -n4 -l /bin/hostname
srun --ntasks=4 --label /bin/hostname
提交作业脚本
脚本示例 my.script
#!/bin/sh
#SBATCH --time=1
#SBATCH --output=my.stdout
#SBATCH --error=my.stderr
#SBATCH --time=1-00:00:00
/bin/hostname
srun -l /bin/hostname
srun -l /bin/pwd
执行脚本:
# 指定使用节点 gpu5 到 gpu7 执行任务,并各自生成 4 个任务,每个任务使用 1 个处理器
sbatch -n4 -w "gpu[5:7]" -o my.stdout my.script
备注
可以在脚本的开头(在任何需要执行的命令之前)使用 “#SBATCH” 前缀加上选项来提供其他选项。也可以在
sbatch
命令执行时提供选项,此时会覆盖脚本中指定的选项。与任务分配相关的常用参数:
-N 或 –nodes :指定要分配的计算节点的数量
-n 或 –ntasks :指定总任务数
–ntasks-per-node :指定每个节点上运行的任务数,默认值为 1
-c 或 –cpus-per-task :指定每个任务使用的 CPU 核心数,默认值为 1
-G 或 –gpus :指定请求 GPU 的数量
–gpus-per-node :指定每个节点上分配的 GPU 数量
–gpus-per-task :指定每个任务使用的 GPU 数量
关于内存分配:每个队列都有默认的内存分配上限,请根据需求使用 –mem-per-cpu=MB 来调整内存分配。
申请交互式资源
使用 salloc
命令可以创建一个资源分配,系统会在此分配中启动一个 shell,此时可以使用 srun
命令来启动任务并执行一个或多个作业步骤。
# 申请默认分区的 4 个节点
salloc -N4 bash
# 将文件拷贝到节点本地存储中并运行
sbcast a.out /tmp/joe.a.out
srun /tmp/joe.a.out
# 删除节点存储中的文件
srun rm /tmp/joe.a.out
# 退出资源分配
exit
删除作业
scancel <JOBID>