DeepSeek MLA详解

回顾

传统稠密大模型
图1:传统稠密大模型结构
在deepseekv2中,由MoE替换了FFN模块,MLA替换了attention模块

Attention的计算过程

传统稠密大模型 传统稠密大模型
图2:attention的计算过程
通过以上两图不难发现attention的计算过程
  • 首先计算出第一个token的Q、K、V得到第一个token的attention,并缓存该token的K、V,
  • 其次依据第一个token的K和第二个token的 Q、K,再结合第一个token的V和第二个token的V,得到第二个token的attention,并缓存第二个token的K、V
  • 剩余的token一次类推

优缺点

  • KV cache 减少了推理的计算量,加快了推理速度
  • 随着 序列的越来越长,KV cache占用的显存也越来越来,也就是用宝贵的空间换速度

尝试的解决方法

在这里插入图片描述
multi-query 虽然减少了缓存量,但是大大降低了性能,所以有了GQA。以下是性能对比,为了实验更公平,gqa、mqa,参数少就增加了层数,保证参数量几乎一致
在这里插入图片描述
那么有没有既能减少KV catch 又能保证模型性能的做法呢?那就是MLA

MLA的计算过程


首先使用一个压缩矩阵Wdkv 得到cache,使用时在使用两个矩阵 Wuk 和 Wuv 解压得到K、V,再进行attention计算,但是在使用两个矩阵解压时,引入了新的计算,这不是和减少计算量相违背吗?

带缓存的推理过程

在这里插入图片描述
在这里插入图片描述
以上不再过多赘述
在这里插入图片描述
在deepseek中不仅压缩了K、V还压缩了Q。但是q的无需缓存
以上过程看似很好,但是忽略了一个问题:整个过程中没有加入位置信息-- 旋转位置编码

旋转位置编码

旋转位置编码显示在大模型中 默认的位置编码
在这里插入图片描述
由于旋转位置编码和位置有关系,无法使用不带旋转位置编码的矩阵融合方式消除减压操作,所以提出了为Q、K额外增加一些维度,表示位置信息。
在这里插入图片描述
在这里插入图片描述
图中阴影部分是需要缓存的

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐