---
tags: [大模型, Transformer, 推理]
doc_type: knowledge-note
abstract: "文本表示、自回归生成、Transformer结构、KV Cache与推理性能指标。"
creation: 2026-10-15
返回目录: "[[计算机系/昇腾与CANN/大模型与算子专题学习导航|大模型与算子专题学习导航]]"
下一篇: "[[计算机系/昇腾与CANN/大模型推理优化|大模型推理优化]]"
前置知识: "[[计算机系/昇腾与CANN/人工智能发展与大模型计算本质|人工智能发展与大模型计算本质]]"
后续学习: ["[[计算机系/昇腾与CANN/SFT监督微调与FSDP训练|SFT监督微调与FSDP训练]]"]
---

# 大语言模型与推理系统

导航：[专题学习导航](大模型与算子专题学习导航.md) · 后续：[推理优化](大模型推理优化.md)

## 1. 文本如何进入模型

语言模型不能直接对字符串做矩阵乘法。输入先经过分词和编号，再变成浮点向量：

```text
文本 → tokenizer → token 序列 → token ID → embedding → 模型计算
```

### Token 与词表

Token 是 tokenizer 处理的基本单元，可能是一个字、一个词、词的一部分、标点或特殊标记。不同 tokenizer 对同一句话的切分可能不同。

词表将 token 映射为整数 ID。ID 是索引，不代表语义大小，编号接近的两个 token 不一定含义接近。因此，示意图中的某个编号不能直接用到另一模型的 tokenizer 中。

### Embedding 与位置

设词表大小为 $V$，隐藏维度为 $d$，Embedding 可看作形状为 $V\times d$ 的可学习矩阵。输入 token ID 为 $i$ 时，查出第 $i$ 行向量。

查表后的向量维度固定，随后各层将结合上下文更新表示。同一 token 在不同上下文中的最终表示可以不同。

词序同样影响含义，例如“模型优化推理”与“推理优化模型”。模型需要位置信息，但具体实现不一定是在 Embedding 上简单加一个位置向量。Qwen 类模型通常使用 RoPE，在注意力的 Q/K 表示中引入旋转位置编码。

### 上下文窗口

上下文窗口限定一次预测可利用的 token 范围，通常需要同时容纳输入与已经生成的内容。更长窗口允许处理更多材料，但会增加计算和缓存压力，也不保证模型能准确利用所有历史信息。

## 2. 自回归生成与采样

自回归模型依次预测下一个 token：

$$
p(x_1,\ldots,x_T)=\prod_{t=1}^{T}p(x_t\mid x_{<t})
$$

对话生成循环如下：

1. 根据当前上下文做前向计算。
2. 得到词表中各候选 token 的 logits。
3. 根据解码策略选择下一个 token。
4. 将它追加到上下文，再进行下一步。
5. 遇到结束 token、输出上限或停止条件时结束。

**Logits 是未归一化分数，Softmax 后才得到概率。**LM Head 通常产生 logits，Sampler 再完成概率处理与 token 选择。

### Temperature 与 Top-p

温度 $T>0$ 时，概率可写为：

$$
p_i=\frac{\exp(z_i/T)}{\sum_j\exp(z_j/T)}
$$

低温度使分布更集中，高温度使分布更平缓。贪心解码直接选最大分数；接口中的 `temperature=0` 往往表示此类特殊模式，不能直接代入上式除零。

Top-p 选择累计概率达到阈值的一组高概率候选，再在其中采样。它与温度都影响多样性，但不会替代事实核验。低温度可以让输出更稳定，却不保证答案正确。

### Prompt 与能力边界

“介绍推理”包含歧义，“用三句话解释大模型推理中的 Prefill 与 Decode”则明确了领域和输出要求。

清晰上下文可以改善行为，但流畅输出仍可能包含幻觉。模型可以利用提示词中的新信息，也可以通过检索和工具接收外部信息；没有外部输入或工具时，模型不会自行获得实时资料。自我检查有帮助，但不是正确性的证明。

温度为 1 表示不通过温度改变原始 logits 的相对尺度，不意味着必然“过度随机”。代码生成常采用较低随机性，创作可能容许更多变化，但具体参数仍需结合模型与任务选择。更长上下文也不等于永久记忆，窗口内的信息是否被有效使用与窗口容量是两个问题。

Prompt 指定当前任务，Skill 保存可复用流程，RAG 提供检索到的知识，MCP 提供连接外部工具与资源的协议。它们可以组合，但不能全部等同为提示词技巧，详见[Prompt、RAG、Skill 与 MCP 的关系](Prompt、RAG、Skill与MCP的关系.md)。

## 3. Transformer 怎样处理上下文

从 N-gram 到神经语言模型，再到 RNN/LSTM 与 Transformer，一个重要变化是逐渐增强从数据中学习表示和上下文依赖的能力。Word2Vec 主要学习词向量，不是现代自回归生成系统的完整替代品；Seq2Seq 是编码器—解码器的组织方式，不限定必须用哪一种网络。Transformer Block 内的 FFN 则是具体子模块，这些名称处在不同层次。

![Transformer结构](.assets/大模型与算子专题/Transformer结构.png)

典型 Decoder Block 包含归一化、Self-Attention、MLP 和残差连接。以常见 Pre-Norm 形式表示：

$$
H'=H+\operatorname{Attention}(\operatorname{Norm}(H))
$$

$$
H''=H'+\operatorname{MLP}(\operatorname{Norm}(H'))
$$

Attention 汇聚上下文信息，MLP 对每个位置的特征进行非线性变换，残差连接保留信息与梯度路径。多层堆叠逐步改变表示，不能把每一层机械规定为某个固定语义功能。

![Transformer多层堆叠](.assets/大模型与算子专题/Transformer堆叠.png)

训练和 Prefill 可以并行处理多个位置；自回归 Decode 仍需等待新 token 的产生。因果注意力通过掩码防止当前位置读取未来 token。

### Q、K、V 与注意力

![Attention计算](.assets/大模型与算子专题/Attention计算.png)

输入表示 $X$ 通过线性变换得到：

$$
Q=XW_Q,\quad K=XW_K,\quad V=XW_V
$$

- Q（Query）：当前需要检索的信息。
- K（Key）：用于匹配的特征。
- V（Value）：被加权汇聚的内容。

带掩码的缩放点积注意力为：

$$
\operatorname{Attention}(Q,K,V)
=\operatorname{Softmax}\left(\frac{QK^\top}{\sqrt{d_k}}+M\right)V
$$

先计算相关性，按 $\sqrt{d_k}$ 缩放，并在 **Softmax 之前**加入掩码，再用归一化权重汇聚 V。因果掩码允许的位置通常加 0，屏蔽位置加负无穷。这里不能先做 Softmax 再简单删除未来位置而不重新归一化。

多头注意力使用多个子空间处理信息。Q 头数与 KV 头数可以不同，例如 GQA 让多个查询头共享一组 KV，影响计算与缓存规模。

### MLP 与 MoE

![Dense与MoE](.assets/大模型与算子专题/Dense与MoE.png)

| 结构 | 工作方式 | 工程代价 |
| --- | --- | --- |
| Dense MLP | 每个 token 使用该层同一套稠密网络 | 计算路径相对规整 |
| MoE | Router 为每个 token 选择少量 Expert，汇总结果 | 增加路由、负载均衡与跨设备通信问题 |

MoE 每 token 激活的参数少于总参数，可以降低同等总参数规模下的部分计算量，但未激活的专家权重仍需要存储或调度。参数总量、激活参数量与实际推理成本应分别观察。

### 端到端路径

![模型端到端路径](.assets/大模型与算子专题/模型端到端路径.png)

Tokenizer、Embedding、多层 Decoder、LM Head 和 Sampler 共同构成生成路径。数据质量与覆盖、模型参数规模和训练计算量共同影响模型能力，单独增加其中一项不保证效果改善。

训练会计算梯度并更新参数，推理一般固定参数进行前向计算。训练闭环见 [SFT 监督微调](SFT监督微调与FSDP训练.md)。

## 4. Prefill、Decode 与 KV Cache

![推理时间线](.assets/大模型与算子专题/推理时间线.png)

### Prefill：处理输入上下文

Prefill 处理 Prompt 中的多个 token，计算各层表示并建立历史 K/V 缓存，最后一个输入位置的输出用于预测第一个新 token。长输入常带来较大的矩阵计算，具有较高并行度。

实际服务可能采用分块 Prefill，因此“处理完整 Prompt”指逻辑任务，不必意味着一个不可分割的设备调用。

### Decode：持续生成

普通自回归 Decode 每个请求每步处理新增 token，计算它的 K/V，并让 Q 访问历史缓存，再生成下一 token。多个请求可以一起组成 batch。

低 batch 的 Decode 常受权重与 KV Cache 读取带宽影响；Prefill 常更偏计算密集。瓶颈仍取决于批大小、序列长度、模型结构与硬件，不能把这两类特征当作恒定规律。

### KV Cache 缓存什么

缓存保存各层历史 token 的 K 和 V，避免每一步重新计算历史投影。当前 Q 仍需与相关历史 K 计算注意力，KV Cache 并没有消除所有历史序列相关计算。

粗略估算未分片、未量化的缓存：

$$
\text{KV bytes}\approx2LBSH_{kv}D_hb
$$

其中 $L$ 为层数，$B$ 为请求数，$S$ 为缓存长度，$H_{kv}$ 为 KV 头数，$D_h$ 为每头维度，$b$ 为每个元素的字节数，系数 2 对应 K 和 V。实际分配还受分页、对齐、共享和并行切分影响。

缓存换来了计算复用，但长上下文和高并发也使显存需求增长。分页管理见 [推理优化](大模型推理优化.md)，低精度存储见 [量化](大模型量化原理与部署.md)。

## 5. 用指标理解推理系统

| 指标 | 定义 | 观察重点 |
| --- | --- | --- |
| TTFT | 请求发出到收到第一个 token 的时间 | 排队、输入处理、Prefill、网络等 |
| TPOT | 输出 token 之间的平均耗时 | Decode 的持续生成速度 |
| Throughput / TPS | 单位时间生成的 token 数 | 区分单请求速度与系统总吞吐 |

若一次请求输出 $N>1$ 个 token，总耗时为 $T$，同一计时口径下可近似计算：

$$
\mathrm{TPOT}\approx\frac{T-\mathrm{TTFT}}{N-1}
$$

提高并发可能提高系统吞吐，同时增加单请求延迟。比较时需要固定模型、精度、输入输出长度、并发与计时边界。TTFT 不完全等于 Prefill 设备耗时。

## 6. 多模态与应用系统

![多模态输入](.assets/大模型与算子专题/多模态输入.png)

图像、音频和视频先经过对应编码器或适配模块，再转为模型可处理的表示。不同模型可能采用统一 token、交叉注意力等不同连接方式，不能把所有多模态架构都理解为直接拼接文本 token。

具身智能把感知、决策、行动与环境反馈连接起来：模型的输出可以影响下一次输入，系统还需要时延、可靠性和执行约束。工具调用与 Agent 同样需要模型之外的调度和反馈机制。

## 7. 从概念定位工程文件

| 想了解的问题 | 可寻找的工程对象 |
| --- | --- |
| Attention、MLP 如何实现 | `models/*/modeling_*.py` |
| 模型如何启动和配置 | `infer.sh`、README、YAML |
| 时间耗在哪里 | profiler trace、kernel details |
| 优化是否有效 | 固定负载下的 TTFT、TPOT、吞吐和质量对照 |

实践入口：[Qwen3-8B 基线推理](https://gitcode.com/cann/cann-learning-hub/blob/master/tutorials/llm_inference/qwen3_8b/02_baseline_inference.ipynb)、[Profiling 分析](https://gitcode.com/cann/cann-learning-hub/blob/master/tutorials/llm_inference/qwen3_8b/03_profiling_analysis.ipynb)。

## 8. 复习问题

- Token ID 为什么不能代替 Embedding？ID 只是索引，向量才是模型计算的表示。
- 为什么缓存 K/V 而不能直接复用旧答案？新 token 的查询和上下文已改变，需要继续计算当前注意力与输出。
- 模型输出概率最大是否说明事实正确？不是，概率描述模型的生成分布。
- 首字快是否意味着整体吞吐高？不是，TTFT、TPOT 与系统吞吐衡量不同方面。
