跳转至

调度器

概述

调度器负责两项相关任务:

  • 扩容: 为新模型实例选择最佳 Worker/GPU 放置位置。
  • 缩容: 对已有模型实例进行排序,在减少副本时移除优先级最低的实例。

两个方向的调度均分为两个阶段:

  1. 筛选:找到实际能够运行模型的候选方案,即建立候选列表。
  2. 评分:为各候选方案评分,再选择最符合当前目标的方案。

扩容调度

1. Worker 基础筛选

调度器先对 Worker 列表进行基础筛选。此步骤主要检查非资源约束:集群、标签、后端兼容性、指定 GPU 以及本地路径可用性。

筛选链按以下顺序执行:

  1. 集群筛选器 仅保留模型目标集群内的 Worker。
  2. GPU 匹配筛选器 在模型明确指定 GPU 时,缩小 Worker 范围。
  3. 标签匹配筛选器 仅保留标签满足模型标签选择器条件的 Worker。
  4. 状态筛选器 仅保留处于 READY 状态的 Worker。
  5. 后端框架筛选器 移除加速器或运行时能力与所选后端不匹配的 Worker。
  6. 本地路径筛选器 适用于明确指定 GPU 的 LOCAL_PATH 模型,移除不存在所配置模型路径的 Worker。

仅通过基础筛选的 Worker 才会进入基于资源的筛选阶段。

2. 基于资源的候选方案筛选

此步骤同样属于筛选,但依据的是资源,而非元数据或 Worker 状态:该 Worker 或放置方案是否实际能提供足够的 RAM/VRAM 来运行模型?

不同模型类型采用不同方式确定资源需求:

  • GGUF 模型: 使用 GGUF parser 估算资源需求。
  • 其他模型类型: 由相应后端估算资源需求,例如 vLLM、SGLang、MindIE 或 VoxBox。

各后端能力不同,可用的回退方案也不同:

  • vLLM、SGLang、MindIE: 主要使用基于 GPU 的放置方案,此处不采用纯 CPU 或部分卸载回退方案。
  • GGUF、自定义后端、VoxBox: 使用 GGUF parser 估算模型资源需求,支持 GPU 卸载、部分卸载或 CPU 执行。
  • 自定义后端、VoxBox: 支持 GPU 卸载或 CPU 执行。

随后依次评估候选方案,只要某项策略返回可运行方案,便停止尝试后续策略。通常按以下顺序执行:

  1. 单 Worker、单 GPU 一个 Worker 上的单个 GPU 足以满足模型需求。
  2. 单 Worker、多 GPU 单个 GPU 不足时,组合使用同一 Worker 上的多个 GPU。
  3. 跨 Worker 分布式推理 后端支持分布式执行时,可以使用多个 Worker 上的 GPU。
  4. 部分卸载或 CPU 执行 仅在模型类型及后端支持这些回退模式时使用。

需要注意以下细节:

  • 资源匹配筛选在第一个产生候选方案的策略处停止。
  • 分布式候选方案除了主 Worker 外,还可能包含从属 Worker。
  • 在 Worker 基础筛选和资源匹配筛选阶段,均会遵循明确指定的 GPU 选择。

3. 候选方案评分

找到可运行的候选方案后,调度器通过评分器链对其评分,并选择总分最高的方案。

当前扩容评分包含:

  1. 放置评分器
  2. 模型文件本地性评分器

候选方案总分是所有已启用评分器分数之和。

放置评分器

扩容时始终启用放置评分器。

  • Binpack 此策略旨在将尽可能多的模型实例“打包”到尽可能少的“箱子”(例如 Worker/GPU)中,优化资源利用率。目标是尽量减少使用的箱子数量,提高资源效率,在不超出容量的前提下尽可能充分利用每个箱子。模型实例会放置到剩余空间最少的箱子中,以减少各箱子的闲置容量。
  • Spread 此策略尽量将多个模型实例均匀分散到不同 Worker 上,提高系统容错能力和负载均衡效果。

其他行为:

  • 对于 GPU 放置方案,VRAM 压力的权重高于 RAM 压力。
  • 对于纯 CPU 放置方案,仅考虑 RAM 利用率。

模型文件本地性评分器

模型文件本地性评分器倾向于选择已有所需模型文件、且文件处于 READY 状态的 Worker。

具体行为如下:

  • 查找主模型文件已就绪的 Worker。
  • 如果配置了推测解码,也会查找草稿模型文件已就绪的 Worker。
  • 根据参与 Worker 中已持有这些文件的比例,为候选方案评分。
  • 主模型文件本地性的权重高于草稿模型文件本地性。

4. 最终选择

评分后,调度器选择总分最高的候选方案,并将模型实例分配到该位置。

缩容调度

当期望副本数少于现有模型实例数时,控制器会对当前实例排序,优先删除排名最低的实例。

缩容使用独立的评分器链,对已有模型实例评分:

  1. 状态评分器
  2. 卸载层评分器
  3. 放置评分器

实例按得分升序排列,优先移除得分最低的实例。

状态评分器

状态评分器优先保留健康副本,因此不健康或尚未就绪的副本会优先成为移除候选。

卸载层评分器

对于上报 total_layers 和 offload_layers 的 GGUF 模型,此评分器倾向于保留已卸载更多层的实例:

  • 完全卸载获得最高分。
  • 部分卸载按比例评分。
  • 没有卸载层元数据的实例从此评分器获得 0 分。

缩容模式下的放置评分器

缩容复用同一放置评分器,但从移除角度评估已有放置方案,而不是选择新放置位置。评分仍体现模型的 binpack 或 spread 策略,但得分表示保留优先级,因此放置得分越低,越可能优先被移除。