以下是 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

六、注意事项

  1. 权限管理:普通用户只能管理自己的作业,管理员可使用 sudoslurmadmin 组权限。
  2. 资源超限:作业超出申请的资源(如内存)会被 Slurm 强制终止。
  3. 配置文件:部分命令(如 sacctmgr)依赖 slurmdbd 的记账配置。

通过灵活组合这些命令,可以高效管理 HPC 集群的资源和作业。建议通过 man <command> 查看命令手册(如 man sbatch)获取更详细的参数说明。

posted on 2025-03-29 19:56  LeeHang  阅读(333)  评论(0)    收藏  举报