理解 Transformer 的内部计算特征,是所有推理优化的基础
前置知识
建议先阅读 什么是 FDE 了解岗位定位。
核心概念
为什么 FDE 需要理解 Transformer
面试中不会让你手推 Attention 公式,但会问:
核心原则:理解计算特征,才能找到优化点。
Transformer 架构变体
为什么 LLM 几乎全部采用 Decoder-only?
完整数据流:从 Token 到 Logit
Attention 公式详解
各维度:
为什么除以 sqrt(d_k) ?
如果 Q 和 K 的元素是均值为 0、方差为 1 的随机变量,那么 Q·K^T 每个元素的方差为 d_k 。当 d_k 较大时,点积值会很大,导致 softmax 进入饱和区(梯度接近 0),即 梯度消失 问题。除以 sqrt(d_k) 将方差重新归一化为 1,使 softmax 的输入保持在合适的范围内。
推理的两个阶段
这是 FDE 面试中 最重要 的概念:
Prefill(预填充)
Decode(解码)
KV Cache(核心优化)
是什么
在 decode 阶段,把前面所有 token 的 Key 和 Value 缓存起来,避免重复计算 Attention 中已有的历史 token 矩阵乘法。
显存计算
KV Cache 显存 = 2 × num_layers × batch_size × seq_len × num_kv_heads × head_dim × bytes_per_element
其中: - 2 是因为 K 和 V 各存一份 - bytes_per_element: FP16 = 2, FP8 = 1, INT8 = 1
考虑 GQA 的情况 :GQA 模型中 num_kv_heads = num_q_heads / groups ,所以实际 KV Cache 比 MHA 小 G 倍。
示例计算:Llama 3 70B(GQA, 8 KV groups)
num_layers = 80 num_kv_heads = 8 (GQA: 32 Q heads / 8 groups = 4 Q per group) head_dim = 128 batch_size = 32 seq_len = 8192 dtype = FP16 (2 bytes)
KV Cache = 2 × 80 × 32 × 8192 × 8 × 128 × 2 = 2 × 80 × 32 × 8192 × 8 × 128 × 2 = 2 × 80 × 32 × 8192 × 2048 = 2 × 80 × 32 × 16,777,216 = 2 × 80 × 536,870,912 = 85,899,345,920 bytes ≈ 80 GB
KV Cache 通常占推理显存的 60-80%。 这是 FDE 优化的核心战场。
为什么 Decode 是 Memory-Bound 的定量分析
以 Llama 3 70B 为例,单步 decode 的计算量和数据搬运:
模型参数量: 70B (FP16 = 140 GB 权重) 每步 FLOPs ≈ 2 × params (前向传播) = 140 GFLOPs
假设 GPU: A100, 理论峰值 312 TFLOPs, 显存带宽 2.0 TB/s
计算所需时间: 140 GFLOPs / 312 TFLOPs ≈ 0.45 ms 权重加载时间: 140 GB / 2.0 TB/s = 70 ms
实际耗时 ≈ 70 ms(权重加载占主导) GPU 利用率 ≈ 0.45 / 70 ≈ 0.6%
这就是为什么 decode 是 memory-bound: 计算量极小但需要搬运海量权重,GPU 算术单元大部分时间在空闲。
对比 prefill(seq_len=4096):
Prefill FLOPs ≈ 2 × params × seq_len ≈ 140 GFLOPs × 4096 ≈ 574 TFLOPs 计算时间: 574 TFLOPs / 312 TFLOPs ≈ 1.84 s 权重加载: 140 GB / 2.0 TB/s = 70 ms (只需加载一次)
GPU 利用率 ≈ 1.84 / (1.84 + 0.07) ≈ 96%
Prefill 是 compute-bound:计算量远大于数据搬运。
部署视角
生产环境中的关键数字
常见问题排查
部署优化方向
面试视角
面试官会怎么问
Q1: "解释一下 Transformer 推理的两个阶段,它们各自的特点是什么?"
满分回答框架:
Q2: "给你一个 70B 的模型,batch=64,seq_len=32K,FP16,用 GQA(8 groups),估算 KV Cache 大小?"
Q3: "为什么 decode 是 memory-bound 而不是 compute-bound?"
Q4: "为什么 LLM 都用 Decoder-only 架构?Encoder-Decoder 不好吗?"
满分回答:
对比分析
Decoder-only vs Encoder-Decoder 推理开销对比
最佳实践
调参建议
避坑指南