当前位置: 首页 > backend >正文

MLA(多头潜在注意力)原理概述

在这里插入图片描述
注意力机制的发展经历了MHA,MQA,GQA,MLA。
时间复杂度:MHA为O(n²),MQA、GQA、MLA通过优化降低至O(n)
在这里插入图片描述
为了减少KV缓存,主要有以下几种方法:

  • 共享KV:多个Head共享使用1组KV,将原来每个Head一个KV,变成1组Head一个KV,来压缩KV的存储。代表方法:GQA,MQA等
  • 窗口KV:针对长序列控制一个计算KV的窗口,KV
    cache只保存窗口内的结果(窗口长度远小于序列长度),超出窗口的KV会被丢弃,通过这种方法能减少KV的存储,当然也会损失一定的长文推理效果。代表方法:Longformer等
  • 量化压缩:基于量化的方法,通过更低的Bit位来保存KV,将单KV结果进一步压缩,代表方法:INT8等
  • 计算优化:通过优化计算过程,减少访存换入换出的次数,让更多计算在片上存储SRAM进行,以提升推理性能,代表方法:flashAttention等

一、过程

1.KV部分

对于输入向量,使用矩阵W_DUK进行联合压缩,得到低秩矩阵C_KV。
然后分别使用W_UK和W_UV对K和V进行还原,得到K_C和V_C
为了加入ROPE旋转位置编码,从输入向量中通过线性映射得到共享的K_R。
合并K_C和K_R,得到完整的K。

2.Q 部分

对于输入向量,通过W_DQ压缩为Q_C。
然后从Q_C进行线性变换,得到Q_R。
一样合并,得到完整的Q。

3.注意力计算

进入正常的注意力计算公式。

4.整体公式

在这里插入图片描述

缓存

在MLA中,KV缓存,只需要缓存W_DUK和K_R即可。

二、问答环节

1.为什么MLA推理的计算量那么大,推理效率却高

答:我们可以将LLM的推理分两部分:第一个Token的生成(Prefill)和后续每个Token的生成(Generation),Prefill阶段涉及到对输入所有Token的并行计算,然后把对应的KV Cache存下来,这部分对于计算、带宽和显存都是瓶颈,MLA虽然增大了计算量,但KV Cache的减少也降低了显存和带宽的压力,大家半斤八两;

但是Generation阶段由于每步只计算一个Token,实际上它更多的是带宽瓶颈和显存瓶颈,因此MLA的引入理论上能明显提高Generation的速度。

2.mla和lora的区别

答:
1,目标上,MLA是一种注意力机制优化方案 ,旨在通过低秩分解压缩键值(KV)矩阵,减少计算复杂度;LoRA 是一种模型微调技术。
2.结构上,MLA直接改造注意力层,LORA是在原模型的权重矩阵旁插入低秩分解的适配层。
3.前者要加ROPE位置编码,后者没有。

3.MLA的矩阵吸收

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

参考文献

deepseek技术解读(1)-彻底理解MLA(Multi-Head Latent Attention) - 姜富春的文章 - 知乎
https://zhuanlan.zhihu.com/p/16730036197
缓存与效果的极限拉扯:从MHA、MQA、GQA到MLA - 苏剑林的文章 - 知乎
https://zhuanlan.zhihu.com/p/700588653
再读MLA,还有多少细节是你不知道的 - 猛猿的文章 - 知乎
https://zhuanlan.zhihu.com/p/19585986234
https://blog.csdn.net/v_JULY_v/article/details/141535986?fromshare=blogdetail&sharetype=blogdetail&sharerId=141535986&sharerefer=PC&sharesource=qq_43814415&sharefrom=from_link

http://www.xdnf.cn/news/599.html

相关文章:

  • 【Easylive】seataServer.properties 配置文件详细解析
  • 【python】Asyncio包学习 1-5
  • 【排队论】Probabilistic Forecasts of Bike-Sharing Systems for Journey Planning
  • 日语学习-日语知识点小记-进阶-JLPT-N2阶段(6): - (1)ても てでも特别强调(2)~もしないで = 聞かないで:根本不做某动作”
  • 【Java笔记】volatile 关键字
  • javaSE.四大函数式接口
  • Vue3基础
  • 关于一对多关系(即E-R图中1:n)中的界面展示优化和数据库设计
  • leetcode刷题日记——两数之和
  • Linux——firewalld防火墙
  • 2021-11-10 C++蜗牛爬井进3退1求天数
  • 【C++算法】63.字符串_二进制求和
  • 深度解析AI大模型中的模型微调技术:从基础到实践
  • 知识就是力量——一些硬件的使用方式
  • 第二十七讲:AI+农学导论
  • Python基于知识图谱的医疗问答系统【附源码、文档说明】
  • python基础知识点(3)
  • JAVA学习-多线程
  • linux查看目录相关命令
  • Linux系统中的网络传输、网络管理以及软件仓库的构建
  • @EnableAsync+@Async源码学习笔记之四
  • 2025年第十五届MathorCup数学应用挑战赛D题论文全网首发
  • MSCKF——运动方程IMU状态递推(Propagation)
  • 深度补全网络:CSPN++ 有哪些开源项目
  • 2025华中杯挑战赛B题【单车调度】原创论文讲解
  • docker 搭建nacos 2.2.1版本单机版
  • 国产SMT贴片机自主技术突破解析
  • A股周度复盘与下周策略 的deepseek提示词模板
  • Unreal 从入门到精通之如何接入MQTT
  • 【开发心得】Dify部署ollama模型的坑[8]