跳到主要内容

推理优化技术

问题

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=2×layers×heads×head_dim×seq_len×batch×precision\text{KV Cache} = 2 \times \text{layers} \times \text{heads} \times \text{head\_dim} \times \text{seq\_len} \times \text{batch} \times \text{precision}
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,显存从 O(n2)O(n^2) 降到 O(n)O(n)

相关链接