DeepSeek技术架构解析:MLA多头潜在注意力
一、前言
我们上一篇已经讲了 DeepSeek技术架构解析:MoE混合专家模型
这一篇我们来说一说DeepSeek的创新之一:MLA多头潜在注意力。
MLA主要通过优化KV-cache来减少显存占用,从而提升推理性能。我们知道这个结论之前,老周带大家一起梳理一下从MHA、MQA、GQA到MLA的演变历程,并着重介绍一下MLA的设计思路。
DeepSeek这次的破圈,主要的创新之一:Multi-head Latent Attention架构(MLA),作为对Grouped-Query Attention(GQA)的颠覆性升级,成功突破大模型推理效率的"不可能三角"。
技术演化三部曲:
- 全量时代:传统多头注意力(MHA)凭借完整的参数交互保证精度,却背负着O(n²)的显存消耗枷锁
- 精简革命:多查询注意力(MQA)通过共享键值对实现算力解放,但过度压缩导致知识表征瓶颈
- 平衡之道:分组查询注意力(GQA)创新性引入分组机制,在效率与性能间走出第三条道路
MLA的破局智慧:
MLA架构的突破性在于引入"潜在注意力"概念:通过动态构建隐空间投影矩阵,在保持GQA分组优势的同时,实现了三大跃升:
- 隐性知识蒸馏:构建可学习的潜在注意力模板,突破固定分组的模式局限
- 跨头参数复用:开发跨注意力头的参数共享协议,降低30%以上显存占用
- 自适应计算路由:根据输入复杂度动态分配计算资源,推理速度提升2.8倍
二、共享KV优化显存方法
2.1 MHA
MHA (多头注意力机制 Multi-Head Attention)是 Transformer 架构的核心组件,首次提出于论文 《Attention is All You Need》。其核心思想是通过并行化多组注意力头,增强模型对复杂语义模式的学习能力。每个注意力头独立捕捉输入序列的不同特征,最终将结果拼接以形成综合表征。
数学形式:
给定输入序列 a 1 , a 2 , … , a l \mathbf{a}_1, \mathbf{a}_2, \ldots, \mathbf{a}_l a1,a2,…,al( a i ∈ R d \mathbf{a}_i \in \mathbb{R}^d ai∈Rd),MHA 的流程如下:
-
拆分多头
输入向量被划分为 h h h 个子向量:
a i = [ a i ( 1 ) , a i ( 2 ) , … , a i ( h ) ] \mathbf{a}_i = [\mathbf{a}_i^{(1)}, \mathbf{a}_i^{(2)}, \ldots, \mathbf{a}_i^{(h)}] ai=[ai(1),ai(2),…,ai(h)] -
单头注意力计算
每个子向量通过独立的参数矩阵映射为 Query、Key、Value,并计算注意力:
a i ( s ) = Attention ( a i ( s ) , k z i ( s ) , v z i ( s ) ) = ∑ t ≤ i exp ( a i ( s ) k t ( s ) ⊤ ) v t ( s ) ∑ t ≤ i exp ( a i ( s ) k t ( s ) ⊤ ) \mathbf{a}_i^{(s)} = \text{Attention}\left(\mathbf{a}_i^{(s)}, k_{zi}^{(s)}, v_{zi}^{(s)}\right) = \frac{\sum_{t \leq i} \exp\left(\mathbf{a}_i^{(s)} k_t^{(s)\top}\right) v_t^{(s)}}{\sum_{t \leq i} \exp\left(\mathbf{a}_i^{(s)} k_t^{(s)\top}\right)} ai(s)=Attention(ai(s),kzi(s),vzi(s))=∑t≤iexp(ai(s)kt(s)⊤)∑t≤iexp(ai(s)kt(s)⊤)vt(s)- 参数映射:
a i ( s ) = a i W Q ( s ) , k i ( s ) = a i W K ( s ) , v i ( s ) = a i W V ( s ) \mathbf{a}_i^{(s)} = \mathbf{a}_i W_Q^{(s)}, \quad k_i^{(s)} = \mathbf{a}_i W_K^{(s)}, \quad v_i^{(s)} = \mathbf{a}_i W_V^{(s)} ai(s)=aiWQ(s),ki(s)=aiWK(s),vi(s)=aiWV(s)
其中 W Q ( s ) , W K ( s ) ∈ R d × d k W_Q^{(s)}, W_K^{(s)} \in \mathbb{R}^{d \times d_k} WQ(s),WK(s)∈Rd×dk, W V ( s ) ∈ R d × d v W_V^{(s)} \in \mathbb{R}^{d \times d_v} WV(s)∈Rd×dv,通常 d k = d v = d / h d_k = d_v = d/h dk=dv=d/h。
- 参数映射:
典型配置:
模型 | 输入维度 d d d | 头数 h h h | 单头维度 d k / d v d_k/d_v dk/dv |
---|---|---|---|
LLAMA2-7B | 4096 | 32 | 128 |
LLAMA2-70B | 8192 | 64 | 128 |
KV Cache 与优化技术:
在自回归生成任务(逐词生成)中:
- KV Cache 机制:已生成的 Token 对应的 Key-Value 对会被缓存,避免重复计算。例如,生成第 t + 1 t+1 t+1 个 Token 时,直接复用前 t t t 个 Token 的缓存结果。
- 后续优化技术:
- MOA(Memory-Optimized Attention)
- GOA(Grouped-Query Attention)
- MLA(Multi-Layer Attention)
核心目标:在减少 KV Cache 内存占用的同时,尽可能保持模型性能。
关键优势:
- 并行化计算:多头设计允许并行处理不同语义特征。
- 灵活性:通过调整头数和维度,平衡模型容量与计算效率。
- 推理加速:KV Cache 机制显著提升长序列生成速度。
2.2 MHA的瓶颈
2.2.1 显存资源的有限性与动态分配
在大型语言模型(LLM)的推理过程中,GPU显存是核心资源瓶颈。显存主要分为两部分:
- 静态占用:存放模型参数和前向传播所需的激活值(Activation),其大小由模型结构决定,选定模型后即为固定值。
- 动态占用:存放KV Cache,其大小与输入序列长度(Context Length)呈线性增长。当处理长上下文任务(如长文本生成)时,KV Cache可能占据显存的主导地位,甚至超过单卡或多卡的总显存容量。
2.2.2 部署效率与通信带宽的制约
在实际部署中,需遵循以下原则:
- 设备内优先:尽可能在单卡或单机(多卡)内完成推理,避免跨设备部署。
- 通信带宽层级:
- 卡内带宽(如H100的SRAM与HBM间带宽达3TB/s)
- 卡间带宽(通过NVLink互联,约数百GB/s)
- 机间带宽(通过网络,通常不足100GB/s)
由于“木桶效应”,跨设备部署会导致性能受限于最低层级的通信带宽。例如,即使单卡H100的SRAM带宽极高,但对于长上下文任务,KV Cache的动态增长仍可能迫使模型跨卡部署,从而引入卡间通信延迟,显著拖慢推理速度。
2.2.3 降低KV Cache的核心目标
- 支持更长上下文:通过压缩KV Cache,可在单卡显存限制内处理更长的输入序列(如从4K Token扩展到16K Token)。
- 提升吞吐量:在相同显存容量下,减少KV Cache占用可支持更大的批量(Batch Size),从而提高单位时间的推理吞吐量。
- 降低成本:减少对多卡或多机的依赖,避免因通信开销导致的额外延迟和硬件成本。
要想更详细地了解这个问题,读者可以进一步阅读《FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness》、《A guide to LLM inference and performance》、《LLM inference speed of light》等论文或文章。
2.3 MQA
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)的键值映射实现显存优化。给定输入序列 x i x_i xi,其计算流程如下:
-
共享键值映射
所有注意力头共享相同的Key和Value矩阵:
k i = x i W K ∈ R d k , W K ∈ R d × d k k_i = x_i W_K \in \mathbb{R}^{d_k}, \quad W_K \in \mathbb{R}^{d \times d_k} ki=xiWK∈Rdk,WK∈Rd×dk
v i = x i W V ∈ R d v , W V ∈ R d × d v v_i = x_i W_V \in \mathbb{R}^{d_v}, \quad W_V \in \mathbb{R}^{d \times d_v} vi=xiWV∈Rdv,WV∈Rd×dv -
独立查询映射
每个头仍保留独立的Query映射矩阵:
q t ( s ) = x t W Q ( s ) ∈ R d k , W Q ( s ) ∈ R d × d k q^{(s)}_t = x_t W_Q^{(s)} \in \mathbb{R}^{d_k}, \quad W_Q^{(s)} \in \mathbb{R}^{d \times d_k} qt(s)=xtWQ(s)∈Rdk,WQ(s)∈Rd×dk -
注意力计算
各头的注意力输出为:
o t ( s ) = Attention ( q t ( s ) , k < t , v < t ) = ∑ i < t exp ( q t ( s ) k i ) v i ∑ i < t exp ( q t ( s ) k i ) o^{(s)}_t = \text{Attention}\left(q^{(s)}_t, k_{<t}, v_{<t}\right) = \frac{\sum_{i < t} \exp\left(q^{(s)}_t k_i\right) v_i}{\sum_{i < t} \exp\left(q^{(s)}_t k_i\right)} ot(s)=Attention(qt(s),k<t,v<t)=∑i<texp(qt(s)ki)∑i<texp(qt(s)ki)vi -
输出拼接
最终输出由多头结果拼接而成:
o t = [ o t ( 1 ) , o t ( 2 ) , ⋯ , o t ( h ) ] o_t = \left[ o^{(1)}_t, o^{(2)}_t, \cdots, o^{(h)}_t \right] ot=[ot(1),ot(2),⋯,ot(h)]
2.3.3 技术优势与局限性
✅ 核心优势:
-
显存占用大幅降低
- KV Cache减少至原MHA的 1 h \frac{1}{h} h1( h h h为头数)。例如,若原始模型有32头,MQA的KV Cache仅为原来的3.1%。
- 显存节省直接支持更长上下文输入或更大批量推理。
-
参数量优化
- Key和Value的映射矩阵从多头独立变为共享,模型参数量减少近一半。
- 节省的参数量可用于增强其他模块(如FFN/GLU),平衡模型性能。
⚠️ 潜在局限:
- 表达能力受限
- 共享Key/Value可能削弱多头捕捉多样化语义特征的能力。
- 效果补偿依赖训练
- 部分任务精度损失需通过调整训练策略(如更长时间微调)弥补。
2.3.4 典型应用模型
模型 | 说明 |
---|---|
PaLM | Google的大规模语言模型系列 |
StarCoder | 代码生成专用模型 |
Geminir | 多模态生成模型 |
2.3.5 小结
MQA通过共享键值映射,以极低的工程复杂度实现了KV Cache的显著压缩。尽管可能牺牲部分模型灵活性,但其在显存效率和部署成本上的优势使其成为LLM推理优化的关键技术之一。后续技术(如MOA、GOA)均受MQA启发,进一步探索了精度与效率的平衡。
2.4 GQA
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)的过渡方案:
- 当组数 g = h g = h g=h 时,退化为标准MHA(无压缩)。
- 当组数 g = 1 g = 1 g=1 时,退化为MQA(压缩率最高)。
- 当 1 < g < h 1 < g < h 1<g<h 时,灵活权衡显存占用与模型效果。
2.4.2 数学形式
给定输入序列 x i x_i xi,GQA 的计算流程如下:
-
分组键值映射
将 h h h 个注意力头分为 g g g 组(需满足 g ∣ h g \mid h g∣h),每组共享独立的Key和Value矩阵:
k t ( g ′ ) = x i W k ( g ′ ) ∈ R d k , W k ( g ′ ) ∈ R d × d k k_{t}^{(g')} = x_i W_k^{(g')} \in \mathbb{R}^{d_k}, \quad W_k^{(g')} \in \mathbb{R}^{d \times d_k} kt(g′)=xiWk(g′)∈Rdk,Wk(g′)∈Rd×dk
v t ( g ′ ) = x i W v ( g ′ ) ∈ R d v , W v ( g ′ ) ∈ R d × d v v_{t}^{(g')} = x_i W_v^{(g')} \in \mathbb{R}^{d_v}, \quad W_v^{(g')} \in \mathbb{R}^{d \times d_v} vt(g′)=xiWv(g′)∈Rdv,Wv(g′)∈Rd×dv
其中 g ′ = ⌈ s ⋅ g / h ⌉ g' = \lceil s \cdot g / h \rceil g′=⌈s⋅g/h⌉ 表示第 s s s 个头所属的组编号( ⌈ ⋅ ⌉ \lceil \cdot \rceil ⌈⋅⌉ 为上取整符号)。 -
独立查询映射
每个头保留独立的Query映射矩阵:
q t ( s ) = x i W q ( s ) ∈ R d k , W q ( s ) ∈ R d × d k q_t^{(s)} = x_i W_q^{(s)} \in \mathbb{R}^{d_k}, \quad W_q^{(s)} \in \mathbb{R}^{d \times d_k} qt(s)=xiWq(s)∈Rdk,Wq(s)∈Rd×dk -
注意力计算
第 s s s 个头的注意力输出为:
o t ( s ) = Attention ( q t ( s ) , k < t ( g ′ ) , v < t ( g ′ ) ) = ∑ i < t exp ( q t ( s ) k i ( g ′ ) ) v i ( g ′ ) ∑ i < t exp ( q t ( s ) k i ( g ′ ) ) o_t^{(s)} = \text{Attention}\left(q_t^{(s)}, k_{<t}^{(g')}, v_{<t}^{(g')}\right) = \frac{\sum_{i < t} \exp\left(q_t^{(s)} k_i^{(g')}\right) v_i^{(g')}}{\sum_{i < t} \exp\left(q_t^{(s)} k_i^{(g')}\right)} ot(s)=Attention(qt(s),k<t(g′),v<t(g′))=∑i<texp(qt(s)ki(g′))∑i<texp(qt(s)ki(g′))vi(g′) -
输出拼接
最终输出由多头结果拼接而成:
o t = [ o t ( 1 ) , o t ( 2 ) , ⋯ , o t ( h ) ] o_t = \left[ o_t^{(1)}, o_t^{(2)}, \cdots, o_t^{(h)} \right] ot=[ot(1),ot(2),⋯,ot(h)]
2.4.3 技术优势与局限性
✅ 核心优势
-
显存占用优化
- KV Cache 压缩至原MHA的 g h \frac{g}{h} hg。例如,当 h = 64 h=64 h=64 且 g = 8 g=8 g=8 时,显存占用仅为原来的12.5%。
- 支持更长上下文(如从4K扩展至32K Token)或更大批量推理。
-
灵活性与性能平衡
- 通过调整组数 g g g,在显存压缩与模型效果间灵活权衡。
- 相比MQA,保留更多语义多样性,任务精度损失更小。
-
硬件部署友好
- 组数 g g g 常与单机GPU卡数对齐(如 g = 8 g=8 g=8 对应8卡部署),减少跨卡通信开销。
⚠️ 潜在局限
- 实现复杂度增加
- 分组逻辑需额外计算资源管理,可能引入工程复杂度。
- 训练依赖
- 需针对性调整训练策略(如分组初始化)以充分发挥性能。
2.4.4 典型应用模型
模型 | 说明 | 组数 g g g |
---|---|---|
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之间建立了可调节的显存优化路径。其核心价值在于:
- 显存效率:显著降低长上下文任务的部署门槛。
- 硬件适配:组数与GPU卡数对齐,最大化利用卡内带宽,减少通信延迟。
- 效果保障:相比MQA,更适用于对语义多样性要求较高的任务。
GQA已成为当前主流大模型(如LLAMA系列)的标配技术,并与MOA、MLA等优化方案共同推动LLM的高效落地。
2.5 MLA
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通过两步操作实现显存优化:
-
训练阶段:
- 输入向量 a i a_i ai 经过低秩投影生成中间变量 c i c_i ci:
c i = a i W c ∈ R d c , W c ∈ R d × d c c_i = a_i W_c \in \mathbb{R}^{d_c}, \quad W_c \in \mathbb{R}^{d \times d_c} ci=aiWc∈Rdc,Wc∈Rd×dc - 对 c i c_i ci 进行多组线性变换生成独立的Key和Value:
k ( s ) = c i W k ( s ) , v ( s ) = c i W v ( s ) k^{(s)} = c_i W_k^{(s)}, \quad v^{(s)} = c_i W_v^{(s)} k(s)=ciWk(s),v(s)=ciWv(s)
- 输入向量 a i a_i ai 经过低秩投影生成中间变量 c i c_i ci:
-
推理阶段:
- 利用矩阵乘法的结合律,将Key和Value的投影矩阵合并到Query的映射中:
Q ( s ) K ( s ) ⊤ = ( a i W q ( s ) ) ( c i W k ( s ) ) ⊤ = a i ( W q ( s ) W k ( s ) ⊤ ) c i ⊤ Q^{(s)} K^{(s)\top} = (a_i W_q^{(s)}) (c_i W_k^{(s)})^\top = a_i (W_q^{(s)} W_k^{(s)\top}) c_i^\top Q(s)K(s)⊤=(aiWq(s))(ciWk(s))⊤=ai(Wq(s)Wk(s)⊤)ci⊤ - 通过恒等变换,仅需缓存低秩中间变量 c i c_i ci,而非完整的Key/Value,显存占用降至GQA级别。
- 利用矩阵乘法的结合律,将Key和Value的投影矩阵合并到Query的映射中:
2.5.2.2 兼容RoPE的混合设计
为解决RoPE(旋转位置编码)与MLA的冲突,MLA采用分维度混合编码:
- 低秩维度( d c d_c dc):不加RoPE,用于保留恒等变换能力。
- 高秩维度( d r d_r dr):新增RoPE编码,所有注意力头共享Key的RoPE维度。
公式示例:
Q ( s ) = [ a i W q 1 ( s ) , a i W q 2 ( s ) R i ] , K ( s ) = [ c i W k ( s ) , c i W k r R i ] Q^{(s)} = [a_i W_{q1}^{(s)}, a_i W_{q2}^{(s)} R_i], \quad K^{(s)} = [c_i W_k^{(s)}, c_i W_{kr} R_i] Q(s)=[aiWq1(s),aiWq2(s)Ri],K(s)=[ciWk(s),ciWkrRi]
其中 R i R_i Ri 为RoPE矩阵, d r d_r dr 通常设为64(总维度 d c + d r = 512 + 64 d_c + d_r = 512 + 64 dc+dr=512+64)。
2.5.3 技术优势与局限性
✅ 核心优势
-
显存效率
- KV Cache大小与GQA相同(仅需缓存 c i c_i ci),远低于MHA。
- 支持更长的上下文输入(如DeepSeek-V2支持128K Token)。
-
模型能力增强
- 通过低秩投影矩阵学习更复杂的键值映射关系,弥补GQA的表达能力损失。
-
硬件友好性
- Generation阶段(逐词生成)的带宽压力显著降低,推理速度提升。
⚠️ 潜在局限
- 计算量增加
- Prefill阶段(首Token生成)的计算复杂度略高于GQA。
- 工程复杂度
- 需额外实现分维度RoPE编码与矩阵合并逻辑。
2.5.4 典型应用:DeepSeek-V2
参数 | 值 | 说明 |
---|---|---|
隐藏层维度 | 5120 | 模型容量基础维度 |
低秩维度 d c d_c dc | 512 | 控制KV Cache大小的核心参数 |
RoPE维度 d r d_r dr | 64 | 新增位置编码维度 |
头数 h h h | 128 | 通过增加头数提升模型能力 |
2.5.5 与GQA/MQA对比
特性 | MQA | GQA | MLA |
---|---|---|---|
KV Cache压缩率 | 1 / h 1/h 1/h | g / h g/h g/h | d c / d d_c/d dc/d(≈1/10) |
表达能力 | 最低 | 中等 | 最高 |
兼容RoPE | 直接兼容 | 直接兼容 | 需混合维度设计 |
典型应用 | PaLM, StarCoder | LLAMA2/3, ChatGLM | DeepSeek-V2 |
2.5.6 小结
MLA通过低秩投影与分维度RoPE设计,在以下方面实现突破:
- 显存效率:保持GQA级别的KV Cache压缩率(约原MHA的1/10)。
- 模型能力:通过可学习的投影矩阵增强语义多样性,接近MHA效果。
- 硬件适配:优化Generation阶段的带宽瓶颈,提升长序列推理速度。
MLA代表了注意力机制从“粗暴压缩”向“精细化权衡”的演进方向,为LLM的高效部署提供了新的技术路径。
2.6 旋转位置编码(RoPE)在注意力机制中的应用
2.6.1 核心概念
旋转位置编码(Rotary Position Embedding, RoPE)是一种将绝对位置信息融入注意力机制的技术。其核心思想是通过旋转矩阵对查询(Query)和键(Key)进行位置相关的变换,使模型能够隐式学习相对位置关系。相比于传统的位置编码方法,RoPE无需显式添加位置偏置,直接通过矩阵运算实现位置感知。
2.6.2 数学形式对比
- 不带旋转位置编码
对于第 i i i 个 Token 的查询 q i q_i qi 和第 j j j 个 Token 的键 k j k_j kj,其注意力得分计算为:
q i k j ⊤ = h i W Q ( c j K V W U K ) ⊤ = h i W Q W U K ⊤ c j K V ⊤ q_i k_j^\top = \mathbf{h}_i W^Q \left(\mathbf{c}_j^{KV} W^{UK}\right)^\top = \mathbf{h}_i W^Q W^{UK\top} \mathbf{c}_j^{KV\top} qikj⊤=hiWQ(cjKVWUK)⊤=hiWQWUK⊤cjKV⊤
其中:
-
h i \mathbf{h}_i hi 为第 i i i 个 Token 的隐藏状态
-
c j K V \mathbf{c}_j^{KV} cjKV 为第 j j j 个 Token 的键值中间表示
-
W Q , W U K W^Q, W^{UK} WQ,WUK 为线性投影矩阵
此时位置信息未显式编码,模型需通过数据学习隐含的位置关系。
- 带旋转位置编码(RoPE)
引入旋转矩阵 R i R_i Ri 和 R j R_j Rj(与位置 i , j i,j i,j 相关),查询和键的计算变为:
q i R i ( k j R j ) ⊤ = h i W Q R i ( c j K V W U K R j ) ⊤ = h i W Q R i R j ⊤ W U K ⊤ c j K V ⊤ q_i R_i (k_j R_j)^\top = \mathbf{h}_i W^Q R_i \left(\mathbf{c}_j^{KV} W^{UK} R_j\right)^\top = \mathbf{h}_i W^Q R_i R_j^\top W^{UK\top} \mathbf{c}_j^{KV\top} qiRi(kjRj)⊤=hiWQRi(cjKVWUKRj)⊤=hiWQRiRj⊤WUK⊤cjKV⊤
关键特性:
- 位置相关性:旋转矩阵 R i R_i Ri 和 R j R_j Rj 与 Token 的绝对位置 i , j i,j i,j 绑定。
- 不可合并性:由于 R i R j ⊤ R_i R_j^\top RiRj⊤ 无法简化为与位置无关的固定矩阵,位置信息被显式保留。
- 相对位置编码:通过 R i R j ⊤ R_i R_j^\top RiRj⊤ 的旋转差异,模型可隐式捕捉 i i i 与 j j j 的相对位置关系。
RoPE破坏了推理时矩阵提前融合的方案,DeepSeek最终想到的解决方案是:给Q、K向量增加一些维度来表示位置信息。
2.6.3 小结
RoPE通过旋转矩阵将位置信息编码到注意力机制中,实现了对相对位置关系的隐式建模。其设计平衡了计算效率与表达能力,已成为当前主流大模型(如LLAMA、DeepSeek)的标配技术。后续改进方向可能包括:
- 优化旋转矩阵的计算开销
- 增强对超长序列的泛化能力
三、DeepSeek MLA推导原理
通过 W DKV W^{\text{DKV}} WDKV (D是Down的意思,降维压缩) 参数矩阵,比如之前是6个维度,经过 W DKV W^{\text{DKV}} WDKV 压缩到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,通过 W DKV W^{\text{DKV}} WDKV 矩阵进行压缩,然后生成压缩的K、V的隐特征 C KV C^{\text{KV}} CKV ,将 C KV C^{\text{KV}} CKV 存储在K-V Cache。K、V向量通过将压缩的隐特征 C KV C^{\text{KV}} CKV与K向量的解压参数矩阵 W UK W^{\text{UK}} WUK进行相乘,V向量同理。得到当前token可用于注意力计算的K、V向量。
对于之前的token,从K-V Cache里取出压缩的隐特征 C KV C^{\text{KV}} CKV,然后经过K、V向量的解压参数矩阵 W UK W^{\text{UK}} WUK、 W UV W^{\text{UV}} WUV投影,得到可以计算的K、V。
看右面那个推导公式可以发现,对K进行解压操作的矩阵 W UK T W^{\text{UK}^{\text{T}}} WUKT可以和 W Q W^{\text{Q}} WQ矩阵进行融合,这个融合可以在推理之前计算好。这样我们通过矩阵计算的结合律,就可以规避MLA引入的推理时解压隐特征带来的额外计算。
MLA除了对K、V进行了压缩外,还对Q向量进行了压缩,这样的好处是,降低了参数量而且可以提升模型性能。通过 W UQ W^{\text{UQ}} WUQ对Q向量进行了解压,但是Q的隐向量并不需要缓存,只需要换成共用的K-V压缩的隐向量即可。
好了,现在似乎所有问题都解决了。K-V Cache减少了,模型表现还提升了。但是好事多磨,刚才我们一直没有考虑旋转位置编码,也就是上面我介绍的2.6的概念。
我们知道,旋转位置编码需要对每一层的Q、K向量进行旋转,而且,根据token位置的不同,旋转矩阵的参数也不同,这里以第i个token的q和第j个token的k的点积为例:
如果不考虑旋转位置编码,则是我们上面讲的对K进行压缩的矩阵可以和 W Q W^{\text{Q}} WQ 矩阵进行融合成 W QUK W^{\text{QUK}} WQUK 。但是如果考虑旋转位置编码,因为不同位置的旋转矩阵也不同,这里我们用 R i R_i Ri和 R j R_j Rj来表示第i个和第j个token位置的旋转矩阵。可以发现如果增加了旋转矩阵,i,j和token位置相关,无法合并。所以它破坏了之前推理时矩阵提前融合的方案。
不过DeepSeek给出了这个场景的解决方案,就是给Q、K向量额外增加一些维度来表示位置信息。对于Q向量,通过 W QR W^{\text{QR}} WQR为每一个头生成一些原始特征。(其中Q代表Q向量,R代表旋转位置编码),然后通过旋转位置编码增加位置信息生成带位置信息的特征拼接到每个带注意力头的Q向量。对于K向量,通过 W KR W^{\text{KR}} WKR矩阵生成一个头,共享的特征,然后通过旋转位置编码增加位置信息复制到多个头共享位置信息。
不带旋转位置编码部分与旋转位置编码部分进行点积,这样就得到了即兼容旋转位置编码压缩K-V Cache的方案,同时也可以提升模型的性能。
最后,我们来回顾下MLA论文里的架构图。首先是输入token特征h,通过它生成压缩后的KV特征,然后压缩后的KV特征解压成多头的k、v特征;从输入h生成多头共享的带旋转位置编码的 k R k^{\text{R}} kR,再把 k R k^{\text{R}} kR和 k C k^{\text{C}} kC进行合并形成最终带位置编码的k向量;再看q向量这边,解压生成多头的 c Q c^{\text{Q}} cQ向量,然后从压缩的 q C q^{\text{C}} qC向量生成多头的带位置编码的 q R q^{\text{R}} qR,然后 q R q^{\text{R}} qR与 q C q^{\text{C}} qC进行合并生成最终带位置编码的q向量。最后q、k、v向量进行多头注意力计算(其中图中带阴影部分的需要缓存)。
相关文章:
DeepSeek技术架构解析:MLA多头潜在注意力
一、前言 我们上一篇已经讲了 DeepSeek技术架构解析:MoE混合专家模型 这一篇我们来说一说DeepSeek的创新之一:MLA多头潜在注意力。 MLA主要通过优化KV-cache来减少显存占用,从而提升推理性能。我们知道这个结论之前,老周带大家…...
02.02、返回倒数第 k 个节点
02.02、[简单] 返回倒数第 k 个节点 1、题目描述 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 2、题解思路 本题的关键在于使用双指针法,通过两个指针(fast 和 slow),让 fast 指针比 slow 指针…...
剑指Offer(数据结构与算法面试题精讲)C++版——day2
剑指Offer(数据结构与算法面试题精讲)C++版——day2 题目一:只出现一次的数据题目二:单词长度的最大乘积题目三:排序数组中的两个数字之和题目一:只出现一次的数据 一种很简单的思路是,使用数组存储出现过的元素,比如如果0出现过,那么arr[0]=1,但是有个问题,题目中没…...
nginx的自动跳转https
mkdir /usr/local/nginx/certs/ 创建一个目录 然后用openssl生成证书 编辑nginx的配置文件 自动跳转成功 做一个优化,如果访问的时候后面加了其他的uri也一起自动跳转了...
正则表达式(Regular Expression,简称 Regex)
一、5w2h(七问法)分析正则表达式 是的,5W2H 完全可以应用于研究 正则表达式(Regular Expressions)。通过回答 5W2H 的七个问题,我们可以全面理解正则表达式的定义、用途、使用方法、适用场景等,…...
Windows下在IntelliJ IDEA 使用 Git 拉取、提交脚本出现换行符问题
文章目录 背景问题拉取代码时提交代码时 问题原因解决方案1.全局配置 Git 的换行符处理策略2.在 IntelliJ IDEA 中配置换行符3.使用 .gitattributes 文件 背景 在 Windows 系统下使用 IntelliJ IDEA 进行 Git 操作(如拉取和提交脚本)时,经常…...
Python 实现的运筹优化系统代码详解(整数规划问题)
一、引言 在数学建模的广袤领域里,整数规划问题占据着极为重要的地位。它广泛应用于工业生产、资源分配、项目管理等诸多实际场景,旨在寻求在一系列约束条件下,使目标函数达到最优(最大或最小)且决策变量取整数值的解决…...
conda安装python 遇到 pip is configured with locations that require TLS/SSL问题本质解决方案
以前写了一篇文章,不过不是专门为了解决这个问题的,但是不能访问pip install 不能安装来自https 协议的包问题几乎每次都出现,之前解决方案只是治标不治本 https://blog.csdn.net/wangsenling/article/details/130194456https…...
嘿嘿,好久不见
2025年4月2日,6~22℃,一般 遇见的事:参加了曲靖的事业单位D类考试。 感受到的情绪:考场一半的人都没有到位,这路上你到了可能都会受到眷顾。 反思:这路上很难,总有人会提前放弃,不…...
virsh 的工作原理
virsh是用于管理虚拟化环境中的客户机和Hypervisor的命令行工具。它基于libvirt管理API构建,与virt-manager等工具类似,都是通过调用libvirt API来实现虚拟化的管理。virsh是完全在命令行文本模式下运行的用户态工具,因此它是系统管理员通过脚…...
Qt实现HTTP GET/POST/PUT/DELETE请求
引言 在现代应用程序开发中,HTTP请求是与服务器交互的核心方式。Qt作为跨平台的C框架,提供了强大的网络模块(QNetworkAccessManager),支持GET、POST、PUT、DELETE等HTTP方法。本文将手把手教你如何用Qt实现这些请求&a…...
(041)05-01-自考数据结构(20331)树与二叉树大题总结
实际考试中,计算题约占40%,推理题约占30%,算法设计题约占30%。建议重点练习遍历序列相关的递归分治解法, 知识拓扑 知识点介绍 一、计算题类型与解法 1. 结点数量计算 题型示例: 已知一棵完全二叉树的第6层有8个叶子结点,求该二叉树最多有多少个结点? 解法步骤: 完…...
WPS JS宏编程教程(从基础到进阶)-- 第三部分:JS宏编程语言开发基础
第三部分:JS宏编程语言开发基础 @[TOC](第三部分:JS宏编程语言开发基础)**第三部分:JS宏编程语言开发基础**1. 变量与数据类型**变量声明:三种方式****示例代码****数据类型判断****实战:动态处理单元格类型**2. 运算符全解析**算术运算符****易错点:字符串拼接 vs 数值相…...
迈向云原生:理想汽车 OLAP 引擎变革之路
在如今数据驱动的时代,高效的分析引擎对企业至关重要。理想汽车作为智能电动汽车的领军企业,面临着海量数据分析的挑战。本文将展开介绍理想汽车 OLAP 引擎从存算一体向云原生架构演进的变革历程,以及在此过程中面临的挑战,以及是…...
Spark,HDFS客户端操作
hadoop客户端环境准备 找到资料包路径下的Windows依赖文件夹,拷贝hadoop-3.1.0到非中文路径(比如d:\hadoop-3.1.0) ① 打开环境变量 ② 在下方系统变量中新建HADOOP_HOME环境变量,值就是保存hadoop的目录。 效果如下: ③ 配置Path…...
QuecPython 的 VScode 环境搭建和使用教程
为方便开发者使用 VSCode 开发 QuecPython,QuecPython 团队特推出了名为 QuecPython 的 VSCode 插件。 插件目前支持的功能有: 固件烧录REPL 命令交互代码补全文件传输文件系统目录树运行指定脚本文件 目前支持所有QUecPython系列模组。 插件安装 点…...
Linux Vim 编辑器的使用
Vim 编辑器的使用 一、安装及介绍二、基础操作三、高级功能四、配置与插件 一、安装及介绍 Vim是一款强大且高度可定制的文本编辑器,相当于 Windows 中的记事本。具备命令、插入、底行等多种模式。它可通过简单的键盘命令实现高效的文本编辑、查找替换、分屏操作等…...
Java 基础-28- 多态 — 多态下的类型转换问题
在 Java 中,多态(Polymorphism)是面向对象编程的核心概念之一。多态允许不同类型的对象通过相同的方法接口进行操作,而实际调用的行为取决于对象的实际类型。虽然多态提供了极大的灵活性,但在多态的使用过程中…...
机器学习中的自监督学习概述与实现过程
概述 机器学习中有四种主要学习方式: 监督式学习 (Supervised Learning):这种学习方式通过使用带有标签的数据集进行训练,目的是使机器能够学习到数据之间的关联性,并能够对新的、未见过的数据做出预测或分类。应用领域包括语音识…...
AI Agent开发大全第十四课-零售智能导购智能体的RAG开发理论部分
开篇 经过前面的一些课程,我们手上已经积累了各种LLM的API调用、向量库的建立和使用、embedding算法的意义和基本使用。 这已经为我们具备了开发一个基本的问答类RAG的开发必需要素了。下面我们会来讲一个基本问答类场景的RAG,零售中的“智能导购”场景。 智能导购 大家先…...
Git相关笔记1 - 本地文件上传远程仓库
Git相关笔记 目录 Git相关笔记Git上传相关文件第一步创建一个仓库:第二步本地创建空文件夹:第三步开始在gitbush上传文件:解决外网网络连接的问题:中文文件的编码问题:参考资料 Git上传相关文件 第一步创建一个仓库&a…...
机器学习算法
目录 行向量与列向量 信息论 Logistic回归 支持向量机SVM 核函数: 决策树 Decision Tree CART决策树 ID3 决策树 C4.5 决策树 决策树的过拟合问题 回归树 ***仅做复习需要,若侵权请及时联系我 行向量与列向量 行向量:是一个横…...
学习记录706@微信小程序+springboot项目 真机测试 WebSocket错误: {errMsg: Invalid HTTP status.}连接不上
我微信小程序springboot项目 真机测试 websocket 总是报错 WebSocket错误: {errMsg: Invalid HTTP status.},总是连接不上,但是开发者工具测试就没有问题。 最后解决方案是编码token,之前是没有编码直接拼接的,原因不详。 consol…...
SSH服务
一、准备 #请说明以下服务对应的端口号或者端口对应的服务 ssh 22 telnet 23 http 80 https 443 ftp 20 21 RDP 3389 mysql 3306 redis 6379 zabbix 10050 10051 elasticsear…...
GitHub上免费学习工具的精选汇总
以下是GitHub上免费学习工具的精选汇总,涵盖编程语言、开发框架、数据科学、面试准备等多个方向,结合工具的功能特点、社区活跃度及适用场景进行分类推荐: 一、编程语言与开发框架 Web Developer Roadmap 简介:为开发者提供全栈学…...
2025.4.1总结
今天看了一部网上很火的记录片《God,my brother》,中文名为《上帝不如我兄弟》,简述的是一个自媒体博主杜克遇到孟加拉一哥(车夫),最终一哥在杜克的帮助下,成功实现阶级跨越,而杜克也因此成为百…...
MySQL日志管理
目录 查询日志 慢查询日志 错误日志 二进制日志 其他功能 查询日志 查询日志用来记录所有查询语句的信息,由于开启此日志会占用大量内存,所以一般不会开启 查看查询日志是否开启 开启查询日志 慢查询日志 用于性能的调优,查看执行速度超…...
vscode中的【粘滞滚动】的基本概念和作用,关闭了以后如何开启
1、粘滞滚动的基本概念和作用 VSCode中的“粘滞”功能主要是指编辑器在滚动时的一种特殊效果,使得编辑器在滚动到某个位置时会“粘”在那里,而不是平滑滚动到底部或顶部。 粘滞滚动的基本概念和作用 粘滞滚动功能可以让用户在滚动时更直观地看到当前…...
我用Axure画了一个富文本编辑器,还带交互
最近尝试用Axure RP复刻了一个富文本编辑器,不仅完整还原了工具栏的各类功能,还通过交互设计实现了接近真实编辑器操作体验。整个设计过程聚焦功能还原与交互流畅性,最终成果令人惊喜。 编辑器采用经典的三区布局:顶部工具栏集成了…...
Mysql之Redo log(Red log of MySQL)
Mysql之Redo log 数据库事务的4个特性之一的持久性是数据库保证数据一致性的关键,mysql为了确保事务在系统崩溃后也能恢复,引入了redo log 重做日志这一机制。 什么是redo log 持久性指的是一旦事务提交数据就要永久的保存到数据库中,不能…...
Spring Cloud ReactorServiceInstanceLoadBalancer 自定义负载均衡
自定义负载均衡类 import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.ObjectProvider; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client…...
汽车诊断开发入门以及OBD检测
一、OBD 概述 定义:OBD 即 On - Board Diagnostics,车载自动诊断系统。它能实时监测车辆各项系统和部件状态,以此帮助诊断故障并预警。设计初衷与发展:最初设计目的是控制汽车尾气排放,确保符合环境标准。随着技术进步…...
高速PCB设计过孔不添乱,乐趣少一半
高速先生成员--姜杰 高速先生最近写了不少介绍高速信号仿真的文章(文章链接汇总,看这篇就够了《聊聊100G信号的仿真》)。雷豹逐一研读后感觉获益匪浅,甚至一度觉得自己强的可怕,不过,在得知即将负责一个11…...
人工智能在医疗领域的前沿应用与挑战
在当今数字化时代,人工智能(AI)技术正以前所未有的速度改变着我们的生活,其中医疗领域无疑是受益最为显著的行业之一。从疾病诊断、治疗方案制定到患者护理,AI的应用不仅提高了医疗服务的效率和质量,还为医…...
怎么实现实时无延迟的体育电竞动画直播
要实现真正的实时无延迟动画直播,需要考虑以下几个关键方面: 一、技术方案选择 1.WebRTC技术 点对点(P2P)传输协议,延迟可低至100-500ms 适用于互动性强的应用场景 开源且被主流浏览器支持 2.低延迟HLS/CMAF 可将延迟控制在1-3秒 兼容…...
VLAN、QinQ、VXLAN的区别
1、技术本质与封装方式 技术OSI层级封装原理标识位长度拓展性VLAN数据链路层L2在以太网帧头插入802.1Q Tag(单层VLAN标签)12位(4094个)有限,仅支持单一网络域内隔离QinQ数据链路层L2在原始VLAN标签外再封装一层802.1Q…...
使用大语言模型进行Python图表可视化
Python使用matplotlib进行可视化一直有2个问题,一是代码繁琐,二是默认模板比较丑。因此发展出seaborn等在matplotlib上二次开发,以更少的代码进行画图的和美化的库,但是这也带来了定制化不足的问题。在大模型时代,这个…...
Mac电脑(M芯片)安装ubuntu22.04
一、下载VMware虚拟机 VMware官网下载VMware Fusion 二、下载ubuntu镜像 M系列的Mac电脑要下载arm架构的镜像 方法一:官网下载 方法二:清华源下载 清华源镜像 点击获取下载链接 选择Ubuntu,下载22.04.5(arm64,Server) 三、创建虚拟机 …...
【linux】管理磁盘——RAID10(含备份)与逻辑卷管理
RAID概念 当今CPU性能每年可提升30%-50%但硬盘仅提升7%硬盘在服务器中需要持续、频繁、大量的I/O操作,故障机率较大,则需要对硬盘进行技术改造,提 升读写性能、可靠性1988年,加利福尼亚大学伯克利分校首次提出并定义了RAID技术概…...
Day3 蓝桥杯省赛冲刺精炼刷题 —— 排序算法与贪心思维
一、0实现插入排序 - 蓝桥云课 算法代码: #include <stdio.h>const int N 10000; // 定义数组的最大大小int arr[N 10], temp[N 10]; // arr为待排序的数组,temp为辅助数组// 合并操作:将两个已经排好序的子数组合并为一个有序数…...
查看iphone手机的使用记录-克魔实战
如何查看 iOS 设备近期的详细使用数据 在日常使用手机时,了解设备的运行状态和各项硬件的使用情况可以帮助分析耗电情况、优化应用使用方式。iOS 设备提供了一些数据记录,能够显示应用的启动和关闭时间、后台运行情况,以及应用在使用过程中调…...
Tcp——客户端服务器
Tcp——客户端服务器 目录 一、基本概念 二、代码 2.1 ser服务器 2.2 cil客户端 一、基本概念 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP/IP模型中,TCP位于IP层之上,应用层之下&#x…...
《HarmonyOS Next开发进阶:打造功能完备的Todo应用华章》
章节 6:日期选择器与日期处理 目标 学习如何使用DatePicker组件。理解日期格式化和日期计算。 内容 日期选择器基础 使用DatePicker组件。处理日期选择事件。 日期格式化 格式化日期为友好的文本。 日期计算 判断日期是否过期或即将到期。 代码示例 Entry Com…...
化学方程式配平 第33次CCF-CSP计算机软件能力认证
很经典的大模拟题目 但是还不算难 大模拟题最需要注意的就是细节 写代码一定要考虑全面 并且要细心多debug 多打断点STL库的熟练使用 istringstream真的处理字符串非常好用 注意解耦合思想 这样改代码debug更加清晰 https://www.acwing.com/problem/content/5724/ #includ…...
数据结构【链表】
链表 1.单链表1.1概念与结构1.1.1结点1.1.2链表的性质1.1.3链表的打印 1.2实现单链表1.3链表的分类 2.双向链表2.1概念与结构2.2实现双链表 3.顺序表与链表的分析 1.单链表 1.1概念与结构 概念:链表是⼀种物理存储结构上非连续、非顺序的存储结构,数据…...
AIP-210 Unicode
编号210原文链接AIP-210: Unicode状态批准创建日期2018-06-28更新日期2018-06-28 API在处理(解释、限制长度、计费)字符串值和字符串编码时,应当保持一致,范围从理解上的歧义(如域“限制为1024个字符”)到…...
WiFi(无线局域网)技术的多种工作模式
WiFi(无线局域网)技术支持多种工作模式,以满足不同的网络需求和应用场景。以下是主要的WiFi工作模式及其详细说明: 1. 基础设施模式(Infrastructure Mode) [无线接入点 (AP)]/ | \ [客户端…...
游戏引擎学习第198天
回顾并为今天的内容设定 今天我们有一些代码需要处理。昨天我们进行了一些调试界面的整合工作,之前我们做了一些临时的、粗糙的操作,将一些东西读进来并放到调试界面中。今天,我们并不打算进行大规模的工作,更多的是对之前的代码…...
git命令简陋版本
git push git pull 临时仓库暂存区 ##############创建提交################ git init #创建git地址 git config --global user.name "***YQ1007" git config --global user.email "***gmail.com" git remote…...
MySQL 进阶 面经级
会用数据库,找大厂工作是远远不够的。 本人2025美团暑期AI面试好几个MySQL场景问题不会答,已脏面评。遂在此整理学习! 文章目录 美团AI面1.数据库分片sharding的概念,它有什么优势和挑战?优势Sharding 挑战 2. 分库分表的常见策…...