以下是 Slurm 调度作业的 常用命令 及其 日常使用场景 的详细说明,涵盖作业提交、管理、监控和调试等核心操作。无论是新手还是管理员,这些命令都值得掌握。
一、作业提交与管理命令
1. sbatch:提交批处理作业
- 用途:将脚本提交到队列,由 Slurm 调度执行。
- 常用参数:
- -J <name>:指定作业名称。
- -p <partition>:指定分区(队列)。
- -N <nodes>:请求节点数。
- -n <tasks>:总任务数(如 MPI 进程数)。
- --time=<hh:mm:ss>:作业最大运行时间。
- --mem=<MB>:每个节点需要的内存。
- --output=<file>:标准输出文件。
- --error=<file>:标准错误文件。
 
- 示例:# 提交一个需要 2 节点、每个节点 4 任务的作业 sbatch -J myjob -p debug -N 2 -n 8 --time=1:00:00 job.sh
- 场景:常规作业提交,尤其是长时间运行的任务。
2. srun:提交交互式作业
- 用途:直接运行并行任务(类似 mpirun),常用于调试。
- 常用参数:与 sbatch类似。
- 示例:# 在 2 个节点上启动 8 个 MPI 进程 srun -N 2 -n 8 ./mpi_program
- 场景:快速测试代码或小规模并行任务。
3. squeue:查看作业队列
- 用途:列出当前队列中的作业状态。
- 常用参数:
- -u <user>:查看指定用户的作业。
- -j <jobid>:查看特定作业。
- --format="%.18i %.9P %.8j %.8u %.2t %.10M %.6D %.4C %R":自定义输出格式。
 
- 示例:# 查看所有运行中的作业(简化格式) squeue -o "%.8i %.12j %.4t %.10M %.4C %.6D %R"
- 场景:实时监控作业状态,检查作业是否排队(PD)、运行(R)或失败(F)。
4. scancel:取消作业
- 用途:终止指定作业。
- 常用参数:
- -u <user>:取消用户的所有作业(管理员权限)。
- -t <state>:取消特定状态的作业(如- PENDING)。
 
- 示例:# 取消作业 ID 为 123 的作业 scancel 123 # 取消用户 alice 的所有作业 scancel -u alice
- 场景:终止错误提交的作业或释放被占用的资源。
5. sacct:查看历史作业信息
- 用途:查询已完成作业的详细信息(需启用 slurmdbd记账功能)。
- 常用参数:
- -j <jobid>:查看特定作业。
- -S <start_time>/- -E <end_time>:按时间范围过滤。
- --format=JobID,JobName,Partition,AllocCPUS,Elapsed,State:自定义输出。
 
- 示例:# 查看过去 24 小时内所有作业的状态 sacct -S now-24hours --format=JobID,JobName,Partition,Elapsed,State
- 场景:审计作业执行情况,统计资源使用。
二、资源监控与节点管理
1. sinfo:查看集群资源状态
- 用途:显示分区和节点的可用资源。
- 常用参数:
- -N:按节点列出详细信息。
- -p <partition>:查看指定分区的状态。
- -o "%N %C %m %G %t":自定义输出(节点、CPU、内存、GPU、状态)。
 
- 示例:# 查看各节点的 CPU 和内存使用情况 sinfo -N -o "%N %C %m %t"
- 场景:检查节点是否在线(idle/mix/down),资源是否充足。
2. scontrol:实时管理集群
- 用途:动态修改作业、节点或分区配置(需管理员权限)。
- 常用操作:
- show job <jobid>:查看作业详细信息(包括失败原因)。
- update NodeName=<node> State=DOWN:将节点标记为下线。
- update JobId=<jobid> TimeLimit=2:00:00:修改作业时间限制。
 
- 示例:# 查看作业 123 的详细配置 scontrol show job 123 # 恢复故障节点 node5 scontrol update NodeName=node5 State=RESUME
- 场景:高级调试和实时调整集群配置。
3. sdiag:查看调度器诊断信息
- 用途:显示调度器的内部状态和统计信息。
- 示例:sdiag
- 场景:分析调度性能问题(如调度延迟)。
三、高级功能命令
1. salloc:分配资源并启动交互式会话
- 用途:分配资源后进入 Shell 环境,直接运行命令。
- 示例:# 分配 1 个节点、4 个 CPU,启动交互式会话 salloc -N 1 -n 4 srun ./program # 在分配的资源中运行任务 exit # 释放资源
- 场景:交互式调试或手动运行多步任务。
2. sbcast:将文件分发到计算节点
- 用途:在作业运行前将文件传输到所有计算节点。
- 示例:# 将 input.dat 分发到作业的计算节点 sbcast input.dat /tmp/input.dat
- 场景:确保计算节点能访问输入文件。
3. smap:图形化查看集群状态
- 用途:以 ASCII 图形显示节点和作业状态(需安装 slurm-smap)。
- 示例:smap
- 场景:直观监控集群负载。
四、日常使用场景示例
场景1:提交一个 MPI 作业
# 编写作业脚本 mpi_job.sh
#!/bin/bash
#SBATCH -J mpi_test
#SBATCH -p compute
#SBATCH -N 2
#SBATCH -n 8
srun ./mpi_program
# 提交作业
sbatch mpi_job.sh
场景2:调试挂起的作业
# 查看作业状态
squeue -j <jobid>
# 查看作业详细信息(失败原因)
scontrol show job <jobid>
# 检查节点日志
ssh node1 tail -f /var/log/slurmd.log
场景3:管理多用户环境
# 限制用户组资源(需配置 QoS)
sacctmgr add qos name=low_prio Priority=10
sacctmgr modify user alice set qos=low_prio
场景4:处理节点故障
# 将故障节点标记为下线
scontrol update NodeName=node3 State=DOWN Reason="Hardware failure"
# 修复后恢复节点
scontrol update NodeName=node3 State=RESUME
五、命令速查表
| 命令 | 用途 | 常用参数示例 | 
|---|---|---|
| sbatch | 提交批处理作业 | -J,-p,-N,--time | 
| srun | 运行交互式作业 | -N,-n,--gres=gpu:1 | 
| squeue | 查看作业队列 | -u,-j,--format | 
| scancel | 取消作业 | -u,-t | 
| sacct | 查询历史作业 | -S,-E,--format | 
| sinfo | 查看集群状态 | -N,-p,-o | 
| scontrol | 实时管理作业/节点 | show job,update NodeName | 
| salloc | 分配交互式资源 | -N,-n | 
六、注意事项
- 权限管理:普通用户只能管理自己的作业,管理员可使用 sudo或slurmadmin组权限。
- 资源超限:作业超出申请的资源(如内存)会被 Slurm 强制终止。
- 配置文件:部分命令(如 sacctmgr)依赖slurmdbd的记账配置。
通过灵活组合这些命令,可以高效管理 HPC 集群的资源和作业。建议通过 man <command> 查看命令手册(如 man sbatch)获取更详细的参数说明。
 
                    
                     
                    
                 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号