DeepSeek-V3 的核心技术创新
flyfish
DeepSeek-V3 的核心技术创新主要体现在其架构设计和训练目标上,通过 多头潜在注意力(MLA)、DeepSeekMoE 架构、无辅助损失的负载均衡策略 和 多 Token 预测训练目标(MTP)
1. 多头潜在注意力(Multi-head Latent Attention, MLA)
MLA 是一种改进的注意力机制,旨在减少推理时的显存占用并提升效率。其核心原理是通过 低秩压缩技术 对键(Key)和值(Value)进行联合压缩:
- KV 缓存优化:传统 Transformer 的 KV 缓存需存储所有历史键值对,显存占用随序列长度线性增长。MLA 通过低秩矩阵将键值投影到更低维度的潜在空间,减少缓存数据量。例如,键值压缩维度从 7168 降至 512,显存占用减少约 75%。
- 计算效率提升:MLA 在保持与标准多头注意力(MHA)相似性能的同时,减少了推理时的计算量,尤其适合长序列任务(如 128K 上下文窗口)。
2. DeepSeekMoE 架构
DeepSeekMoE 是一种混合专家(Mixture-of-Experts, MoE)架构,结合了共享专家与路由专家,实现了细粒度的计算分配:
- 专家分配策略:每个 MoE 层包含 1 个共享专家 和 256 个路由专家,每个 Token 激活 8 个专家。共享专家处理通用特征,路由专家专注于特定模式,提升模型表达能力。
- 经济高效的训练:通过动态路由策略,仅激活部分专家(如每个 Token 激活 37B 参数),大幅降低计算成本,使 671B 参数的模型训练成本仅为同类模型的 1/14。
3. 无辅助损失的负载均衡策略
传统 MoE 模型依赖辅助损失函数强制均衡专家负载,但可能导致模型性能下降。DeepSeek-V3 创新性地通过动态调整实现负载均衡:
- 动态偏置调整:在路由过程中引入可学习的偏置项,根据专家负载动态调整路由决策。例如,当某专家负载过高时,降低其亲和分数,使 Token 更倾向于负载较低的专家。
- 序列级均衡:额外引入序列级负载均衡损失,避免单个序列内的极端不平衡。实验表明,该策略在多数基准测试中优于传统方法,且不损害模型性能。
4. 多 Token 预测训练目标(MTP)
MTP 扩展了传统语言模型的单 Token 预测目标,要求模型同时预测多个未来 Token:
- 训练目标设计:每个位置预测未来多个 Token(如 4 个),通过多个顺序模块实现因果链的完整性。例如,第 (i) 个模块基于当前 Token 预测第 (i+1) 至 (i+n) 个 Token。
- 推理加速:MTP 模块支持 推测解码(Speculative Decoding),通过并行预测多个 Token 减少生成步骤,使推理速度提升 1.8 倍。
- 性能提升:MTP 提高了训练信号的密度,增强模型对长程依赖的捕捉能力,尤其在代码和数学任务中表现显著。
技术协同与综合效果
这些技术通过 架构与训练的深度协同 实现突破:
- FP8 混合精度训练:结合低精度计算(FP8)与高精度累加(FP32),在保持数值稳定性的同时降低显存占用。
- 并行训练优化:采用 16 路流水线并行、64 路专家并行和 ZeRO-1 数据并行,结合 DualPipe 算法减少通信开销,提升训练效率。
- 长上下文扩展:通过 YaRN 技术分阶段扩展上下文至 128K,在长文本任务中保持高性能。
FIM策略
FIM策略是指Prefix-Suffix-Middle(PSM)框架下的数据构造策略,全称为Fill-in-Middle策略。该策略应用于DeepSeek-V3模型的预训练过程,目的是让模型能够基于上下文线索准确预测中间文本,同时不影响其下一个令牌的预测能力。
- 具体内容:在数据构造时,FIM策略将数据结构化表示为<|fim_begin|> 𝑓pre<|fim_hole|> 𝑓suf<|fim_end|> 𝑓middle<|eos_token|>的形式。在文档层面的预打包过程中,按照0.1的比例应用该策略 ,即10%的数据采用这种结构进行处理。在这个结构中, 𝑓pre和 𝑓suf分别表示前缀和后缀文本, 𝑓middle表示需要模型根据上下文预测的中间文本。
- 应用效果:在DeepSeekCoder-V2的训练过程中,就观察到FIM策略不会损害模型的下一个令牌预测能力,还能使模型依据上下文准确预测中间文本。DeepSeek-V3沿用该策略后,在预训练阶段取得了良好的效果,有助于提升模型对文本的理解和生成能力,从而在后续的任务中表现更优。
无辅助损失的负载均衡策略
无辅助损失的负载均衡策略是DeepSeek-V3为解决MoE模型负载不均衡问题提出的创新方法,通过动态调整专家路由偏置平衡负载,避免传统辅助损失带来的性能下降。
- 提出背景:在MoE模型里,若专家负载不均衡,会出现路由崩溃,在专家并行场景下降低计算效率。传统方法借助辅助损失来平衡负载,但辅助损失过大会损害模型性能。
- 实现方式:为每个专家引入可学习的偏置项 b i b_{i} bi ,把它加到token与专家的亲和度得分 s i , t s_{i,t} si,t上,以此确定Top-K路由 。即 g i , t ′ = { s i , t , s i , t + b i ∈ T o p k ( { s j , t + b j ∣ 1 ≤ j ≤ N r } , K r ) 0 , o t h e r w i s e g_{i, t}'=\begin{cases}s_{i, t}, & s_{i, t}+b_{i} \in Topk(\{s_{j, t}+b_{j} | 1 \leq j \leq N_{r}\}, K_{r})\\0, & otherwise\end{cases} gi,t′={si,t,0,si,t+bi∈Topk({sj,t+bj∣1≤j≤Nr},Kr)otherwise。训练时,持续监控每个训练步骤中整个批次的专家负载。若专家负载过高,就减小其偏置项;若负载过低,则增大偏置项。偏置项仅用于路由,门控值仍由原始亲和度得分计算。
- 优势效果:避免了因使用辅助损失而导致的性能下降,在保持负载均衡的同时,提升了模型性能。实验显示,相比仅用辅助损失平衡负载的模型,该策略能让专家负载更均匀,训练效率和推理性能也得到提高 。如在不同规模模型的实验中,采用无辅助损失负载均衡策略的模型在多数评估基准上表现更优。
Multi - Token Prediction
MTP指Multi - Token Prediction,是一种扩展预测范围的训练目标和技术,能提升模型性能并加速推理。
- 定义:MTP是一种在自然语言处理(NLP)任务中,扩展模型预测范围的训练目标和技术。与传统的单一token预测不同,它让模型在训练时同时预测多个未来的token,在一个时间步上,模型可以预测未来2个、3个或更多token,通过一次前向计算得到多个token的概率分布。
- 原理
- 提高上下文感知能力:传统单token预测只关注当前上下文与下一个token的关系,而MTP使模型必须从更大范围的上下文中提取信息,对语言模式的学习更加全面,生成的句子更流畅且符合语义逻辑。
- 增加训练信号的密度:单token预测每个时间步只提供一个训练信号,MTP在每个时间步上提供多个token的训练信号,使模型在相同训练迭代下能更快地学到语言结构,提高训练效率。
- 改进序列建模的效率:MTP的目标更接近实际生成任务,能让模型更好地学习到多token的联合分布,而传统单token预测可能导致模型局限于逐步生成,MTP可提高建模性能。
- 运作机制
- MTP模块:使用D个顺序模块来预测D个额外token。以第k个MTP模块为例,它由共享嵌入层Emb、共享输出头OutHead、一个Transformer块 T R M k ( ⋅ ) TRM_{k}(\cdot) TRMk(⋅)和投影矩阵 M k ∈ R d × 2 d M_{k} \in \mathbb{R}^{d ×2 d} Mk∈Rd×2d组成。对于第i个输入token t i t_{i} ti,在第k个预测深度,先将第i个token在第k - 1深度的表示 h i k − 1 h_{i}^{k - 1} hik−1与第(i + k)个token的嵌入 E m b ( t i + k ) Emb(t_{i + k}) Emb(ti+k)通过线性投影组合,得到 h i ′ k h_{i}^{\prime k} hi′k , h i ′ k h_{i}^{\prime k} hi′k作为第k深度Transformer块的输入,产生当前深度的输出表示 h i k h_{i}^{k} hik,最后共享输出头以 h i k h_{i}^{k} hik为输入,计算第k个额外预测token的概率分布 P i + 1 + k k P_{i + 1 + k}^{k} Pi+1+kk。
- MTP训练目标:对每个预测深度,计算交叉熵损失 L M T P k L_{MTP }^{k} LMTPk ,最后计算所有深度MTP损失的平均值,并乘以加权因子λ得到总体MTP损失 L M T P L_{MTP } LMTP,作为DeepSeek - V3的额外训练目标。
- MTP在推理中的应用:MTP策略主要用于提高主模型性能,推理时可直接丢弃MTP模块,主模型能独立正常运行。也可将MTP模块用于推测式解码,模型一次性生成多个token的候选结果,通过某种机制验证和修正这些候选结果,若候选token验证通过则直接使用,从而跳过若干步推理,显著加速推理过程。
Multi-head Latent Attention(MLA)
Multi-head Latent Attention(MLA)是DeepSeek-V3中采用的创新注意力机制,旨在降低推理时的显存占用和计算开销,同时保持模型性能。
- 定义:MLA是一种应用于DeepSeek-V3模型的创新注意力机制,通过对注意力中的键(Key)和值(Value)进行低秩联合压缩,减少推理时的Key-Value(KV)缓存,进而降低显存占用和计算开销 ,同时保证模型性能不下降。
- 原理
- 低秩联合压缩:传统多头注意力(MHA)需保存完整的Key和Value缓存,限制了batch size和序列长度。MLA通过低秩分解对注意力的Key和Value进行联合压缩,核心是将注意力输入 h t h_{t} ht通过下投影矩阵 W D K V W^{D K V} WDKV压缩成低维的 c t K V c_{t}^{K V} ctKV ,再通过上投影矩阵 W U K W^{U K} WUK、 W U V W^{U V} WUV分别得到用于注意力计算的键 k t , i k_{t, i} kt,i和值 v t , i C v_{t, i}^{C} vt,iC 。推理时,仅需缓存 c t K V c_{t}^{K V} ctKV和携带位置信息的 k t R k_{t}^{R} ktR,大幅减少了缓存占用 。
- 查询的低秩压缩:为减少训练时激活函数的内存占用,MLA对查询(queries)也进行低秩压缩。将查询输入 h t h_{t} ht通过下投影矩阵 W D Q W^{D Q} WDQ压缩得到 c t Q c_{t}^{Q} ctQ ,再经上投影矩阵 W U Q W^{U Q} WUQ和 W Q R W^{Q R} WQR得到用于注意力计算的查询 q t , i q_{t, i} qt,i 。
- 解耦Rotary Positional Embedding (RoPE):传统RoPE对Q和K分别应用位置编码,低秩分解KV后矩阵运算的交换律问题会使计算复杂。MLA新增独立维度保存位置信息,通过额外的多头queries( q t , i R q_{t, i}^{R} qt,iR)和共享的键( k t R k_{t}^{R} ktR)来支撑RoPE ,将RoPE的计算与低秩压缩解耦,既保留位置感知能力,又避免额外计算开销。
- 运作机制
- 压缩与投影:输入的每个token的特征首先被压缩成低维潜在向量,如 c t K V c_{t}^{K V} ctKV和 c t Q c_{t}^{Q} ctQ ,然后通过特定的投影矩阵扩展到各个注意力头所需的键、值和查询空间。
- 注意力计算:计算注意力时,利用压缩后的查询 q t , i q_{t, i} qt,i、键 k j , i k_{j, i} kj,i和值 v j , i C v_{j, i}^{C} vj,iC ,按照传统注意力机制的方式计算注意力得分并加权求和,得到每个头的注意力输出 o t , i o_{t, i} ot,i 。公式为 o t , i = ∑ j = 1 t S o f t m a x j ( q t , i T k j , i d h + d h R ) v j , i C o_{t, i}=\sum_{j = 1}^{t} Softmax_{j}(\frac{q_{t, i}^{T}k_{j, i}}{\sqrt{d_{h}+d_{h}^{R}}})v_{j, i}^{C} ot,i=∑j=1tSoftmaxj(dh+dhRqt,iTkj,i)vj,iC。
- 输出融合:将多个头的注意力输出 o t , i o_{t, i} ot,i进行拼接,再通过输出投影矩阵 W O W^{O} WO得到最终的注意力输出 u t u_{t} ut ,公式为 u t = W O [ o t , 1 ; o t , 2 ; . . . ; o t , n h ] u_{t}=W^{O}[o_{t, 1}; o_{t, 2};... ; o_{t, n_{h}}] ut=WO[ot,1;ot,2;...;ot,nh] 。