3、大模型推理基础:Transformer架构、自注意力机制、KV Cache概念、推理阶段(预填充与解码)
大模型推理的底层逻辑,本质上是对Transformer架构的逐层计算与状态管理。无论是系列、LLaMA系列还是其他主流大模型,其推理过程都遵循“预填充(Prefill)→ 解码(Decode)”的两阶段范式。理解这一范式的关键在于三个核心概念:Transformer的堆叠结构、自注意力机制的计算模式,以及KV Cache(键值缓存)如何避免重复计算。本章将从架构原理出发,逐步拆解推理阶段的计算特征、显存开销与性能瓶颈,为后续的量化、剪枝、算子优化等章节奠定理论基础。
上图展示了大模型推理的两阶段核心流程。左侧为预填充阶段,右侧为解码阶段,底部为KV Cache的存储结构。下面我们将逐一深入剖析每个环节的原理与工程含义。
3.1 Transformer架构:推理视角下的模块拆解
3.1.1 核心原理:从训练到推理的映射
现代大模型(如、LLaMA-2、Qwen等)的骨干网络均为仅解码器(Decoder-only)的Transformer。其基本单元由以下子层构成:
- 多头自注意力(Multi-Head Self-Attention):捕捉序列内之间的依赖关系,是模型表达能力的核心。
- 前馈神经网络(FFN):通常为两层线性变换加激活函数(如SwiGLU),对每个独立进行非线性特征变换。
- 层归一化(LayerNorm/RMSNorm):稳定训练和推理过程中的数值分布。
- 残差连接(Residual Connection):缓解深层网络梯度消失问题,保证信息流通。
在推理时,模型参数(权重矩阵)被加载到显存中,输入序列逐层经过上述模块计算。与训练阶段不同,推理没有反向传播和梯度更新,因此计算图是静态的,这为算子融合和内存复用提供了优化空间。
3.1.2 判断方法:识别推理时的计算热点
通过性能分析工具(如NVIDIA Nsight Systems、PyTorch Profiler)观察各模块耗时占比,可以发现:
- 注意力计算:在长序列场景下,QK^T矩阵乘和Softmax操作是主要耗时点。
- FFN层:在短序列场景下,FFN的矩阵乘(通常维度为隐藏层大小的4倍)占据主导。
- 归一化与残差:虽然计算量小,但涉及多次内存读写,在访存受限场景下不可忽视。
3.1.3 案例拆解:LLaMA-2-7B的层结构参数
| 参数项 | 数值 | 推理影响 |
|---|---|---|
| 层数(L) | 32 | 每层独立存储KV Cache,层数越多显存占用越大 |
| 隐藏层维度(D) | 4096 | 决定矩阵乘的计算量和权重显存 |
| 注意力头数(H) | 32 | 每个头维度为128,影响并行度 |
| FFN中间维度 | 11008 | FFN权重占模型总参数约2/3 |
| 上下文长度(S) | 4096 | KV Cache大小与S成正比 |
以FP16精度计算,该模型权重显存约为14GB(70亿参数×2字节)。当序列长度为4096时,KV Cache占用约为:2×32×4096×128×2字节 ≈ 1GB。可见,KV Cache在长上下文场景下是不可忽视的显存开销。
3.2 自注意力机制:从数学公式到计算模式
3.2.1 核心原理:缩放点积注意力
自注意力的计算可以表示为:
Attention(Q, K, V) = softmax(Q × K^T / √d_k) × V
其中,Q(查询)、K(键)、V(值)均由输入序列通过三个不同的权重矩阵(W_Q, W_K, W_V)线性变换得到。在多头注意力中,该过程被拆分为H个独立的子空间并行计算,最后拼接并经过输出投影矩阵W_O。
从推理角度看,该公式揭示了两个关键特性:
- 间依赖:每个的Q会与所有的K计算相似度,因此注意力权重反映了序列内部的关联强度。
- 位置无关性:自注意力本身不感知位置顺序,需要额外加入位置编码(如RoPE旋转位置编码)来注入位置信息。
3.2.2 操作流程:解码阶段的注意力计算步骤
- 生成Q:仅对当前新计算Q向量(1×d_k)。
- 加载K/V:从KV Cache中读取历史所有的K和V矩阵(S×d_k)。
- 计算分数:Q与所有K做点积,得到1×S的相似度向量。
- 缩放与Softmax:除以√d_k后做Softmax归一化,得到注意力权重。
- 加权求和:注意力权重与V矩阵相乘,得到当前的输出向量。
3.2.3 实战场景:FlashAttention的优化动机
传统注意力实现需要将S×S的注意力矩阵写入HBM(高带宽内存),再读回做Softmax和加权求和,产生大量内存访问。FlashAttention通过分块计算(Tiling)和在线Softmax,将注意力计算融合在SRAM中完成,避免中间矩阵的往返读写。在A100 GPU上,FlashAttention可将注意力计算速度提升2-4倍,同时减少显存占用。
对于推理场景,FlashAttention-Decoding进一步优化了解码阶段的计算模式,通过分裂KV(Split-KV)方式并行处理长序列,减少线程束发散。
3.3 KV Cache:空间换时间的核心工程实践
3.3.1 核心原理:为什么需要缓存
在解码阶段,每生成一个新,都需要计算其与历史所有的注意力。如果不做缓存,每次都要重新计算历史的K和V,计算量将随序列长度呈平方级增长。KV Cache的核心思想是:在预填充阶段一次性计算并存储所有的K和V,在解码阶段仅计算新的K和V并追加到缓存中。
KV Cache的存储结构为:[L, 2, B, H, S, D_head],其中L为层数,2表示K和V,B为批次大小,H为头数,S为当前序列长度,D_head为每个头的维度。
3.3.2 判断方法:显存容量估算与配置
在部署推理服务前,必须精确计算KV Cache的显存需求。以下是一个实际估算流程:
# 以LLaMA-2-7B为例,FP16精度
L = 32 # 层数
H = 32 # 注意力头数
D_head = 128 # 每头维度
S = 2048 # 平均序列长度
B = 8 # 并发批次大小
bytes_per_elem = 2 # FP16
kv_cache_bytes = 2 * L * B * H * S * D_head * bytes_per_elem
print(f"KV Cache 显存: {kv_cache_bytes / 1024**3:.2f} GB")
# 输出: KV Cache 显存: 8.00 GB
这意味着,在8个并发请求、平均2048 长度的场景下,仅KV Cache就需要8GB显存,加上模型权重14GB和激活值开销,单卡A100(80GB)可勉强支撑,但若序列长度翻倍或并发数增加,则必须考虑KV Cache量化(如INT8)或PagedAttention等优化手段。
3.3.3 常见误区与优化方向
- 误区一:认为KV Cache只与模型大小相关。实际上,它主要与序列长度、并发数和层数相关,与模型参数量关系不大。
- 误区二:忽略动态形状变化。解码阶段S是逐增长的,导致KV Cache显存动态变化,容易产生碎片化。vLLM的PagedAttention通过分页管理KV Cache,类似操作系统的虚拟内存,显著提升显存利用率。
- 优化方向:KV Cache INT8量化(将FP16压缩为INT8,显存减半)、滑动窗口注意力(只缓存最近N个)、以及共享前缀缓存(多轮对话中复用系统提示词的KV)。
3.4 推理阶段:预填充与解码的差异化分析
3.4.1 核心原理:两阶段的计算特征对比
| 维度 | 预填充(Prefill) | 解码(Decode) |
|---|---|---|
| 输入规模 | 整个Prompt(如512~2048 ) | 单(1个) |
| 计算模式 | 密集矩阵乘,GPU利用率高 | 访存密集,矩阵乘单元利用率低 |
| 延迟特征 | 一次性计算,延迟与Prompt长度成正比 | 逐生成,每个延迟相对稳定 |
| 显存行为 | 生成完整KV Cache,显存峰值高 | KV Cache持续增长,显存逐步增加 |
| 优化重点 | 减少计算量(如FlashAttention) | 减少访存量(如KV Cache量化、算子融合) |
3.4.2 操作流程:一次完整推理的时序拆解
- 客户端请求:用户输入Prompt,服务端将其化。
- 预填充阶段:模型并行处理所有Prompt ,计算各层K/V并缓存,同时生成第一个输出的logits。
- 采样:对logits做Softmax并采样(如Top-p或温度采样),得到第一个生成。
- 解码循环:将新作为输入,重复“计算Q→读取KV→注意力→FFN→采样”的步骤,直到生成EOS或达到最大长度。
- 返回结果:将生成的序列解码为文本返回给用户。
3.4.3 案例拆解:连续对话场景下的性能优化
场景背景:某在线客服机器人使用LLaMA-2-13B模型,平均每轮对话包含系统提示词(约200 )和用户问题(约100 ),期望生成200 的回答。并发请求数为16,目标首延迟(TTFT)小于500ms,每个生成延迟(TPOT)小于50ms。
初始现象:实测TTFT为800ms,TPOT为65ms,均不达标。通过Nsight分析发现:
- 预填充阶段耗时400ms,主要瓶颈在注意力计算(未使用FlashAttention)。
- 解码阶段每个耗时65ms,其中读取KV Cache占40ms,矩阵计算仅占15ms。
优化操作:
- 启用FlashAttention-2,预填充耗时降至250ms。
- 将KV Cache从FP16量化为INT8,显存占用减半,访存带宽压力降低,TPOT降至45ms。
- 使用vLLM的PagedAttention管理KV Cache,显存碎片减少,支持更大的并发批次。
结果对比:TTFT降至320ms,TPOT降至42ms,均满足SLA要求。同时,由于显存利用率提升,单卡可支撑的并发数从16提升至24。
复盘经验:推理优化必须先定位瓶颈是计算密集还是访存密集。对于短Prompt长生成场景,解码阶段的访存优化收益最大;对于长Prompt短生成场景,预填充的计算优化更关键。
- Transformer推理的核心是自注意力机制,其计算模式在预填充和解码阶段截然不同。
- KV Cache是空间换时间的典型工程实践,其显存占用与层数、头数、序列长度和并发数线性相关。
- 预填充阶段是计算密集型,解码阶段是访存密集型,优化策略需分别对待。
- 实际部署中,需综合使用FlashAttention、KV Cache量化、PagedAttention等技术,才能满足低延迟、高吞吐的推理需求。