Slurm用法简介

好,这里给你整理一份 Slurm 详细用法指南,从基础到进阶都涵盖,结合你在 HPC 上跑 NBody6++ 的场景。


1️⃣ Slurm 简介

Slurm = Simple Linux Utility for Resource Management

  • 用于集群作业调度和资源管理
  • 管理 CPU、GPU/DCU、内存、节点、队列(Partition)
  • 用户通过 作业脚本命令行 提交计算任务

2️⃣ 基本概念

名称 含义
Partition 集群中的队列或资源池,比如 kshdexclu10
Node 计算节点,如 j16r2n00
CPU Core 节点的处理核心
Gres 可选资源,GPU / DCU / MIC
Job 用户提交的计算任务
JobID Slurm 给作业分配的唯一编号
srun 启动并行作业的命令
sbatch 提交批处理作业脚本
scancel 取消作业

3️⃣ 常用命令

查询状态

bash 复制代码
sinfo            # 查看集群分区状态
sinfo -N         # 查看各节点状态
squeue           # 查看你提交的作业队列
squeue -u $USER  # 查看自己的作业
scontrol show node <nodename>  # 查看节点详情

提交作业

  1. 批处理提交(脚本方式):
bash 复制代码
sbatch nbody.sbatch
  1. 交互式运行(适合调试):
bash 复制代码
srun -p kshdexclu10 -N 1 --gres=dcu:1 --pty bash
  • -p 指定 Partition
  • -N 分配节点数
  • --gres=dcu:1 分配 1 个 DCU
  • --pty bash 打开交互 shell

取消作业

bash 复制代码
scancel <JobID>

4️⃣ 作业脚本示例

nbody.sbatch 示例:

bash 复制代码
#!/bin/bash
#SBATCH --job-name=nbody_test
#SBATCH --output=nbody_%j.out      # %j -> JobID
#SBATCH --error=nbody_%j.err
#SBATCH --partition=kshdexclu10
#SBATCH --nodes=1
#SBATCH --ntasks=4                 # MPI 进程数
#SBATCH --cpus-per-task=8
#SBATCH --gres=dcu:1
#SBATCH --time=02:00:00            # hh:mm:ss
#SBATCH --mem=120G

module purge
module load compiler/gcc/11.3.0
module load mpi/openmpi/4.1.2
module load compiler/dtk/23.04
export OMP_NUM_THREADS=8
ulimit -s unlimited
export OMP_STACKSIZE=80G

echo "Running NBody6++ with $SLURM_NTASKS MPI tasks and $OMP_NUM_THREADS threads"

mpirun -np $SLURM_NTASKS ../install/bin/nbody6++ < N10k_noDat10.inp

5️⃣ srunmpirun 的区别

命令 用途
srun Slurm 原生并行运行命令,会自动分配资源
mpirun / mpiexec 启动 MPI 程序,需要手动匹配 Slurm 分配的资源(通常和 OpenMPI 配合)

推荐

bash 复制代码
srun -n 4 ../install/bin/nbody6++ < input.inp
  • Slurm 会自动绑定 CPU / GPU
  • 不用手动 mpirun,减少出错概率

6️⃣ 交互式调试

  • 快速测试程序或修改参数,不用写 sbatch 文件:
bash 复制代码
srun -p kshdexclu10 -N 1 --ntasks=1 --gres=dcu:1 --pty bash
  • 进入节点后:
bash 复制代码
../install/bin/nbody6++ < N10k_noDat10.inp

7️⃣ 高级用法

同时请求多节点多 GPU

bash 复制代码
sbatch -p kshdexclu10 -N 2 --ntasks-per-node=4 --gres=dcu:2 nbody.sbatch
  • 2 个节点,每个节点 4 个 MPI 进程,每个节点分配 2 张 DCU
  • Slurm 会帮你调度,不会占用其它空闲节点

设置作业依赖

bash 复制代码
sbatch --dependency=afterok:<JobID> next_job.sbatch
  • 下一步作业会在 <JobID> 成功完成后才启动

查看详细作业信息

bash 复制代码
scontrol show job <JobID>

8️⃣ Tips

  1. 作业输出文件 最好包含 %j,避免覆盖
  2. **--ntasks--cpus-per-task**区分 MPI 进程数和每个进程的线程数
  3. --gres 对 GPU / DCU 必须指定,否则程序找不到 GPU
  4. 调试小作业在交互节点测试,正式大作业用 sbatch 提交

如果你愿意,我可以帮你画一张 Slurm 作业提交流程图 ,从提交 -> 分配节点 -> 运行 -> 输出 -> 结束,让整个流程一眼就看明白,非常适合新手 HPC 使用。

相关推荐
人间打气筒(Ada)4 个月前
GPU 节点专属 Slurm 配置 + 作业脚本模板
linux·ai·集群·slurm·hpc高性能集群
小果运维3 年前
SLURM超算集群资源管理服务的安装和配置-基于slurm22.05.9和centos9stream,配置slurmdbd作为账户信息存储服务
运维·slurm·超算资源管理服务·slurmctld·slurmdbd