Skip to content

Slurm 调度系统

Slurm 是智算平台用于计算资源管理和作业调度的系统。用户需要通过 Slurm 将计算任务提交到队列,由调度系统根据队列、资源申请和集群状态安排作业运行。

正式计算任务请提交到计算队列运行,不要在登录节点直接长时间运行程序。登录节点主要用于登录、文件整理、环境配置、代码编译和短时间测试。

Slurm 调度示意图

常用命令

命令用途
sinfo查看队列和节点状态
squeue查看排队和运行中的作业
sbatch提交批处理作业脚本
srun提交交互式任务或在作业中启动任务
salloc申请一段交互式计算资源
scancel取消排队或运行中的作业
sacct查看作业历史和资源使用情况
seff查看作业效率统计

作业运行方式

Slurm 常见作业方式有三种。一般情况下,正式计算任务优先使用 sbatch;需要临时验证命令或查看实时输出时使用 srun;需要先占用一台计算节点,再在节点上运行 JupyterLab、VSCode Server 或连续调试命令时使用 salloc

方式命令适用场景
批处理作业sbatch后台排队运行,适合正式计算和长时间任务
交互式作业srun立即申请资源并运行命令,适合短时间测试和调试
交互式资源申请salloc先申请资源,再登录节点运行多个命令或图形化开发工具

详细示例可以查看:

查看队列和节点

查看集群队列和节点状态:

bash
sinfo

查看节点级信息:

bash
sinfo -N

查看指定队列:

bash
sinfo --partition=qcpu

常见节点状态:

状态含义
idle节点空闲
alloc节点资源已分配
mix节点部分资源已使用,仍有剩余资源
down节点下线
drain节点维护或故障,不再接收新作业

查看作业状态

查看当前用户排队和运行中的作业:

bash
squeue

查看指定作业:

bash
squeue -j 作业ID

只查看正在运行的作业:

bash
squeue --state=R

只查看正在排队的作业:

bash
squeue --state=PD

常见作业状态:

状态含义
R正在运行
PD正在排队
CG即将完成
CD已完成
F运行失败
CA已取消

提交批处理作业

批处理作业通常使用 sbatch 提交脚本。它适合不需要一直盯着终端的正式任务,例如软件批量计算、训练任务、脚本化数据处理等。

最基本的提交方式:

bash
sbatch job.sh

一个基础作业脚本示例:

bash
#!/bin/bash
#SBATCH --job-name=test_job
#SBATCH --partition=qcpu
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=8G
#SBATCH --time=02:00:00
#SBATCH --output=slurm-%j.out
#SBATCH --error=slurm-%j.err

hostname
date

# 在这里写自己的计算命令
python run.py

常用资源参数:

参数说明
--job-name作业名称
--partition使用的队列
--nodes申请节点数
--ntasks任务数
--cpus-per-task每个任务使用的 CPU 核数
--mem申请内存
--time最长运行时间
--output标准输出文件
--error错误输出文件

交互式测试

短时间调试可使用 srun。它会申请资源并直接运行命令,命令输出会显示在当前终端里:

bash
srun --partition=qcpu --cpus-per-task=4 --mem=8G --time=01:00:00 --pty bash

进入交互式环境后,可运行测试命令。测试结束后输入:

bash
exit

交互式任务适合检查环境、调试脚本和短时间验证,不建议长时间占用。

如果需要先获得一段计算资源,再在计算节点上连续执行多个命令,可以使用 salloc

bash
salloc -N 1 --cpus-per-task=4 --mem=8G --time=01:00:00 --partition=qcpu

资源分配成功后,根据提示登录到分配的节点,再运行自己的程序。使用结束后退出节点,并取消或结束对应作业,避免资源一直占用。

取消作业

取消指定作业:

bash
scancel 作业ID

取消当前用户的所有作业时请谨慎:

bash
scancel -u 用户名

查看作业历史和资源使用

查看指定作业的历史记录:

bash
sacct -j 作业ID

查看作业资源使用情况:

bash
sacct -j 作业ID --format=jobid,jobname,reqcpus,reqmem,averss,maxrss,elapsed,state%20,exitcode --unit=G

查看作业效率:

bash
seff 作业ID

示例输出:

Slurm 作业效率示例

使用建议

  • 正式计算任务使用 sbatch 提交。
  • 临时测试或查看实时输出使用 srun
  • 需要 JupyterLab、VSCode Server 或连续调试时使用 salloc
  • 提交前先确认队列、CPU、内存、GPU、运行时间是否合理。
  • 不要在登录节点直接运行长时间或高负载任务。
  • 作业提交后及时查看 squeue,确认是否排队或运行。
  • 作业结束后查看输出文件、错误文件和 sacct 记录。
  • 资源申请过大可能导致排队时间变长,资源申请过小可能导致作业失败。

相关页面:队列介绍用户资源限制tmux 终端复用sbatch 批量提交作业srun 交互式提交作业salloc 交互式资源申请

Copyright 2021 All Rights Reserved 生物设计中心 版权所有