跳到主要内容

模型量化、KV Cache 与推理广量

⚡ 推理优化的目标:在限定成本内最大化吸吐量和降低延迟。量化、KV Cache 和批处理是三大核心工具。

模型量化

量化类型

类型精度内存压缩速度精度损失
FP32全精度1x基准
FP16/BF16半精度2x明显提升
INT88-bit4x提升
INT44-bit8x显著提升
GGUF混合量化可配置可配置

主流量化方案

  • GPTQ:训练后量化, GPU 推理优化
  • AWQ:激活感知量化,保留重要权重,精度优于 GPTQ
  • GGUF/llama.cpp: CPU 推理友好,支持 CPU+GPU 混合推理
  • bitsandbytes:训练时量化(QLoRA 微调)

KV Cache

什么是 KV Cache?

Transformer 计算每个新 token 时需要所有历史 token 的 K/V。缓存 K/V 避免重复计算:

不使用 KV Cache:每次都重新计算全部历史O() 复杂度
使用 KV Cache:只计算新 token ,复用历史 → O(n) 复杂度

KV Cache 内存占用估算

KV Cache 内存 = 2 × 层数 × n_heads × head_dim × 序列长度 × 字节数

例:Llama-3-8B(FP16),序列长度 4096
= 2 × 32 × 32 × 128 × 4096 × 2 ≈ 2GB

GQA(Grouped Query Attention)

多个 Query Head 共享一组 KV,大幅减少 KV Cache:

  • Llama-3-70B:8 个 KV Head vs 64 个 Q Head,内存减少 8x

推理性能指标

指标定义目标
TTFT首个 token 延迟< 500ms
TPOT每个 token 生成时间有4ms
TPS每秒 token 数越高越好
QPS每秒请求数取决于负载

内存带宽瓶颈

现代 GPU 计算能力远超内存带宽,推理通常是内存带宽瓶颈。减小模型内存占用是提升 TPS 的关键。


批处理与连续批

动态批(Continuous Batching)

传统批处理等待最长请求完成才进行下一批。连续批实时加入新请求, GPU 利用率敁升 40%+。

Prefill vs Decode 分离

Prefill:并行处理整个 Prompt(计算密集型)
Decode:逐个生成 token(内存密集型)
分到不同 GPU 处理可以最大化利用率

Speculative Decoding

用小模型先起草多个 token,大模型并行验证,接受或拒绝:

  • 显著提升 TPS,精度不变
  • 要求小模型输出分布接近大模型

主流推理引擎对比

引擎特点
vLLM高吸吐量,内存管理优秀
SGLang结构化生成优化,序列并行
llama.cppCPU 推理,Mac 开发首选
TGIHugging Face 全家桶,容易部署
TensorRT-LLMNVIDIA GPU 最高性能

常见误区

  • 量化不是免费午餐, INT4 在数学推理上精度损失可能很大
  • KV Cache 内存随序列长度线性增长,长上下文预先评估内存需求
  • 常说的“速度提升”必须区分是 TTFT 还是 TPS