🧠 大模型推理全解析:从你提问到它回答,中间到底发生了什么?

发布于:2025年10月13日
关键词:大模型推理、KV Cache、自回归生成、注意力机制、长上下文、Transformer


你有没有想过:
当你问 ChatGPT:“请用李白风格写一首关于 AI 的诗”,它为什么能秒回一首押韵工整、意境飘逸的七言绝句?

这背后,不是魔法,而是一场精密的“大脑运作”——
一场从你按下回车,到模型逐字输出答案的完整推理旅程。

今天,我们就来全程拆解大模型的推理过程,带你走进它的“思维世界”:

✅ 用户输入后发生了什么?
✅ KV Cache 是什么?为什么它让推理变快?
✅ 模型是怎么“一个字一个字”生成回答的?
✅ 为什么它能“记得”上一轮对话?长上下文是怎么实现的?

准备好了吗?我们从你按下“发送”那一刻开始——


一、第一步:你的问题,被“切碎”了

一切始于你的输入:

“请用李白风格写一首关于 AI 的诗”

但模型不能直接读这句话。它需要先经过 分词(Tokenization)

🔤 分词:把句子切成“模型能懂的小块”

比如,这句话可能被切为:

["请", "用", "李白", "风格", "写", "一首", "关于", "AI", "的", "诗"]

每个 token 都会被映射成一个数字 ID,比如:

[8921, 456, 20345, 781, 33, 902, 1003, 15678, 22, 88]

类比
就像把中文翻译成摩斯电码,模型只认数字。


二、第二步:输入进入模型,开始“理解”

这些 token ID 被送入模型的 Embedding 层,转换成向量(也叫“词向量”):

[8921] → [0.2, -0.5, 1.3, ..., 0.7]  (维度:4096)
[456]  → [0.8,  0.1, -0.9, ..., 1.2]
...

然后,这些向量进入 Transformer 的每一层,经过:

  • 注意力机制(Attention)
  • 前馈网络(FFN)
  • 归一化(RMSNorm)

最终,模型对你的问题有了“理解”——它知道你要的是一首“有李白气质的 AI 主题诗”。


三、第三步:生成第一个字——自回归的开始

现在,模型要开始“写诗”了。但它不能一口气写出整首,而是一个字一个字地生成

这个过程叫 自回归生成(Autoregressive Generation)

🔄 第一轮:生成“床”

模型基于你的问题,预测下一个 token。
它输出一个概率分布,比如:

概率
38% ✅
12%
9%
7%
... ...

模型选择概率最高的“床”,输出第一个字。

注意:这里用的是“采样”或“贪心搜索”,不同策略会影响风格。


四、关键机制:KV Cache——让模型“记住”上下文

如果每生成一个字,模型都要重新计算整个历史,那速度会慢到无法接受。

所以,大模型用了 KV Cache(Key-Value Cache) 来加速。

🧠 KV Cache 是什么?

在 Transformer 的注意力机制中,每个 token 会生成三个向量:

  • Query(Q):我在找什么?
  • Key(K):我代表什么?
  • Value(V):我能提供什么信息?

在推理时:

  • K 和 V 一旦计算出来,就可以缓存下来
  • 下一轮生成时,不需要重新计算历史 token 的 K/V,直接从缓存中读取

🌰 举个例子:

你问:“写一首诗”,模型开始生成:

第1步:输入 ["写", "一", "首", "诗"] → 计算 K₁, V₁, K₂, V₂, K₃, V₃, K₄, V₄ → 缓存
第2步:生成 "床" → 只需计算 "床" 的 Q,然后用缓存的 K/V 做注意力
第3步:生成 "前" → 只需计算 "前" 的 Q,再查缓存
...

好处

  • 避免重复计算,推理速度提升 3~5 倍
  • 显存换速度,是长文本推理的核心

⚠️ 代价

  • KV Cache 占用大量显存(尤其是长上下文)

五、第四步:循环往复,直到结束

模型不断重复以下步骤:

[当前输入] → [Attention + FFN] → [输出下一个 token] → [更新 KV Cache]

直到生成结束符 <EOS> 或达到最大长度。

最终输出:

床前AI明,疑是数据光。
举头望代码,低头思故乡。

一首“AI 李白诗”诞生了。


六、为什么大模型“回答得那么好”?

你可能会问:为什么它能写出这么“像人”的回答?

答案是:预训练 + 指令微调 + 注意力机制 的三重奏。

1. 预训练:读了“整个互联网”

模型在训练时,已经“读过”数万亿 token 的文本,包括:

  • 百科、小说、代码、论文、诗歌……

它学会了:

  • 语言规律
  • 知识关联
  • 写作风格

🌰 它知道“李白”= 豪放、浪漫、爱喝酒、写月亮


2. 指令微调(SFT):学会了“听人话”

通过大量“指令-回答”对训练,模型学会了:

  • “写诗” → 要押韵、有意境
  • “解释” → 要通俗、有例子
  • “编程” → 要语法正确

✅ 它不再是“书呆子”,而是“智能助手”


3. 注意力机制:能“上下文关联”

Transformer 的注意力机制,让它能:

  • 关注你问题中的关键词(如“李白”、“诗”)
  • 联想到相关知识
  • 组织成连贯表达

🔍 类比
就像你写作文时,脑子里不断回忆相关素材,然后组织语言。


七、为什么现在的大模型“记性”这么好?长上下文是怎么实现的?

以前的模型只能记住几百字,而现在的 LLM 动不动就支持 32K、100K 甚至 1M token 的上下文。

比如:

  • Claude 支持 200K
  • GPT-4 Turbo 支持 128K
  • 通义千问支持 1M

它们是怎么做到“过目不忘”的?

🧩 长上下文能力的三大支柱

支柱 说明
1. KV Cache 优化 高效存储和检索历史 K/V,避免重复计算
2. 位置编码升级 从绝对位置 → 相对位置 → 旋转位置(RoPE)→ ALiBi
3. 注意力稀疏化 不是对所有 token 做全连接,而是只关注关键部分

7.1 KV Cache 优化:不只是缓存,还能压缩

传统 KV Cache 显存占用大。现在有多种优化:

  • PagedAttention(vLLM):像操作系统管理内存一样,分页存储 KV
  • KV Cache 量化:用 8bit 或 4bit 存储,节省显存
  • KV Cache 蒸馏:只保留重要 token 的 K/V

结果:支持更长上下文,且推理更快


7.2 位置编码:让模型“知道顺序”

模型需要知道 token 的顺序,否则“我爱你”和“你爱我”就一样了。

传统方法:绝对位置编码
  • 每个位置一个向量(如 pos=1,2,3...)
  • 但无法外推到更长序列
现代方法:RoPE(旋转位置编码)
  • 用“旋转”方式编码位置信息
  • 数学上支持无限外推
  • LLaMA、Qwen、ChatGLM 都在用

🌟 优势:即使训练时只见过 4K 上下文,也能推理 100K


7.3 稀疏注意力:不看全部,只看重点

全注意力(Full Attention)计算量是 O(n2)O(n2),太贵。

所以,现代模型用:

  • 滑动窗口注意力:只关注最近 N 个 token
  • 局部 + 全局注意力:关键部分全看,其余滑动
  • Recurrent Attention:像 RNN 一样复用信息

效果:在长文本中保持高效


八、总结:大模型推理的完整流程图

我们来回顾整个过程:

用户输入
    ↓
分词(Tokenization) → [token IDs]
    ↓
Embedding → 向量表示
    ↓
Transformer 层(带 KV Cache)
    ↓
自回归生成:一个字一个字输出
    ↓
每次更新 KV Cache,避免重复计算
    ↓
直到生成结束

而它的“聪明”来自:

🔹 读过海量数据(预训练)
🔹 学会听懂指令(SFT)
🔹 能关联上下文(注意力 + KV Cache)
🔹 记得住长对话(RoPE + 稀疏注意力)


九、未来展望:上下文还会更长吗?

当然会。但挑战也越来越大:

挑战 解决方向
显存爆炸 KV 压缩、分页、量化
推理延迟 稀疏注意力、推测解码
信息遗忘 记忆机制、RAG 结合

未来,我们可能会看到:

  • 无限上下文:模型像人一样“选择性记忆”
  • 跨会话记忆:登录后记住你的偏好
  • 多模态上下文:图文、语音、代码混合记忆

📚 延伸阅读

  • Attention Is All You Need (Vaswani et al., 2017)
  • RoPE: Rotary Position Embedding (Su et al., 2021)
  • vLLM: PagedAttention
  • LLaMA 论文
  • Hugging Face Transformers 文档
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐