摘要:本文以 Qwen2.5-32B 为例,将大语言模型推理过程拆解到算子级别,每个环节均采用「专业讲解 + 白话拆解」的双段结构,帮助读者既知其然也知其所以然。适合大模型 Infra / 算法岗面试备考、推理优化入门。


目录

  • 一、前置知识:两个变量和三个概念

  • 二、推理全流程总览

  • 三、核心算子逐个拆解

    • 3.1 Embedding:查表,不是算矩阵

    • 3.2 RMSNorm:给数字"拉个平均"

    • 3.3 Multi-Head Attention:模型真正"读懂"你的地方

    • 3.4 Add:残差连接,防遗忘

    • 3.5 MLP / MoE:专家团做推理

    • 3.6 Token Linear(LM Head):打分投票

    • 3.7 Sample:选词输出

  • 四、全流程速查表

  • 五、面试高频 Q&A

  • 六、总结与


一、前置知识:两个变量和三个概念

两个变量

符号

全称

含义

B

Batch

同时处理的请求数。Batch=4 就是 4 句话一起算

S

Sequence Length

每条请求的 Token 数量

三个概念

  • Token:模型处理文本的最小单位。不是按空格切的!unbelievable 可能被切成 un + believ + able,取决于分词器(Tokenizer)的训练方式。

  • Prompt:你输入给模型的文字(问题、指令等)。

  • 词表(Vocabulary):模型认识的所有 Token 的集合。Qwen2.5-32B 词表大小为 152064,即每次输出要从 15 万多个候选里挑下一个词。


二、推理全流程总览:

Qwen的模型图,以本图为核心

Prompt 文字
   ↓  Tokenizer Encode
Token ID
   ↓  Embedding (Gather 查表)
5120 维向量
   ↓  64 层 Transformer Block (Attention + MLP + Add + Norm)
Hidden States
   ↓  RMSNorm
归一化后的 Hidden States
   ↓  Token Linear (矩阵乘)
152064 维 Logits
   ↓  Softmax + Sample
Token ID
   ↓  Tokenizer Decode
输出文字 → 拼回输入 → 循环直到结束

一句话概括:文字变编号 → 编号变向量 → 64 层大脑加工 → 打分 → 选词 → 变回文字。


三、核心算子逐个拆解

3.1 Embedding:查表,不是算矩阵

🔬 专业讲解

Embedding 本质是 Gather 操作(按索引取值),不是矩阵乘法。

  • Embedding Weight 形状:[152064, 5120](词表大小 × 隐藏维度)

  • 输入 Token ID = 100 → 取权重矩阵第 100 行的 5120 个数 → 输出

  • 遍历所有 Token ID,逐行复制,拼成输出矩阵

🗣️ 白话拆解

想象你有一本超级字典,每一页对应一个词,页里写着 5120 个数字(代表这个词的意思)。Embedding 干的事就是:翻到对应页码,把那页的内容抄下来。不是做算术,是查字典。


3.2 RMSNorm:给数字"拉个平均"

🔬 专业讲解

公式如下,其中 d = 5120

y_i = (x_i / RMS(x)) * γ_i

其中 RMS(x) = sqrt( (1/d) * Σ(x_j²) + ε )
  • 单个 Token 的 5120 维向量独立计算,不跨 Batch、不跨 Token

  • 比 LayerNorm 少了"减均值"步骤,计算量更小

  • 每个 Transformer 层至少出现两次(Attention 前一次、MLP 前一次)

🗣️ 白话拆解

模型脑子里一堆数字,有的特别大有的特别小,直接往下传会"数值爆炸"。RMSNorm 就是:看看这 5120 个数整体有多大,然后按比例统一缩小,让它们都在合理范围内。就像一锅汤太咸了加点水——味道比例不变,但别齁死人。


3.3 Multi-Head Attention:模型真正"读懂"你的地方

🔬 专业讲解

核心公式:



Attention(Q, K, V) = softmax(QKᵀ / √d_k) V
  • Qwen2.5 使用 GQA(Grouped Query Attention):多个 Query 头共享一组 KV 头,降低显存带宽压力

  • "多头"指将向量拆成多组,每组独立算注意力,最后拼接

  • 有的头关注语法、有的头关注指代关系、有的头关注长距离依赖

🗣️ 白话拆解

这是模型最聪明的地方。看这句话:

"张三喜欢吃苹果,他也喜欢香蕉。"

模型需要搞清楚:"他"是谁?​ → 注意力机制发现"他"和"张三"关系最密切,给"张三"打最高权重。

多头的意思:派 8 个(或更多)"阅读理解小工"同时看这句话,每人关注不同方面,最后把结论拼起来——比一个人看更全面。


3.4 Add:残差连接,防遗忘

🔬 专业讲解

公式极其简单:

output = F(x) + x
  • 这是残差连接(Residual Connection),每个子层(Attention / MLP)后必接

  • 作用:缓解深层网络梯度消失,让 64 层网络能稳定训练

  • Kimi 最新提出的"残差注意力机制"也是这一思路的延伸

🗣️ 白话拆解

新想法 + 旧记忆 = 输出,就这么简单。

为什么重要?网络有 64 层,信息一层层传容易"丢"。残差连接就像在每层之间搭了座天桥——旧信息可以直接跳过这层传到下一层,保证不会学着学着把前面的重要信息忘了。


3.5 MLP / MoE:专家团做推理

🔬 专业讲解

  • Qwen2.5-32B 是 MoE(Mixture of Experts)架构

  • 每个"专家" = 一个 MLP(两层线性变换 + SwiGLU 激活函数)

  • 路由器(Router)根据输入决定激活哪几个专家,其余不计算

  • 效果:总参数量巨大,但推理时只用到一小部分,容量大且不增加推理成本

🗣️ 白话拆解

MLP 是模型的"逻辑推理模块"。MoE 的意思是:不是只有一个大脑,而是养了一群专家

你说"我喜欢上海" → 路由器判断:这话跟"地理"和"情感"相关 → 激活"地理专家"和"情感专家" → 他们加工后得出结论:"这人可能也喜欢大城市"

关键优势:养了 32 个专家,但每次只叫 2~3 个上班,省算力!这就是 MoE 能在不增加推理成本的情况下把模型做大的秘诀。


3.6 Token Linear(LM Head):打分投票

🔬 专业讲解

标准矩阵乘法:

Logits = HiddenStates × W_lm_head
  • 输入形状:[B × S, 5120]

  • 权重形状:[5120, 152064]

  • 输出形状:[B × S, 152064],即每个位置对所有候选 Token 的打分

权重共享:很多模型(如 GPT 系列)让 Embedding 和 LM Head 共用同一份权重矩阵——省显存、效果不差。

🗣️ 白话拆解

Embedding 是"词 → 意思数字串",LM Head 正好反过来:"意思数字串 → 跟字典里每个词的匹配分"。

你心里想"接下来该说个表示开心的话",LM Head 就拿这个想法去跟字典里 15 万个词逐一比对打分:

高兴 0.82 | 开心 0.91 | 喜悦 0.65 | 悲伤 0.01 | ……

分最高的就是模型要输出的下一个词。


3.7 Sample:选词输出

🔬 专业讲解

最简逻辑(贪心解码):

Logits → Softmax → 概率分布 → Argmax → Token ID → Decode → 文字

实际工程中常用策略:

策略

作用

Top-K

只保留分数最高的 K 个候选,其余置零

Top-P

保留累积概率达 P 的最小集合(Nucleus Sampling)

Temperature

T→0 趋近贪心(稳定),T 大更随机(有创意)

重复惩罚

已说过的词扣分,防止车轱辘话

🗣️ 白话拆解

模型打了一堆分,怎么选?

  • 最稳的选法:谁分高选谁 → 结果靠谱但容易无聊

  • 加点随机:Temperature 调高 → 偶尔选个分低的词 → 回答更有创意

  • 防复读机:重复惩罚 → 已经说过的词扣分 → 别让模型"我喜欢上海,我喜欢上海,我喜欢上海……"

选完之后,把选中的词拼回输入,再走一遍全流程——这就是自回归生成,直到模型输出"结束符"为止。


四、全流程速查表

步骤

算子

输入 → 输出

一句话作用

1

Tokenizer

文字 → Token ID

把人话翻成编号

2

Embedding

ID → 5120 维向量

查字典拿"意思卡"

3

RMSNorm

向量 → 归一化向量

数字拉匀防爆炸

4

Multi-Head Attention

向量 → 上下文感知向量

让每个词看懂上下文

5

Add

两向量 → 一向量

新记忆 + 旧记忆不丢

6

MLP / MoE

向量 → 加工后向量

专家团做逻辑推理

7

LM Head

向量 → 152064 维分数

给每个候选词打分

8

Sample + Decode

分数 → 文字

选个词报给你听


五、 Q&A

Q1:Embedding 是矩阵乘法吗?

A:不是,是 Gather 查表操作。但要和 LM Head 区分——LM Head 才是矩阵乘。

Q2:为什么 LM Head 能和 Embedding 共享权重?

A:两者本质是互逆映射(词 ↔ 向量),共用权重既省显存又效果不差,GPT 系列就是这么做的。

Q3:RMSNorm 比 LayerNorm 省在哪?

A:去掉了"减均值"的计算,只保留均方根归一化,公式更简、计算更快。

Q4:GQA 相比标准 MHA 解决了什么问题?

A:多个 Query 头共享一组 KV 头,显著降低显存带宽占用,长序列推理时优势明显。

Q5:MoE 为什么"大模型不大费"?

A:总参数量大但每次推理只激活部分专家,计算量约等于激活参数量,而非总参数量。

Q6:Add 算子为什么重要?

A:残差连接让深层网络能稳定训练,64 层不加残差基本训不动,梯度会消失。

更多推荐