DeepSeek v3

Mar 16, 2025
2 views
Large Model

引言

24年12月,研究团队开发了 DeepSeek-V3,这是一个基于 MoE 架构的大模型,总参数量达到 671B,其中每个 token 会激活 37B 个参数。

基于提升性能和降低成本的双重目标,在架构设计方面,DeepSeek-V3 采用了MLA来确保推理效率,并使用 DeepSeekMoE来实现经济高效的训练。这两种架构在 DeepSeek-V2 中已经得到验证,证实了它们能够在保持模型性能的同时实现高效的训练和推理。

除了延续这些基础架构外,研究团队还引入了两项创新策略来进一步提升模型性能。

首先,DeepSeek-V3 首创了无辅助损失的负载均衡策略(auxiliary-loss-free strategy for load balancing),有效降低了负载均衡对模型性能的负面影响。另外,DeepSeek-V3 采用了多 token 预测训练目标,这种方法在评估基准测试中展现出了显著的性能提升。

为了提高训练效率,该研究采用了 FP8 混合精度训练技术并对训练框架进行了全面优化。低精度训练作为一种高效的训练方案,其发展与硬件性能的提升密切相关。本研究首次在超大规模模型上成功验证了 FP8 混合精度训练框架的有效性。通过采用 FP8 计算和存储技术,显著提升了训练速度并降低了 GPU 内存占用。

在训练框架方面,研究团队开发的 DualPipe 算法实现了高效的流水线并行处理,减少了流水线停滞,并通过计算和通信并行处理的方式降低了训练过程中的通信开销。这种优化确保了即使在模型规模进一步扩大的情况下,只要维持适当的计算通信比例,就能在不同节点间实现细粒度专家分配,同时将全节点间的通信开销降至接近于零。

此外,研究团队优化了跨节点的全节点通信内核,充分利用了 InfiniBand(IB) 和 NVLink 的带宽性能。通过精细的内存优化,使得 DeepSeek-V3 的训练无需依赖成本高昂的张量并行技术

这些技术改进的综合运用实现了极高的训练效率。

预训练阶段,DeepSeek-V3 使用了 14.8T 高质量且多样化的 token 进行训练。整个预训练过程表现出了出人意料的稳定性,不仅没有出现不可恢复的损失突增,也未发生需要回滚的情况。

随后,模型进行了两个阶段的上下文长度扩展:第一阶段将最大上下文长度提升至 32K,第二阶段进一步扩展至 128K

接着,研究团队对 DeepSeek-V3 基础模型进行了后训练,包括 SFT 和 RL,以增强模型对人类偏好的理解并进一步提升其性能。在后训练阶段,通过从 DeepSeek R1 系列模型中提取推理能力,同时精确控制模型的输出质量和长度比例。

DeepSeek-V3 在全面的基准测试评估中表现突出。尽管其训练成本较低,但综合评估结果显示,DeepSeek-V3-Base 已成为当前性能最强的开源基础模型,尤其在代码数学领域表现卓越。其对话版本不仅超越了其他开源模型,还在多个标准和开放式基准测试中展现出与领先闭源模型(如 GPT-4o 和 Claude-3.5-Sonnet)相匹敌的性能。

值得注意的是,DeepSeek-V3 实现了极具竞争力的训练成本(详见表1),这得益于在算法、框架和硬件层面的整体优化设计。

image

在预训练阶段,每处理1T token 仅需 180K H800 GPU 小时,即在配备 2048 个 H800 GPU 的集群上仅需 3.7 天。因此,整个预训练阶段在不到两个月内完成,总计使用了 2664K GPU 小时。

加上上下文长度扩展所需的 119K GPU 小时和后训练阶段的 5K GPU 小时,DeepSeek-V3 的完整训练总共消耗了 2.788M GPU 小时。按照每 GPU 小时 2 美元的 H800 GPU 租用价格计算,总训练成本仅为 557.6 万美元。需要说明的是,这些成本仅包含 DeepSeek-V3 的正式训练环节,不包括前期架构研究、算法验证和数据实验等相关支出。

本研究的主要创新点包括:

架构创新

在 DeepSeek-V2 高效架构的基础上,创新性地提出了无辅助损失的负载均衡策略,有效降低了负载均衡过程对模型性能的影响。

开发并验证了多 token 预测(MTP)训练目标,证实了其对模型性能的提升作用,该技术还可用于推测解码来加速推理过程。

  • 高效预训练
  • 后训练——DeepSeek-R1 知识蒸馏

核心评估成果

知识领域评估:

  • 教育类基准测试中,DeepSeek-V3 的表现超越了所有开源模型,在 MMLU、MMLU-Pro 和 GPQA 测试中分别获得了 88.5、75.9 和 59.1 的优异成绩。这一性能水平已与领先闭源模型 GPT-4o 和 Claude-Sonnet-3.5 相当,显著缩小了开源与闭源模型的性能差距。
  • 事实性知识评测中,DeepSeek-V3 在 SimpleQA 和中文 SimpleQA 测试中都展现出领先于其他开源模型的优势。特别值得注意的是,虽然其英语事实知识(SimpleQA)略逊于 GPT-4o 和 Claude-Sonnet-3.5,但在中文事实知识(中文 SimpleQA)方面却超越了这些模型,凸显了其在中文知识领域的特殊优势
    技术能力评估:

  • 数学领域,DeepSeek-V3 在所有非 CoT 模型(包括开源和闭源)中取得了最优性能。值得注意的是,在 MATH-500 等特定测试中,其表现甚至超越了 GPT-4o,充分展示了其出色的数学推理能力。

  • 编程领域,DeepSeek-V3 在 LiveCodeBench 等编程竞赛基准测试中表现最为突出,确立了其在该领域的领先地位。在软件工程相关任务中,尽管略低于 Claude-Sonnet-3.5,但仍大幅领先于其他模型,展示了其在各类技术评测中的综合实力。

架构

DeepSeek-V3 的基本架构具有两个核心特征:

  1. 采用 MLA 实现高效推理
  2. 使用 DeepSeekMoE 实现经济高效的训练。
    此外,该研究还开发了MTP训练目标,这一创新在评估基准测试中展现出显著的性能提升。

在其他未特别说明的架构细节方面,DeepSeek-V3 延续了 DeepSeek-V2 的设计方案。

基本架构

DeepSeek-V3 的基础架构建立在 Transformer 框架之上。相比 DeepSeek-V2,本研究在 DeepSeekMoE 中创新性地引入了无辅助损失负载均衡策略,有效降低了负载均衡过程对模型性能的影响。

下图展示了 DeepSeek-V3 的基本架构,本节将简要介绍 MLA 和 DeepSeekMoE 的技术细节。

image

多头潜在注意力机制

DeepSeek-V3 在注意力机制方面采用了 MLA 架构。设向量维度为 \(d\),注意力头数为 $ n_h$ ,每个头的维度为 $ d_h$ ,在特定注意力层中第 \(t\) 个 token 的注意力输入表示为 \(h_t\in \mathbb{R}^d\) 。MLA 的核心创新在于对注意力键和值进行低秩联合压缩,以降低推理过程中的键值(KV)缓存开销:

\[ \begin{aligned} \boxed{\color{blue}\mathbf{c}_{t}^{K V}} & =W^{D K V} \mathbf{h}_{t}, \\ {\left[\mathbf{k}_{t, 1}^{C} ; \mathbf{k}_{t, 2}^{C} ; \ldots ; \mathbf{k}_{t, n_{h}}^{C}\right]=\mathbf{k}_{t}^{C} } & =W^{U K} \mathbf{c}_{t}^{K V}, \\ \boxed{\color{blue}\mathbf{k}_{t}^{R}} & =\operatorname{RoPE}\left(W^{K R} \mathbf{h}_{t}\right), \\ \mathbf{k}_{t, i} & =\left[\mathbf{k}_{t, i}^{C} ; \mathbf{k}_{t}^{R}\right], \\ {\left[\mathbf{v}_{t, 1}^{C} ; \mathbf{v}_{t, 2}^{C} ; \ldots ; \mathbf{v}_{t, n_{h}}^{C}\right]=\mathbf{v}_{t}^{C} } & =W^{U V} \mathbf{c}_{t}^{K V},\end{aligned} \]

其中:

  • \(c^{KV}_t \in \mathbb{R}^{d_c}\) 表示键和值的压缩潜在向量
  • $d_c(\ll d_hn_h) $表示 KV 压缩维度
  • \(W^{DKV} \in \mathbb{R}^{d_c \times d}\) 为投影变换矩阵
  • \(W^{UK},W^{UV} \in \mathbb{R}^{d_hn_h \times d_c}\) 分别为键和值的维度上投影变换矩阵
  • \(W^{KR} \in \mathbb{R}^{d^R_h \times d}\) 用于生成携带旋转位置编码(Rotary Positional Embedding, RoPE)的解耦键
  • \(\text{RoPE}(·)\) 表示旋转位置编码矩阵的应用操作
  • \([·;·]\)表示向量连接操作
    在 MLA 中,生成过程仅需缓存高亮标记的向量( \(c^{KV}_t\) 和 \(k^R_t\) ),这种设计显著降低了 KV 缓存空间,同时保持了与标准MHA相当的性能水平。

对于注意力查询(Query)部分,模型同样采用低秩压缩技术,这种设计有效降低了训练过程中的激活值内存占用:

\[ \begin{aligned}{\mathbf{c}}_{t}^{Q} &= {W}^{DQ}{\mathbf{h}}_{t} \\ \left\lbrack {{\mathbf{q}}_{t,1}^{C};{\mathbf{q}}_{t,2}^{C};\ldots ;{\mathbf{q}}_{t,{n}_{h}}^{C}}\right\rbrack = {\mathbf{q}}_{t}^{C} &= {W}^{UQ}{\mathbf{c}}_{t}^{Q}, \\\left\lbrack {{\mathbf{q}}_{t,1}^{R};{\mathbf{q}}_{t,2}^{R};\ldots ;{\mathbf{q}}_{t,{n}_{h}}^{R}}\right\rbrack = {\mathbf{q}}_{t}^{R} &= \operatorname{RoPE}\left( {{W}^{QR}{\mathbf{c}}_{t}^{Q}}\right) , \\{\mathbf{q}}_{t,i} &= \left\lbrack {{\mathbf{q}}_{t,i}^{C};{\mathbf{q}}_{t,i}^{R}}\right\rbrack ,\end{aligned} \]

其中:

  • \(c^Q_t \in \mathbb{R}^{d'_c}\) 表示查询的压缩潜在向量
  • \(d'_c(\ll d_hn_h)\)表示查询压缩维度
  • \(W^{DQ} \in \mathbb{R}^{d'_c \times d}\) 和 \(W^{UQ} \in \mathbb{R}^{d_hn_h \times d'_c}\) 分别为查询的维度降维和升维变换矩阵
  • \(W^{QR} \in \mathbb{R}^{d^R_hn_h \times d'_c}\) 用于生成携带旋转位置编码的解耦查询矩阵
    最终,通过组合注意力查询( \(q_{t,i}\) )、键( \(k_{j,i}\) )和值( \(v^C_{j,i}\)),得到注意力机制的最终输出 \(U_t\) :
\[ \begin{aligned}{\mathbf{o}}_{t,i} &= \mathop{\sum }\limits_{{j = 1}}^{t}{\operatorname{Softmax}}_{j}\left( \frac{{\mathbf{q}}_{t,i}^{T}{\mathbf{k}}_{j,i}}{\sqrt{{d}_{h} + {d}_{h}^{R}}}\right) {\mathbf{v}}_{j,i}^{C},\\ {\mathbf{u}}_{t} &= {W}^{O}\left\lbrack {{\mathbf{o}}_{t,1};{\mathbf{o}}_{t,2};\ldots ;{\mathbf{o}}_{t,{n}_{h}}}\right\rbrack \end{aligned} \]

其中 \(W^O \in \mathbb{R}^{d \times d_hn_h}\) 为输出维度变换矩阵。

DeepSeekMoE 及其无辅助损失负载均衡机制

DeepSeekMoE的基础架构: 在前馈网络(Feed-Forward Networks, FFN)部分,DeepSeek-V3 采用了 DeepSeekMoE 架构。相比传统的 MoE 架构(如 GShard),DeepSeekMoE 采用了更细粒度的专家分配机制,并创新性地将部分专家设置为共享专家。假设第 t 个 token 的 FFN 输入为 \(u_t\) ,其输出 $h'_t $ 的计算过程如下:

\[ \begin{aligned}{\mathbf{h}}_{t}^{\prime } &= {\mathbf{u}}_{t} + \mathop{\sum }\limits_{{i = 1}}^{{N}_{s}}{\mathrm{{FFN}}}{i}^{\left( s\right) }\left( {\mathbf{u}}_{t}\right) + \mathop{\sum }\limits_{{i = 1}}^{{N}{r}}{g}_{i,t}{\mathrm{{FFN}}}_{i}^{\left( r\right) }\left( {\mathbf{u}}_{t}\right) \\ {g}_{i,t} &= \frac{{g}_{i,t}^{\prime }}{\mathop{\sum }\limits_{{j = 1}}^{{N}_{r}}{g}_{j,t}^{\prime }} \\ {g}_{i,t}^{\prime } &= \left\{ \begin{array}{ll} {s}_{i,t}, & {s}_{i,t} \in \operatorname{Topk}\left( {\left\{ {{s}_{j,t} | 1 \leq j \leq {N}_{r}}\right\} ,{K}_{r}}\right) , \\ 0, & \text{ otherwise,} \end{array}\right. \\ {s}_{i,t} &= \operatorname{Sigmoid}\left( {{\mathbf{u}}_{t}{}^{T}{\mathbf{e}}_{i}}\right) \end{aligned} \]

其中:

  • \(N_s\)\(N_r\) 分别表示共享专家和路由专家数量
  • \(K_r\) 表示被激活的路由专家数量
  • \(s_{i,t}\) 表示 token 与专家间的相关度
  • \(e_i\) 代表第 \(i\) 个路由专家的特征向量

无辅助损失负载均衡: 在MoE架构中,不平衡的专家负载会导致两个主要问题:

  1. 路由崩溃:某些专家被过度使用,而其他专家几乎不被使用
  2. 计算效率低下:在专家并行场景中,负载不均衡会导致GPU利用率不高
    传统的解决方案通常依赖辅助损失来避免负载不平衡,但这种方法存在一个明显缺点:过大的辅助损失会损害模型的性能。

具体而言,研究团队为每个专家引入了一个偏置项 \(b_i\) ,并将其添加到相应的亲和度分数 \(s_{i,t}\) 中以确定 top-K 路由:

\[ {g}_{i,t}^{\prime } = \left\{ \begin{array}{ll} {s}_{i,t}, & {s}_{i,t} + {b}_{i} \in \operatorname{Topk}\left( {\left\{ {{s}_{j,t} + {b}_{j} \mid 1 \leq j \leq {N}_{r}}\right\} ,{K}_{r}}\right) , \\ 0, & \text{ otherwise. } \end{array}\right. \]

在这种设计中,偏置项仅用于路由选择,而门控值(用于与 FFN 输出相乘)仍基于原始相关度分数 \(s_{i,t}\) 计算。训练过程中,系统会实时监控每个训练步骤中所有批次的专家负载分布。在每个步骤结束时,对于负载过高的专家,其偏置项会减少 $γ $;对于负载不足的专家,其偏置项会增加 \(γ\) ,其中 \(γ\) 是控制偏置更新速率的超参数。

通过这种动态调整机制,DeepSeek-V3 在训练过程中实现了专家负载的均衡分布,其性能优于传统仅依靠辅助损失来实现负载均衡的模型。

Token 预测机制 (Multi-Token Prediction, MTP)

DeepSeek-V3 创新性地采用了 MTP 目标,将预测范围扩展到每个位置的多个后续 token

这种设计具有双重优势:

  • 首先,MTP 目标通过增加训练信号的密度可能提高数据利用效率;
  • 其次,它使模型能够提前规划表征,从而更准确地预测后续 token。
    DeepSeek-V3的MTP实现与之前研究有明显区别:

  • 传统方法:使用独立输出头并行预测D个额外token

  • DeepSeek-V3方法:采用顺序预测方式,并在每个预测层级保持完整的因果关系链
    image

MTP 模块架构: 具体实现中,模型采用 \(D\) 个串联模块来预测 \(D\) 个额外的 token。每个 MTP 模块(第\(k\)个)包含以下组件:

  • 共享向量层 \(Emb(·)\)
  • 共享输出头 \(OutHead(·)\)
  • Transformer 处理单元 \(TRM(·)\)
  • 维度映射矩阵 \(M_k \in \mathbb{R}^{d \times 2d}\)
    对于输入序列中的第i个token \(t_i\),在第k层预测时的处理流程:
  1. 特征组合
  2. Transformer处理
  3. 概率分布计算
    输出层 OutHead(·) 首先通过线性变换将特征表示转换为 logits,然后使用 Softmax(·) 函数计算第 k 个预测 token 的概率分布。与向量层类似,每个 MTP 模块的输出层也与主模型共享。这种保持预测因果链的设计思路与 EAGLE 相近,但两者目标不同:EAGLE 主要用于推测解码,而本研究中的 MTP 主要用于优化训练效果。

MTP 训练目标优化: 系统为每个预测层级计算交叉熵损失 \(\mathcal{L}^k_{MTP}\) :