从 Token 到算子-Qwen2.5-32B 推理全流程拆解:
摘要:本文以 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 层不加残差基本训不动,梯度会消失。
更多推荐

所有评论(0)