引言
Simple Linux Utility for Resource Management,简称SLURM,是全球最主流的高性能计算集群资源管理与作业调度系统,被90%以上的世界顶级超算中心采用。天翼云弹性高性能计算 (E-HPC) 基于SLURM作业调度系统,为用户提供开箱即用的超算级算力服务。
主要覆盖场景:
工业仿真:完美适配 LS-DYNA、STAR-CCM+、ANSYS、VASP 等主流 CAE/CFD 软件。通过 SLURM 调度器实现跨节点多核并行计算,结合天翼云底层 RDMA 高速网络,大幅缩短复杂流体力学、结构强度及材料科学计算的仿真周期。
生物信息:针对 AlphaFold 3、GROMACS、Nextflow 、GATK等批量化任务进行深度优化。支持在高性能容器化环境(如 Apptainer/Singularity)中一键部署复杂的生信流水线,实现海量基因组测序数据的高效并行处理。
芯片制造:提供满足 EDA (电子设计自动化) 工具所需的超大内存节点与高性能存储支持。在电路仿真、物理验证与寄生参数提取等环节,利用 Slurm 的优先级调度机制,确保关键设计任务在高并发环境下依然稳定运行。
训练推理:针对 NVIDIA Hopper/Ampere及华为昇腾 (Ascend) 等异构算力深度适配。兼容vLLM、DeepSpeed、Megatron-LM 等主流框架,支持百亿/千亿级参数大模型的分布式训练与高吞吐推理。通过高性能容器部署实现环境解耦,快速部署最新 AI 大模型,实现 Token 自由。
核心命令速览
日常使用中,您只需掌握以下6个命令即可完成90%以上的作业管理操作:
| 命令 | 核心功能 | 最常用场景 |
|---|---|---|
sinfo | 查看集群状态 | 了解哪些节点空闲、有哪些分区可用 |
squeue | 查看作业队列 | 查询自己的作业是否在运行、为什么排队 |
sbatch | 提交批处理作业 | 提交需要长时间运行的计算任务 |
sacct | 查看历史作业 | 分析已完成作业的资源使用情况 |
scancel | 取消作业 | 终止运行错误或不再需要的作业 |
scontrol | 管理作业/节点 | 查看作业详细信息、暂停/恢复作业 |
核心命令详解
sinfo:查看集群状态
sinfo用于查询所有节点和分区的实时信息,基本用法如下:
# 1. 查看所有分区的基本信息(最常用)
sinfo
# 2. 查看每个节点的详细状态
sinfo -N
# 3. 只看空闲可用的节点
sinfo --states=idle
# 4. 查看指定分区的信息(如GPU分区)
sinfo --partition=gpu
# 5.输出示例
[root@master001 ~]# sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
batch* up infinite 4 alloc compute[001-003],master001输出示例字段解读:
| 字段 | 含义 | 关键值说明 |
|---|---|---|
PARTITION | 分区名称 | 带*的是默认分区 |
AVAIL | 分区状态 | up表示可用,down表示不可用 |
TIMELIMIT | 作业最大运行时长 | 7-00:00:00表示7天 |
NODES | 节点数量 | 集群机器数量 |
STATE | 节点状态 | idle(空闲)、alloc(全占)、mix(部分占用)、drain(故障) |
NODELIST | 节点列表 | 如compute[001-100]表示100个节点 |
squeue:查看作业状态
squeue用于跟踪查询集群中所有作业(job)的实时状态。基本用法如下:
# 1. 查看所有作业
squeue
# 2. 只看自己的作业(最常用)
squeue --me
# 3. 查看指定作业的详细信息
squeue -j 12345
# 4. 只看运行中的作业
squeue --state=R
# 5. 查看更详细的作业信息
squeue -l
# 6. 输出示例
[root@master001 ~]# squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
83 batch deepseek root R 21:19 1 compute001
77 batch qwen27b root R 1-05:44:37 1 compute002
74 batch qwen35 root R 1-06:01:01 2 compute003,master001输出示例字段解读:
| 字段 | 含义 | 关键值说明 |
|---|---|---|
JOBID | 作业唯一ID | 后续所有操作都需要用到这个ID |
PARTITION | 作业所在分区 | |
NAME | 作业名称 | 您在脚本中指定的名称 |
USER | 提交作业的用户 | |
ST | 作业状态 | PD(排队中)、R(运行中)、CG(即将完成) |
TIME | 已运行时间 | |
NODELIST(REASON) | 运行中显示节点列表,排队中显示等待原因 | 常见原因:Resources(资源不足)、Priority(有更高优先级作业) |
sbatch:提交批处理作业
sbatch是Slurm最核心的命令,用于提交批处理作业脚本。您只需编写一个包含计算命令和资源需求的脚本,然后用sbatch提交即可。
一个标准的Slurm脚本分为三部分:
#!/bin/bash:声明脚本使用bash解释器#SBATCH开头的行:指定资源需求和作业参数实际要执行的计算命令
示例:创建一个名为hello.slurm的文件:
#!/bin/bash
#SBATCH --job-name=hello_world # 作业名称
#SBATCH --partition=batch # 提交到batch分区
#SBATCH --nodes=1 # 请求1个节点
#SBATCH --ntasks=1 # 1个进程
#SBATCH --cpus-per-task=4 # 每个进程4个CPU核
#SBATCH --time=00:10:00 # 最大运行10分钟
#SBATCH --output=%j.out # 标准输出文件(%j会替换为作业ID)
#SBATCH --error=%j.err # 标准错误文件
#SBATCH --nodelist=compute001 # 指定compute001节点
#SBATCH --exclusive # 指定节点独占
# 实际执行的命令
echo "Hello, Slurm!"
echo "作业ID: $SLURM_JOB_ID"
echo "运行节点: $(hostname)"提交作业:
sbatch hello.slurm提交成功后会显示:Submitted batch job 12345,其中12345就是您的作业ID。
常用SBATCH参数速查表:
| 参数 | 含义 | 示例 |
|---|---|---|
--job-name | 作业名称 | --job-name=my_job |
--partition | 提交到的分区 | --partition=gpu |
-N, --nodes | 请求的节点数 | -N 2 |
-n, --ntasks | 总进程数 | -n 8 |
--ntasks-per-node | 每个节点的进程数 | --ntasks-per-node=4 |
--cpus-per-task | 每个进程的CPU核数 | --cpus-per-task=8 |
--gres | 请求GPU资源 | --gres=gpu:8(请求8张GPU) |
--time | 最大运行时长 | --time=7-00:00:00(7天) |
--output | 标准输出文件 | --output=output_%j.log |
--error | 标准错误文件 | --error=error_%j.log |
sacct:查看历史作业
sacct用于查询已完成作业的详细信息,包括运行时间、资源使用情况和退出状态,是排查问题和优化作业的重要工具。基本用法如下:
# 1. 查看过去24小时自己的作业
sacct
# 2. 查看指定作业的详细信息
sacct -j 12345
# 3. 查看指定时间范围内的作业
sacct -S 2026-05-01 -E 2026-05-10
# 4. 自定义输出格式(最常用)
sacct --format=JobID,JobName,State,Elapsed,AllocCPUS,MaxRSS
# 5. 输出示例
[root@master001 deepseek-v4-flash]# sacct
JobID JobName Partition Account AllocCPUS State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
74 qwen35 batch root 384 RUNNING 0:0
74.batch batch root 192 RUNNING 0:0
74.extern extern root 384 RUNNING 0:0 输出字段说明:
| 字段 | 含义 | 单位 |
|---|---|---|
JobID | 作业ID | |
JobName | 作业名称 | |
State | 作业最终状态 | COMPLETED(成功)、FAILED(失败)、CANCELLED(取消) |
Elapsed | 实际运行时间 | |
AllocCPUS | 分配的CPU核数 | |
MaxRSS | 最大内存使用量 | KB |
ExitCode | 退出码 | 0表示正常结束 |
scancel:取消作业
当您的作业运行错误或不再需要时,可以使用squeue查看JOBID,并用scancel命令取消它。基本用法如下:
# 1. 取消单个作业
scancel 12345 #(jobid)
# 2. 取消多个作业
scancel 12345 12346 12347
# 3. 取消自己所有的作业
scancel --me
# 4. 取消所有排队中的作业
scancel -t PD
# 5. 取消指定分区的所有作业
scancel -p batchscontrol:作业管理工具
scontrol是一个功能强大的管理工具,普通用户主要用它来查看作业的详细信息和暂停/恢复作业。基础用法如下:
# 1. 查看单个/所有作业的完整详细信息(排查问题必备)
scontrol show job 12345
scontrol show jobs
# 2. 暂停排队中的作业(暂时不让它运行)
scontrol hold 12345
# 3. 恢复被暂停的作业
scontrol release 12345常见问题排查
作业一直在排队(PD状态)
原因1:集群资源不足
解决:使用
sinfo查看空闲节点,查看共享存储是否正常,或调整作业资源需求
原因2:有更高优先级的作业在前面
解决:耐心等待,或联系管理员调整优先级
原因3:申请的资源超过分区限制
解决:使用
sinfo -l查看分区的最大资源限制,调整申请量
作业提交后很快失败
步骤1:查看作业的错误文件:
cat 12345.err步骤2:查看作业的退出信息:
sacct -j 12345 -l常见原因:
脚本语法错误
缺少依赖库或文件路径错误
内存不足(OOM)
运行时间超过限制
如何查看作业的实时输出
作业运行过程中,输出会实时写入到您指定的--output文件中,可以使用以下命令查看:
# 实时查看输出
tail -f 12345.out常用Slurm环境变量
| 变量名 | 说明 |
|---|---|
SLURM_JOB_ID | 作业ID |
SLURM_JOB_NAME | 作业名称 |
SLURM_JOB_NODELIST | 作业分配的节点列表 |
SLURM_SUBMIT_DIR | 作业提交目录 |
SLURM_ARRAY_TASK_ID | 作业数组任务ID |
作业状态代码
| 代码 | 状态 | 说明 |
|---|---|---|
PD | PENDING | 排队中 |
R | RUNNING | 运行中 |
CG | COMPLETING | 完成中 |
CD | COMPLETED | 成功完成 |
F | FAILED | 运行失败 |
CA | CANCELLED | 被取消 |
TO | TIMEOUT | 超时 |
OOM | OUT_OF_MEMORY | 内存不足 |