更新时间:2025-05-21 GMT+08:00

Bin packing

装箱操作(Bin Packing)指将多个作业紧凑地调度到节点上,以最大化资源利用率,减少资源碎片。Slurm 默认采用 基于优先级的调度算法,但通过配置和参数调整,可以实现类似装箱的效果。

Slurm调度器的装箱机制

  1. 资源分配策略
    • 默认策略:Slurm 默认使用First Fit策略(按节点顺序分配资源),但可以通过配置改为Best FitConsumable Resource(CR)优化
    • 启用紧凑分配
      # 在 slurm.conf 中配置
      SelectType=select/cons_tres
      SelectTypeParameters=CR_CPU_Memory

      此配置使调度器在分配资源时优先考虑 CPU 和内存的紧凑性。

  2. 节点共享模式
    • 共享节点:允许多个作业共享节点资源(默认按 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 内存
  3. 强制紧凑分配

    使用 --distribution 参数强制任务在节点上紧凑分布:

    sbatch -p [分区] --nodes=2 --ntasks-per-node=8 --distribution=block:block job.sh

配置示例

示例 1:通过QoS和分区限制装箱

  1. 创建QoS限制单个作业的资源:
    sacctmgr add qos packed_qos MaxCPUsPerUser=100 MaxMemPerUser=100G
  2. 提交作业时指定资源:
    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  # 允许其他作业共享节点剩余资源

监控与调试

  1. 查看节点资源使用
    sinfo -N -o "%N %C %e %m"  # 显示节点 CPU 和内存使用
  2. 分析作业分布
    squeue -o "%i %P %u %T %C %m %N"  # 查看作业的 CPU/内存需求和分配节点
  3. 资源碎片检测
    scontrol show nodes  # 查看节点的空闲资源

注意事项

  1. 资源超售风险:过度紧凑可能导致资源争抢(如内存不足),需监控 OOM 事件。
  2. 作业优先级影响:高优先级作业可能打断紧凑分配,需平衡公平性和利用率。
  3. 配置复杂度:启用复杂调度策略(如 cons_tres)可能增加调度延迟。

通过合理配置资源分配策略、作业参数和 QoS 限制,可以在驾仓中实现高效的装箱操作,显著提升集群资源利用率。