1. 什么是 Slurm?

Slurm(Simple Linux Utility for Resource Management,资源管理简易 Linux 工具)是一个开源、高度可扩展、容错性强的集群管理和作业调度系统。它被广泛应用于高性能计算(HPC)、人工智能(AI)训练、大数据处理等需要大规模并行计算资源的场景。

简单来说,Slurm 就像是一个超级计算机集群的“操作系统”,负责将用户提交的计算任务(作业)合理地分配到集群中的各个计算节点上,并高效地管理这些节点上的 CPU、内存、GPU 等硬件资源。

2. Slurm 的核心组件与架构

一个典型的 Slurm 集群由以下核心组件构成:

  • 控制守护进程(slurmctld):运行在管理节点上,是整个集群的“大脑”。它负责监控所有节点和分区的状态,接收并调度用户提交的作业,管理作业队列。如同:控制大脑
  • 计算节点守护进程(slurmd):运行在每个计算节点上,是节点的“执行器”。它接收来自 slurmctld 的指令,负责在本节点上启动、监控和终止作业任务。如同:工蜂
  • 数据库守护进程(slurmdbd):可选组件,用于将作业记账、资源使用等数据持久化到数据库中,便于进行资源使用统计、计费和审计。如同:记账管理员,负责记账
  • 用户命令行工具:用户与 Slurm 交互的主要接口,例如:
    • sbatch:提交批处理作业脚本。
    • srun:交互式地运行并行作业。
    • scancel:取消已提交的作业。
    • squeue:查看作业队列状态。
    • sinfo:查看集群节点和分区状态。
    • sacct:查看已完成的作业记账信息。

架构示意图
在这里插入图片描述

3. Slurm 的核心概念

理解以下几个关键概念是使用 Slurm 的基础:

  • 作业(Job):用户提交的一个计算任务单元。一个作业可以包含一个或多个任务(Steps)。
  • 任务(Task/Step):作业内的一个具体执行单元,通常对应一个并行进程。一个作业可以启动多个任务在多核或多节点上并行运行。
  • 节点(Node):集群中的一台物理或虚拟服务器,包含 CPU、内存、GPU 等资源。
  • 分区(Partition):节点的逻辑分组,类似于队列。不同分区可以配置不同的资源限制、访问权限和调度策略(例如,debug 分区用于短时间测试,compute 分区用于长时间生产任务)。
  • 作业数组(Job Array):一种高效提交大量相似作业的方式,只需一个脚本即可提交成百上千个参数化或数据并行的作业。

4. 基本使用命令

4.1 查看集群状态

# 查看所有分区和节点的状态
sinfo

# 以更详细的格式查看节点信息
sinfo -N -l

# 查看特定分区的信息
sinfo -p compute

4.2 提交批处理作业

创建一个名为 myjob.slurm 的脚本:

#!/bin/bash
#SBATCH --job-name=test-job          # 作业名称
#SBATCH --output=job-%j.out          # 标准输出文件
#SBATCH --error=job-%j.err           # 标准错误文件
#SBATCH --partition=compute          # 指定分区
#SBATCH --nodes=2                    # 请求节点数
#SBATCH --ntasks-per-node=4          # 每个节点的任务数(总任务数 = nodes * ntasks-per-node)
#SBATCH --time=01:00:00              # 最大运行时间 (时:分:秒)
#SBATCH --mem=4G                     # 每个节点内存

echo “开始运行作业...”
srun hostname                         # 使用 srun 在分配的资源上运行命令
echo “作业完成。”

使用 sbatch 提交:

sbatch myjob.slurm

4.3 管理作业

# 查看作业队列(所有用户)
squeue

# 查看自己的作业
squeue -u $USER

# 取消一个作业(JOBID 通过 squeue 查看)
scancel <JOBID>

# 查看已完成作业的详细信息
sacct -j <JOBID> --format=JobID,JobName,Partition,Elapsed,State,ExitCode

4.4 交互式运行作业

适用于调试或需要即时交互的场景:

# 申请一个节点的一个核心,交互运行 1 小时
srun --pty -p debug -N 1 -n 1 -t 1:00:00 /bin/bash

# 申请一个节点,一个 GPU,交互运行
srun --pty -p gpu --gres=gpu:1 -t 0:30:00 /bin/bash

5. Slurm 的优势与适用场景

优势

  1. 开源免费:无商业许可费用。
  2. 高可扩展性:支持从几个节点到数万个节点的超大规模集群。
  3. 高容错性:节点故障时能自动恢复或重新调度作业。
  4. 策略灵活:支持复杂的调度策略(公平共享、优先级、回填等)和资源管理(CPU、内存、GPU、许可证等)。
  5. 生态丰富:与众多 HPC 软件、监控工具、计费系统集成良好。

典型适用场景

  • 高校与科研机构:为多个课题组提供共享计算资源。
  • 企业研发:运行大规模仿真、AI 模型训练、基因测序分析。
  • 云计算:作为云上 HPC 服务的底层调度器。

6. 总结

Slurm 是现代高性能计算领域事实上的标准作业调度系统。它通过高效的资源管理和作业调度,使得昂贵的计算集群资源得以被多用户公平、高效地共享利用。掌握 Slurm 的基本概念和命令,是进入 HPC 和 AI 大规模计算世界的必备技能。

对于初学者,建议从在本地或小型测试集群上练习 sinfosqueuesbatch 等基本命令开始,逐步理解作业脚本的编写和资源参数的配置。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐