大模型推理基础:Transformer架构、自回归生成、推理与训练的区别

核心原理:从Transformer到自回归

现代大语言模型(如GPT、LLaMA、Qwen)几乎都建立在Transformer架构之上。Transformer的核心是自注意力机制(Self-Attention),它让模型在处理一个词时,能够同时“关注”序列中所有其他词,并计算它们之间的相关性权重。这种机制解决了早期RNN(循环神经网络)难以并行、长距离依赖丢失的问题。

在推理阶段,模型的工作方式被称为自回归生成(Autoregressive Generation)。所谓“自回归”,是指模型每次只预测一个词(Token),然后将新生成的词拼接到输入序列末尾,再作为下一次预测的输入,如此循环往复,直到生成结束符或达到最大长度。这个过程可以理解为“逐字造句”:

输入: "中国的首都是"
第1步预测: "北"  → 新输入: "中国的首都是北"
第2步预测: "京"  → 新输入: "中国的首都是北京"
第3步预测: "。"  → 新输入: "中国的首都是北京。"
第4步预测: [EOS] → 停止生成

这种串行依赖关系决定了推理无法像训练那样对整个序列并行处理,每一步都必须等待前一步的结果,这也是推理延迟的主要来源。

关键认知:自回归生成是“一个词一个词地蹦出来”的过程,每一步都依赖上一步的输出。vLLM的连续批处理、KV Cache、PagedAttention等核心优化,全部都是围绕这个串行特性展开的。
Transformer 自回归推理流程 输入序列 "中国的首都是" Transformer 解码器 自注意力 + 前馈网络 KV Cache 缓存历史状态 Softmax 概率分布 下一个词的概率 采样策略 greedy / top-p / top-k 生成 "北" 拼接回输入序列,进入下一轮 循环执行直到遇到 [EOS] 或达到 max_tokens 第1轮 输入: "中国的首都是" → 输出: "北" 第2轮 输入: "中国的首都是北" → 输出: "京" 第3轮 输入: "…北京" → 输出: "。" ······ 每轮只生成 1 个 Token,串行执行

方法流程:推理的完整生命周期

一次完整的推理请求,从用户输入到最终输出,大致经历以下阶段:

  1. Prompt 预处理(Prefill):将用户输入的文本切分为 Token 序列,并一次性并行计算所有 Token 的注意力与隐藏状态,生成对应的 KV Cache(键值缓存)。这是推理中计算密集度最高的阶段。
  2. 逐 Token 生成(Decode):进入自回归循环,每一步只输入最新生成的 1 个 Token,结合已有的 KV Cache 计算下一个 Token 的概率分布。这个阶段是内存带宽密集型的。
  3. 采样与停止:根据概率分布选择下一个 Token(贪心、top-p、温度采样等),直到生成 [EOS] 或达到 max_tokens 限制。
  4. 反序列化输出:将生成的 Token 序列转换回人类可读的文本,返回给用户。
阶段 计算特点 耗时占比 vLLM 优化重点
Prefill 高计算量,可并行 约 10%~20% Chunked Prefill(分块预填充)
Decode 低计算量,高内存访问 约 80%~90% PagedAttention、KV Cache 管理
采样 极轻量 < 1% 投机采样(Speculative Decoding)

案例场景:一次真实的对话请求

假设用户向模型发送请求:"请用一句话介绍 vLLM"。服务端实际发生的过程如下:

用户输入: "请用一句话介绍 vLLM"
Token 化: ["请", "用", "一句", "话", "介绍", " v", "LL", "M"]
Prefill: 并行处理这 8 个 Token,生成 KV Cache
Decode 循环:
  第1步: 输入 [M] → 预测 "是"    (缓存 9 个 Token 的 KV)
  第2步: 输入 [是] → 预测 "一个"  (缓存 10 个 Token 的 KV)
  第3步: 输入 [一个] → 预测 "高"  (缓存 11 个 Token 的 KV)
  ... 直到生成 [EOS]
最终输出: "vLLM 是一个高性能的大模型推理引擎。"

在这个例子中,Prefill 只执行一次,而 Decode 循环执行了 20 多次。每一步都需要从内存中读取全部 KV Cache,这就是为什么推理瓶颈往往在内存带宽而非计算能力。

误区与复盘:推理与训练的本质差异

常见误区 1:认为推理和训练可以共用同一套优化逻辑。 训练阶段是前向传播 + 反向传播,可以大规模并行处理 batch 数据;而推理阶段是串行生成,batch 中的每个请求进度不同,导致 GPU 利用率难以饱和。vLLM 的连续批处理(Continuous Batching)正是为了解决这个问题——它允许不同请求在不同时间点加入或离开 batch,而不是等待整个 batch 全部完成。
常见误区 2:忽略 KV Cache 的内存开销。 KV Cache 的大小与序列长度 × 层数 × 注意力头数 × 隐藏维度成正比。一个 7B 模型在生成 2048 个 Token 时,KV Cache 可能占用数 GB 显存。如果不做内存管理,显存很快会被耗尽。vLLM 的 PagedAttention 将 KV Cache 分页存储,像操作系统管理虚拟内存一样,显著减少了显存碎片和浪费。
复盘要点:理解推理与训练的区别,是掌握 vLLM 设计思想的前提。训练追求“吞吐量最大化”,可以牺牲单样本延迟;推理追求“低延迟 + 高吞吐”的平衡,且必须处理动态的、长短不一的请求序列。vLLM 的所有核心机制——PagedAttention、Continuous Batching、Prefix Caching——都是针对推理阶段这些特性量身定制的。

总结来说,Transformer 架构提供了并行计算的基础,自回归生成决定了推理的串行本质,而推理与训练在目标、计算模式、内存访问模式上的巨大差异,催生了 vLLM 这样专门为推理优化的框架。理解这三层递进关系,后续学习 vLLM 的具体实现时就会更加顺畅。