Slurm 是一个开源的、高度可扩展的 工作负载管理器 (也称为作业调度系统或集群管理器),专门为高性能计算集群设计
您可以把它想象成大型计算集群的“操作系统”或“交通警察”。当成千上万个计算节点和数百个用户共享一个集群时,Slurm 负责:
Slurm 是目前全球高性能计算领域最流行和事实上的标准调度系统之一,被许多世界顶级的超算中心(如美国的劳伦斯利弗莫尔国家实验室、 橡树岭国家实验室等)和大学集群广泛使用
为了理解 Slurm,需要掌握以下几个核心概念:
cpu-partition(通用CPU队列),
gpu-partition(GPU队列),
bigmem-partition(大内存队列)
用户使用 Slurm 的典型流程如下:
#SBATCH
指令的 Shell 脚本(通常是 Bash)。这些指令用于向 Slurm 申请资源
sbatch
命令将作业脚本提交给 Slurm
squeue、 scontrol
等命令查看作业状态、修改作业属性
| 命令 | 功能描述 | 常用示例 |
|---|---|---|
sbatch |
提交作业 | sbatch my_job.sh |
squeue |
查看作业队列状态 | squeue (查看所有作业)
squeue -u $USER (查看自己的作业)
squeue -p gpu (查看gpu分区的作业)
|
scancel |
取消作业 | scancel 12345
(取消作业ID为12345的作业) scancel -u $USER
(取消自己的所有作业)
|
sinfo |
查看分区和节点状态 | sinfo
(查看所有分区节点状态) sinfo -p gpu
(查看gpu分区状态)
|
scontrol |
查看和管理作业/节点详细信息 | scontrol show job 12345
(显示作业12345的详细信息)
|
salloc |
交互式分配资源 | salloc -n 4 --pty /bin/bash
(分配4个CPU核心,并启动一个交互式Shell)
|
srun |
在已分配的资源上运行并行任务,或直接提交交互式作业 | 在作业脚本中:srun my_mpi_program
在登录节点:srun -p gpu -n 1 --gres=gpu:1 --pty /bin/bash
(申请一块GPU进行交互式调试)
|
一个最简单的 Slurm 作业脚本示例(my_job.sh):
#!/bin/bash
#SBATCH -J my_test_job # 作业名称
#SBATCH -p cpu-partition # 提交到哪个分区
#SBATCH -N 2 # 申请2个计算节点
#SBATCH --ntasks-per-node=4 # 每个节点上运行4个任务(进程)
#SBATCH -t 01:30:00 # 最大运行时间:时:分:秒
#SBATCH -o %j.out # 标准输出重定向到文件(%j 代表作业ID)
#SBATCH -e %j.err # 标准错误重定向到文件
# 加载必要的环境模块(如果需要)
module purge
module load intel-compiler/2020 openmpi/4.0
# 进入作业执行目录
cd ~/my_project
# 执行并行计算程序(例如MPI程序)
# 使用 srun 来启动并行任务
srun ./my_mpi_program arg1 arg2
# 如果不是MPI程序,而是多线程OpenMP程序,可以这样:
# export OMP_NUM_THREADS=8
# ./my_omp_program
然后使用 sbatch my_job.sh 提交它
Slurm 是现代高性能计算集群不可或缺的“大脑”。它通过高效的资源管理和作业调度,使得大量用户能够公平、有序、高效地共享庞大的计算资源。 对于用户而言,学习 Slurm 的基本用法是使用任何 HPC 集群的第一步