@_avichawla: LLM推理中的预填充与解码。你是否注意到,LLM的第一个令牌总是需要片刻才出现…

X AI KOLs Timeline 论文

摘要

解释LLM推理的两个阶段——预填充和解码,详细说明GPU瓶颈如何从预填充时的计算受限转变为解码时的内存受限,以及KV缓存的重要性。

LLM推理中的预填充与解码。 你是否注意到,LLM的第一个令牌总是需要片刻才出现?而后续的令牌却流畅地逐个输出? 这个停顿并非网络延迟,而是LLM工作原理的结构性特性。 推理分为两个阶段,它们共享相同的模型和代码路径,但每个阶段的工作负载截然不同,瓶颈也不同。 > 预填充阶段始于你提交提示词。 模型一次性并行处理所有输入令牌,同时计算它们的Q、K和V。 注意力机制以矩阵乘法的形式运行,GPU芯片以高利用率运行,执行快速数学运算。 预填充是计算受限的,衡量它的指标是首令牌时间(TTFT)。 > 解码阶段始于第一个令牌输出后。 为了生成下一个令牌,模型只计算这个新令牌的Q、K和V,因为之前的所有信息都已缓存。 因此,模型每次前向传播只处理一个令牌,将单个查询与缓存的键进行匹配,而不是进行完整的矩阵运算。这使得推理速度很快,因为计算量很小。 但GPU仍需从内存中加载每个权重和每个缓存条目来执行这种小计算,因此瓶颈发生了翻转:计算单元空闲,而内存带宽成为限制因素。 解码是内存受限的,衡量它的指标是令牌间延迟(ITL)。 GPU利用率在预填充期间达到峰值,在解码期间急剧下降,因为第二阶段的内存是瓶颈,而非计算。 向一个慢速流式模型投入更多计算资源往往收效甚微,因为解决内存受限工作负载的方法是更快的内存或更小的缓存,而非更多FLOPs。 长上下文感觉特别慢,因为KV缓存会随着每个令牌增长,而每个解码步骤都必须读取全部缓存。 但维护缓存是一项重要的优化,因为它使解码变得可行。 - 如果没有KV缓存,每个新令牌将迫使对整个不断增长的序列重新计算注意力。 - 有了KV缓存,缓存会在预填充期间一次性构建,然后每个解码步骤只增加一个条目,现有条目被重用而非重新计算。 缓存位于GPU内存中,随序列长度线性增长。对于一个13B模型,大约每个令牌需要1 MB,这意味着4K上下文仅缓存就要消耗4 GB显存。 整个领域现在都在围绕这一限制进行优化,包括量化缓存、滑动窗口、分组查询注意力和PagedAttention,而DeepSeek的V4系列更进一步,重新设计了注意力机制本身,使缓存从一开始就保持较小。 实际启示是:当有人说他们的模型感觉缓慢时,首先要问的是它是启动缓慢还是流式输出缓慢。 启动缓慢意味着预填充和计算瓶颈,而流式输出缓慢意味着解码和内存瓶颈。 下面的文章是一份关于LLM推理的底层指南,逐步讲解从提示词到流式响应的全过程,涵盖分词、嵌入、注意力机制、预填充与解码的分离、KV缓存以及量化。 它将为你提供一个完整的推理底层工作原理思维模型。 详情请阅读下文。
查看原文
查看缓存全文

缓存时间: 2026/06/29 10:26

LLM推理中的预填充与解码。

你是否注意到,LLM的第一个token总是需要一点时间才能出现?但后续的token却流畅地流出?

这种停顿并非网络延迟,而是LLM根本工作方式的结构性特性。

推理分为两个阶段,它们共享相同的模型和代码路径,但每个阶段的工作负载截然不同,瓶颈也不同。

预填充阶段在你提交提示时开始。

模型在一次并行过程中处理所有输入token,一次性计算它们的Q、K和V。

注意力以矩阵乘法运行,GPU芯片以高利用率运行,进行快速计算。

预填充是计算密集型的,其衡量指标是首token耗时(TTFT)。

解码阶段在第一个token输出后开始。

为了生成下一个token,模型仅针对这一个新token计算Q、K和V,因为之前的所有内容都已被缓存。

因此,模型每次前向传播循环处理一个token,将一个查询与缓存的键相乘,而不是完整的矩阵。由于计算量很小,这使得推理速度很快。

但GPU仍然必须从内存中加载每个权重和每个缓存条目来执行这个微小的计算,因此瓶颈发生转变,计算单元空闲,而内存带宽成为限制因素。

解码是内存密集型的,其衡量指标是token间延迟(ITL)。

GPU利用率在预填充期间达到峰值,在解码期间急剧下降,因为在第二阶段,瓶颈是内存而不是计算。

向流式传输缓慢的模型投入更多计算往往无济于事,因为对于内存密集型工作负载的解决方案是更快的内存或更小的缓存,而不是更多的FLOPs。

长上下文会显得异常缓慢,因为KV缓存随着每个token而增长,并且每个解码步骤都必须读取所有缓存。

但维护缓存是一个重要的优化,因为它使解码变得可行。

  • 如果没有KV缓存,每个新token都会强制对整个增长序列重新计算注意力。
  • 使用KV缓存,缓存会在预填充期间一次性构建,然后每个解码步骤恰好增加一个条目,现有条目被重用而不是重新计算。

缓存位于GPU内存中,并随序列长度线性增长,因此一个13B的模型每个token大约需要1 MB,这意味着4K的上下文仅缓存就消耗4 GB的显存。

整个领域现在都在围绕这一限制进行优化,采用量化缓存、滑动窗口、分组查询注意力和PagedAttention,而DeepSeek的V4系列更进一步,重新设计了注意力机制本身,使缓存从一开始就保持较小。

实际的经验是,当有人说他们的模型很慢时,第一个问题是它是启动缓慢还是流式传输缓慢。

启动缓慢意味着预填充和计算瓶颈,而流式传输缓慢意味着解码和内存瓶颈。

下面的文章是一本从基本原理出发的LLM推理指南,全面介绍了从提示到流式响应之间的所有内容,涵盖tokenization、嵌入、注意力、预填充与解码的分离、KV缓存和量化。

它将让您对推理的实际工作机制有一个完整的认知模型。

请在下方阅读。

相似文章