llm-wiki wiki · concepts 2026-05-16

把 LLM 推理的 prefill(首 token 计算)decode(后续 token 流式生成) 拆到独立的 GPU 池中分别扩缩的部署模式。NVIDIA Dynamo 把它做成默认架构,vllm / sglang / TensorRT-LLM 都开始实验性支持。

为什么要分离

Prefill 和 decode 的负载特征完全不同:

阶段 计算密度 内存压力 并行度 延迟敏感点
Prefill 高(O(n²) attention,n=输入 token 数) 中(一次性算完) 大 batch 友好 TTFT(time to first token)
Decode 低(每步 O(n)) 高(KV cache 持续累积) 小 batch 内存瓶颈 ITL(inter-token latency)

聚合模式(同一 GPU 同时跑 prefill 和 decode)会让两阶段互相干扰:
- 大 prefill 来一发,正在 decode 的请求被挤出,ITL 抖动
- 小 prefill 来很多发,GPU 算力没用满
- 显存按 max KV 预留,decode 用不到的 prefill 内存被浪费

分离模式让 prefill 池和 decode 池独立扩缩:prefill 用更多算力(H100 / B200),decode 用更大显存(H200 / GB200),各自 batch 策略也独立调优。

关键工程问题:KV 怎么传

Prefill 完算出的 KV 必须传到 decode 池才能续写:

[Prefill Worker]                          [Decode Worker]
    │                                          │
    │  ① 算 KV cache                          │
    │  ② 返回 disaggregated_params            │
    │  ③ KV blocks ──NIXL/GDS/RDMA──►         │
    │                                          │  ④ 接收 KV,开始 decode
    │                                          │  ⑤ stream tokens

主流传输方案:
- NIXL(NVIDIA Inference Xfer Library):统一抽象 GPUDirect RDMA / NVLink / NVMe / 对象存储
- GPUDirect-RDMA:GPU 之间直接 RDMA,绕过 CPU
- MooncakeConnector(vLLM 实现):基于 Mooncake 项目的 P/D 解耦传输

Dynamo 中的实现

Dynamo 把分离式做成第一类公民:
1. PrefillRouter(独立组件)选 prefill worker → 跑 prefill → 返回 disaggregated_params
2. PrefillRouter 选 decode worker → 把 KV 转移元数据传过去
3. KV blocks 经 NIXL 跨 worker 传输
4. Decode worker 开始流式生成

支持矩阵:sglang ✅、TensorRT-LLM ✅、vllm ✅(含 MooncakeConnector)。

收益与代价

收益:
- 各阶段独立扩缩,资源利用率更高
- 大 prefill 不再撞挂 decode(ITL 抖动消除)
- 异构硬件搭配(prefill 用算力强卡,decode 用显存大卡)

代价:
- 多一跳网络传输(KV blocks),需要高速互联(NVLink/RDMA)才划算
- 路由复杂度上升(要选两次 worker)
- 故障域增加(prefill worker 死了,decode worker 收不到 KV)