首页/AI/大模型部署与运维速查/max-num-seqs:在批序列数上限

max-num-seqs:在批序列数上限

限制同一时刻在批的序列数:调大提高吞吐上限但可能拉长排队,调小降低尾延迟与峰值压力;与 KV 池容量联动,是并发策略的主拨杆。

在批序列数上限

max-num-seqs 限制同一时刻处于批处理中的序列数。调大能抬高吞吐上限,但排队与尾延迟可能跟着变差;调小能降低峰值压力、改善尾延迟,代价是吞吐下降。它与 KV 池容量和窗口长度联动,是并发策略里最主要的一个拨杆。

基本信息

参数--max-num-seqs
作用限制同时处理的序列数
联动对象KV 池容量与最大窗口长度
调大后果吞吐上限上升、尾延迟可能变差
调小后果尾延迟改善、吞吐下降

典型使用场景

  • 交互服务的并发保护,避免被打满后整体劣化
  • 为 P99 做优化时最主要的可调档位
  • KV 池不够时先降这个值,避免触发抢占重算
  • 按业务分池时给交互池与离线池设不同档位
  • 同一模型部署多个实例时,按各实例的规格分别设定档位

设置与压测联动

设置与压测联动
vllm serve <模型路径> --max-num-seqs 256 --gpu-memory-utilization 0.90 --max-num-batched-tokens 8192
# 压测关注:吞吐(tokens/s)、TTFT、排队时长与抢占次数
# 出现大量抢占重算时:先降 max-num-seqs 或扩容 KV 池

现象与处理

现象指向处理
抢占重算频繁KV 池不够用降 max-num-seqs 或扩池
尾延迟偏高在批序列数太多降并发或分池
吞吐上不去在批数偏低结合 KV 账适度上调
能不能真的容纳这么多序列,取决于窗口长度与 KV 池大小:先算 KV 账再定值,只改参数不看显存水位容易来回折腾。
启动日志通常会给出 KV 缓存可容纳的 token 数与并发估计:照日志校准比按经验值填参数快,也更容易复现。
调这个值要连带看 gpu-memory-utilization:预分配比例一变,KV 池大小跟着变,两件事最好一次只动一个。
多数引擎不支持运行期修改这个值:调整要走滚动重启,按实例逐个进行,避免一次性全部重启把容量打到谷底。

易错点

  • 只调参数不看 KV:池不够时触发抢占与重算,吞吐反而下降
  • 把它当纯吞吐开关:并发上去后尾延迟变差,交互场景很快被投诉
  • 忽略窗口长度的影响:窗口翻倍后同样数值容纳不下,参数需要重算
  • 所有业务共用一个档位:交互与离线目标不同,建议分池分别设值
  • 用小样本压测定档位:并发压力上来后表现不同,档位要按目标并发下的实测数据来定
  • 把上限当成实际并发能力:真正决定并发的是 KV 池与请求长度,这个参数只是另一道闸门

数据来源与参考

  • vLLM 官方文档:调度与批处理(docs.vllm.ai)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌