【Linux】Slurm任务调度系统的使用
📌 什么是 Slurm?
- 在使用高性能计算(HPC)集群时,Slurm 是最常见的任务调度器之一。
- Slurm(Simple Linux Utility for Resource Management)是一个开源的集群资源管理和作业调度系统,用于管理节点资源、调度任务执行,广泛用于科研计算和深度学习训练
🧰 常用命令一览
| 命令 | 作用 | 示例 |
|---|---|---|
sinfo |
查看当前集群节点状态 | sinfo |
squeue |
查看正在运行或排队的任务 | squeue -u $USER |
srun |
启动一个交互式任务或直接运行命令 | srun --pty bash |
sbatch |
提交一个批处理任务脚本 | sbatch job.sh |
scancel |
取消任务 | scancel 123456 |
📝 1. sinfo —— 查看节点状态
1 | sinfo |
这个命令可以看到所有节点的状态,如哪些是空闲(idle)、正在使用(alloc)、维护中(down)等。例如:
1 | PARTITION AVAIL TIMELIMIT NODES STATE NODELIST |
字段解释如下:
PARTITION:任务分区名。一个集群通常根据不同硬件资源(如 CPU、GPU)划分多个分区。
cpu* 表示默认分区。
AVAIL:分区是否可用,up 表示可用。
TIMELIMIT:任务最大运行时间,这里是 infinite 表示无限制。
NODES:该分区包含的节点数。
STATE:节点当前状态:
idle:空闲
alloc:被分配中
mix:部分资源被使用
NODELIST:节点名称列表
📋 2. squeue —— 查看任务队列
1 | squeue -u $USER |
显示你当前提交的所有任务状态。输出示例:
1 | JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) |
常用状态说明:
JOBID:任务编号,这里是 104981。
PARTITION:任务所在分区(如 a100)。
NAME:任务名称,这里是 bash,说明可能是你用 srun –pty bash 启动的交互式 shell。
USER:用户名,这里是 tlj。
ST(State):任务状态,这里是 R,表示任务正在运行。
其他常见状态:
PD:Pending,排队等待中
CG:Completing,正在结束
F:Failed,任务失败
TIME:任务已运行的时间,这里是 5 分钟 8 秒。
NODES:使用的节点数量,这里是 1 个。
NODELIST(REASON):使用的节点名称,这里是 a100node1。
💻 3. srun —— 交互式运行命令或脚本
srun 通常用于:
- 启动交互式 shell
- 在分配的资源上直接运行命令(无需写脚本)
示例:
启动一个交互式 bash:
1 | srun \ |
或者直接运行脚本:
1 | srun --partition=gpu --nodes=1 --gres=gpu:2 --cpus-per-task=4 --mem=32G --time=02:00:00 /usr/local/opt/anaconda3/bin/python3 test_gpu.py |
参数解释
| 参数 | 含义 | 示例 |
|---|---|---|
--partition |
指定运行任务的分区,比如 gpu、a100 等 |
--partition=a100 |
--nodes |
请求节点数,通常为 1 个节点 | --nodes=1 |
--ntasks |
启动的任务数,默认为 1 | --ntasks=1 |
--cpus-per-task |
每个任务请求的 CPU 核数,适用于多线程程序 | --cpus-per-task=4 |
--mem |
请求的内存大小,单位为 M/G/T | --mem=8G |
--gres=gpu:n |
请求 GPU 资源,n 表示 GPU 数量 | --gres=gpu:1 |
--nodelist |
指定任务运行在哪个节点(调试常用) | --nodelist=a100node1 |
--pty /bin/bash |
启动一个交互式 shell(如 Bash) | --pty /bin/bash |
--time |
设置作业的最大运行时间,格式为 hh:mm:ss | --time=02:00:00 |
🧾 4. sbatch —— 提交作业脚本
你可以将运行任务的命令写入脚本中并通过 sbatch 提交。例如:
job.sh
1 |
|
提交命令:
1 | sbatch job.sh |
❌ 5. scancel —— 取消任务
如果你提交了错误的任务,可以通过 JOBID 来取消:
1 | scancel 123456 |
注意:在通过srun运行程序期间(包括直接运行或通过bash运行),务必不要输入Ctrl C或Ctrl Z。要终止程序运行,另外打开一个命令行窗口登录集群后用scancel job_id。
🔚 小结
如果你是初次接触 Slurm 的新手,可以先掌握以下基本流程:
- 编写
job.sh脚本 - 使用
sbatch job.sh提交任务 - 使用
squeue -u $USER查看任务状态 - 用
scancel取消错误任务 - 用
srun进行调试或交互操作
如果你对具体参数不确定,也可以通过命令查看帮助文档:
1 | man sbatch |