推理优化技术
问题
LLM 推理有哪些关键优化技术?KV Cache、Continuous Batching、Speculative Decoding 分别解决什么问题?
答案
一、LLM 推理的两个阶段
| 阶段 | 特点 | 瓶颈 |
|---|---|---|
| Prefill | 并行处理所有输入 Token | 计算密集(矩阵乘法) |
| Decode | 每次只生成 1 个 Token | 内存密集(KV Cache 读取) |
二、KV Cache
每个 Token 在 Attention 中需要计算 Key 和 Value。KV Cache 将历史 Token 的 K/V 缓存起来,避免重复计算:
不用 KV Cache:生成第 N 个 Token 需要重新计算前 N-1 个 Token 的 K/V
使用 KV Cache:只计算新 Token 的 K/V,从缓存读取历史 K/V
KV Cache 显存占用:
KV Cache 的问题
对于 70B 模型、4K 上下文、batch=32,KV Cache 可能占用 40GB+ 显存。这就是 PagedAttention 要解决的问题。
三、Continuous Batching
传统 Static Batching 需要等一个 batch 全部完成才能处理下一个:
- Static:请求 2 早完成了也得等请求 1,GPU 空闲浪费
- Continuous:请求完成立即释放位置,新请求立即加入
四、Speculative Decoding(投机解码)
用小模型快速生成候选 Token,大模型一次性验证多个:
- 小模型生成快(如 1B 模型)
- 大模型验证 N 个 Token 和生成 1 个 Token 的成本接近
- 接受率高时(70-90%),整体速度提升 2-3 倍
五、其他优化技术
| 技术 | 原理 | 效果 |
|---|---|---|
| Flash Attention | 优化 Attention 计算的 IO 模式 | 速度 2-4x,显存大幅减少 |
| GQA | 多个 Query Head 共享 K/V Head | 减少 KV Cache 大小 |
| 量化 | FP16 → INT8/INT4 | 显存减半/75%,速度提升 |
| 前缀缓存 | 缓存相同系统 Prompt 的 KV | 减少重复 Prefill |
常见面试问题
Q1: LLM 推理的主要瓶颈是什么?
答案:
- Prefill 阶段:计算密集(大量矩阵运算),需要高算力 GPU
- Decode 阶段:内存带宽瓶颈(每次只生成 1 Token,但需读取整个 KV Cache)
- 显存限制:模型参数 + KV Cache 必须都在显存中,限制了 batch size 和上下文长度
Q2: 什么是 Flash Attention?
答案:
- 标准 Attention 需要将完整的
Q×K^T矩阵(seq_len × seq_len)存入显存 - Flash Attention 使用分块计算(tiling),每次只计算一小块,减少显存读写
- 不存储中间的注意力矩阵,用 online softmax 技巧在线计算
- 效果:速度 2-4x,显存从 降到