一句话定义:Slurm(Simple Linux Utility for Resource Management,如今更多叫 Slurm Workload Manager)是一套跑在 Linux 集群上的作业调度系统,它决定"谁的活先干、干在哪几台机器上、能干多久"。
把一个大模型训练集群想象成宿舍楼里的公共洗衣房:洗衣机就那么几十台,想用的人排着队。Slurm 就是这个洗衣房的预约叫号系统。你交一张单子(作业脚本),写清楚要占用几台机器、几张 GPU、预计跑多久;Slurm 先看有没有空闲机器,有就立刻开工,没有就把你扔进队列。跑完自动释放,轮到下一位。它本身不参与计算,只负责分配和记账——但这套规则决定了你能不能拿到卡。
它有几个必须认识的词:
- 节点(node):一台物理机器。
- 分区(partition):一组节点的逻辑分组,比如
gpu分区和cpu分区,不同分区资源和时限不同。 - 作业(job):一次提交的计算任务,可以是脚本,也可以是交互式会话。
- 命令:
sbatch提交脚本、srun启动并行任务、squeue看队列、sinfo看节点状态、scancel取消作业。
很多人会把 Slurm 和 Kubernetes 混着理解,其实两者气质完全不同:
| Slurm | Kubernetes | |
|---|---|---|
| 调度对象 | 批处理作业,跑完即释放 | 长期运行的容器服务 |
| 资源粒度 | 整节点、整卡 | Pod、容器,可细粒度切分 |
| 典型场景 | 科研超算、大模型训练集群 | 互联网后端、在线业务 |
| 使用感受 | 提交、排队、等待叫号 | 声明式、自动拉起、弹性伸缩 |
另一个容易混淆的是 MPI。MPI(Message Passing Interface)是并行程序之间通信的库,Slurm 负责把进程铺开到多台机器上——一个是"把活分下去",一个是"分下去之后互相喊话",二者经常配合使用。同类调度器还有 PBS、LSF、SGE 等,思路类似,具体语法各有差异。
对从业者的意义很直接:进入大模型训练或 HPC 岗位,第一件实操往往不是改模型,而是写一份 sbatch 脚本、估算资源、盯着 squeue 看排到第几位。资源申请是门手艺——报多了排不上队,报少了跑到一半被系统杀掉。云上按需实例是"花钱立刻有",Slurm 则是"排到才有",这是两种完全不同的资源心态。
Slurm 起源自 HPC 社区,至今仍是许多超算和训练集群的默认调度层,具体版本特性、分区策略与配额规则请以所在集群的官方文档和管理员说明为准。一句话收尾:它不显眼,却是决定你何时拿到那张卡的"发牌规则"。
