跳转至

ShortRequestFirst 预填充调度

ShortRequestFirst 通过让短提示词在长提示词之前运行,减少了预填充阶段的队头阻塞。它专为混合提示词长度的流量场景设计,在这种场景下,少数长请求可能会延迟大量短请求。

何时使用

在以下情况下启用 ShortRequestFirst:

  • 请求长度高度倾斜
  • 短请求的 TTFT 比严格的 FCFS 顺序更重要
  • 预填充节点已启用重计算调度器运行

如果工作负载基本均匀,或者 FCFS 顺序比短请求延迟更重要,则保持禁用状态。

配置

在 PD 分离部署中,将 short_request_first_config 添加到预填充(P)节点的 additional_config 中。由于 ShortRequestFirst 通过重计算调度器连接,请在同一 P 节点配置中保持 recompute_scheduler_enable=true

{
  "recompute_scheduler_enable": true,
  "short_request_first_config": {
    "enabled": true,
    "threshold": 256,
    "long_max_wait_ms": 2000
  }
}

字段

  • enabled(布尔值,默认 false) 打开或关闭 ShortRequestFirst。
  • threshold(整数,默认 256num_prompt_tokens <= threshold 的请求被视为短请求。
  • long_max_wait_ms(浮点数,默认 0) 长请求在短请求之后等待,直到可以被提升到它们之前的最大时间。 0 禁用长请求提升并保持严格的短请求优先级。

阈值调优

如果 threshold 太低,大多数请求会落入 long 通道,拆分基本失去作用。如果太高,大多数请求会落入 short 通道,拆分同样失去作用。

在实践中,threshold 应位于短请求主集群和长请求尾部之间的边界附近。目标不是选择所有请求长度的固定中点,也不是将阈值移近最长的请求。

如果尚未建立精细的流量模型,可以从提示词长度的 P70-P85 作为工程基线开始,然后使用真实的请求长度直方图进行细化。对于清晰的双峰工作负载,阈值通常位于短请求集群的上边缘附近,而不是最长的提示词附近。

简而言之:正确的阈值通常是短请求和长请求群体之间的谷底。当无法进行详细的分布建模时,P70-P85 是一个实用的起始范围。

long_max_wait_ms 调优

long_max_wait_ms 是一个公平性门控,而不是吞吐量优化旋钮。它控制长请求在正常的短优先行为下何时停止等待,并有资格进行反饥饿提升。

首先调整 threshold。如果频繁出现降级警告,首先怀疑 threshold 对于当前流量组合来说太小,然后考虑增加 long_max_wait_ms

一个实用的调优流程是:

  • long_max_wait_ms = 0 开始,建立严格的短优先基线
  • 测量该基线下长请求的等待时间分布
  • W_normal 定义为长请求等待的正常上尾,通常是 P90P95
  • W_slo 定义为您的服务可以容忍的长请求的最大额外排队延迟
  • long_max_wait_ms 设置在 [W_normal, W_slo] 区间内

在该区间内,如果短请求 TTFT 更重要,则将值偏向 W_slo;如果长请求公平性更重要,则偏向 W_normal。如果 W_normal 已经接近 W_slo,主要问题更可能是阈值选择或整体系统容量,而不是等待参数本身。

不要根据平均短请求 TTFT 来确定 long_max_wait_ms 的大小。它通常更好地锚定在严格短优先行为下长请求等待的尾部。

简而言之:long_max_wait_ms 应从严格短优先调度下的长请求等待尾部推导,并以您的服务可以接受的长请求排队延迟为界。如果老化长请求提升反复发生,请先增加 threshold,然后再增加 long_max_wait_ms

调度行为

等待队列被分为三个通道:

  • immediate 恢复型请求,例如被抢占的请求或已计算令牌的请求。
  • short 提示词长度小于或等于 threshold 的请求。
  • long 提示词长度大于 threshold 的请求。

调度优先级为:

immediate > aged-long > short > long

这意味着:

  • 立即请求始终优先
  • 短请求在普通长请求之前运行
  • 如果最旧的长请求等待超过 long_max_wait_ms,它可以跳到等待的短请求之前

降级警告

如果长请求连续三次调度被提升到等待的短请求之前,vLLM Ascend 会发出警告。这表明该功能正在向长请求优先级漂移,通常是因为阈值对于当前流量组合来说太小。

当出现此警告时:

  • 增加 short_request_first_config.threshold
  • 或禁用 short_request_first_config.enabled

ShortRequestFirst 还会每 5 秒发出一次聚合统计日志,因此无需添加额外配置即可查看队列行为。

与重计算调度器的关系

ShortRequestFirst 仅更改等待队列策略,并连接到重计算调度器。当 recompute_scheduler_enable=false 时,将使用正常的调度器路径,ShortRequestFirst 不会被激活。

最小示例

P节点 additional_config 示例:

{
  "recompute_scheduler_enable": true,
  "short_request_first_config": {
    "enabled": true,
    "threshold": 256,
    "long_max_wait_ms": 2000
  }
}

显式禁用它:

vllm serve <model> \
  --additional-config '{"short_request_first_config": {"enabled": false}}'