【SLURM 入门】sbatch 等概念与常用命令

SLURM 入门:概念与常用命令

一篇面向「提交作业、看队列、取消作业」的 SLURM 简明入门,适合在集群上跑训练、数据处理时查阅。


一、SLURM 是什么

SLURM (Simple Linux Utility for Resource Management)是当前最常用的集群作业调度系统之一。你登录的往往是「登录节点」,真正跑程序的是「计算节点」;SLURM 负责:

  • 资源管理:有多少 CPU/GPU、多少内存、哪些节点空闲
  • 作业调度:谁先跑、谁排队、在哪个节点跑
  • 隔离与限流:按用户/分区限制同时作业数、避免把集群跑崩

所以:你通过提交「作业」(job)来算题 ,而不是在登录节点直接 python train.py。提交后由 SLURM 排队、分配资源、在计算节点上执行。


二、核心概念速览

概念 含义
Job(作业) 你提交的一整次任务,对应一个 Job ID(如 712、718)
Node(节点) 一台物理/虚拟机器,上有若干 CPU、GPU、内存
Partition(分区) 把节点划分成不同队列,如 maingpudebug,不同分区有不同的资源与限制
QOS(Quality of Service) 服务质量策略,常用来限制「每用户同时运行作业数」「每用户总 CPU 时长」等
Resource / GRES 可申请的资源类型,常见如 gpugpu:h200:2,有的集群还有自定义资源(如 shard
sbatch 脚本 一个 shell 脚本,头部用 #SBATCH 写作业参数,用 sbatch 脚本名 提交

一次典型流程:写一个带 #SBATCH 的脚本 → sbatch 提交 → 作业进入队列(Pending)→ 资源满足后到某节点运行(Running)→ 跑完后结束,标准输出/错误写到指定 log 文件。


三、写一个 sbatch 脚本:常用参数

在脚本最前面(在任意可执行命令之前)用注释形式写 SLURM 参数,例如:

bash 复制代码
#!/bin/bash
#SBATCH --job-name=my_job       # 作业名,squeue 里会显示
#SBATCH --output=/path/to/log_%j.out   # 标准输出,%j 会替换成 Job ID
#SBATCH --error=/path/to/log_%j.err     # 标准错误(不写则和 output 合并)
#SBATCH --nodes=1               # 用几个节点
#SBATCH --ntasks=1               # 总任务数(单机单任务通常 1)
#SBATCH --cpus-per-task=16      # 每个任务要多少 CPU 核
#SBATCH --gres=gpu:h200:2       # 每节点 GPU:类型:数量,如 2 张 H200
#SBATCH --time=2-00:00:00       # 最长运行时间,格式 天-时:分:秒
#SBATCH --partition=main        # 分区名(有的集群默认 main 可省略)
#SBATCH --mem=64G                # 可选:申请内存

# 下面写你要真正执行的命令
conda activate myenv
python train.py

注意:

  • output/error 的目录要先存在,否则可能写不进去或写到提交目录。
  • 只用 CPU、不占 GPU ,不要写 --gres=gpu:...;若集群有自定义资源再按需写。
  • --time 别设得过大,否则排队时间可能更长;设成你预估的 1.2~1.5 倍即可。

四、提交与查看:常用命令

1. 提交作业:sbatch

bash 复制代码
sbatch /path/to/your_script.sh

成功会打印 Submitted batch job 712,712 就是 Job ID,后面查状态、取消都要用这个 ID。

2. 看自己的作业:squeue

bash 复制代码
squeue -u $USER          # 只看自己的作业(推荐)
squeue -u swd            # 或直接写用户名
squeue -u $USER -l       # 列表更详细(节点、分区、时间等)
squeue -u $USER -t RUNNING   # 只看正在跑的
squeue -u $USER -t PENDING   # 只看排队的

输出里常见列:

  • JOBID:作业 ID
  • ST :状态,R = Running(运行中),PD = Pending(排队)
  • NODELIST(REASON) :在哪个节点跑,或排队原因,如 (QOSMaxJobsPerUserLimit) 表示「每用户作业数上限到了,在等前面的结束」

3. 取消作业:scancel

bash 复制代码
scancel 718              # 取消单个作业
scancel 712 714 718      # 取消多个
scancel -u swd           # 取消自己名下所有作业(慎用)

4. 看作业详情:scontrol

bash 复制代码
scontrol show job 712    # 某条作业的详细配置、状态、节点等

5. 看历史记录:sacct

bash 复制代码
sacct -u $USER                    # 自己最近结束的作业
sacct -u $USER --starttime 2026-03-01   # 从某天起
sacct -j 712                      # 某条作业的统计(运行时间、退出码等)

五、常见状态与排队原因

状态 / 原因 含义
R (Running) 正在计算节点上跑
PD (Pending) 排队中,等资源或策略放行
QOSMaxJobsPerUserLimit 该 QOS 下「每用户同时作业数」已满,等已有作业结束
Resources 暂时没有满足你申请的资源(如 GPU 型号/数量)
PartitionTimeLimit 分区/作业时间限制导致暂时不调度

遇到长时间 PD,先看 NODELIST(REASON),再根据需要减资源或等前面作业结束。


六、小抄:一条命令对应一件事

想做的事 命令
提交作业 sbatch script.sh
看自己作业 squeue -u $USER
看作业详情 scontrol show job <JOBID>
取消作业 scancel <JOBID>
看历史 sacct -u $USER
看分区/节点资源 sinfosinfo -N -l

七、实用建议

  1. log 路径#SBATCH --output--error 用绝对路径,并确保目录存在(可脚本里 mkdir -p 或事先建好)。
  2. 脚本名别拼错sbatch dit_traaining_example.sh 若拼错,可能提交到错误脚本或失败,log 就不会出现在你期望的目录。
  3. CPU 作业 :只占 CPU 时不要写 --gres=gpu:...;若集群有 shard 等自定义资源,按管理员说明填写。
  4. 限流 :遇到 QOSMaxJobsPerUserLimit 时,要么等,要么用 scancel 取消不需要的作业腾出名额。

把上面几条命令和概念记牢,日常「提交 → 看队列 → 必要时取消」就够用了。更细的(如多节点 MPI、数组作业、依赖关系)可以再查官方文档或问集群管理员。

相关推荐
机器人零零壹1 天前
专访越擎科技创始人: 外骨骼的设计与仿真该如何入门
人工智能·具身智能·机器人仿真·离线编程·irobotcam·人形机器人设计
Cha0DD1 天前
【由浅入深探究langchain】第二十集-SQL Agent+Human-in-the-loop
人工智能·python·ai·langchain
Cha0DD1 天前
【由浅入深探究langchain】第十九集-官方的SQL Agent示例
人工智能·python·ai·langchain
2601_949221031 天前
Splashtop赋能企业级远程办公全场景安全连接成选型优选
运维·人工智能·安全
阿拉斯攀登1 天前
YOLO 视觉检测全栈核心名词指南:从训练调参到边缘部署,商用落地必懂
人工智能·yolo·计算机视觉·视觉检测·bytetrack
AAAAA92401 天前
2026年车载机器人行业:技术突破与生态融合加速发展
人工智能·机器人·制造
科研实践课堂(小绿书)1 天前
机器学习在智能水泥基复合材料中的应用与实践
人工智能·机器学习·复合材料·水泥基·混凝土
AI医影跨模态组学1 天前
Hepatology(IF=16.8)复旦大学附属中山医院孙惠川、徐彬等团队:基于MRI影像组学动态变化预测HCC免疫治疗后病理完全缓解
人工智能
百万蹄蹄向前冲1 天前
让TypeScript 再次伟大:愚人节前夜Claude Code意外开源与OpenClaw小龙虾打造 AI 原生开发新纪元
人工智能·typescript·node.js
智算菩萨1 天前
【Tkinter】4 Tkinter Entry 输入框控件深度解析:数据验证、密码输入与现代表单设计实战
python·ui·tkinter·数据验证·entry·输入框