引言
我们在之前的文章中已经向读者说明了大模型推理的两个阶段:Prefill(预填充)阶段和Decode(解码)阶段,这里再来简单回顾下这两个阶段。Prefill阶段的主要任务是并行处理全部输入信息并生成初始的上下文键值缓存,Decode阶段,利用已缓存的上下文,逐个、自回归地生成输出序列中的每一个词元。
这两个阶段在计算特性、并行潜力以及核心资源依赖(例如计算与内存带宽的侧重)上表现出显著的差异。本文将延续之前的内容,通过一个实验,直观地为大家展示PD分离的原因。
关于Prefill和Decode两阶段介绍,可以阅读本篇文章
爱技术的峰少,公众号:峰少的技术空间理解大型语言模型的工作机制:Prefill与Decode阶段详解
实验:为何需要PD分离?
为了深入理解并量化Prefill与Decode这两个阶段的性能特征差异,我们针对它们各自的计算特性设计了一个基准测试实验。根据前文介绍,Prefill阶段的核心任务是并行处理全部输入数据,而Decode阶段则是逐个、自回归地生成输出序列中的词元。这种本质差异决定了它们在处理吞吐量上必然存在显著不同。因此,本实验将通过模拟并发用户请求的场景,分别测量这两个阶段所消耗的时间,从而精确量化各自的性能表现,并清晰揭示它们之间的性能差距。
依据上述的思路,我们写了一个实验脚本,模拟了 5 个并发用户请求,每个请求的输入提示在填充 (padding) 后统一为 255 token,总计处理 1275 个输入 tokens,目标是为每个请求生成 256 个新 token,共计 1280 个输出 tokens。然后分别对Prefill阶段和Decode阶段的计算速度。
实验代码已开源。可以使用本链接:https://github.com/chen-ace/LLM-Prefill-Decode-Benchmark。开源库中提供了英伟达CUDA的脚本和Apple M系列芯片的代码。方便苹果笔记本的用户也能运行测试脚本。但,由于Apple M系列设备的硬件资源有限,因此MPS版本的测试代码只是用了gpt2模型进行测试。
该实验评估了推理过程中两个关键阶段的性能。“近似 Prefill 阶段”的耗时包含了处理 1275 个输入 token 以及为 5 个请求生成首个新 token 的全过程。接下来,为了评估“近似 Decode 阶段”的性能,实验依据生成全部 1280 个 token 的总时间记录,在减去 Prefill 耗时后,计算出了生成剩余 1275 个 token 所需的净时间。

PD两阶段数据对比图
实验数据如上图所示:近似 Prefill 阶段耗时仅 0.2394 秒(输入吞吐量 5325.18 tokens/秒),相对地,近似 Decode 阶段完成后续 1275 token 的生成需要 32.8948 秒(输出吞吐量 38.76 tokens/秒)。两者一共消耗了 33.1343 秒的时间。 这不仅意味着 Prefill 阶段的速度是 Decode 阶段的约 137 倍,也清晰地表明,在整个推理任务中,总耗时的绝大多数(超过99%)都消耗在了 Decode 阶段。这一巨大的性能鸿沟直接暴露了LLM推理流程中固有的不平衡性,是提升整体推理效率必须正视和解决的核心问题。
这个现象可以很明显地得出一个结论:Decode阶段没有充分利用显卡的算力。换句话说,显卡的算力资源得到了极大的浪费。这也是为什么需要对PD进行针对性优化的原因,如果不对PD进行优化,大量的算力资源在占用最多的Decode阶段被浪费,极大地提高了模型部署的成本。
PD分离的优势
为了解决上诉问题,PD分离(Prefill-Decode Separation)应运而生。它并非简单的技术调整,而是一种核心架构原则与系统设计哲学。其核心思想在于深刻理解并严格区分Prefill (P) 与Decode (D) 阶段的本质差异,并在资源分配、任务调度及优化算法上实施明确的、差异化的策略。其核心优势主要体现在以下几个方面:
1. 推理性能实现显著提升(低延迟与高吞吐量)
通过为Prefill和Decode两个阶段量身定制优化策略,PD分离直接降低了用户感知的首次响应时间(TTFT)和后续生成时间(TPOT),使得交互体验更快、更流畅。同时,得益于更高的资源利用率和更优化的调度,系统的整体吞吐量也得到大幅提升,能够高效处理更多的并发请求。
2. 硬件资源利用率与效率得以大幅提高
统一处理常导致资源浪费(例如Decode阶段计算单元空闲),而PD分离的差异化管理则能确保昂贵的GPU等硬件资源在Prefill和Decode这两个特性迥异的阶段都得到更充分、更有效的利用。这样不仅减少了硬件闲置,也提升了整体的计算效率与成本效益。
3. 针对性的独立优化路径得以实现
PD分离允许开发者为计算密集的Prefill和内存带宽密集的Decode这两个阶段,各自独立地应用最前沿、最有效的优化技术(如特定的Attention变体、内存管理方案等)。这种分离避免了不同优化策略间的潜在冲突,使得研究者能够更深入、更精准地挖掘每个阶段的性能潜力。
4. 为先进的系统调度奠定基础
实施连续批量处理等现代高效调度算法,其前提就是系统能够区分P和D状态。PD分离恰好提供了这一基础,使得调度器能够智能地、动态地管理和组合请求,最大化并发处理能力,从而进一步放大性能和效率优势,尤其在多用户服务场景下效果显著。
结论
通过本文的实验直观地揭示了LLM推理中Prefill与Decode阶段在性能表现上的悬殊对比:Decode阶段耗时占比超99%,吞吐量却慢了近137倍,这直接导致GPU算力在关键的Decode阶段严重浪费,并显著推高了模型部署的成本。
这一结果正是推动PD分离成为核心架构原则的根本原因。通过对Prefill的并行潜力与Decode的内存瓶颈进行针对性的差异化管理,PD分离的主要目的就是将Decode阶段普遍存在的资源浪费转化为推理性能的显著提升和成本效益的改善,从而克服传统统一处理模式的低效瓶颈。