Appearance
会话批处理(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 推测解码被禁用。
相关概念
- distributed-inference / tensor-parallelism — 常和批处理叠加做多用户服务(如 8×L40S +
--batched-session 16) - kv-cache — 每个 session 一份独立 KV,N 份常驻
- ssd-streaming — 闲置槽位可持久化到磁盘 KV 缓存后复用
详见 Part 5 — 会话批处理。