扩展:模型推理机制与资源瓶颈
在线 Notebook
对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明。
所属章节: 第 5 章:LLM 基础
Prefill 与 Decode
自回归模型推理通常分为两个阶段:
Prefill:一次处理输入 token,建立各层状态
Decode:每次生成一个 token,并重复读取模型权重与历史状态Prefill 适合并行矩阵计算;Decode 每步计算量较小但串行依赖强,常受内存带宽和调度开销限制。优化前应分别测量首 token 延迟、逐 token 延迟和吞吐。
KV cache
如果每一步都重新计算全部历史 token 的 Key 和 Value,会产生重复工作。KV cache 保存各层历史 K/V,新 token 只计算自己的投影,再与缓存交互。
一个简化的缓存元素数量为:
其中
KV cache 减少重复投影,却随并发和上下文长度线性增长。MQA、GQA、缓存量化、分页管理或潜在表示压缩都在不同位置降低缓存成本,代价可能是实现复杂度或质量变化。
Flash Attention
标准注意力若显式写出完整分数矩阵,会产生大量高带宽内存读写。Flash Attention 按块计算,并在片上存储中完成稳定 softmax 所需的中间统计,从而避免保存完整中间矩阵。
它计算的是相同的精确注意力形式,主要减少内存访问和中间存储;标准全注意力的运算量仍随序列长度近似二次增长。具体速度取决于 GPU、数据类型、序列形状、mask 和内核版本,不能用固定倍数概括。
长上下文
序列长度从
| 方法 | 改变什么 | 需要验证什么 |
|---|---|---|
| 滑动窗口 | 每个 token 只看附近窗口 | 远距离信息是否丢失 |
| 稀疏注意力 | 使用固定或学习的稀疏连接 | 稀疏模式是否匹配任务 |
| 分块/摘要 | 压缩早期上下文 | 压缩误差和事实遗漏 |
| 检索 | 只加入相关片段 | 召回率和引用正确性 |
| 分页 KV 管理 | 改善缓存分配 | 碎片率和调度开销 |
模型声明支持某个上下文长度,不代表在整个长度范围内都保持相同检索和推理能力。
权重量化
量化把权重或激活映射到较低位宽。对对称权重量化,可写为:
误差来自舍入、裁剪、分组尺度和异常值。按通道或较小分组通常更精细,但需要更多尺度元数据和更复杂内核。
需要区分:
- 仅权重量化与权重—激活同时量化;
- 训练后量化与量化感知训练;
- 模型文件大小、运行时显存和真实吞吐;
- 理论位宽与硬件是否有对应高效内核。
最小性能记录
模型、量化与模型推理框架版本
GPU/CPU、数据类型和 batch size
输入长度、输出长度与并发
首 token 延迟、每 token 延迟和吞吐
权重、KV cache 与峰值显存
任务质量和长上下文回归结果优化结果必须同时包含质量与运行条件。只报告“加速倍数”无法迁移到其他硬件和请求分布。
返回: 第 5 章:LLM 基础
