生活化类比:把推理比作一场开卷考试

理解这两个阶段,先看一个好懂的比喻:

  • Prefill(预填充)= 通读材料+做笔记:拿到试卷(你的问题)和参考资料,快速通读全文,在草稿纸上记下要点、逻辑关联,全程费脑力,但不写任何答案
  • Decode(解码)= 逐题逐字写答案:看着草稿纸上的笔记,逐字书写答案,每写一个字都核对上下文,过程轻松,但只能一个字一个字写,没法跳步

这里的“草稿纸”,就是工程里关键的 KV Cache(键值缓存)——模型理解问题后的核心记忆,后续生成回答全靠它。

二、Prefill(预填充):一次性吃透你的问题

Prefill 是推理的第一步,也是决定“你多久能看到第一个字”的关键阶段,核心是一次性、并行处理你输入的整段问题,完成“理解+记笔记”。

2.1 它具体在做4件事

  1. 分词(Tokenization):把你的文字拆成模型能懂的最小语义单元(Token),比如中文里一个词、半个词都是1个Token,再转换成数字ID,相当于把人类语言翻译成模型的“数学语言”。
  2. 全序列并行计算:把整段输入一次性送入模型,通过自注意力机制,同时计算所有Token之间的上下文关联(比如理清“它”指代橘子还是桌子)。
  3. 建立记忆(KV Cache):把计算好的关键信息(Key和Value矩阵)存入显存,生成KV Cache——相当于把理解好的问题逻辑,记在“草稿纸”上。
  4. 产出第一个字:基于最后一个Token的隐状态,生成回答的第一个Token,完成Prefill闭环。

2.2 Prefill的4个核心特点

特征 通俗说明
计算密集型 要做大规模矩阵乘法,输入越长计算量越大,GPU算力是瓶颈(长文本会陡增)
高度并行 整段问题的所有Token同时计算,速度快
显存峰值高 一次性给整段输入分配KV Cache,长文本会瞬间占用大量显存
决定首字延迟(TTFT) 你发完问题到看到第一个字的等待时间,完全由Prefill决定

一句话总结:Prefill 是模型“埋头苦读、吃透问题”的过程,读得越快,你看到首字就越早。

三、Decode(解码):自回归逐字写回答

Prefill生成第一个字后,模型立刻进入Decode阶段,核心是串行、逐字生成后续回答,全程依赖Prefill留下的KV Cache。

3.1 它具体在做循环操作

  1. 刚生成的1个Token(及位置编码偏移) 作为新输入;
  2. 读取Prefill缓存的KV Cache,以及之前Decode新增的缓存;
  3. 计算当前字与历史上下文的关联,不用重新算旧内容
  4. 采样生成下一个Token;
  5. 把新字的信息追加到KV Cache,更新“草稿纸”;
  6. 重复以上步骤,直到遇到结束符(EOS)、达到长度上限,或触发异常终止(显存不足、用户中断)。

3.2 Decode的4个核心特点

特征 通俗说明
显存带宽密集型 每次要读取庞大的KV Cache,瓶颈是显存带宽,不是算力
严格串行 必须等第N个字生成,才能生成第N+1个字,没法并行
单步计算量小 每次只处理1个Token,计算简单、耗时短
决定输出流畅度(TPOT) 每个字的间隔时间,决定你感知的“打字速度”

一句话总结:Decode 是模型“奋笔疾书写回答”的过程,受限于显存带宽,只能一个字一个字往外“吐”。

四、完整流程:从输入到输出的四站旅程

显存不足/超时/用户中断

正常

用户输入文本

第一站:分词 Tokenization

文本转数字Token ID

添加特殊标记

CPU轻量操作,瞬时完成

第二站:Prefill 预填充

整段问题一次性送入GPU

并行计算上下文关联

生成KV Cache 显存占用高峰

输出第一个回答字

第三站:Decode 解码生成

循环:输上一字→读KV Cache→生成下一字

追加新内容到KV Cache

异常判断

终止生成

直到结束符/达长度上限

第四站:反分词 Detokenization

数字Token转回可读文字

逐字流式返回给用户

五、为什么必须分成两个阶段?

核心原因:Prefill和Decode的计算模式、资源瓶颈完全不同,强行合并会导致资源浪费、效率暴跌。

Prefill vs Decode 核心对比

对比维度 Prefill(预填充) Decode(解码)
输入规模 成百上千个Token并行处理 每次仅1个Token串行处理
计算类型 大规模矩阵乘法(算力瓶颈) 小矩阵+大量缓存读取(带宽瓶颈)
并行性 高度并行,效率高 严格串行,效率低
优化方向 FlashAttention、算子融合 KV Cache压缩、PagedAttention

简单说:Prefill适合“批量干重活”,Decode适合“串行干轻活”,分开处理才是最高效的方式。

六、关键影响:理解两阶段,看懂模型体验与优化

6.1 显存规划:长文本的“隐形杀手”

Prefill是显存占用高峰,输入越长,KV Cache占用越大。比如72B大模型处理128K超长文本,KV Cache会占用数十GB显存,显存不够直接接不了长问题
不同模型架构差异明显:GQA(分组查询头)模型比普通模型,KV Cache显存占用低30%~70%,选型时要重点关注。

6.2 体验权衡:首字快 vs 输出顺

  • 长文档问答(长Prefill+短Decode):优先看首字延迟(TTFT),建议控制在1~3秒内;
  • 日常聊天(短Prefill+长Decode):优先看输出流畅度(TPOT),建议控制在50~100ms/字,接近人类打字速度。

6.3 现代优化手段:解决痛点、提升效率

技术 解决问题 作用阶段 小说明
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐