更新时间:2025-05-21 GMT+08:00
Bin packing
装箱操作(Bin Packing)指将多个作业紧凑地调度到节点上,以最大化资源利用率,减少资源碎片。Slurm 默认采用 基于优先级的调度算法,但通过配置和参数调整,可以实现类似装箱的效果。
Slurm调度器的装箱机制
- 资源分配策略
- 默认策略:Slurm 默认使用First Fit策略(按节点顺序分配资源),但可以通过配置改为Best Fit或Consumable Resource(CR)优化。
- 启用紧凑分配:
# 在 slurm.conf 中配置 SelectType=select/cons_tres SelectTypeParameters=CR_CPU_Memory
此配置使调度器在分配资源时优先考虑 CPU 和内存的紧凑性。
- 节点共享模式
- 共享节点:允许多个作业共享节点资源(默认按 CPU 分配):
# 在 slurm.conf 中配置节点共享 NodeName=node[1-100] Sockets=1 CoresPerSocket=16 ThreadsPerCore=2 RealMemory=64000
- 作业参数:
sbatch -p [分区名] --ntasks=4 --cpus-per-task=4 --mem=4G job.sh # 每个任务申请 4 CPU 和 4G 内存
- 共享节点:允许多个作业共享节点资源(默认按 CPU 分配):
- 强制紧凑分配
使用 --distribution 参数强制任务在节点上紧凑分布:
sbatch -p [分区] --nodes=2 --ntasks-per-node=8 --distribution=block:block job.sh
配置示例
示例 1:通过QoS和分区限制装箱
- 创建QoS限制单个作业的资源:
sacctmgr add qos packed_qos MaxCPUsPerUser=100 MaxMemPerUser=100G
- 提交作业时指定资源:
sbatch --qos=packed_qos --ntasks=10 --cpus-per-task=2 --mem-per-cpu=2G job.sh
示例 2:使用 --exclusive 和共享混合
- 独占节点(避免资源竞争,但可能浪费资源):
sbatch --exclusive --nodes=1 job.sh
- 共享节点(提高利用率):
sbatch --share --ntasks=4 job.sh # 允许其他作业共享节点剩余资源
监控与调试
- 查看节点资源使用
sinfo -N -o "%N %C %e %m" # 显示节点 CPU 和内存使用
- 分析作业分布
squeue -o "%i %P %u %T %C %m %N" # 查看作业的 CPU/内存需求和分配节点
- 资源碎片检测
scontrol show nodes # 查看节点的空闲资源
注意事项
- 资源超售风险:过度紧凑可能导致资源争抢(如内存不足),需监控 OOM 事件。
- 作业优先级影响:高优先级作业可能打断紧凑分配,需平衡公平性和利用率。
- 配置复杂度:启用复杂调度策略(如 cons_tres)可能增加调度延迟。
通过合理配置资源分配策略、作业参数和 QoS 限制,可以在驾仓中实现高效的装箱操作,显著提升集群资源利用率。
父主题: HPC管理调度插件