Slurm 使用入门教程

🧭 Slurm 使用入门教程:作业脚本编写、任务提交与队列管理指南

Slurm(Simple Linux Utility for Resource Management)是目前最主流的高性能计算(HPC)资源调度系统。本文将介绍:

  • 如何编写 .slurm 作业脚本
  • 如何提交任务
  • 如何查看任务队列
  • 如何规范存放日志
  • 如何查看 .out / .err 文件
  • 如何使用 tail -f 滚动查看输出
  • 如何申请 GPU、CPU、内存
  • 如何让大模型自动生成 Slurm 脚本

本文假设你所在的集群使用 partition = lab104


📌 1. 集群资源最大限制(本服务器)

服务器硬件资源上限如下:

资源最大可申请量
CPU56 核
内存约 256 GB
GPU2 张(NVIDIA)
节点数单节点(1 台服务器)

注意事项:

  • 若申请 GPU > 2,会导致作业永久 PENDING 或被系统拒绝
  • 若申请内存过大(>250GB)也会导致任务无法调度
  • 建议申请资源量 ≤ 实际需求,避免占用队列

📌 2. 推荐的日志规范

为了避免日志文件到处乱飞,建议统一放在:

1
2
~/slurm_logs/<job_name>/<jobid>.out
~/slurm_logs/<job_name>/<jobid>.err

例如:

1
2
~/slurm_logs/train/12345.out
~/slurm_logs/train/12345.err

你可以在脚本中这样设置:

1
2
#SBATCH --output=/home/$USER/slurm_logs/train/%j.out
#SBATCH --error=/home/$USER/slurm_logs/train/%j.err

📌 3. 编写 .slurm 作业脚本

下面是一个规范化的作业脚本示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
#SBATCH --job-name=test_job
#SBATCH --partition=lab104
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=16G
#SBATCH --gres=gpu:1
#SBATCH --time=48:00:00

#SBATCH --output=/home/$USER/slurm_logs/test_job/%j.out
#SBATCH --error=/home/$USER/slurm_logs/test_job/%j.err

echo "Job started at $(date)"
python train.py
echo "Job finished at $(date)"

📝 常用 Slurm 参数说明表

参数作用
--cpus-per-task=4每个任务分配 4 个 CPU
--gres=gpu:1申请 1 个 GPU
--mem=16G申请 16GB 内存
--time=48:00:00最长运行 48 小时
--output / --error指定日志路径

📌 4. 提交任务:sbatch

1
sbatch job.slurm

输出示例:

1
Submitted batch job 12345

📌 5. 查看任务队列:squeue

查看自己的任务:

1
squeue -u $USER

查看所有任务:

1
squeue

任务状态说明:

状态含义
PDPending(排队)
RRunning(运行中)
CGCompleting(结束中)
FFailed(失败)

📌 6. 取消任务:scancel

取消指定任务:

1
scancel 12345

取消当前用户全部任务:

1
scancel -u $USER

📌 7. 查看 .out.err 日志

假设日志路径为:

1
2
~/slurm_logs/test_job/12345.out
~/slurm_logs/test_job/12345.err

查看输出日志:

1
cat ~/slurm_logs/test_job/12345.out

查看错误日志:

1
cat ~/slurm_logs/test_job/12345.err

📌 8. 滚动查看实时输出(tail -f)

训练过程持续产生输出时最常用:

实时查看 .out

1
tail -f ~/slurm_logs/test_job/12345.out

实时查看 .err

1
tail -f ~/slurm_logs/test_job/12345.err

退出:

1
Ctrl + C

📌 9. 交互式任务(srun)

如果你需要进入带 GPU 的交互式环境调试:

1
srun --partition=lab104 --gres=gpu:1 --cpus-per-task=4 --mem=16G --pty bash

退出:

1
exit

📌 10. GPU 多卡示例

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
#SBATCH --job-name=multi_gpu
#SBATCH --partition=lab104
#SBATCH --gres=gpu:2
#SBATCH --cpus-per-task=8
#SBATCH --mem=64G
#SBATCH --output=/home/$USER/slurm_logs/multi_gpu/%j.out
#SBATCH --error=/home/$USER/slurm_logs/multi_gpu/%j.err

python train_ddp.py

📌 11. 用大模型自动生成 .slurm 文件(推荐)

只需一条指令,例如:

帮我生成一个 Slurm 脚本,partition 为 lab104,需要 1 块 GPU、4 个 CPU、32GB 内存,运行 train.py,并规范输出日志。

大模型即可自动生成可直接运行的 Slurm 脚本,非常方便。