LLM 推理优化:KV Cache 与量化技术
大模型推理优化是部署 LLM 服务的核心工程挑战。本文介绍几种关键的优化技术。
KV Cache
在自回归生成过程中,每个新 token 的计算都需要访问之前所有 token 的 Key 和 Value。如果不缓存,计算复杂度为 O(n²)。
KV Cache 将已计算的 K、V 矩阵缓存起来,新 token 只需计算自身的 Q、K、V 并与缓存拼接,将复杂度降至 O(n)。
# 伪代码示意
for token in generate():
k, v = compute_kv(token)
kv_cache.append(k, v)
output = attention(q, kv_cache.keys, kv_cache.values)
内存占用
KV Cache 的内存开销为:
2 × num_layers × num_heads × head_dim × seq_len × batch_size × dtype_size
对于 70B 模型、32K 上下文,单请求 KV Cache 可达数 GB,是推理服务的主要内存瓶颈。
量化技术
量化通过降低数值精度减少模型体积和计算量:
| 方法 | 精度 | 压缩比 | 精度损失 |
|---|---|---|---|
| FP16 | 16-bit | 2× | 极小 |
| INT8 | 8-bit | 4× | 较小 |
| INT4 (GPTQ/AWQ) | 4-bit | 8× | 可控 |
AWQ(Activation-aware Weight Quantization) 和 GPTQ 是目前最流行的 4-bit 量化方案,在保持较高精度的同时显著降低显存需求。
连续批处理(Continuous Batching)
传统静态批处理需要等待 batch 内所有请求完成才能处理下一批。Continuous Batching(也称 In-flight Batching)允许:
- 新请求随时加入正在运行的 batch
- 已完成的请求立即退出,释放 KV Cache
vLLM 的 PagedAttention 进一步将 KV Cache 分页管理,类似操作系统的虚拟内存,大幅提升 GPU 利用率。
总结
推理优化是一个系统工程,需要在延迟、吞吐量和资源成本之间权衡。KV Cache + 量化 + 高效批处理是当前生产部署的标准组合。