首页/AI/大模型部署与运维速查/KV 缓存是什么:显存的主要变量
推理参数与优化50 条

KV 缓存是什么:显存的主要变量

KV 缓存保存每层注意力已生成 token 的 Key/Value 张量,避免重复计算:随序列长度、层数、KV 头数、精度与批大小线性增长,显存规划必须单独为它留空间。

KV 缓存是什么

自回归生成时,模型每产出一个 token 都要重新用到前面所有 token 的注意力键值。为了避免重复计算,这些中间结果被缓存下来,就是 KV 缓存。它随序列长度、层数、键值头数、精度与并发序列数增长,在长上下文与高并发下可以超过权重占用的显存,是线上容量问题最常见的来源。

量级直觉

量级直觉
# 单个 token 的 KV 字节数(2 对应键与值两组张量)
bytes/token ≈ 2 × 层数 × 键值头数 × 头维度 × 精度字节数
# 一条序列的 KV
序列 KV = bytes/token × 序列长度
# 并发后总量按并发序列数放大
KV 总量 = 序列 KV × 并发序列数
# 用分组查询注意力的模型按键值头数计算,而不是注意力头数

四个驱动变量

  • 序列长度:上下文越长,每条序列的 KV 越大,且是线性增长
  • 并发序列数:同时在处理的请求越少,单条可用空间越大
  • 模型结构:层数与键值头数决定每 token 的基础开销
  • 缓存精度:降低 KV 精度能显著省显存,但要回归输出质量

变量的实际影响

变量调大后的影响常见处置
上下文上限KV 池被一次性预留,可用并发下降按业务高水位设置,而不是模型上限
并发请求数显存占用线性上升限制在途请求数,超出部分排队
缓存精度占用下降但质量可能变化用固定评测集验证后再上线
模型结构决定每 token 的基础开销选型阶段就要纳入容量评估
服务端引擎普遍用分页方式管理 KV:按固定大小的块分配,块可以在请求之间复用,浪费从整块级降到块内,这是高并发下显存利用率明显改善的原因。
只按权重估显存是容量规划里最典型的误判:长上下文高并发时 KV 缓存占比可能反超权重,必须一起核算。

易错点

  • 只按权重估显存:KV 没有留空间,一上并发就溢出
  • 把模型最大上下文当作配置值:KV 池按上限预留,显存被白白占住
  • 用注意力头数算键值头数:分组查询注意力的模型算出来会偏大数倍
  • 忘记乘二:键与值各占一份,漏乘会让估算直接差一倍
  • 忽略精度的作用:在显存紧张时降低缓存精度往往比缩短上下文更划算

数据来源与参考

  • vLLM 官方文档:PagedAttention 与 KV 管理(docs.vllm.ai)
  • Hugging Face 文档:KV cache(huggingface.co/docs)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌