主要观点总结
本文介绍了LLM推理中常用的KVCache技术的原理、设计细节、存储及实现细节,以及成立条件。文章还分析了神经网络计算中的误差与不可避免的随机性。
关键观点总结
关键观点1: KVCache的原理及设计细节
KVCache是为了在LLM推理过程中复用中间结果,减少计算量的一种技术。它通过保存transformer层中的K和V缓存,避免重复计算,提高推理速度。常见的注意力计算方式可以简化为single-query attention计算,根据这个公式,KVCache的选择是基于存储和计算效率的权衡。
关键观点2: KVCache的存储及实现细节
KVCache的存储大小与当前token数量、向量维度、层数成正比。对于变长的数据,有三种解决方案:分配最大容量缓冲区、动态分配缓冲区、按最小单元存储。目前采用最多的方案是按最小单元存储,即PageAttention,它申请一整块显存,划分成小块进行存储和管理。
关键观点3: KVCache成立的条件
KVCache适用的条件是模型的输出需要满足因果性,即每一个token的输出只依赖于它自己以及之前的输入,与之后的输入无关。一些ReRope技术会导致输入预处理层的输出发生改变,使得KVCache的条件不再成立。
文章预览
SmartFlowAI 点击上方 蓝字 关注我们 本文转载自知乎:https://zhuanlan.zhihu.com/p/686183300 作者 游凯超 清华软件学院博士研究生,人工智能/机器学习/迁移学习 知乎链接关注作者:https://www.zhihu.com/people/youkaichao 在LLM的推理过程中,KVCache已经属于必备的技术了。然而,网上现有的解读文章并不够清晰。看了一些文章之后,我决定还是自己写一篇新的,以飨读者。 Motivation: 为什么要KVCache 为了回答KVCache的必要性,我们首先需要对transformer类大语言模型的计算过程有个整体的理解。 对于LLM类模型的一次推理(生成一个token)的过程,我们可以将这个过程分解为下列过程: 输入n个token ,每个token就是一个整数 token预处理阶段,将token处理成token embedding ,每个token embedding就是一个向量,维度记为 。这里的上标 表示第0层,也就是输入,后面会用到。 token embedding
………………………………