登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
博客
发1篇日志+1圆
记录
发1条记录+2圆币
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
VIP网盘
VIP申请
网盘
联系我们
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
探秘Transformer系列之(28)--- DeepSeek MLA
探秘Transformer系列之(28)--- DeepSeek MLA
[ 复制链接 ]
龙正平
2025-6-2 21:32:30
探秘Transformer系列之(28)--- DeepSeek MLA
目录
探秘Transformer系列之(28)--- DeepSeek MLA
0x00 概述
0x01 原理
1.1 问题
1.2 当前状况
1.3 改进思路
1.3.1 增强信息压缩能力
思路
方案
问题
1.3.2 丰富信息表达
思路
方案
1.3.2 解决位置编码冲突
1.4 架构图 & 流程
1.5 代码
0x02 核心要点
2.1 低秩KV联合压缩
2.1.1 低秩分解
2.1.2 思路
2.1.3 向下投影
2.1.4 向上投影
null
2.1.5 完整过程
2.2 权重吸收
2.2.1 当前状态
2.2.2 权重吸收
2.2.3 推导
KQ合并
VO合并
结合
2.2.4 讨论
训练
MHA
不合并
2.3 解耦RoPE
2.3.1 RoPE背景
2.3.2 问题
无法直接应用到低秩压缩
与权重吸收不兼容
2.3.3 解决方案
2.3.5 和权重吸收结合
2.4 资源占用
2.4.1 参数量
2.4.2 内存占用
2.4.3 计算量
2.4.4 信息转移
2.5 并行
0x03 计算过程
3.1 公式
3.2 原始流程
3.3 吸收
3.3.1 过程
3.3.2 吸收结果
3.3.3 MQA形式
0x04 代码
4.1 配置
4.2 定义
4.3 操作Q
4.3.1 变量定义
4.3.2 变量操作
4.4 操作KV
4.4.1 变量定义
4.4.2 变量操作
4.5 注意力操作
4.5.1 变量定义
4.5.2 变量操作
4.6 前向传播
4.7 V3 代码
0x05 优化代码
5.1 压缩优化
5.2 权重吸收
5.2.1 absorbed_cache_compressed.py
\(W^{UK}\)
\(W^{UV}\)
5.2.2 Move Elision
5.2.3 Materializing Projection Matrices
5.3 融合算子
5.4 矩阵乘的重排序(增补@2025-04-19)
0x06 转换
6.1 GQA
6.1.1 思路
6.1.2 方案
6.2 MHA
6.2.1 partial-RoPE
MHA
拆解
6.2.2 低秩近似
0xFF 参考
0x00 概述
MLA(Multi-head Latent Attention / 多头潜在注意力)的基本思想是将注意力输入\(h_t\) 压缩成一个低维的潜在向量 \(c^{KV}_t\) ,维度为 \(d_c\),且 \(d_c\) 远小于原始的维度(\(h_nd_h\))。在需要计算注意力时,可将这个潜在向量 \(c^{KV}_t\) 映射回高维空间。因此,只需要存储潜在向量 \(c^{KV}_t\) ,就可以显著减少内存的占用。
这个过程可以通过以下公式更正式地进行描述。其中 \(c^{KV}_t\) 表示潜在向量;\(W^{DKV}\) 是压缩矩阵(上标 D 代表"下投影",即降维操作),负责将 \(h_t\) 的维度从(\(h_n·d_h\))压缩到\(d_c\);\(W^{UK}\)和 \(W^{UV}\) 是上投影矩阵,负责将共享的潜在向量 \(c^{KV}_t\) 映射回高维空间。只需要存储这个潜在向量 \(c^{KV}_t\) ,就能获得对应不同文本特征的Key和Value,而不需要对每个文本特征都存储对应的Key和Value。
类似地,我们也可以将查询向量映射到一个潜在的低维向量,然后再将其映射回原始的高维空间。而且,MLA又结合了权重吸收技术,减少了计算开销。
注:
全部文章列表在这里,估计最终在35篇左右,后续每发一篇文章,会修改此文章列表。cnblogs 探秘Transformer系列之文章列表
本系列是对论文、博客和代码的学习和解读,借鉴了很多网上朋友的文章,在此表示感谢,并且会在参考中列出。因为本系列参考文章实在太多,可能有漏给出处的现象。如果原作者或者其他朋友发现,还请指出,我在参考文献中进行增补。
0x01 原理
1.1 问题
标准Transformer的一大障碍就是KV Cache的空间占用问题:多头注意力机制需要为每个注意力头单独存储历史生成的Key和Value向量(即KV缓存)。随着序列长度增加,KV缓存的存储需求呈指数级增长,导致内存占用急剧上升。而GPU的显存空间往往非常有限,较大的KV Cache会导致同时处理的request数量变少,也即batch size较小;为了减少KV缓存需求,研究人员提出了像Multi-Query Attention(MQA)和Group-Query Attention(GQA)这些方法。这些方法虽然降低了缓存要求,可模型的性能也受到影响。MQA或GQA算子在计算注意力的过程中,所有KV Cache中的数据读取后都仅参与一次或几次计算,导致该算子的MFU极低,并且由于每个request有自己的KV Cache,这一问题无法通过提高batch size的方式解决。
因此,如何减少推理过程的KV Cache,从而实现在更少的设备上推理更长的Context,或者在相同的Context长度下增大batch size,实现更快的推理速度或者更大的吞吐总量,最终降低推理成本。是一个关键问题。
1.2 当前状况
我们首先总结下当前各种方案的情况来看看有没有可以改进的空间。下图给出了MHA、GQA、MQA 以及 MLA 做法。
图上从左到右依次是 MHA、GQA、MQA 以及 MLA 。图中有阴影的长条表示会缓存到显存的结果。MHA、GQA、MQA 都需要将 KVCache 缓存到显存。几种方案特点如下。
<ul>MHA:MHA KVCache 在注意力头这个维度和 Q 矩阵一样,属于“一对一”。MHA把一个注意力计算拆成多个注意力头,每个注意力头使用独立的Q、K、V进行计算,需要把K、V都存储下来,KV Cache中每个token需要缓存的参数量为\(2
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
龙正平
2025-6-2 21:32:30
关注
0
粉丝关注
14
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9984
黎瑞芝
9990
杭环
9988
4
猷咎
9988
5
凶契帽
9988
6
氛疵
9988
7
恐肩
9986
8
虽裘侪
9986
9
接快背
9986
10
里豳朝
9986
查看更多