
大模型推理过程,可以分为两个阶段,预填充阶段(prefill stage)和解码阶段(decode stage)。预填充阶段是计算密集型,解码阶段为内存密集型,两个阶段分别具有不同的推理特性。如果把两个阶段放在同一个计算设备上,会导致两阶段优化目标SLOs冲突,而且耦合了两个阶段的部署策略。将两个阶段分别部署到不同的设备上,使用PD分离架构推理,各自优化,势在必行!

大模型预填充阶段主要用于处理prompt生成KV缓存,解码阶段根据缓存结果,自回归的生成下一个token。

作用:
关键特点:
作用:
关键特点:
在流式输出场景,Prefill 阶段仅在首次处理用户输入时执行,后续交互直接进入Decode 阶段。
特性 | Prefill Stage | Decode Stage |
|---|---|---|
输入 | 初始提示词 Prompt | 前一步生成的token |
计算复杂度 | n为输入prompt的长度 | per token 总为 |
并行性 | 完全并行 | 严格串行 |
资源消耗 | GPU计算单元 FLOPs | 内存和通信带宽 |
输出 | 除首字外,无新token生成 | 逐个生成token |
性能瓶颈 | 受限于计算能力 FLOPs | 受限于内存带宽,即KV cache 的读写速度 |
工程优化 | 适用Flash Attention 等技术加速长序列处理 | 通过Page Attention、内存压缩等技术降低KV cache内存占用 |

大模型推理先经过Prefill生成KV cache和首字后,传给Decode阶段,进行自回归解码生成新token。即单batch推理,prefill和decode阶段串行,互不干扰,但吞吐不高。看起来完美, 但。。。
为了满足高吞吐量,必须进行批量推理,如 continuous batch,同时将多个请求输入到LLM中,batch中一条请求结束,自动的将其剔除batch,并添加新的请求到batch中,从而满足高并发的要求。
但是,将预填充与解码阶段共置 allocate(即在同一设备上),并使用持续批处理,会导致两个主要问题:
DistServe 尝试优化了资源分配与并行策略达到更好的 GPU goodput,其整体的方案如图。

PD 分离式架构:
推理流程是,当 Prefill Instance 完成 KV cache 的计算后,会将其传输给 Decode Instance,后者接续生成结果。PD分离架构的优势是,两个阶段部署在不同服务器,可以各自优化,进而使得总的吞吐和计算设备利用率最大化。
PD分离架构一个核心点是,KV cache 的计算和传递,其影响着整个架构的调度设计。
Mooncake 进一步发展了PD分离架构,提出了一种以键值缓存(KVCache)为中心的分离式 LLM 服务架构。通过优化 KVCache 的管理和传输,Mooncake 在满足服务水平目标(SLO)的前提下,实现了高达 525%的吞吐量提升。在实际工作负载下,Mooncake 使得 Kimi 系统的请求处理能力提高了 75%。
本文,首先对齐大模型推理指标,然后分析大模型预填充和解码阶段特性,并以此为基础,关注到持续批量通过阶段隔离和抢占机制处理带来高吞吐,缩短TTFT同时,也显著增加TBT的尾部延迟,进而影响E2E延迟。最后介绍PD分离方案的技术路线。
参考:
[1] Pratyush Patel, Esha Choukse, Chaojie Zhang, Íñigo Goiri, Aashaka Shah, Saeed Maleki, and Ricardo Bianchini. Splitwise: Efficient generative llm inference using phase splitting. arXiv preprint arXiv:2311.18677, 2023.
[2] Yinmin Zhong, Shengyu Liu, Junda Chen, Jianbo Hu, Yibo Zhu, Xuanzhe Liu, Xin Jin, and Hao Zhang. Distserve: Disaggregating prefill and decoding for goodput-optimized large language model serving. arXiv preprint arXiv:2401.09670, 2024. blog: https://hao-ai-lab.github.io/blogs/distserve/
[3] Ruoyu Qin, Zheming Li, Weiran He, Mingxing Zhang, Yongwei Wu, Weimin Zheng, Xinran Xu. Mooncake: A KVCache-centric Disaggregated Architecture for LLM Serving. arXiv:2407.00079