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>