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(整数,默认256)num_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定义为长请求等待的正常上尾,通常是P90或P95 - 将
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
}
}
显式禁用它: