HPCSlurmLinux调度优化
HPC 集群 Slurm 作业调度优化实战指南
谢工
背景
在高性能计算(HPC)环境中,Slurm 是最广泛使用的作业调度系统之一。然而,很多用户和运维人员并未充分发挥 Slurm 的调度能力,导致资源利用率和作业吞吐量远低于预期。
作业提交脚本优化
1. 精确的资源请求
#!/bin/bash
#SBATCH --job-name=optimized_job
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=32
#SBATCH --cpus-per-task=1
#SBATCH --gres=gpu:4
#SBATCH --time=02:00:00
#SBATCH --mem=256G
#SBATCH --partition=gpu
关键点:
--cpus-per-task要与 GPU 卡数匹配--mem不要使用默认值,根据实际需求设置--time设置合理的运行时间上限
2. 使用 Job Array 处理参数扫描
#SBATCH --array=0-99
#SBATCH --ntasks=1
# 根据任务ID加载不同参数
INPUT_FILE="input_${SLURM_ARRAY_TASK_ID}.dat"
srun ./simulation $INPUT_FILE
Job Array 可以显著减少调度开销,比逐个提交 100 个独立作业效率高得多。
调度策略配置
Multi-Factor Priority 插件
# slurm.conf
PriorityType=priority/multifactor
PriorityWeightAge=1000
PriorityWeightFairshare=2000
PriorityWeightJobSize=500
PriorityWeightPartition=1000
PriorityWeightQOS=5000
合理的权重配置可以平衡资源公平性和作业吞吐量。
分区(Partition)划分策略
PartitionName=debug Nodes=node[01-02] Default=NO MaxTime=00:30:00
PartitionName=compute Nodes=node[03-20] Default=YES MaxTime=48:00:00
PartitionName=gpu Nodes=gpu[01-08] Default=NO MaxTime=24:00:00
PartitionName=highmem Nodes=mem[01-02] Default=NO MaxTime=72:00:00
资源利用率监控
# 实时监控
watch -n 5 'sinfo -o "%P %D %t %C %m"'
# 查看作业效率
seff $JOBID
# 历史统计
sacct -j $JOBID --format=JobID,Elapsed,TotalCPU,MaxRSS,MaxVMSize,ExitCode
常见问题与排查
作业长时间 PENDING
# 查看排队原因
scontrol show job $JOBID | grep Reason
# 查看节点状态
sinfo -t idle,alloc,mix,drain
# 查看作业优先级
sprio -j $JOBID
内存不足导致作业失败
使用 sacct 查看实际内存使用:
sacct -j $JOBID --format=ReqMem,MaxRSS,MaxVMSize
如果 MaxRSS 接近 ReqMem,说明需要增大内存请求。
总结
Slurm 调度优化是一个系统工程,需要从用户作业脚本、集群配置和运维策略三个层面同时着手。最重要的是做到 合理的资源请求 + 合适的调度策略 + 持续的监控分析。
下一期将介绍 GPU 集群的调度优化实践,敬请期待。
谢
谢工
AI Agent / HPC 工程师