跳到主要内容

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

⚡ 推理优化不能只问“每秒多少 token”。在线服务要同时看 TTFT、TPOT、吞吐、并发、显存、质量和成本;不同优化经常只改善其中一部分。

Prefill 与 Decode

阶段做什么主要瓶颈影响指标
Prefill并行处理全部输入 token,建立 KV Cache计算量TTFT
Decode逐步生成新 token,反复读取权重与 KV内存带宽TPOT / TPS

长 Prompt 会显著拉高 Prefill;长输出会显著拉高 Decode。优化前先根据真实请求分布压测。

**不要混淆吞吐口径:**output TPS、总 token TPS、单请求 TPS 和集群 TPS 含义不同。对外比较时必须写清并发、输入/输出长度和统计范围。

量化

量化把权重或激活从 BF16/FP16 降到 INT8、FP8、INT4 等表示,以降低显存和带宽。

常见维度

  • Weight-only:只量化权重,部署简单,常见于 INT4。
  • Weight + Activation:同时量化权重与激活,对硬件和校准要求更高。
  • PTQ:训练后量化,成本低。
  • QAT:训练中模拟量化,通常精度更好但训练昂贵。
  • 静态/动态:量化尺度来自校准集或运行时计算。

常见方案

  • GPTQ / AWQ:GPU 上常见的 4-bit weight-only 方案。
  • SmoothQuant:平滑激活离群值,便于 W8A8。
  • GGUF / llama.cpp:CPU 与混合设备部署常用。
  • FP8:新一代 GPU 上兼顾吞吐和精度。

**注意:**理论显存压缩比不等于端到端加速比。若硬件没有高效低精度 kernel,反量化开销可能抵消收益。

KV Cache

自回归生成时,历史 token 的 Key/Value 会被复用。单批次近似占用:

KV 字节数 ≈ 2 × layers × kv_heads × head_dim × sequence_length × batch × bytes_per_element

这里应使用 kv_heads,不是总 Query Head 数。GQA/MQA 通过共享 K/V Head 显著降低缓存。

KV Cache 优化

  • Paged Attention:分页管理,减少显存碎片并支持连续批处理。
  • KV 量化:用更低精度保存缓存,需评估长上下文质量。
  • Prefix Cache:复用相同前缀的 KV,适合固定 System Prompt 或共享文档。
  • Sliding Window:只保留局部窗口,牺牲部分全局注意力。
  • Disaggregated Prefill/Decode:将两阶段调度到不同资源池。

批处理与调度

  • 静态批处理:简单,但短请求会等待长请求。
  • Continuous Batching:请求完成后立刻插入新请求,提高 GPU 利用率。
  • Chunked Prefill:把长 Prefill 切块,减少其阻塞 Decode。
  • Admission Control:根据 token 预算而不是请求数限流。

批越大通常吞吐越高,但单请求延迟可能变差。在线对话与离线批任务应使用不同策略。

Speculative Decoding

小草稿模型一次提出多个 token,大模型并行验证。被接受的 token 分布仍与目标模型一致,因此理论上不降低质量。收益取决于接受率、草稿成本、序列长度和 kernel 实现;并非所有模型组合都更快。

并行策略

策略用途代价
Tensor Parallel单层矩阵切到多卡高频通信
Pipeline Parallel不同层放不同卡流水线气泡
Data Parallel复制模型处理不同请求模型需能放入单副本
Expert ParallelMoE 专家分布到多卡All-to-All 通信

压测方法

固定硬件、引擎版本、量化格式与采样参数,使用真实输入/输出长度分布。至少报告:

  • 并发与请求到达模式
  • P50/P95 TTFT、TPOT、E2E
  • output TPS 与 request QPS
  • GPU 显存、利用率和功耗
  • 失败率与质量回归
  • 每百万 token 或每成功任务成本

引擎选型

  • vLLM:通用高吞吐服务与 Paged Attention 生态。
  • SGLang:复杂生成程序、前缀复用和结构化生成。
  • TensorRT-LLM:NVIDIA 栈上的深度优化。
  • llama.cpp:本地、CPU、Apple Silicon 和多种 GGUF 量化。
  • TGI:Hugging Face 生态集成。

不要仅凭公开榜单选型;模型、长度分布、并发和硬件不同,结果可能完全反转。

常见误区

  • 权重缩小 4 倍,不代表服务成本必然下降 4 倍
  • KV Cache 降低重复计算,但显存随并发和序列长度线性增长
  • TPS 高不等于交互体验好,必须同时看 TTFT 和 TPOT
  • 单请求 benchmark 不能代表连续批处理下的线上表现
  • 优化后必须重新跑能力与业务回归集