词条 · AI ·
KV Cache
模型生成文字时用来记住前面内容的临时笔记,省去重复计算,代价是占显存。
也称:KV 缓存、键值缓存、kv cache
一句话
模型每写一个字,都要回顾前面所有内容。KV Cache 就是把这份回顾的结果存下来,下次直接取,不用重算。
打个比方
想象你在续写一篇长文,每写一个新词之前,都要把已经写好的全文重读一遍——确认语气、人物、上下文。写到第一千个词时,你已经重读了九百九十九次。
KV Cache 相当于你边读边做的笔记:每读完一段就记下要点,之后只需查笔记,不必重读原文。
具体是什么
模型内部把每个词转换成三样东西:查询(我在找什么)、键(我是什么)、值(我携带什么信息)。生成新词时,用新词的”查询”去和前面所有词的”键”比对,决定该关注谁,再取出对应的”值”。
前面那些词的键和值算完就不会变了。所以把它们缓存起来,每生成一个新词只算这一个词的部分。
代价:显存
省下的计算变成了占用的显存。粗略的账:
显存 ≈ 2 × 层数 × 序列长度 × 隐藏维度 × 每个数字占的字节数
↑
K 和 V 两份
上下文越长,占用线性增长。这就是为什么长上下文贵:不只是算得多,是显存装不下。也是为什么很多优化(分页管理、压缩、多个查询头共享一份键值)都在围着这块显存转。
为什么值得知道
KV Cache 解释了几件表面无关的事:
- 为什么模型”读”很快、“写”很慢——读入时可以并行算完,逐字输出时只能一个一个来
- 为什么长对话会变慢变贵
- 为什么同一个模型在不同推理框架下速度差很多——差别常常在怎么管这块缓存
来源
- Attention Is All You Need · arXiv