Skip to content

会话批处理(Session Batching)——ds4-server 预分配 N 个独立的常驻 KV session,把多个并发请求里"已就绪的 decode 步"打包到一次内核调用里一起算,提升聚合吞吐。有原生批处理内核时直接用,没有时退化成有序精确兜底,保证结果与逐 session 单跑完全一致。

为什么需要它

ds4-server 原本是"一个 GPU 同时只跑一个请求":推理串行,HTTP 并发用队列解耦(见 Part 5)。这对单用户够了,但多用户服务时,decode 阶段每个 token 只读一个 token 的权重,GPU 算力大量闲置——多个 session 的 decode 步本可以塞进同一个 batch kernel 一起算。

--batched-session N 预分配 N 个独立常驻 KV session:

  • 就绪的 decode 步一起评估(同一个 batch kernel)
  • 长 prefill 交替进有限大小的 chunk,避免一个 prefill 堵死所有 decoder
  • 超过 N 的请求等空位;启用了磁盘 KV 缓存时,空闲槽位被持久化、对话回来时再恢复,活跃请求永不被驱逐
  • 选 N 和 --ctx 让所有常驻 KV 分配都能装进显存

精确性保证:有序兜底

批处理是精确的:当没有原生批处理内核时,ds4 按固定顺序跑受影响的行,返回与"逐 session 单独评估"完全相同的完整 logits。每个后端/模型的行为:

后端 / 模型session 执行方式
Metal,常驻 DeepSeek Flash支持时从两行起原生共享专家 + QKV 批处理;否则有序兜底
Metal,GLM 5.2有序精确兜底
CUDA,DeepSeek Flash(受支持的 TP/EP 多卡布局)原生 decode + 混合 prefill/decode,不支持的 kernel 形状走精确兜底
CUDA 单卡(含 DGX Spark)有序精确兜底

N 个常驻 session 分配 N 份 KV 状态,所以"能装一次的上下文"未必能装 N 次。原生批处理提升聚合吞吐;有序兜底提供并发和公平性,但没有同样的加速。

注意:原生会话批处理激活时,MTP 推测解码被禁用。

相关概念

详见 Part 5 — 会话批处理