Slurm(全称 Slurm Workload Manager,曾用名 Simple Linux Utility for Resource Management)是高性能计算(HPC)集群、超级计算机以及现代大规模 AI 算力集群中统治级的一款开源集群作业调度与工作负载管理器。
简单来说,当一个实验室、数据中心或云平台拥有成百上千台服务器、数万张 GPU 时,不可能让每个工程师直接 SSH 登录到某台机器上抢占资源运行程序。Slurm 就是这个集群的“终极交通大队长”,负责统一管理硬件资源,公平、高效地分配任务。
1. Slurm 的三大核心功能
- 资源分配(Resource Allocation):为用户分配特定时间段内计算节点(Nodes)的独占或共享访问权限(包括 CPU、显存、内存、通用资源如 GPU 等)。
- 作业调度(Job Scheduling):提供一个框架,对排队等待的作业(Jobs)进行复杂的优先级排序、抢占和按序启动、执行和监控。
- 资源争用仲裁:当数百名研发人员同时提交训练任务、资源供不应求时,Slurm 依靠公平份额(Fair-share)、多因子优先级、QoS(服务质量)等算法解决冲突。
2. Slurm 的分布式架构与核心组件
Slurm 采用一种高度模块化、轻量级的后台守护进程(Daemon)架构,主要分为以下几个角色:
① 控制平面 (Control Plane)
slurmctld(中央控制器守护进程):整个集群的“大脑”,通常运行在独立的管理节点上。它负责监控所有硬件状态、维护作业队列、根据调度策略进行排产。为了防止单点故障,通常会配置一个 Backupslurmctld实现高可用。slurmdbd(数据库守护进程):负责将历史作业、计费(Accounting)、资源配额限制、集群联动信息等持久化写入底层的 MySQL/MariaDB 数据库。这为后续做资源审计、算力开销统计提供了依据。
② 执行平面 (Execution Plane)
slurmd(节点计算守护进程):运行在每一个计算节点上的“包工头”。它像一个安全的远程 Shell 监听器,接收来自slurmctld的指令,在本地创建作业环境、拉起具体的计算进程、监控本地资源占用(如防止内存溢出),并在作业结束时清理现场、汇报状态。
3. Slurm 的基本概念与术语
在使用 Slurm 时,你会频繁遇到以下核心术语:
- Node(节点):集群中的单台物理服务器或虚拟机。
- Partition(分区):逻辑上的“作业队列”。管理员通常把节点按硬件类型、限时长短划分为不同的分区(例如:
gpu_short分区限时 2 小时,cpu_long分区允许运行 7 天)。 - Job(作业):用户提交给 Slurm 管理的一核或多核计算请求。Job 可以由多个顺序或并行的Job Steps(作业步)组成。
- GRES(Generic Resources,通用资源):用于调度非 CPU 的特殊硬件。在 AI 集群中,GPU 就是最典型的 GRES(例如限制每个 Job 只能申请 4 张
gpu:a100:4)。
4. 研发人员最常用的四核命令(工具箱)
用户在登录节点(Login Node)进行日常开发和作业提交时,主要通过以下几个命令行接口(CLI)与集群交互:
①sbatch—— 离线批处理提交(最常用)
编写一个特殊的 Shell 脚本(其中包含以#SBATCH开头的预编译指令),提交给系统后,用户可以断开连接,Slurm 会在排到队时自动在后台执行它。
#!/bin/bash#SBATCH --job-name=train_llm # 作业名称#SBATCH --partition=gpu_nodes # 提交到 GPU 分区#SBATCH --nodes=2 # 申请 2 个计算节点#SBATCH --gres=gpu:4 # 每个节点申请 4 张 GPU (共 8 卡)#SBATCH --cpus-per-task=8 # 每个任务分配 8 个 CPU 核心#SBATCH --time=48:00:00 # 最大运行时间 48 小时#SBATCH --output=res_%j.log # 标准输出日志 (%j 会自动替换为 Job ID)# 真正执行的代码sourceactivate my_env srun python train.py--model_config=configs/llama3.json提交命令:sbatch run.sh
②srun—— 交互式/实时任务拉起
用于实时启动一个并行作业(如运行 MPI 程序)。如果你在交互式终端直接运行srun --gres=gpu:1 --pty bash,Slurm 会在分到 GPU 资源后,立即把你重定向(Drop)到那台计算节点的 Bash 中,非常适合调试代码。
③squeue&sinfo—— 状态观测
sinfo:查看当前集群中各个 Partition、各台机器的健康状态(如idle空闲、alloc已分配、down故障)。squeue:查看当前正在运行(状态为R)以及正在排队(状态为PD,并显示排队原因,如Dependency或Resources)的作业列表。
④scancel—— 强杀作业
如果不小心写错代码发生死循环或死锁,通过scancel <Job_ID>可以立即强制释放占用的机器资源。
5. 为什么大模型(LLM)训练首选 Slurm 架构?
在 2026 年的今天,虽然云原生 Kubernetes(K8s)在微服务和 AI 推理部署(Inference)领域无处不在,但在超大规模基础大模型预训练(Pre-training)阶段,Slurm 依然是不可动摇的首选。核心原因在于:
- 极低的通信开销与裸金属性能:大模型分布式训练对网络延迟(InfiniBand 延迟)极其敏感。Slurm 运行在高度一致的 Linux 裸金属(Bare-metal)环境上,没有任何容器网络层(如 Overlay 网络的封装剥离)带来的额外开销。
- 深度集成 MPI 与拓扑感知:Slurm 原生理解物理网络拓扑。当提出需要 32 台机器、256 张 GPU 进行张量并行(Tensor Parallel)时,Slurm 的算法会自动挑选物理上插在同一个 InfiniBand 交换机叶节点(Leaf Switch)下的服务器,最大程度减少跨交换机通信引起的 NCCL 阻塞。
- 极其高效的批量排产机制:支持作业阵列(Job Arrays)和超大规模 Backfill(回填机制)。如果有一个大作业在等待很多机器,Slurm 在等待期间可以把小作业“塞进”空闲的小时间碎片里运行,把 GPU 集群的整体综合利用率(Utilization)压榨到 95% 以上。