一文搞懂LLM推理加速:Prefill-Decode分离技术深度解析

本文深入探讨大型语言模型(LLM)推理的Prefill-Decode分离技术。该技术将计算密集型的Prefill阶段与内存带宽密集型的Decode阶段部署到专用硬件资源池中,实现独立扩展和性能隔离。通过消除性能干扰、提高资源利用率,显著提升大模型服务的效率和成本效益,已成为业界主流架构,是构建高性能AI基础设施的必备知识。


引言:深入理解LLM推理的两个阶段

大型语言模型(LLM)的推理过程,即模型接收输入(Prompt)并生成输出的过程,在计算上可以被清晰地划分为两个截然不同的阶段:Prefill(预填充)和Decode(解码)。理解这两个阶段的特性是掌握推理优化技术(尤其是Prefill-Decode分离)的基石。

  1. Prefill(预填充)阶段:此阶段负责处理用户输入的完整文本(Prompt)。模型会并行计算所有输入Token的注意力(Attention)关系,为后续的生成任务构建初始的上下文理解。这个过程是计算密集型(Compute-Bound)的,涉及大量并行的矩阵运算,能充分利用GPU的算力。此阶段的产物是键值缓存(Key-Value Cache,简称KV Cache),它存储了输入文本的中间状态,是后续解码阶段的关键依据。此阶段的延迟直接决定了用户感知的首个令牌生成时间(Time-to-First-Token, TTFT),即系统的响应速度 1。

  2. Prefill和Decode阶段示意图

    传统的LLM服务部署方式将这两个阶段混合在同一组GPU上执行。然而,由于两者对计算资源和内存资源的需求迥异,这种混合部署会导致严重的性能瓶颈和资源浪费。为了解决这一问题,Prefill-Decode(PD)分离技术应运而生,并迅速成为大规模LLM服务架构的主流选择。本报告将系统性地研究PD分离技术的定义、价值、架构、挑战与产业实践。

  3. Decode(解码)阶段:在Prefill完成后,模型进入自回归(Autoregressive)生成模式,即逐个生成输出Token。每生成一个新的Token,都需要依赖先前所有Token(包括原始Prompt和已生成的Token)的KV Cache。这个过程是**内存带宽密集型(Memory-Bound)的,因为其计算量相对较小,但需要频繁读写巨大的KV Cache。由于其串行生成的特性,解码阶段的性能瓶颈通常在于GPU显存的带宽和容量。此阶段的效率由平均每输出令牌时间(Time-Per-Output-Token, TPOT)**来衡量,反映了模型的生成速度 2。

1. PD分离的定义和核心概念

Prefill-Decode分离(Prefill-Decode Disaggregation)是一种LLM服务架构,其核心思想是将计算特性截然不同的Prefill和Decode阶段部署到两组独立、专用的硬件资源池(通常是GPU集群)**中,并让它们独立扩展和优化 3。

在这种架构下:

  • Prefill集群:专门负责处理新请求的Prefill阶段。这组GPU可以配置为计算能力强、适合大规模并行处理的类型,以尽快完成Prompt处理并生成KV Cache,从而最小化TTFT。
  • Decode集群:专门负责执行已完成Prefill请求的Decode阶段。这组GPU可以配置为显存容量大、显存带宽高的类型,以存储海量的KV Cache并支持大量并发请求的快速、逐字生成,从而保障严格的TPOT服务等级目标(SLO)。

PD分离架构示意图

请求的处理流程变为:一个新请求首先被路由到Prefill集群,在处理完毕后,其生成的KV Cache被传输到Decode集群,由Decode集群接管并完成后续的Token生成任务。

PD分离的核心概念在于**“匹配负载与资源”**,它将一个混合型计算任务分解为两个单一型任务,并为每个任务匹配最优化的硬件配置和扩展策略,从而实现整个系统层面的效率最大化。

2. 为什么需要PD分离及其价值

在PD分离架构出现之前,主流的LLM服务框架(如早期的vLLM)采用**混合部署(Colocation)**模式,即在同一GPU上通过连续批处理(Continuous Batching)等技术混合执行Prefill和Decode任务。尽管这在一定程度上提高了GPU利用率,但存在两个根本性问题,PD分离的价值正在于解决这些问题 3。

  1. 消除性能干扰(Interference):在混合部署中,计算密集的Prefill任务和对延迟极其敏感的Decode任务会相互争抢GPU资源。当一个长的Prefill请求到达时,系统要么暂停正在进行的Decode任务以优先处理Prefill(导致已在生成中的请求卡顿,TPOT急剧恶化),要么将Prefill和Decode任务混合在一个批次里(同样拖慢Decode任务)。这种干扰在负载突增时尤为严重,可能导致TPOT飙升2到30倍。PD分离通过物理隔离,从根本上消除了两个阶段之间的资源竞争,确保了Decode任务能够平稳、低延迟地运行。

    混合部署的干扰与分离部署的流畅性对比

  2. 实现独立扩展(Decoupled Scaling):不同的应用场景对TTFT和TPOT的要求不同。例如,实时聊天应用对TPOT要求极高,而文档总结应用可能更看重初始响应速度(TTFT)。在混合部署下,为了同时满足最坏情况下的TTFT和TPOT指标,系统必须进行过度配置,造成资源浪费。PD分离允许Prefill和Decode集群根据各自的负载和SLO需求独立扩展。例如,如果系统面临大量长文本输入,可以只增加Prefill集群的规模;如果并发用户数增多导致Decode压力增大,可以只扩展Decode集群。这种精细化的资源管理显著提升了硬件利用率和成本效益。

最终,PD分离架构的核心价值在于最大化**“良率(Goodput)”**。Goodput指的是在满足TTFT和TPOT双重SLO约束下的最大请求处理速率 4。通过消除干扰和独立扩展,PD分离技术能够在同等硬件成本下支持更高的请求速率,或在同等请求速率下满足更严格的延迟SLO,从而直接提升了服务的性价比和用户体验。

3. 技术架构和实现原理

PD分离的基础架构由Prefill池、Decode池和一个中心调度器组成。然而,随着研究的深入,业界探索出了多种架构变体和更复杂的实现原理。

  • 经典架构(DistServe):作为PD分离的开创性工作,DistServe 4 提出了经典的双池架构。它使用一个模拟器驱动的搜索算法,为Prefill和Decode池自动选择最佳的并行策略(张量并行、流水线并行等)和GPU数量,以最大化Goodput。请求在Prefill节点完成后,KV Cache通过高速网络(如NVLink)传输至Decode节点。
  • GPU内部分离(Intra-GPU Disaggregation):与将P/D分离到不同GPU节点的“引擎级”分离不同,Nexus5 等工作探索了在单个GPU内部实现P/D分离。其核心思想是动态地将GPU的计算单元(如SMs)和内存带宽等资源在Prefill和Decode任务间进行划分。这种方法避免了跨节点传输KV Cache的高昂开销,但对GPU资源的精细化调度和管理提出了更高要求。
  • 混合聚合与分离(Hybrid Aggregation-Disaggregation)TaiChi2 认为,纯粹的分离或聚合并非在所有场景下都是最优的。例如,当TTFT要求极为严格时,聚合部署(将Prefill和Decode放在一起)反而可能更有优势。因此,TaiChi 提出了一种统一架构,可以根据不同的SLO组合,动态地在聚合、分离和混合模式之间切换。它通过调度机制实现“延迟转移”,将资源从已满足SLO的请求中转移给濒临超时的请求,从而在平衡的TTFT和TPOT要求下实现更高的Goodput。
  • 三级分离架构(Trinity):对于依赖检索增强生成(RAG)的应用,除了Prefill和Decode,向量检索也是一个关键步骤。Trinity6 提出将向量搜索也作为一个独立的阶段进行分离,形成Prefill-Decode-Search三级分离架构。这种架构进一步细化了任务分解,将不同类型的计算负载(模型计算、向量计算)隔离,以应对复杂的混合请求负载。
  • 动态负载均衡架构(BanaServe):静态的P/D资源划分无法适应动态变化的工作负载。BanaServe7 提出了一种动态编排框架,能够通过层级的模型权重迁移和注意力级别的KV Cache迁移,持续地在Prefill和Decode实例间重新平衡计算和内存资源,解决了因缓存命中率不均等导致的负载倾斜问题。

这些演进表明,PD分离不仅仅是一种固定的架构模式,而是一个灵活的设计思想,可以根据具体需求进行调整和扩展。

4. 与传统部署的对比

为了更清晰地理解PD分离的优势,我们可以从多个维度将其与传统的混合部署(Monolithic)模式进行对比。

维度传统混合部署 (Monolithic)Prefill-Decode分离部署 (Disaggregated)
核心架构Prefill和Decode任务在同一组GPU上混合执行。Prefill和Decode任务在两组独立的、专用的GPU集群上执行。
性能隔离 。计算密集的Prefill任务会严重干扰延迟敏感的Decode任务,导致TPOT性能不稳定。 。物理隔离从根本上消除了P/D间的资源争抢,保障了稳定的低延迟Decode性能。
资源利用率较低 。为同时满足P/D峰值需求,需过度配置资源,导致平时资源利用率不高(“耦合扩展”问题)。 。P/D集群可根据各自的负载独立扩展,实现更精细和高效的资源分配。
调度复杂性相对简单 。调度器在单个GPU池内管理任务,主要关注批处理大小和优先级。更高 。需要一个中心调度器来协调两个集群,管理KV Cache的传输,并动态调整P/D比例。
KV Cache管理简单 。KV Cache在同一GPU或节点内部,无需跨网络传输。复杂 。KV Cache必须在Prefill和Decode集群间进行网络传输,这引入了额外的延迟和带宽瓶颈。
灵活性与可扩展性有限 。整个集群作为一个整体进行扩展,难以针对特定瓶颈进行优化。 。可以灵活地使用不同类型、不同数量的GPU来组建P/D集群,适应异构硬件环境。
成本效益较低 。资源浪费和较低的Goodput导致单位请求的成本更高。较高 。通过提升资源利用率和Goodput,显著降低了大规模服务的硬件成本。

总而言之,PD分离通过增加架构和调度复杂性,换取了性能的稳定性、资源利用率和整体成本效益的巨大提升。

5. GPU集群中的部署特点和P/D比例配置

在大型GPU集群中成功部署PD分离系统,关键在于解决自动扩展(Autoscaling)和P/D资源比例配置两个核心问题。由于线上流量通常具有突发性和动态性,静态的资源配置无法实现最优性能和成本。

1. 部署特点与自动扩展:
现代PD分离系统,如 HeteroScale8 和 TokenScale9,都专注于实现智能的自动扩展。其部署特点包括:

  • 协同扩展(Coordinated Autoscaling)HeteroScale 指出,必须协同地对Prefill和Decode两个池进行扩展,以维持架构的平衡。它通过对生产环境中的大量信号进行实证研究,找到一个单一且鲁棒的指标来共同驱动P/D池的伸缩决策。
  • 异构硬件感知:生产集群中往往包含不同代际、不同型号的GPU。一个优秀的部署方案需要具备拓扑感知能力,能够理解不同GPU的性能差异和节点间的网络状况,将任务智能地调度到最合适的硬件上。
  • 主动式扩展(Proactive Scaling):传统的自动扩展依赖于滞后指标(如GPU利用率、队列长度),导致对负载高峰的反应缓慢。TokenScale 创新地提出了**“令牌速度(Token Velocity)”**这一新指标,它量化了系统处理令牌的速率,可以作为系统背压的领先指标,从而实现对负载变化的“主动”预测和提前扩容。

2. P/D比例配置:
Prefill GPU数量与Decode GPU数量的比例(P/D Ratio)是决定系统性能的关键参数。这个比例并非固定不变,而是取决于工作负载的特性:

  • 长Prompt、短输出(如文档分析、RAG):这类负载Prefill压力大,Decode压力小。系统应配置更高的P/D比例(更多的Prefill GPU)。
  • 短Prompt、长输出(如聊天、故事生成):这类负载Prefill压力小,但会产生大量的Decode任务。系统应配置更低的P/D比例(更多的Decode GPU)。

现代PD分离系统通过自动扩展机制,根据实时监控的负载情况(如请求的平均输入/输出长度、请求到达率等),动态调整P/D集群的规模,从而始终保持最优的P/D比例。

6. KV Cache传输机制

KV Cache的传输是PD分离架构引入的主要开销,其效率直接影响系统的端到端延迟。如果传输过慢,Decode节点将因等待数据而空闲,分离带来的优势将被抵消。因此,优化KV Cache传输是PD分离技术成功的关键。

挑战:在vLLM等现代推理引擎中,为了高效管理显存,KV Cache通常以非连续的物理块(PagedAttention)形式存储。在跨节点传输时,如果对每个小块都进行一次网络调用,会产生巨大的通信开销。

业界提出了多种创新的传输机制来应对这一挑战:

  • 结构优化与批量传输 (FlowKV)FlowKV10 的工作表明,通过优化KV Cache的数据结构和内存分配器,可以将原本零散的内存块在逻辑上组织起来,从而将多次小数据的NCCL(NVIDIA Collective Communications Library)传输合并为单次或少数几次大数据块的传输。这种方法极大地减少了通信内核的调用次数和开销,其报告称可将KV Cache的平均传输延迟降低高达96%。
  • 专用缓存层 (LMCache)LMCache11 提出构建一个独立的、高效的KV缓存层。该层从推理引擎(如vLLM)中抽象出来,专门负责KV Cache的存储、查找、移动和压缩。它提供了高度优化的数据移动操作,支持批处理和计算/IO流水线化,作为一个中间件,高效地支持PD分离中的跨引擎缓存传输。
  • 全局缓存与分层重叠传输 (BanaServe)BanaServe7 引入了全局KV缓存存储(Global KV Cache Store)的概念,并结合分层重叠传输技术。这意味着可以在Prefill节点计算上层Transformer的KV Cache时,同时将下层已计算好的KV Cache传输到Decode节点,实现了计算和通信的高度重叠,进一步隐藏了传输延迟。

这些技术的共同目标是减少通信次数、增大单次通信的数据量、以及最大化计算与通信的重叠,从而使KV Cache的传输开销在整个端到端延迟中的占比降至最低。

7. 产业界实践案例

自DistServe提出以来,PD分离已从学术概念迅速演变为业界标准,被各大公司和主流开源框架广泛采纳和持续创新。

  • DistServe4:作为该领域的先驱,它首次系统性地提出了PD分离思想,并证明了其在提升Goodput方面的巨大潜力。
  • vLLM & SGLang:作为最流行的开源LLM推理框架,它们都集成了对PD分离的支持。例如,AMD的官方博客就展示了如何利用SGLang在MI300X GPU上部署PD分离架构,以发挥硬件的最大性能 12。
  • NVIDIA & Ray Serve:如Disaggregated Inference: 18 Months Later3 一文所述,几乎所有生产级的LLM服务框架,包括NVIDIA的Dynamo和Anyscale的Ray Serve,都已将PD分离作为其大规模部署的核心架构。
  • FlowKV (阿里巴巴):来自阿里巴巴的FlowKV10 专注于解决KV Cache传输瓶颈,其低延迟传输方案在内部生产环境中取得了显著的加速效果。
  • HeteroScale8:据其论文描述,该系统已在数万张GPU的庞大生产环境中部署,通过协同自动扩展,将平均GPU利用率提升了26.6个百分点,每天节省数十万GPU小时。
  • LMCache11:作为一个高效的开源KV缓存层,它被设计用于与vLLM等引擎结合,在企业级推理系统中支持PD分离和跨请求的上下文缓存(Prefix Caching),实现了高达15倍的吞吐量提升。

这些案例充分证明,PD分离不仅在理论上具有优越性,在实际的、超大规模的产业应用中也创造了巨大的商业和技术价值。

总结

Prefill-Decode分离技术是近年来LLM推理服务领域最重大的架构演进之一。它通过深刻洞察LLM推理的二阶段计算特性,将混合负载分解为两个独立的、纯粹的计算任务,并部署于专用硬件资源池。这一核心思想从根本上解决了传统混合部署模式下的性能干扰和资源浪费问题,使得大规模LLM服务能够在满足严格延迟SLO的同时,实现前所未有的资源效率和成本效益。

DistServe开创性的探索,到TaiChi对聚合与分离的辩证统一,再到HeteroScaleTokenScale在自动扩展领域的深耕,以及FlowKVLMCache对关键瓶颈——KV Cache传输的极致优化,我们看到PD分离技术正沿着一条从“可行”到“高效”,再到“智能”的路径不断进化。如今,它已成为支撑全球顶级AI服务的标准架构,是实现高效、可扩展和经济的LLM推理服务的关键所在。对于从事AI系统研究和工程的学者与工程师而言,深入理解PD分离的原理、挑战与前沿方案,是构建下一代高性能AI基础设施的必备知识。

​最后

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。

我整理出这套 AI 大模型突围资料包:

  • ✅AI大模型学习路线图
  • ✅Agent行业报告
  • ✅100集大模型视频教程
  • ✅大模型书籍PDF
  • ✅DeepSeek教程
  • ✅AI产品经理入门资料

完整的大模型学习和面试资料已经上传带到优快云的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇
​​
在这里插入图片描述

为什么说现在普通人就业/升职加薪的首选是AI大模型?

人工智能技术的爆发式增长,正以不可逆转之势重塑就业市场版图。从DeepSeek等国产大模型引发的科技圈热议,到全国两会关于AI产业发展的政策聚焦,再到招聘会上排起的长队,AI的热度已从技术领域渗透到就业市场的每一个角落。

img
智联招聘的最新数据给出了最直观的印证:2025年2月,AI领域求职人数同比增幅突破200% ,远超其他行业平均水平;整个人工智能行业的求职增速达到33.4%,位居各行业榜首,其中人工智能工程师岗位的求职热度更是飙升69.6%。

AI产业的快速扩张,也让人才供需矛盾愈发突出。麦肯锡报告明确预测,到2030年中国AI专业人才需求将达600万人,人才缺口可能高达400万人,这一缺口不仅存在于核心技术领域,更蔓延至产业应用的各个环节。

在这里插入图片描述

​​
在这里插入图片描述

资料包有什么?

①从入门到精通的全套视频教程⑤⑥

包含提示词工程、RAG、Agent等技术点
在这里插入图片描述

② AI大模型学习路线图(还有视频解说)

全过程AI大模型学习路线

在这里插入图片描述

③学习电子书籍和技术文档

市面上的大模型书籍确实太多了,这些是我精选出来的

在这里插入图片描述

④各大厂大模型面试题目详解

在这里插入图片描述

⑤ 这些资料真的有用吗?

这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。

所有的视频教程由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

在这里插入图片描述
在这里插入图片描述

智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念‌,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势‌,构建起"前沿课程+智能实训+精准就业"的高效培养体系。

课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

​​​​在这里插入图片描述
在这里插入图片描述

如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能 ‌突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓**

在这里插入图片描述

Prefill - Decode分离是将大语言模型(LLM推理过程中的预填充(Prefill)阶段与解码(Decode)阶段分离开来,其实现方法主要基于这两个阶段的不同任务特性。 在传统的Transformer推理中,模型需同时处理prompt输入和生成输出,会造成计算资源的浪费。而Prefill - Decode分离通过将这两个阶段分离,实现更高效的推理Prefill阶段专注于处理输入的prompt文本,一次性计算所有token的表示。该阶段充分利用并行性处理已知输入,以提高计算效率。例如,对于输入的一段文本,模型可以并行计算出所有token的表示,为后续的解码阶段做准备 [^1]。 Decode阶段则专注于逐个生成新的token,利用KV缓存避免重复计算。在这个阶段,模型通过串行和缓存复用实现高效生成,根据Prefill阶段计算出的token表示,逐个生成新的token。这种串行生成方式结合缓存复用,减少了不必要的计算,提高了生成效率 [^1]。 从LLM推理的整体来看,这种两阶段划分源于输入与输出的计算特性差异,平衡了计算效率与资源消耗,是LLM落地应用的核心优化基础 [^2]。同时,LLM应用通常对每个阶段的延迟有明确要求,预填充阶段关注首token响应时间(TTFT),而解码阶段则关注每个输出token的时间(TPOT) [^3]。 以下是一个简单的Python伪代码示例,展示了Prefill - Decode分离的基本流程: ```python # 模拟Prefill阶段 def prefill(prompt): # 处理输入的prompt文本,一次性计算所有token的表示 token_representations = process_prompt(prompt) return token_representations # 模拟Decode阶段 def decode(token_representations): output_tokens = [] # 逐个生成新的token while True: new_token = generate_next_token(token_representations) if new_token is None: break output_tokens.append(new_token) # 更新token表示(可能涉及KV缓存的更新) token_representations = update_representations(token_representations, new_token) return output_tokens # 主函数,调用PrefillDecode阶段 def inference(prompt): token_representations = prefill(prompt) output_tokens = decode(token_representations) return output_tokens # 示例调用 prompt = "这是一个输入的提示文本" result = inference(prompt) print(result) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值