向下滚动
AtomGradient Academy

KV Cache

为什么长对话的 Token 会更便宜?

Attention 机制 精确复用原理 显存 vs 算力 命中率
阅读时间约 10 分钟
Chapter 01

K/V 是怎么算出来的?

每个 token 进入 Attention 层时,都要和两个固定的权重矩阵做乘法, 得到 KeyValue 向量——这两个向量就是缓存的对象。

INPUT
token
embedding
推理时固定
×
WEIGHT
WK
模型权重固定
WEIGHT
WV
模型权重固定
OUTPUT
K 向量
OUTPUT
V 向量
CONCLUSION
两个输入都固定
→ 输出永远相同
✓ 精确复用,零误差

sin(30°) = 0.5,已知就不必每次重算三角函数。KV Cache 就是把这个"已知结果"存起来查表用。

Chapter 02

命中 vs 未命中

相同前缀的 token 直接从缓存读取,只有新 token 需要重新计算。

▶ 请求一(首次)—— 全部计算并写入缓存
你是专业助手
请用中文回答
用户问:
今天天气?
⚡ KV CACHE
你是专业助手 · K/V
请用中文回答 · K/V
用户问 · K/V
今天天气 · K/V
▶ 请求二 —— 相同前缀命中缓存,只算新 token
你是专业助手
命中 ✓
请用中文回答
命中 ✓
用户问:
新算 →
怎么做饭?
新算 →
首次计算写入缓存
缓存命中(跳过计算)
未命中(重新计算)
Chapter 03

用户消息 & 模型回答都缓存

模型看到的只是一串 token——不区分谁说的,全部都需要 K/V,全部存入缓存。 随着对话轮次增加,命中率越来越高。

System Prompt
你是专业助手
请用中文回答
User 第1轮
KV Cache 是什么
Assistant 第1轮
KV Cache 是一种
缓存机制……
User 第2轮
你是专业助手
请用中文回答
KV Cache 是什么
KV Cache 是……
为什么更便宜
Assistant 第2轮
全部历史命中 ✓
因为命中的……
整体命中率 0%
第1轮:0% 第2轮:~70% 第10轮:~90%+
Chapter 04

同样 1000 个输入 Token,计算量对比

缓存命中 = 跳过 K/V 矩阵乘法。计算量从 O(N) 降到近似 O(1)。 厂商据此对命中 token 打折,约为正常价格的 10%

场景一:固定 System Prompt
节省 ~50%
无缓存1000 units
1000 units(全量)
有缓存(50% 命中)~500 units
~500 units
场景二:多轮对话(第10轮)
节省 ~90%
无缓存1000 units
1000 units(全量)
有缓存(90% 命中)~100 units
~100 units
场景三:RAG 长文档复用
节省 ~88%
无缓存1000 units
1000 units(全量)
有缓存(88% 命中)~120 units
~120 units
Chapter 05

KV Cache 的真实形状:四维张量

不是"一个矩阵",而是按层、按注意力头分开存储的多组向量。

[ L 层 ] × [ H 注意力头 ] × [ N token 数 ] × [ d 每头维度 ]
L
层数
32 层

每层独立存 K/V,互不影响

H
注意力头数
32 头

多头注意力,各头独立计算

N
Token 数
随上下文线性增长

越长的对话占显存越多

d
每头维度
128 维

通常固定,由模型架构决定

📐 实际大小:2 × 32层 × 32头 × 1000token × 128维 × 2字节(fp16) ≈ 500 MB —— 上下文越长,显存占用线性增长

总结 · Summary

一页看懂 KV Cache

📐
本质

K/V 是确定性函数的输出,两个输入(token embedding + 权重)都固定,结果永远相同,可以安全复用。

💰
为何便宜

命中 = 跳过矩阵乘法,GPU 算力省下来。厂商对命中 token 打折,约为正常价格的 10%。

🎯
精度保证

不是近似,是精确相等的浮点数——与重算完全一致,零误差,不影响任何输出质量。

💬
缓存范围

用户消息 + 模型回答全部缓存。模型不区分谁说的,都需要 K/V,地位完全平等。

🗂
存储形状

四维张量 [L层 × H头 × N token × d维],上下文越长显存越多,是显存 vs 算力的权衡。

✍️
最佳实践

稳定内容(System Prompt / 文档)放最前,变化内容追加在末尾——保证前缀缓存最大命中。

KV Cache = 用显存空间换计算时间 · 命中率越高,Token 越便宜

下一篇:ANE 混合推理 →