AI 系统 KV Cache Hit Ratio 修正模型:从直觉到统一公式
· 约 7 分钟阅读
1. 问题:KV cache hit 后,prefill 计算量到底降了多少?
KV cache hit ratio(记为 h)是推理系统的关键指标。当 h>0 时,前缀部分的 KV 已经被缓存,prefill 只需要对 suffix token 做新计算。但不同类型的算子对 hit 的响应方式不同,不能简单地用 (1−h) 线性缩放。
本文用三张图,逐步拆解 hit 后 attention、FFN、端到端 TTFT/TPM 的缩放行为,最终给出一个统一修正模型。
2. 图一:Attention 为什么按 1−h2 缩放?

这张图解释的是 prefill causal attention 的二维 token 交互面积。
设总输入长度为 N,命中 prefix 长度为 H=hN,未命中 suffix 长度为 M=(1−h)N。0-hit 全量 prefill attention 的因果注意力区域约为 N2/2。命中 prefix 后,prefix 内部的 attention 输出已经复用,不再重算;新计算只发生在 suffix token 上,它们既要 attend 到 cached prefix,也要 attend 到 suffix 内部:
WhitW0Whit=M⋅H+2M2=N2/2M⋅H+M2/2=2h(1−h)+(1−h)2=1−h2
直觉:即使只有 suffix token 需要新算,它们仍然要读取/关注 cached prefix,剩余 attention 区域是「去掉 prefix-prefix 区域」后的面积。所以 attention 不是按 miss token 数 1−h 线性下降,而是按 1−h2 下降——下降得更慢,因为 suffix 还要”回头看” prefix。
这是可解释的一阶近似。如果 breakdown 能把 QKV/O projection 和真正的 FlashAttention 分开,projection 部分更接近 1−h 线性缩放;把 attention bucket 作为整体处理时,1−h2 是合理的近似。
3. 图二:Attention vs FFN,谁受益更大?

这张图对比同一 hit ratio 下 attention 和 FFN/GEMM 的缩放差异:
| 算子 | 缩放函数 | 原因 |
|---|
| Attention | 1−h2 | 二维 token 交互面积,suffix 仍需 attend prefix |
| FFN / GEMM | 1−h | 逐 token 独立处理(1D 序列),只需重算 suffix |
| Communication | ≈1 | dispatch/通信保守视作固定项 |
关键洞察:FFN/GEMM 按 1−h 线性缩放,比 attention 的 1−h2 受益更大。也就是说,随着 hit ratio 提高,FFN 的计算量下降得更快,attention 反而成为越来越大的瓶颈。
这也解释了为什么高 hit ratio 场景下,优化注意力机制(FlashAttention、PagedAttention 等)比优化 FFN 更重要。
4. 图三:端到端 TTFT 与 TPM 的影响

这张图展示的是 hit ratio 对端到端 Time-To-First-Token(TTFT)和 Tokens-Per-Minute(TPM)的综合影响。
Hit 后有两个相反的趋势:
- 计算量下降 → TTFT 降低 → TPM 提升
- KV cache load 增加 → 需要从存储池/Host DRAM 经 PCIe 加载 KV 到 GPU HBM → TTFT 增加
统一模型把 TTFT 拆成三部分:
Tcompute(h)Tload(h)Toverlap(h)TTFT(h)=Tattn,0⋅(1−h2)+Tffn,0⋅(1−h)=Bpcie/gpuh⋅N⋅Skv/gpu=α⋅min(Tload(h),Tcompute(h))=Tfixed+Tload(h)+Tcompute(h)−Toverlap(h)
其中:
- Tcompute(h):hit 后可变计算时间,attention 按 1−h2、FFN 按 1−h 缩放
- Tload(h):KV cache 从 Host 经 PCIe 加载到 HBM 的时间,随 h 线性增长
- Tfixed:不可缩放的固定开销(communication、dispatch、框架调度等)
- Toverlap(h):KV load 和 miss-token compute 的重叠时间
α(overlap ratio)是关键参数:
| α | 含义 | TTFT 公式 |
|---|
| 0 | 完全不重叠(线上现状/保守复刻) | Tfixed+Tload+Tcompute |
| 1 | 充分重叠(优化目标) | Tfixed+max(Tload,Tcompute) |
5. 两种 TPM 口径
Hit ratio 修正后需要区分两种 TPM 口径:
| 口径 | 公式 | 用途 |
|---|
| Delivered TPM | (ISL+OSL)×60000/tchip | 经营、营收、对外交付 token。cached input 也算交付 token。 |
| Physical TPM | (ISL×(1−h)+OSL)×60000/tchip | 硬件实际消耗口径。cached input 不再重复计入 prefill 计算。 |
其中 tchip=tprefill(h)+tdecode。
端到端修正时必须保留 decode 项。高 OSL、decode 占比高的场景下,只修正 prefill 会明显高估整体 TPM 增益。
6. 统一模型:从简化到通用
6.1 轻量化一阶模型
如果缺少 trace/breakdown 细分,退化为:
Tcompute(h)TTFT(h)=(1−h)⋅T0=Tload(h)+(1−h)⋅T0
进一步假设 KV load 和 compute 充分 overlap,得到:
Θ(h)=max(1−h,δ⋅h)Θ0
其中 δ=N⋅Skv/(Bpcie⋅T0) 是全量 KV load 时间与 0-hit prefill 时间的比值。这个公式简洁优美,明确表达了:KV cache hit 一方面减少计算,另一方面增加 KV load,最终产能不能按 1/(1−h) 无限放大。
6.2 完整统一模型
有 trace/breakdown 时,保留分阶段缩放:
Tcompute(h)Tload(h)TTFT(h)=Tattn,0⋅(1−h2)+Tffn,0⋅(1−h)+Tother,0⋅fother(h)=Bpcie/gpuh⋅N⋅Skv/gpu=Tfixed+Tload(h)+Tcompute(h)−Toverlap(h)
6.3 对比
| 维度 | 一阶模型 | 统一模型 |
|---|
| 计算侧 | (1−h)⋅T0 单线性 | 按 Attention / FFN / 通信分别缩放 |
| KV load | δ⋅h⋅T0,隐含 overlap | 显式 Tload + 可控 overlap 参数 |
| 固定开销 | 无 | Tfixed 保留 |
| 端到端 | 只看 prefill | prefill + decode chip-time |
| 口径 | 容易混淆 | Delivered / Physical 双口径 |
7. KV cache load 大小
7.1 峰值显存占用

KV cache 的峰值显存占用由三个维度共同决定:
MKVpeak=B⋅Nmax⋅Skv/tok/gpu
其中每 token 每卡的 KV cache 大小为:
Skv/tok/gpu=2⋅L⋅ntpnkv_heads⋅dhead⋅belem
- 2:K 和 V 两份缓存
- L:模型层数
- nkv_heads/ntp:GQA/MQA 下每卡分到的 KV head 数(ntp 为 tensor parallel 分片数)
- dhead:每个 attention head 的维度
- belem:精度字节数(FP16/BF16 = 2,FP8 = 1)
峰值出现在所有 batch 中的 request 同时达到 Nmax 时。以 Qwen2.5-72B(ntp=4)为例:
Sper_tokMKVpeak=2×80×48×128×2=163,840bytes=160KB/token=32×8192×160KB≈40GB
这意味着在 batch_size=32、seq_len=8192 的配置下,仅 KV cache 就需要约 40 GB 显存——这还没算模型权重和 activation。这也是为什么 KV cache 管理(PagedAttention、prefix caching、offload 等)是大模型推理的核心挑战之一。
7.2 PCIe 加载带宽
每 token KV cache 大小按每卡 shard 口径计算:
Skv/gpu=2⋅L⋅nkv_heads/gpu⋅dhead⋅belem
其中 2 是 K 和 V,L 是层数,nkv_heads/gpu=nkv_heads/ntp。
必须强调 per_gpu:TP 并行把 KV heads 按 shard 分到不同 GPU,单卡只加载本卡 shard。如果直接用全模型 KV 大小除以单卡 PCIe 带宽,会把 Tload 高估约 ntp 倍。
PCIe 有效带宽建议值:
| PCIe 规格 | 建议有效带宽 |
|---|
| Gen4 x16 | 25 GB/s |
| Gen5 x16 | 50 GB/s |
8. 从一个 hit 修正到另一个 hit
实际场景中经常不是从 0-hit 开始,而是「压测实际 hit 为 hmeasured,线上目标 hit 为 htarget」。此时按同一模型做相对修正:
P(h)DC(h)TPMdeliveredtarget=tprefill at hit h=tdecode(不随 prefill hit 变化)=P(h)+D=TPMdeliveredmeasured×C(htarget)C(hmeasured)
如果只需要 Physical TPM:
TPMphysicaltarget=TPMdeliveredtarget×ISL+OSLISL⋅(1−htarget)+OSL
9. 一句话总结
KV cache hit 修正以 prefill chip-time 为核心:计算侧按 trace/阶段模型随 hit 缩短(attention 按 1−h2,FFN 按 1−h),KV load 侧按 hit 增长并显式进入 TTFT,再通过 overlap ratio 描述传输和计算的重叠程度。最终和 decode chip-time 组合得到 Delivered TPM 与 Physical TPM。
相关页面