我们上一篇已经讲了 DeepSeek技术架构解析:MoE混合专家模型
这一篇我们来说一说DeepSeek的创新之一:MLA多头潜在注意力。
MLA主要通过优化KV-cache来减少显存占用,从而提升推理性能。我们知道这个结论之前,老周带大家一起梳理一下从MHA、MQA、GQA到MLA的演变历程,并着重介绍一下MLA的设计思路。
DeepSeek这次的破圈,主要的创新之一:Multi-head Latent Attention架构(MLA),作为对Grouped-Query Attention(GQA)的颠覆性升级,成功突破大模型推理效率的"不可能三角"。
技术演化三部曲:
MLA的破局智慧:
MLA架构的突破性在于引入"潜在注意力"概念:通过动态构建隐空间投影矩阵,在保持GQA分组优势的同时,实现了三大跃升:
MHA (多头注意力机制 Multi-Head Attention)是 Transformer 架构的核心组件,首次提出于论文 《Attention is All You Need》。其核心思想是通过并行化多组注意力头,增强模型对复杂语义模式的学习能力。每个注意力头独立捕捉输入序列的不同特征,最终将结果拼接以形成综合表征。
数学形式: 给定输入序列 (),MHA 的流程如下:
典型配置:
模型 | 输入维度 | 头数 | 单头维度 |
|---|---|---|---|
LLAMA2-7B | 4096 | 32 | 128 |
LLAMA2-70B | 8192 | 64 | 128 |
KV Cache 与优化技术: 在自回归生成任务(逐词生成)中:

核心目标:在减少 KV Cache 内存占用的同时,尽可能保持模型性能。
关键优势:
2.2.1 显存资源的有限性与动态分配
在大型语言模型(LLM)的推理过程中,GPU显存是核心资源瓶颈。显存主要分为两部分:

2.2.2 部署效率与通信带宽的制约
在实际部署中,需遵循以下原则:
由于“木桶效应”,跨设备部署会导致性能受限于最低层级的通信带宽。例如,即使单卡H100的SRAM带宽极高,但对于长上下文任务,KV Cache的动态增长仍可能迫使模型跨卡部署,从而引入卡间通信延迟,显著拖慢推理速度。

2.2.3 降低KV Cache的核心目标
要想更详细地了解这个问题,读者可以进一步阅读《FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness》、《A guide to LLM inference and performance》、《LLM inference speed of light》等论文或文章。
2.3.1 核心概念
MQA(多查询注意力机制 Multi-Query Attention)是一种减少KV Cache占用的经典方法,最早提出于2019年论文《Fast Transformer Decoding: One Write-Head is All You Need》。其核心思想是让所有注意力头(Head)共享同一组Key(K)和Value(V),从而显著降低显存中KV Cache的存储需求。MQA在LLM广泛应用前便已受到关注,体现了优化推理效率的长期研究价值。
2.3.2 数学形式
MQA通过简化多头注意力(MHA)的键值映射实现显存优化。给定输入序列 ,其计算流程如下:
2.3.3 技术优势与局限性
✅ 核心优势:
⚠️ 潜在局限:
2.3.4 典型应用模型
模型 | 说明 |
|---|---|
PaLM | Google的大规模语言模型系列 |
StarCoder | 代码生成专用模型 |
Geminir | 多模态生成模型 |
2.3.5 小结
MQA通过共享键值映射,以极低的工程复杂度实现了KV Cache的显著压缩。尽管可能牺牲部分模型灵活性,但其在显存效率和部署成本上的优势使其成为LLM推理优化的关键技术之一。后续技术(如MOA、GOA)均受MQA启发,进一步探索了精度与效率的平衡。
2.4.1 核心概念
GQA( 分组查询注意力机制Grouped-Query Attention)是一种平衡KV Cache压缩与模型性能的注意力机制,提出于论文《GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints》。其核心思想是将多头注意力(MHA)分组,每组共享同一对Key(K)和Value(V),既减少显存占用,又保留一定语义多样性。GQA可视为MHA与MQA(Multi-Query Attention)的过渡方案:
2.4.2 数学形式
给定输入序列 ,GQA 的计算流程如下:
2.4.3 技术优势与局限性
✅ 核心优势
2.4.4 典型应用模型
模型 | 说明 | 组数 |
|---|---|---|
LLAMA2-70B | Meta开源的大规模语言模型 | 8 |
LLAMA3系列 | Meta最新一代开源模型 | 8 |
TigerBot | 深度求索科技的中英双语模型 | 8 |
DeepSeek-V1 | 深度求索的高效长文本模型 | 8 |
Yi系列 | 零一万物开发的多模态模型 | 8 |
ChatGLM2/3 | 智谱AI的中英双语对话模型(实际为GQA) | 2 |
2.4.5 小结
GQA通过分组共享键值映射,在MHA与MQA之间建立了可调节的显存优化路径。其核心价值在于:
GQA已成为当前主流大模型(如LLAMA系列)的标配技术,并与MOA、MLA等优化方案共同推动LLM的高效落地。
2.5.1 核心概念
MLA(多头潜在注意力机制 Multi-head Latent Attention)是DeepSeek-V2提出的兼顾KV Cache压缩与模型表达能力的新型注意力机制。其核心思想是通过低秩投影与恒等变换技巧,在保持GQA(Grouped-Query Attention)显存效率的同时增强语义多样性,并兼容RoPE(旋转位置编码)。MLA被视为GQA的进阶版本,实现了“训练时增强能力,推理时压缩显存”的优化目标。
2.5.2 数学形式与关键技术
2.5.2.1 低秩投影与恒等变换
MLA通过两步操作实现显存优化:
2.5.2.2 兼容RoPE的混合设计
为解决RoPE(旋转位置编码)与MLA的冲突,MLA采用分维度混合编码:
2.5.3 技术优势与局限性
✅ 核心优势
⚠️ 潜在局限
2.5.4 典型应用:DeepSeek-V2
参数 | 值 | 说明 |
|---|---|---|
隐藏层维度 | 5120 | 模型容量基础维度 |
低秩维度 | 512 | 控制KV Cache大小的核心参数 |
RoPE维度 | 64 | 新增位置编码维度 |
头数 | 128 | 通过增加头数提升模型能力 |
2.5.5 与GQA/MQA对比
特性 | MQA | GQA | MLA |
|---|---|---|---|
KV Cache压缩率 | (≈1/10) | ||
表达能力 | 最低 | 中等 | 最高 |
兼容RoPE | 直接兼容 | 直接兼容 | 需混合维度设计 |
典型应用 | PaLM, StarCoder | LLAMA2/3, ChatGLM | DeepSeek-V2 |
2.5.6 小结
MLA通过低秩投影与分维度RoPE设计,在以下方面实现突破:
MLA代表了注意力机制从“粗暴压缩”向“精细化权衡”的演进方向,为LLM的高效部署提供了新的技术路径。
2.6.1 核心概念
旋转位置编码(Rotary Position Embedding, RoPE)是一种将绝对位置信息融入注意力机制的技术。其核心思想是通过旋转矩阵对查询(Query)和键(Key)进行位置相关的变换,使模型能够隐式学习相对位置关系。相比于传统的位置编码方法,RoPE无需显式添加位置偏置,直接通过矩阵运算实现位置感知。
2.6.2 数学形式对比
其中:
关键特性:

RoPE破坏了推理时矩阵提前融合的方案,DeepSeek最终想到的解决方案是:给Q、K向量增加一些维度来表示位置信息。
2.6.3 小结
RoPE通过旋转矩阵将位置信息编码到注意力机制中,实现了对相对位置关系的隐式建模。其设计平衡了计算效率与表达能力,已成为当前主流大模型(如LLAMA、DeepSeek)的标配技术。后续改进方向可能包括:

通过 (D是Down的意思,降维压缩) 参数矩阵,比如之前是6个维度,经过 压缩到2维,缓存只需要缓存2维的压缩向量,在进行计算时,要用到真实的K、V向量时,再从K、V压缩向量,通过两个解压矩阵转换成之前的维度就可以了。可以对比上面那张图MLA的缓存量,MLA确实可以减少K-V Cache,但是会影响模型效果吗?

通过这个性能测试报告可以看出,MLA(Multi-head Latent Attention)在保持或提升模型性能的同时,显著降低了KV Cache占用,并优化了参数效率,尤其在大型模型中优势更为突出。
但是K-V Cache的本意是啥呢?它是为了减少推理时对之前token K、V向量计算而产生的。MLA因为缓存的压缩的K-V Cache来减少了K-V Cache的显存占用。但是,在取出缓存后,K、V不能直接使用,还是得经过解压计算才能使用,这不是在推理时又引用了解压这个额外的计算吗?这和K-V Cache的初衷是相悖的。

我们来看下K-V Cache的推理过程:

上面对应标准的MHA,下面对应的是MLA。
我们来说下MLA,通过 矩阵进行压缩,然后生成压缩的K、V的隐特征 ,将 存储在K-V Cache。K、V向量通过将压缩的隐特征与K向量的解压参数矩阵进行相乘,V向量同理。得到当前token可用于注意力计算的K、V向量。
对于之前的token,从K-V Cache里取出压缩的隐特征,然后经过K、V向量的解压参数矩阵、投影,得到可以计算的K、V。
看右面那个推导公式可以发现,对K进行解压操作的矩阵可以和矩阵进行融合,这个融合可以在推理之前计算好。这样我们通过矩阵计算的结合律,就可以规避MLA引入的推理时解压隐特征带来的额外计算。

MLA除了对K、V进行了压缩外,还对Q向量进行了压缩,这样的好处是,降低了参数量而且可以提升模型性能。通过对Q向量进行了解压,但是Q的隐向量并不需要缓存,只需要换成共用的K-V压缩的隐向量即可。
好了,现在似乎所有问题都解决了。K-V Cache减少了,模型表现还提升了。但是好事多磨,刚才我们一直没有考虑旋转位置编码,也就是上面我介绍的2.6的概念。
我们知道,旋转位置编码需要对每一层的Q、K向量进行旋转,而且,根据token位置的不同,旋转矩阵的参数也不同,这里以第i个token的q和第j个token的k的点积为例:

如果不考虑旋转位置编码,则是我们上面讲的对K进行压缩的矩阵可以和 矩阵进行融合成 。但是如果考虑旋转位置编码,因为不同位置的旋转矩阵也不同,这里我们用和来表示第i个和第j个token位置的旋转矩阵。可以发现如果增加了旋转矩阵,i,j和token位置相关,无法合并。所以它破坏了之前推理时矩阵提前融合的方案。
不过DeepSeek给出了这个场景的解决方案,就是给Q、K向量额外增加一些维度来表示位置信息。对于Q向量,通过为每一个头生成一些原始特征。(其中Q代表Q向量,R代表旋转位置编码),然后通过旋转位置编码增加位置信息生成带位置信息的特征拼接到每个带注意力头的Q向量。对于K向量,通过矩阵生成一个头,共享的特征,然后通过旋转位置编码增加位置信息复制到多个头共享位置信息。

不带旋转位置编码部分与旋转位置编码部分进行点积,这样就得到了即兼容旋转位置编码压缩K-V Cache的方案,同时也可以提升模型的性能。

最后,我们来回顾下MLA论文里的架构图。首先是输入token特征h,通过它生成压缩后的KV特征,然后压缩后的KV特征解压成多头的k、v特征;从输入h生成多头共享的带旋转位置编码的,再把和进行合并形成最终带位置编码的k向量;再看q向量这边,解压生成多头的向量,然后从压缩的向量生成多头的带位置编码的,然后与进行合并生成最终带位置编码的q向量。最后q、k、v向量进行多头注意力计算(其中图中带阴影部分的需要缓存)。
欢迎大家关注我的公众号【老周聊架构】,AI、大数据、云原生、物联网等相关领域的技术知识分享。