Transformer 的键值缓存为什么能省。用猫吃两个字推一遍就通透了。维度先压到三维,人脑跟得上。跟着算,很短。
单头注意力算输出,本质是对历史的值加权求和。新字进来都绕不开这道手续。打分矩阵才是关键。第一步只有猫,打一个分,自己乘自己,完事,简单。第二步吃进来。矩阵变两行两列。四个分排开,猫吃、猫猫、吃猫、吃吃。
盯着四个格子看。猫吃那格被掩码挡着,不参与输出。重算它纯属浪费。真正的新活只有两笔,吃对猫、吃对自己。猫猫那格第一步已算过,重算一遍分毫不差,多余。
规律到这里自己浮出来了。新字打分只要自己的查询向量,加上从头到尾所有的键。旧的查询向量压根用不上,扔。于是结论落定,旧查询不留。键和值反复用且不变,留下来。这就是键值缓存的全部秘密,就这么点。
我的看法是这类推导,值得做工程的亲手过一遍。课本上一句可以缓存,四个字。背后是掩码方向和复用性的具体算账。自己推过一次,以后调推理性能、看内存占用,心里才有谱。纸上得来终觉浅,动手算才记得住,老话不假。
顺带能解释个日常现象。长对话越到后面越吃显存,知道为啥了吧。历史的键值越攒越多,每步都得带着。缓存涨到哪,显存吃到哪,账就是这么算的,不是玄学。
话题来源 @antiAIvo
4.2K阅读 ❤️35 x.com/…↗ 已改写,非原文转载
138 浏览 0 评论
0 反应













