
DeepSeek-V3 技术报告
DeepSeek-V3 的基本架构仍然基于 Transformer 框架。为了实现高效的推理和经济的训练,采用了已经在 DeepSeek-V2 中得到了充分验证的多头潜在注意力机制和,同时额外引入了无辅助损失的负载均衡策略以缓解为了确保负载平衡而引起的性能下降。
arXiv | https://arxiv.org/abs/2412.19437
GitHub | https://github.com/deepseek-ai/DeepSeek-V3
摘要:
DeepSeek-V3 是一个大型混合专家(Mixture-of-Experts,MoE)语言模型,总参数量为 671B,每个 token 激活 37B 参数。为了实现高效的推理和成本效益较高的训练,DeepSeek-V3 采用了在 DeepSeek-V2 中得到验证的多头潜在注意力机制(Multi-Head Latent Attention,MLA)和 DeepSeekMoE 架构。此外,DeepSeek-V3 首创了一种无辅助损失的负载均衡策略,并设置了多 token 预测训练目标以提升性能。我们对 DeepSeek-V3 进行了 14.8 万亿个多样且高质量词元的预训练,随后通过监督微调和强化学习阶段充分发挥其潜力。评估结果表明,DeepSeek-V3 在性能上优于其他开源模型,并达到了与领先封闭源模型相当的水平。尽管性能卓越,但 DeepSeek-V3 的完整训练仅需 2.788M H800 GPU 小时。
一、引言
近年来,大型语言模型(LLMs)经历了快速迭代与进化,逐步缩小了与人工通用智能(AGI)的差距。除了闭源模型外,**开源模型(DeepSeek 系列、LLaMA 系列、Qwen 系列、Mistral 系列)也在取得显著进展,致力于缩小与闭源模型的差距。为了进一步拓展开源模型的能力边界,我们扩大了模型规模引入了 DeepSeek-V3 ,一个大型混合专家(Mixture-of-Experts,MoE)**语言模型,总参数量为 671B,每个 token 激活 37B 参数。
- **预训练:**对 DeepSeek-V3 进行了 14.8 万亿个多样且高质量词元的预训练,在整个训练过程中未遇到任何不可恢复的损失突增,也没有进行任何回滚操作。
- **两个阶段的上下文长度拓展:**在第一阶段,将最大上下文长度扩展至 32K;在第二阶段,进一步扩展至 128K。
- **后训练:**对 DeepSeek-V3 的基础模型进行了监督微调(SFT)和强化学习(RL),以使其符合人类偏好并进一步释放其潜力。
全面的基准测试评估显示,DeepSeek-V3-Base 已成为目前可获取的最强开源基础模型,尤其是在代码和数学领域。其聊天版本也优于其他开源模型,并在一系列标准和开放性基准测试中达到了与领先闭源模型(GPT-4o、Claude-3.5-Sonnet)相当的性能。同时 DeepSeek-V3 实现了极具竞争力的训练成本,这得益于在算法、框架和硬件层面的整体优化设计。
在预训练阶段,对每万亿个 token 进行训练仅需 180K H800 GPU 小时,即在配备 2048 个 H800 GPU 的集群中仅需 3.7 天,因此预训练阶段在不到两个月内完成,总计使用了 2664K GPU 小时。结合上下文长度扩展所需的 119K GPU 小时和后训练所需的 5K GPU 小时,DeepSeek-V3 的完整训练共消耗 2.788M GPU 小时。假设 H800 GPU 的租赁价格为每小时 2 美元,总训练成本仅为 557.6 万美元。
*上述成本仅包括 DeepSeek-V3 的正式训练环节,不包括前期在架构、算法或数据方面的研究和消融实验的成本。
1.1 主要贡献
架构:创新的负载均衡策略与训练目标
- 在 DeepSeek-V2 高效架构的基础上,开创了一种无辅助损失的负载均衡策略,该策略通过减少因负载均衡而引起的性能下降来优化模型性能。
- 研究了一种多 token 预测(MTP)训练目标,并证明其对模型性能的提升作用,此外还可以用于推测性解码,从而加速推理过程。
预训练:追求极致的训练效率
- 设计了一种 FP8 混合精度训练框架,并首次验证了在超大规模模型上进行 FP8 训练的可行性和有效性。
- 通过算法、框架和硬件的协同设计,克服了跨节点 MoE 训练中的通信瓶颈,实现了计算与通信重叠,显著提高了训练效率并降低了训练成本,并能够在不增加额外开销的情况下进一步扩大模型规模。
- 以 2.664M H800 GPU 小时的成本完成了 DeepSeek-V3 在 14.8T token 上的预训练,生成了当前最强的开源基础模型,随后的训练阶段仅需 0.1M GPU 小时。
后训练:DeepSeek-R1 知识蒸馏
- 引入了一种创新的知识蒸馏方法,从思维链(CoT)模型(特别是 DeepSeek-R1 系列)提炼出推理能力并将其注入标准 LLM(特别是 DeepSeek-V3),成功将 R1 的 5 种验证和反思机制整合到 DeepSeek-V3 中,显著提高了其推理性能,还保持了对 DeepSeek-V3 输出风格和长度的控制。
1.2 评估结果总结
二、架构
2.1 基本架构
DeepSeek-V3 的基本架构仍然基于 Transformer 框架。为了实现高效的推理和经济的训练,采用了已经在 DeepSeek-V2 中得到了充分验证的多头潜在注意力机制和 DeepSeekMoE,同时额外引入了无辅助损失的负载均衡策略以缓解为了确保负载平衡而引起的性能下降。
2.1.1 多头潜在注意力机制
DeepSeek-V3 采用了多头潜在注意力机制(Multi-Head Latent Attention,MLA)。设 d d d 表示嵌入维度, n h n_h nh 表示注意力头的数量, d h d_h dh 表示每个头的维度, h t ∈ R d \mathbf{h}_t\in \mathbb{R}^d ht∈Rd 表示给定注意力层中第 t t t 个 token 的注意力输入。多头潜在注意力机制的核心在于对注意力键和值进行低秩联合压缩,以降低推理过程中的**键值(KV)**缓存开销。
其中,
-
c t K V ∈ R d c \mathbf{c}_t^{KV}\in\mathbb{R}^{d_c} ctKV∈Rdc 表示键值的压缩潜在向量, d c ( ≪ d h n h ) d_c (\ll d_hn_h) dc(≪dhnh) 表示键值压缩维度;
-
W D K V ∈ R d c × d W^{DKV} \in \mathbb{R}^{d_c \times d} WDKV∈Rdc×d 是下投影矩阵, W U K , W U V ∈ R d h n h × d c W^{UK}, W^{UV} \in \mathbb{R}^{d_hn_h\times d_c} WUK,WUV∈Rdhnh×dc 分别是键和值的上投影矩阵;
-
W K R ∈ R d h R × d W^{KR}\in\mathbb{R}^{d_h^R \times d} WKR∈RdhR×d 是用于生成携带**旋转位置编码(Rotary Positional Embedding,RoPE)**的解耦键的矩阵;
-
RoPE ( ⋅ ) \text{RoPE}(\cdot) RoPE(⋅) 表示应用 RoPE 矩阵的操作; [ ⋅ ; ⋅ ] [\cdot; \cdot] [⋅;⋅] 表示连接操作。
在 MLA 中仅需缓存蓝框内的向量( c t K V c_t^{KV} ctKV 和 k t R k_t^R ktR),显著降低了 KV 缓存,同时保持与标准多头注意力机制 MHA 相当的性能。
对于注意力查询 Query,同样执行低秩压缩,可以在训练过程中减少激活值内存占用:
其中,
- c t Q ∈ R d c ′ \mathbf{c}^Q_t \in \mathbb{R}^{d'_c} ctQ∈Rdc′ 表示查询的压缩潜在向量, d c ′ ( ≪ d h n h ) d'_c (\ll d_hn_h) dc′(≪dhnh) 表示查询压缩维度;
- W D Q ∈ R d c ′ × d W^{DQ} \in \mathbb{R}^{d'_c \times d} WDQ∈Rdc′×d 和 W U Q ∈ R d h n h × d c ′ W^{UQ} \in \mathbb{R}^{d_hn_h \times d'_c} WUQ∈Rdhnh×dc′ 分别是查询的下投影矩阵和上投影矩阵;
- W Q R ∈ R d h R n h × d c ′ W^{QR} \in \mathbb{R}^{d^R_h n_h \times d'_c} WQR∈RdhRnh×dc′ 是用于生成携带旋转位置编码的解耦查询的矩阵。
最终通过组合注意力查询( q t , i \mathbf{q}_{t,i} qt,i)、键( k j , i \mathbf{k}_{j,i} kj,i)和值( v j , i C \mathbf{v}_{j,i}^C vj,iC)产生最终的注意力输出 u t \mathbf{u}_{t} ut:
其中,
- W O ∈ R d × d h n h W^O\in \mathbb{R}^{d\times d_hn_h} WO∈Rd×dhnh 表示输出投影矩阵。
2.1.2 DeepSeekMoE 及其无辅助损失的负载均衡策略
DeepSeekMoE 的基本架构
对于前馈神经网络(FFNs),DeepSeek-V3 使用了 DeepSeekMoE 架构。相比传统 MoE 架构(如 GShard),DeepSeekMoE 使用了更细粒度的专家分配机制,并将部分专家设置为共享专家。假设第 t t t 个 token 的 FFN 输入为 u t \mathbf{u}_t ut,输出 h t ′ \mathbf{h}'_t ht′ 如下:
其中,
- N s N_s Ns 和 N r N_r Nr 分别表示共享专家和路由专家的数量, F F N i ( s ) ( ⋅ ) FFN^{(s)}_i(\cdot) FFNi(s)(⋅) 和 F F N i ( r ) ( ⋅ ) FFN^{(r)}_i(\cdot) FFNi(r)(⋅) 分别表示第 i i i 个共享专家和第 i i i 个路由专家;
- g i , t g_{i,t} gi,t 是第 i i i 个专家的门控值, s i , t s_{i,t} si,t 是第 t t t 个 token 与第 i i i 个专家间的亲和度, e i \mathbf{e}_i ei 是第 i i i 个路由专家的质心向量;
- K r K_r Kr 表示激活的路由专家的数量,KaTeX parse error: Unexpected character: '?' at position 20: …t{Topk}(\cdot, ?̲?) 表示第 t t t 个 token 与所有路由专家计算得到的亲合度分数中最高的 k k k 个值的集合。
与 DeepSeek-V2 略有不同,DeepSeek-V3 使用 Sigmoid 函数来计算亲和度分数,并对所有选定的亲和度分数进行归一化以生成门控值。
无辅助损失的负载均衡策略
对于 MoE 模型,专家负载不均衡会导致路由崩溃,并在具有专家并行性的场景中降低计算效率。传统解决方案通常依赖辅助损失来避免负载不均衡,然而辅助损失过大将损害模型性能。为了在负载均衡与模型性能之间实现更好的权衡,我们开创了无辅助损失的负载均衡策略以确保负载均衡。具体而言,我们为每个专家引入了一个偏置项 b i b_i bi,并将其添加到相应的亲和力分数 s i , t s_{i,t} si,t 中,以确定 top-K 个路由:
偏差项仅用于路由;门控值(与 FFN 输出相乘)仍然源自原始亲和度分数 s i , t s_{i,t} si,t。
在训练过程中,我们持续监控每个训练步骤中整个批次的专家负载。在每个步骤结束时,如果相应专家负载过重,则将偏差项减少 γ \gamma γ;如果相应专家负载过轻,则将偏差项增加 γ \gamma γ,其中偏差更新速度 γ \gamma γ 是一个超参数。通过动态调整,DeepSeek-V3 在训练过程中保持了专家负载的平衡,并且其性能优于通过纯辅助损失促进负载平衡的模型。
- **序列级辅助损失:**尽管 DeepSeek-V3 主要依赖无辅助损失的策略来实现负载平衡,为了防止任何单一序列内部出现极端不平衡,我们还采用了序列级平衡损失的补充策略。
其中,平衡因子 α \alpha α 是一个超参数,在 DeepSeek-V3 中将被赋予一个极小值; 1 ( ⋅ ) 1(\cdot) 1(⋅) 表示指示函数; T T T 表示序列中的 token 数。
- **节点限制路由:**类似于 DeepSeek-V2 的设备限制路由机制,DeepSeek-V3 也采用了一种限制路由机制来限制训练过程中的通信成本。具体而言,确保每个标记最多会被发送到 M M M 个节点,这些节点根据每个节点上专家的最高 K r M \frac{K_r}{M} MKr 亲和度分数之和来选择。在这一约束条件下,MoE 训练框架几乎可以实现计算与通信的完全重叠。
- **无 token 丢弃:**由于高效负载均衡策略,DeepSeek-V3 在整个训练过程中保持了良好的负载平衡。因此在训练过程中不会丢弃 token。此外,还实施了特定的部署策略以确保推理过程中的负载平衡,因此在推理过程中也不会丢弃 token。
2.2 多 token 预测训练目标
DeepSeek-V3 设置了一个**多 token 预测(Multi-Token Prediction,MTP)**目标,该目标将预测范围扩展到每个位置的多个未来 token。
- 一方面,MTP 目标可以增加训练信号的密度,从而可能提高数据效率。
- 另一方面,MTP 可能使模型能够在预测未来 token 时更好地预先规划其表示。
与 Gloeckle et al (2024) 不同,前者并行预测 D D D 个额外的 token 并使用独立的输出头,DeepSeek-V3 则顺序预测额外的 token,并在每个预测层保持完整的因果关系链。
2.2.1 MTP 模块
MTP 使用了 D D D 个顺序模块来预测 D D D 个额外的 token,每个MTP模块包括:
-
一个共享嵌入层 Emb ( ⋅ ) \text{Emb}(\cdot) Emb(⋅)
-
一个共享输出头 OutHead ( ⋅ ) \text{OutHead}(\cdot) OutHead(⋅)
-
一个 Transformer 块 TRM k ( ⋅ ) \text{TRM}_k(\cdot) TRMk(⋅)
-
一个投影矩阵 M k ∈ R d × 2 d M_k\in\mathbb{R}^{d\times2d} Mk∈Rd×2d
对于输入序列中的第 i i i 个 token t i t_i ti ,在第 k k k 层预测时,模型首先将两个向量进行组合:该 token 在第 ( k − 1 ) (k−1) (k−1) 层的特征表示 h i k − 1 ∈ R d h_i^{k−1}\in\mathbb{R}^d hik−1∈Rd 和第 ( i + k ) (i+k) (i+k) 个 token 的向量 Emb ( t i + k ) ∈ R d \text{Emb}(t_{i+k})\in\mathbb{R}^d Emb(ti+k)∈Rd,通过线性变换进行融合:
h i ′ k = M k [ RMSNorm ( h i k − 1 ) ; RMSNorm ( Emb ( t i + k ) ) ] \mathbf{h}'^{k}_i=M_k[\text{RMSNorm}(h_i^{k−1});\text{RMSNorm}(\text{Emb}(t_{i+k}))] hi′k=Mk[RMSNorm(hik−1);RMSNorm(Emb(ti+k))]
- 当 k = 1 k = 1 k=1 时, h i k − 1 \mathbf{h}^{k-1}_i hik−1 表示由主模型给出的表示。每个 MTP 模块的嵌入层与主模型共享。
组合后的 h i ′ k \mathbf{h}'^{k}_i hi′k 作为第 k k k 层 Transformer 块的输入,以生成当前深度的输出表示 h i k \mathbf{h}^{k}_i hik:
h 1 : T − k k = TRM k ( h 1 : T − k ′ k ) \mathbf{h}^{k}_{1:T-k}=\text{TRM}_k(\mathbf{h}'^{k}_{1:T-k}) h1:T−kk=TRMk(h1:T−k′k)
- 其中, T T T 表示输入序列的长度, i : j _{i:j} i:j 表示切片操作(包括左右边界)。
最后,以 h i k \mathbf{h}^{k}_i hik 作为输入,共享的输出头将计算第 k k k 个额外预测标记 p i + 1 + k k ∈ R V p^k_{i+1+k}\in\mathbb{R}^V pi+1+kk∈RV 的概率分布,其中 V V V 是词表大小:
p i + 1 + k k = OutHead ( h i k ) p^k_{i+1+k}=\text{OutHead}(\mathbf{h}^{k}_i) pi+1+kk=OutHead(hik)
输出头 OutHead ( ⋅ ) \text{OutHead}(\cdot) OutHead(⋅) 线性地将表示映射到 logits,并随后应用 Softmax ( ⋅ ) \text{Softmax}(\cdot) Softmax(⋅) 函数来计算第 k k k 个额外标记的预测概率。每个MTP模块的输出头与主模型共享。
2.2.2 MTP 训练目标
每个预测层计算交叉熵损失:
- 其中, T T T 表示输入序列的长度, t i t_i ti 表示第 i i i 个位置的真实 token, p i k [ t i ] p_i^k[t_i] pik[ti] 表示由第 k k k 个 MTP 模块给出的 t i t_i ti 的相应预测概率。
最后,计算所有深度的MTP损失的平均值,并乘以权重因子 λ \lambda λ,以获得总 MTP 损失作为DeepSeek-V3的补充训练目标:
2.2.3 **推理阶段 **MTP
MTP 主要旨在提高主模型的性能,因此在推理过程中可以直接丢弃 MTP 模块,模型能够独立且正常运行。此外,我们还可以重新利用这些 MTP 模块进行推测解码,进一步提高生成延迟。
三、基础设施
3.1 计算集群
DeepSeek-V3 在配备有 2048 个 NVIDIA H800 GPU 的集群上进行训练。集群中的每个节点包含 8 块通过 NVLink 和 NVSwitch 连接的 GPU,节点之间使用 InfiniBand (IB) 连接来高效通信。
3.2 训练框架
DeepSeek-V3 的训练基于自主研发的高效且轻量 HAI-LLM 框架。
- 16 路管道并行(Pipeline Parallelism,PP)
- 覆盖 8 个节点的 64 路专家并行(Expert Parallelism,EP)
- ZeRO-1 数据并行(Data Parallelism,DP)
为了促进 DeepSeek-V3 的高效训练,框架实施了细致的工程优化:
- 设计了 DualPipe 算法以实现高效的管道并行。与现有的 PP 方法相比,DualPipe 的管道阻塞较少。更重要的是,它在前向和后向过程中重叠计算和通信阶段,从而解决了由跨节点专家并行引入的沉重通信开销问题。
- 开发了高效的跨节点全连接通信内核,充分利用了 IB 和 NVLink 的带宽,并节省了用于通信的**流式多处理器(Streaming Multiprocessors,SMs)**资源占用。
- 详细优化了训练过程中的内存占用,从而使得我们能够在不使用昂贵的**张量并行(Tensor Parallelism,TP)**的情况下训练 DeepSeek-V3。
3.2.1 DualPipe 与计算-通信重叠管道双工与计算-通信重叠
对于DeepSeek-V3,跨节点专家并行引入的通信开销导致计算与通信的比例约为 1:1,效率较低。因此模型设计了一种创新的 DualPipe 管道并行算法,不仅通过有效重叠前向和后向计算通信阶段来加速模型训练,还减少了管道中的阻塞现象。
DualPipe 的核心思想是在一对正向和反向片段中重叠计算和通信。具体而言,我们将每个片段分为四个组件:注意力机制、全节点调度、MLP、全节点合并。对于反向片段,注意力机制和 MLP 进一步分为输入的反向传播和权重的反向传播。此外,我们还包含了一个 PP 通信组件。
对于一对正向和反向片段重新安排这些组件,并手动调整分配给通信和计算的 GPU SM 的比例,系统能够在运行过程中有效隐藏全节点通信和 PP 通信开销。
- 一对个体前向片段和后向片段的重叠策略(Transformer 块的边界未对齐):橙色表示前向传播,绿色表示“输入的后向传播”,蓝色表示“权重的后向传播”,紫色表示PP通信,红色表示屏障。全节点通信和 PP 通信都可以完全隐藏。
完整的 DualPipe 调度机制:
- 采用双向管道调度,同时从管道的两端同时输入微批次数据,并且可以显著重叠大部分通信。还确保了随着模型进一步扩展,只要保持恒定的计算与通信比例,仍然可以在节点间使用细粒度的专家系统,同时实现接近零的全节点通信开销。
即使在通信负载相对较轻的常规应用场景中,DualPipe 仍然表现出效率优势。对比不同 PP 方法在管道阻塞和内存使用方面的表现:
3.2.2 跨节点全连接通信
为了确保 DualPipe 具有足够的计算性能,我们自定义了高效的跨节点全连接通信内核(包括调度和合并),以节省用于通信的流式多处理器数量。
这些内核的设计与集群中的 MoE 门控算法和网络拓扑相协同。具体而言,在集群中,**跨节点的 GPU 通过 IB 全连接,而节点内的通信则通过 NVLink 处理。**NVLink 提供的带宽为160 GB/s,约为 IB(50 GB/s)的 3.2 倍。为了充分利用 IB 和 NVLink 的不同带宽,我们限制每个 token 最多调度至 4 个节点,从而减少 IB 的流量。对于每个token,在其路由决策确定后,首先通过 IB 传输到目标节点中具有相同节点内索引的 GPU。一旦到达目标节点,我们将确保它能够通过 NVLink 即时转发到承载目标专家的特定GPU,而不被后续到达的 token 阻塞。
IB 和 NVLink 的通信完全重叠,每个 token 可以高效地选择平均 3.2 个专家,而不产生额外的 NVLink 开销。这意味着,尽管 DeepSeek-V3 在实践中仅选择8个路由专家,通过这种方法可以将这个数量扩展到最多 13 个专家(4 个节点 × 3.2 个专家/节点),同时保持相同的通信成本。
总体而言,在这种通信策略下,仅需 20 个 SM 即可充分利用 IB 和 NVLink 的带宽。 具体而言,我们采用了线程专业化技术(warp specialization technique),并将 20 个SM划分为 10 个通信通道。
-
在调度过程中,(1)IB 发送(2)IB 到 NVLink 的转发(3)NVLink 接收 分别由各自的线程处理。每个通信任务分配的线程数量根据所有 SM 的实际负载动态调整。
-
在合并过程中,(1)NVLink 发送(2)NVLink 到 IB 的转发和累积(3)IB 接收和累积 也由动态调整的波束处理。
此外,调度和合并内核与计算流重叠,因此我们还考虑了它们对其他 SM 计算内核的影响。具体来说,我们使用了自定义的 PTX 指令并自适应调整通信块大小,显著减少了对 L2 缓存的使用和对其他 SM 的干扰。
3.2.3 极简内存占用与最小开销
为了减少训练过程中的内存占用,采用了以下技术:
- **RMSNorm 和 MLA 上投影的重新计算:**在反向传播过程中重新计算所有的 RMSNorm 操作和 MLA 上投影操作,从而避免了需要持久存储其输出激活。虽然这会带来轻微的开销,但显著减少了存储激活所需的内存。
- **CPU 上的指数移动平均(EMA):**在训练过程中保留模型参数的指数移动平均(EMA),以便在学习率衰减后早期估计模型性能。EMA 参数存储在 CPU 内存中,并在每次训练步骤后异步更新。这种方法使维护 EMA 参数不增加额外的内存或时间开销。
- **MTP 的共享嵌入和输出头:**通过 DualPipe 策略将模型的最浅层(包括嵌入层)和最深层(包括输出头)部署在同一 PP 等级上,这使得共享嵌入和输出头的参数和梯度可以在 MTP 模块和主模型之间物理共享。这种物理共享机制进一步提高了内存效率。
3.3 FP8 训练
受低精度训练近期进展的启发,提出了一种细粒度混合精度框架,利用 FP8 数据格式训练DeepSeek-V3。
尽管低精度训练具有巨大潜力,但其应用常常受限于激活、权重和梯度中的异常值。尽管在推理量化方面取得了显著进展,但在大型语言模型预训练中成功应用低精度技术的研究相对较少。为解决这一挑战并有效扩展 FP8 格式的动态范围,引入了一种细粒度的量化策略:
- 采用 1 × N c 1\times N_c 1×Nc 元素的条状分组或 N c × N c N_c\times N_c Nc×Nc 元素的块状分组。
通过提高精度累积过程,相关的去量化开销得到了很大程度的缓解,对于实现准确的 FP8 通用矩阵乘法(GEMM)至关重要。此外,为了进一步减少 MoE 训练中的内存和通信开销,我们采用 FP8 格式进行激活值缓存和分发,并将低精度优化器状态存储在 BF16 格式中。
3.3.1 混合精度框架
基于低精度训练中广泛采用的技术,我们提出了一种用于 FP8 训练的混合精度框架。在这种框架中,大多数计算密集型操作在 FP8 中进行,而少数关键操作则保持在原始数据格式中,以平衡训练效率和数值稳定性。
-
FP8 精度:为了加速模型训练,大多数核心计算操作(GEMM 操作)均以 FP8 精度实现,接受 FP8 张量作为输入,并输出 BF16 或 FP32 格式的结构。与线性操作相关的所有三个 GEMM 操作,包括前向传播(Fprop)、激活函数的反向传播(Dgrad)和权重的反向传播(Wgrad),均在FP8精度下执行。这一设计理论上将计算速度相比原始的 BF16 方法提高一倍。此外,FP8 精度下的 Wgrad GEMM 允许在反向传播过程中使用 FP8 格式存储激活函数,从而显著减少内存消耗。
-
BF16、FP32 精度:尽管FP8格式具有效率优势,但某些操作由于对低精度计算的敏感性仍需更高的精度。此外,一些低成本的操作也可以通过忽略整体训练成本的微小开销来利用更高的精度。因此,在经过仔细研究后,我们为以下组件保留了原始精度(BF16、FP32):嵌入模块、输出头、MoE 门控模块、归一化操作符和注意力操作符。为进一步保证数值稳定性,我们将主权重、权重梯度和优化器状态存储在更高的精度中。虽然这些高精度组件会带来一些内存开销,但通过在分布式训练系统中高效地对多个 DP 排名进行切分,其影响可以被最小化。
3.3.2 量化和乘法精度的提升
基于我们混合精度的FP8框架,我们提出几种策略以提升低精度训练的准确性,重点关注量化方法和乘法过程。
**细粒度量化 Fine-Grained Quantization:**在低精度训练框架中,由于 FP8 格式受限于其较少的阶码位数,动态范围有限,因此溢出和下溢是常见的挑战。通常通过将输入张量的最大绝对值缩放到FP8的最大可表示值来对输入分布进行对齐,然而这会使得低精度训练对激活异常值极为敏感,这会严重影响量化精度。为解决这一问题,我们提出了一种细粒度量化方法,该方法在更精细的级别上应用缩放。
-
激活值以 1x128 像素块为基础(每个 token 的每 128 个通道)进行分组和缩放;
-
权重以 128x128 像素块为基础(每 128 个输入通道的每 128 个输出通道)进行分组和缩放。
这种方法确保量化过程能够更好地适应异常值,通过根据更小的元素组调整缩放比例来实现。
一个关键修改是在 GEMM 操作的内部维度引入了组内缩放因子。虽然这一功能在标准的 FP8 GEMM 中并没有直接支持,但结合精确的 FP32 累加策略,这一功能可以高效地实现。同时细粒度量化策略与微缩放格式的理念高度一致,而 NVIDIA 下一代 GPU(Blackwell 系列)已宣布支持具有更小量化粒度的微缩放格式。
**提高累积精度 Increasing Accumulation Precision:**低精度 GEMM 操作通常会遇到的下溢问题依赖于高精度累积解决,通常是在 FP32 精度下进行。然而在 NVIDIA H800 GPU 上进行的 FP8 GEMM 累积精度仅能保留大约 14 位,远低于 FP32 累积精度,且当内部维度 K 较大时更加显著。
为了应对这一问题,我们采用了将累积操作从张量核心提升到 CUDA 核心以获得更高精度的策略。具体而言,在张量核心执行 **MMA(矩阵乘积累加)**时中间结果使用有限的位宽进行累积,一旦达到间隔 N C N_C NC 这些部分结果将被复制到 CUDA 核心上的 FP32 寄存器中进行全精度的 FP32 累积。结合细粒度量化在内部维度 K 上的组内缩放因子,可以在 CUDA 核心上高效地进行去量化操作且几乎不增加额外的计算成本。
值得注意的是,这一修改降低了单个线程组中 **WGMMA(线程组级矩阵乘积累加)**指令的发出率。然而在 H800 架构中通常会有两个 WGMMA 同时存在:当一个线程组执行提升操作时,另一个可以执行 MMA 操作。这种设计使得两个操作可以重叠进行,保持张量核心的高利用率。根据实验,设置 N C = 128 N_C = 128 NC=128 个元素(4 个WGMMA)是能够在不引入显著额外开销的情况下显著提高精度的最小累积间隔。
3.3.3 低精度存储与通信
在 FP8 训练框架基础上,进一步通过将缓存的激活值和优化器状态压缩为低精度格式来减少内存消耗和通信开销。
**低精度优化器状态:**采用 BF16 格式来跟踪 AdamW 优化器中的一阶和二阶动量,主权重(优化器存储)和梯度(用于批量大小累积)仍然保持在 FP32 格式中,以确保训练过程中的数值稳定性。
**低精度激活:**Wgrad 操作在FP8格式下执行。为了减少内存消耗,在线性操作的反向传播中使用 FP8 格式缓存激活值。但在实现低成本高精度训练时,以下运算需要特殊处理:
-
**注意力操作后的线性层输入:**这些激活值同样在注意力操作的反向传播过程中使用,因此对精度敏感。为此类激活值采用了一种专有的 E5M6 数据格式。 此外,在反向传播过程中,这些激活值的的量化块将从 1x128 转换为 128x1。所有缩放因子均采用 2 的整数幂以避免引入额外的量化误差。
-
**MoE 的 SwiGLU 操作的输入:**为了进一步降低内存成本,缓存了 SwiGLU 操作的输入,并在反向传播过程中重新计算其输出,这些激活值也采用精细粒量化存储在 FP8 中。
低精度通信:MoE 模型训练中的通信带宽是一个关键瓶颈。先将 MoE 上投影之前的激活值量化为 FP8 后应用分发组件,这与 MoE 上投影中的 FP8 前向传播兼容,激活值缩放因子也为 2 的整数幂。MoE 下投影之前的激活梯度也采用了类似策略。前向和反向传播组合组件保留为 BF16 以在训练管道的关键部分保持训练精度。
3.4 推理和部署
DeepSeek-V3 部署在 H800 集群上,其中每个节点内的 GPU 通过 NVLink 互联,而集群中的所有 GPU 则通过 IB 实现全互联。为了同时确保在线服务的服务级别目标(SLO)和高吞吐量,我们将采用以下部署策略,将预填充阶段和解码阶段分离。
3.4.1 预填充
预填充阶段的最小部署单元由 4 个节点组成,每个节点配备 32 个GPU。
- 注意力部分采用 4 路张量并行(TP4)与序列并行(SP)相结合的方式,并结合了 8 路数据并行(DP8)。其较小的张量并行尺寸(4)限制了张量并行通信的开销。
- MoE部分使用 32 路专家并行(EP32)以确保每个专家处理足够大的批次大小,从而提高计算效率。对于 MoE 的全连接通信,我们采用与训练相同的方法:首先通过 InfiniBand(IB)在节点间传输标记,然后通过NVLink在节点内部的GPU之间转发。特别地,浅层的 MLP 采用 1 路张量并行(TP1),以节省张量并行通信的开销。
为了在 MoE 部分实现专家负载均衡,我们需要确保每个 GPU 处理大致相同数量的标记。为此,我们引入了一种冗余专家部署策略,复制高负载专家并冗余部署。
- 高负载专家基于在线部署期间收集的统计数据检测并会定期调整(每 10 分钟调整一次)。
- 确定冗余专家集合后,根据观察到的负载情况仔细重新安排每个节点内GPU上的专家部署,力求在不增加跨节点全连接通信开销的情况下尽可能平衡负载。
DeepSeek-V3 的部署在预填充阶段设置了 32 个冗余专家。对于每个 GPU,除了它原本托管的 8 个专家外,还将托管一个额外的冗余专家。此外,在预填充阶段,为了提高吞吐量并隐藏全连接通信和张量并行通信的开销,我们同时处理两个具有相似计算工作量的微批次,并将一个微批次的注意力和 MoE 与另一个微批次的调度和组合重叠。
最后,我们正在探索一种动态冗余专家策略,每个GPU托管更多专家(如 16 个),但在每次推理步骤中,只有9个专家会被激活。在每层的全连接操作开始之前,我们会根据实时计算得到全局最优路由方案。由于预填充阶段涉及大量的计算,因此计算这种路由方案的开销几乎可以忽略不计。
3.4.2 解码
在解码过程中将共享专家视为路由专家,因此每个 token 在路由过程中将选择 9 个专家,其中共享专家被视为总是会被选中的高负载专家。
解码阶段的最小部署单元由 40 个节点和 320 块 GPU 组成。
- 注意力部分采用 TP4 与 SP 相结合的方式,并与 DP80 相结合;
- MoE 部分使用 EP320,每个 GPU 仅托管一个专家,其中 64 块 GPU 负责托管冗余专家和共享专家。调度和组合部分的全连接通信通过直接的点对点传输在 IB 上进行以实现低延迟。此外,我们还利用了 NVIDIA 的 IBGDA 技术进一步减少延迟并提高通信效率。
与预填充类似,根据在线服务中的统计专家负载,定期确定某个区间内的冗余专家集。但由于每个GPU仅托管一个专家,因此无需重新安排专家。我们也在探索解码过程中的动态冗余策略。
此外,为了提高吞吐量并隐藏全对全通信的开销,我们还在解码阶段探索同时处理具有相似计算负载的两个微批次。与预填充不同,注意力机制在解码阶段消耗了更多的时间。因此,我们将一个微批次的注意力机制与另一个微批次的调度+MoE+组合操作重叠进行。在解码阶段,每个专家的批次大小相对较小(通常在 256 个 token 内),瓶颈在于内存访问而非计算。由于MoE部分只需要加载一个专家的参数,因此内存访问开销较小,使用较少的 SM 不会显著影响整体性能。因此,为了避免影响注意力部分的计算速度,我们可以仅分配少量的SM来执行调度+MoE+组合操作。
3.5 硬件设计建议
基于全对全通信和 FP8 训练方案的实现,我们向 AI 硬件供应商提出以下关于芯片设计的建议。
3.5.1 通信硬件
DeepSeek-V3 实现了计算与通信的重叠以在计算过程中隐藏通信延迟,与串行计算和通信相比,显著减少了对通信带宽的依赖。然而,当前的通信实现依赖于昂贵的 SM,限制计算吞吐量。此外,使用 SM 进行通信会导致显著的效率损失,因为张量核心将完全未充分利用。
目前 SM 主要负责所有节点间全连接通信的所有任务,包括:
- 在 IB(InfiniBand)和 NVLink 域之间转发数据,同时从单个 GPU 收集目的地为同一节点的多个 GPU 的 IB 流量。
- 在 RDMA 缓冲区(注册的 GPU 内存区域)和输入/输出缓冲区之间传输数据。
- 执行全连接结合的归约操作。
- 在IB和NVLink域之间分块数据传输过程中管理细粒度的内存布局。
我们希望未来供应商能够开发出将这些通信任务从计算核心 SM 中分离的硬件,设计成 NVIDIA SHARP 的 GPU 协处理器或网络协处理器一样。此外,为了降低应用程序编程的复杂性,我们希望这种硬件能够从计算单元的角度统一 IB(横向扩展)和 NVLink(纵向扩展)网络。通过基于简单原语提交通信请求,计算单元可以轻松地在 IB-NVLink 统一域内执行读取、写入、多播和归约等操作。
3.5.2 计算硬件
张量核心中的 FP8 GEMM 累积精度提升: 当前 NVIDIA Hopper 架构的张量核心在实现 FP8 GEMM 时采用定点累积方式,通过基于最大指数的右移操作对尾数积进行对齐后再相加。实验显示,该设计在符号填充右移后仅使用每个尾数积的最高 14 位,并舍弃超出范围的位。然而,例如要从 32 个 FP8 × FP8 乘法的累积中获得精确的 FP32 结果,至少需要 34 位精度。因此,建议未来芯片设计提高张量核心的累积精度以支持全精度累积,或根据具体训练和推理算法的精度需求选择合适的累积位宽,以在保证计算效率的同时将误差控制在可接受范围内。
**支持平铺和块状量化:**现有 GPU 仅支持整体张量量化,缺乏对平铺和块状等细粒度量化的硬件支持。当前实现中,达到 N C N_C NC 间隔时需要将部分结果从张量核心复制到 CUDA 核心,进行缩放因子乘法运算,再添加到 CUDA 核心的 FP32 寄存器中。虽然结合精确 FP32 累积策略显著降低了反量化开销,但张量核心和 CUDA 核心间频繁的数据移动仍然制约了计算效率。因此,建议未来芯片支持细粒度量化,使张量核心能够直接接收缩放因子并实现组级缩放的 MMA 操作。这样可以直接在张量核心内完成全部的部分和累积与反量化计算,直到生成最终结果,避免频繁的数据迁移。
**支持在线量化:**尽管研究证实了在线量化的有效性,但当前硬件难以有效支持这一技术。现有流程中需要从 HBM 读取 128 个 BF16 激活值(上一步的计算结果)进行量化,将量化后的 FP8 值写回 HBM,然后再次读取用于 MMA 操作。为解决这一低效问题,建议未来芯片将 FP8 格式转换与 TMA 访问集成为单一融合操作,实现在激活值从全局内存传输到共享内存过程中完成量化,避免频繁的内存读写。同时建议支持线程束级格式转换指令以提升性能,促进层标准化与 FP8 转换的更好融合。另一种方案是采用近内存计算方法,将计算逻辑放置在 HBM 附近,使 BF16 元素在从 HBM 读入 GPU 时直接转换为 FP8,从而将片外内存访问减少约 50%。
支持转置GEMM操作: 现有架构难以实现矩阵转置与 GEMM 操作的有效融合。目前的工作流中,前向传播阶段的激活值需要先量化为 1x128 FP8 平铺格式并存储。在反向传播时,系统必须读取矩阵,执行反量化,进行转置操作,再重新量化为 128x1 平铺格式,最后存入 HBM。为优化内存操作效率,建议未来芯片设计中,对训练和推理中常用的精度格式,支持在 MMA 操作前直接从共享内存进行转置读取。这一改进配合 FP8 格式转换和 TMA 访问的融合机制,将大幅优化量化处理流程。
四、预训练
4.1 数据构建
与 DeepSeek-V2 相比,我们通过增强数学和编程样本的比例并扩展多语言覆盖范围(英语和中文之外)优化了预训练语料库。同时,我们精炼了数据处理管道,以减少冗余并保持语料库的多样性。还实现了文档打包方法以确保数据完整性,但未在训练过程中引入跨样本注意力掩蔽。最终训练语料库包含 14.8T 高质量且多样化的 token。
在 DeepSeekCoder-V2 的训练过程中,我们观察到填充中间(FIM)策略不会损害下一个 token 预测能力,同时使模型能够基于上下文线索准确预测中间文本。具体而言,我们采用**前缀-后缀-中间(PSM)**框架来结构化数据如下:
< ∣ fim _ begin ∣ > f pre < ∣ fim _ hole ∣ > f suf < ∣ fim _ end ∣ > f middle < ∣ eos _ token ∣ > . <|\text{fim}\_\text{begin}|>f_{\text{pre}}<|\text{fim}\_\text{hole}|> f_{\text{suf}}<|\text{fim}\_\text{end}|>f_{\text{middle}}<|\text{eos}\_\text{token}|>. <∣fim_begin∣>fpre<∣fim_hole∣>fsuf<∣fim_end∣>fmiddle<∣eos_token∣>.
该结构作为预打包过程的一部分在文档级别应用。FIM 策略的应用速率为 0.1,与 PSM 框架保持一致。
DeepSeek-V3 的分词器采用字节级 BPE,扩展词汇量为 128K 个词元。分词器的预处理和训练数据进行了修改以优化多语言压缩效率。此外,预处理引入了结合标点符号和换行符的词元。然而,这种技巧在处理多行提示(尤其是少样本评估提示)时,如果没有终端换行符,可能会引入词元边界偏差。为了解决这一问题,我们在训练过程中随机拆分一定比例的此类结合词元,使模型接触到更多特殊案例,并减轻这种偏差。
4.2 超参数
4.2.1 模型超参数
Transformer:
- 61 层,隐藏维度为 7168
- 所有可学习参数均使用标准差为 0.006 的随机值初始化。
MLA:
- 注意力头数量 n h n_h nh 为 128,每个注意力头维度 d h d_h dh 为 128
- KV 压缩维度 d c d_c dc 为 512,查询压缩维度 d c ′ d'_c dc′ 为 1536
- 对于解耦的查询和键每个注意力头的维度 d h R d_h^R dhR 为 64
除了前三层,用 MoE 层替换所有 FFN 层。
-
每个 MoE 层包含 1 个共享专家和 256 个路由专家,每个专家的中间隐藏维度为 2048。
-
在路由专家中,每个 token 激活 8 个专家,最多分配到 4 个节点。
-
多标记预测深度 D D D 为 1,即除了精确的下一个 token 外,每个 token 还将预测一个额外的 token。
与 DeepSeek-V2 类似,DeepSeek-V3 也在压缩潜在向量之后使用额外的 RMSNorm 层,并在宽度瓶颈处乘以额外的缩放因子。
在这种配置下,DeepSeek-V3 总共包含 671B 参数,每个 token 激活 37B 参数。
4.2.2 训练超参数
最大序列长度为 4K,使用 14.8T token。
AdamW 优化器:
- β 1 = 0.9 \beta_1 = 0.9 β1=0.9, β 2 = 0.95 \beta_2 = 0.95 β2=0.95,权重衰减 w e i g h t _ d e c a y = 0.1 weight\_decay = 0.1 weight_decay=0.1。
学习率调度:
- 在前 2K 步骤中线性地将学习率从 0 0 0 增加到 2.2 × 1 0 − 4 2.2 \times 10^{−4} 2.2×10−4;
- 在模型消耗 10T token 之前,保持学习率恒定为 2.2 × 1 0 − 4 2.2 \times 10^{−4} 2.2×10−4;
- 随后 4.3T token 中,学习率按照余弦衰减曲线逐渐衰减至 2.2 × 1 0 − 5 2.2 \times 10^{−5} 2.2×10−5;
- 最终 500B token 的训练过程中,前 333B token 保持学习率恒定为 2.2 × 1 0 − 5 2.2 \times 10^{−5} 2.2×10−5,剩余的 167B token 则切换到学习率 7.3 × 1 0 − 6 7.3 \times 10^{−6} 7.3×10−6。
梯度剪切范数为 1.0,我们采用批量大小调度:
- 前 469B 个 token 的训练过程中,批量大小从 3072 逐渐增加到 15360。
- 剩余训练过程中保持批量大小为 15360。
**管道并行:**将模型的不同层部署在不同的 GPU 上,对于每一层,路由专家将均匀分布在 8 个节点的 64 个 GPU 上。
**节点限制路由:**每个 token 最多分配至 4 个节点( M = 4 M = 4 M=4)。
无辅助损失的负载均衡:
- 前 14.3T token,偏置更新速度 γ = 0.001 \gamma = 0.001 γ=0.001,剩余 500B token 设为 0。
- 平衡损失参数 α = 0.0001 \alpha = 0.0001 α=0.0001,以避免任何单一序列内的极端不平衡。
- 前 10T token,MTP 损失权重 λ = 0.3 \lambda=0.3 λ=0.3,剩余 4.8T token 设为 0.1。
4.3 长上下文扩展
在预训练阶段之后,应用 YaRN 进行上下文扩展,并进行两个额外的训练阶段,每个阶段包含 1000 步,逐步将上下文窗口从 4K 扩展到 32K,然后再扩展到 128K。YaRN 的配置与 DeepSeek-V2 中使用的配置保持一致,仅应用于解耦的共享密钥 k t R k_t^R ktR。
- 超参数在两个阶段中保持一致:缩放尺寸 s = 40 s = 40 s=40, α = 1 \alpha = 1 α=1, β = 32 \beta = 32 β=32,缩放因子 t = 0.1 ln s + 1 \sqrt{t} = 0.1 \ln s + 1 t=0.1lns+1。
- 在第一阶段中,序列长度设置为 32K,批量大小为 1920。
- 在第二阶段中,序列长度增加到 128K,批量大小减少到 480。
- 两个阶段的学习率均设为 7.3 × 1 0 − 6 7.3 \times 10^{-6} 7.3×10−6,与预训练阶段的最终学习率一致。
通过两阶段扩展训练,DeepSeek-V3 能够处理长度高达 128K 的输入,同时保持强劲的性能。
4.4 评估
4.4.1 评估基准
DeepSeek-V3 的基本模型是在以英语和中文为主的多语言语料库上预训练的,因此我们对其性能进行了英语和中文为主的多个基准测试的评估,并在多语言基准测试上进行了评估。我们的评估基于我们集成在 HAI-LLM 框架中的内部评估框架。考虑的基准测试按类别列出如下:
-
多学科多选题:MMLU、MMLU Redux、MMLU-Pro
- 中文:C-Eval、CMMLU
- 多语言:MMMLU
-
语言理解与推理能力:HellaSwag、PIQA、ARC、BigBench Hard (BBH)
-
知识问答:TriviaQA、NaturalQuestions
-
阅读理解:RACE、DROP
- 中文:C3、CMRC
-
指代消歧:WinoGrande
- 中文:CLUEWSC
-
语言建模:Pile
-
中文理解与文化:
- 中文:CCPM
-
数学能力:GSM8K、MATH、MGSM
- 中文:CMath
-
编程能力:HumanEval、LiveCodeBench-Base (0801-1101)、MBPP、CRUXEval
-
综合能力:
- 中文:AGIEval(包含英语和中文两个子集)
评估指标:
- **困惑度指标:**HellaSwag、PIQA、WinoGrande、RACE-Middle、RACE-High、MMLU、MMLU-Redux、MMLU-Pro、MMMLU、ARC-Easy、ARC-Challenge、C-Eval、CMMLU、C3、CCPM 等数据集。
- **生成式评估:**TriviaQA、NaturalQuestions、DROP、MATH、GSM8K、MGSM、HumanEval、MBPP、LiveCodeBench-Base、CRUXEval、BBH、AGIEval、CLUEWSC、CMRC、CMath 等数据集。
- **语言模型评估:**Pile-test,并使用位每字节(Bits-Per-Byte, BPB)作为度量标准,以确保使用不同分词器的模型之间进行公平比较。
4.4.2 评估结果
DeepSeek-V3-Base 全面超越 DeepSeek-V2-Base 和 Qwen2.5-72B-Base,并在绝大多数基准测试中领先 LLaMA-3.1-405B-Base,成为当前性能最强的开源基座模型。
- **相比 DeepSeek-V2-Base:**通过模型架构优化、规模扩展和数据质量提升,DeepSeek-V3-Base 实现了显著性能提升。
- **相比 Qwen2.5-72B-Base:**尽管仅使用一半的激活参数,DeepSeek-V3-Base 在英语、多语言、代码和数学领域均展现出明显优势。在中文评测中,除 CMMLU 外的其他测试也优于 Qwen-2.5-72B。
- **相比 LLaMA-3.1-405B-Base:**即便对方拥有 11 倍的激活参数量,DeepSeek-V3-Base 在多语言、代码和数学领域仍表现更优。在英语和中文语言能力评测中表现相当或更佳,特别是在 BBH、MMLU 系列、DROP、C-Eval、CMMLU 和 CCPM 等测试中表现突出。
4.5 讨论
4.5.1 消融研究:多 token 预测
4.5.2 消融研究:无辅助损失的负载均衡策略
4.5.3 批次级负载均衡 VS. 序列级负载均衡
无辅助损失的负载均衡与序列辅助损失之间的关键区别在于它们的平衡范围:批次级与序列级。
批次级平衡施加了更为灵活的约束,因为它并不强制每个序列在领域内保持平衡。这种灵活性使得专家可以在不同的领域更好地专业化。为了验证这一点,我们在 Pile 测试集的不同领域中记录并分析了一个基于 16B 辅助损失基线模型和一个 16B 无辅助损失模型的专家负载。无辅助损失模型表现出更明显的专家专业化模式。
五、后训练
5.1 监督微调 SFT
精选包含 150 万实例的多领域指令调优数据集,每个领域采用专门针对其特定需求定制的数据生成方法。
5.1.1 推理数据
数学、代码竞赛问题和逻辑谜题等推理数据,通过利用内部的 DeepSeek-R1 模型生成数据。具体而言,虽然R1生成的数据表现出很强的准确性,但存在过度思考、格式不良和篇幅过长等问题。我们的目标是在保持R1生成的推理数据高准确性的基础上,兼顾常规格式化推理数据的清晰性和简洁性。
-
首先开发一个针对特定领域(如代码、数学或一般推理)的专家模型,使用监督微调(SFT)和强化学习(RL)结合的训练管道。该专家模型作为最终模型的数据生成器。
-
为每个实例生成两种不同类型的 SFT 样本:
- 第一种是将问题与其原始响应配对,格式为<问题, 原始响应>;
- 第二种是将系统提示与问题和R1响应结合,格式为<系统提示, 问题, R1响应>。
-
系统提示精心设计,包含指导模型生成包含反思和验证机制的丰富响应的指令。
-
在 RL 阶段,模型利用高温采样生成响应,整合了 R1 生成的数据和原始数据中的模式。经过数百个 RL 步骤后,中间的 RL 模型学会整合 R1 模式,从而战略性地提升整体性能。
-
完成RL训练阶段后,采用拒绝采样来筛选高质量的SFT数据供最终模型使用,其中专家模型作为数据生成源。
5.1.2 非推理数据
创造性写作、角色扮演和简单的问题回答等非推理数据,利用 DeepSeek-V2.5 生成响应,并请人工标注员验证数据的准确性和正确性。
5.1.3 SFT 训练配置
使用SFT数据集对 DeepSeek-V3-Base 进行两轮微调,采用余弦衰减的学习率调度策略,初始学习率为 5 × 1 0 − 6 5\times10^{-6} 5×10−6,并逐渐减少至 1 × 1 0 − 6 1\times10^{-6} 1×10−6。 在训练过程中每个单一序列是从多样本打包而成。t同时采用了样本掩码策略以确保这些示例保持隔离且互不可见。
5.2 强化学习 RL
5.2.1 奖励模型
**基于规则的奖励模型:**对于可以通过特定规则验证的问题,采用基于规则的奖励系统来确定反馈。
- **数学问题:**具有确定的结果,需要模型在指定的格式(如方框内)提供最终答案,从而可以应用规则来验证其正确性。
- **LeetCode 问题:**可以利用编译器根据测试用例生成反馈。通过尽可能利用基于规则的验证方法,我们确保了更高的可靠性,因为这种方法对操纵或利用具有较强的抵抗力。
基于模型的奖励模型:
- **具有自由形式参考答案的问题:**依赖奖励模型来判断响应是否符合预期的参考答案。
- **没有确定参考答案的问题:**例如涉及创造性写作的问题,奖励模型的任务是基于问题和相应的回答作为输入,提供反馈。
奖励模型从 DeepSeek-V3 SFT 检查点进行训练,为了增强其可靠性构建了偏好数据,不仅提供了最终的奖励,还包含了得出奖励的推理过程。
5.2.2 群组相对策略优化(Group Relative Policy Optimization,GRPO)
类似于 DeepSeek-V2,我们采用群组相对策略优化(GRPO),舍弃了通常与策略模型大小相同的评论家模型,而是通过群组评分估计基线。
具体而言,对于每个问题 q q q,GRPO 从旧策略 π θ o l d \pi_{\theta_{old}} πθold 中采样一组输出 { o 1 , o 2 , … , o G } \{o_1, o_2, …, o_G\} {o1,o2,…,oG},然后通过最大化以下目标来优化策略模型 π θ \pi_{\theta} πθ:
其中 ϵ \epsilon ϵ 和 β \beta β 是超参数; A i A_i Ai 是优势函数,使用组内每个输出对应的奖励组 { r 1 , r 2 , … , r G } \{r_1, r_2, …, r_G\} {r1,r2,…,rG} 计算得到:
我们在强化学习(RL)过程中融入了来自多个领域的提示,如编程、数学、写作、角色扮演和问答。这种做法不仅使模型更加贴近人类的偏好,还能在可用的少量数据精细调优(SFT)数据的情况下,提高基准测试中的性能。
5.3 评估
5.3.1 评估设置
**评估基准:**除了在基础模型测试中使用的基准之外,还在 IFEval、FRAMES 、LongBench v2、GPQA、SimpleQA、C SimpleQA、SWE-Bench Verified、Aider、LiveCodeBench(选取 2024 年 8-11 月题目)、Codeforces、2024 年中国高中数学奥林匹克(CNMO)、2024 年美国数学邀请赛(AIME)上评估了指令模型。
**基准模型对比:**与多个强基线模型进行了比较,包括 DeepSeek-V2-0506、DeepSeek-V2.5-0905、Qwen2.5 72B Instruct、LLaMA-3.1 405B Instruct、Claude-Sonnet-3.5-1022、GPT-4o-0513。DeepSeek-V2 模型系列选择了最具代表性的变体进行比较,闭源模型通过各自的 API 进行评估。
详细评估配置:
-
采用 simple evals prompt 评估 MMLU、DROP、GPQA、SimpleQA;
-
采用 Zero-Eval prompt 直接对 MMLU-Redux 实现零样本评估
-
其他数据集遵循其原始评估协议,使用创作者提供的默认提示。
-
HumanEval-Mul 覆盖 8 种主流编程语言(Python、Java、C++、C#、JavaScript、TypeScript、PHP、Bash),LiveCodeBench 采用 CoT 和 non-CoT 格式两种评估,Codeforces 使用参赛者比例进行衡量,SWE-Bench 通过无代理框架验证,AIDER 使用 “diff” 格式进行测量。
-
AIME 和 CNMO 2024 使用温度为 0.7 的评估方式,并在 16 次运行后取平均值,而 MATH-500 则采用贪婪解码。
所有模型在每个基准测试中最多输出 8192 个 token。
5.3.2 标准评估
5.3.3 开放性评估
除了标准基准测试外,我们还使用 LLMs 作为评判者,在开放生成任务中评估模型。
5.3.4 生成式奖励模型
5.4 讨论
5.4.1 DeepSeek-R1 知识蒸馏
基于 DeepSeek-V2.5 研究了 DeepSeek-R1 中知识蒸馏的效果。对比实验中,基准模型使用短链式思维数据训练,而对照组使用专家检查点生成的数据。
实验揭示了一个有趣的权衡:蒸馏虽然提高了性能,但也显著增加了平均响应长度。
5.4.2 自我奖励机制
奖励在 RL 中扮演着关键角色,引导优化过程。在可以通过外部工具进行验证的领域,例如某些编程或数学场景中,RL 展现了卓越的效果。然而,在更广泛的场景下,通过硬编码构建反馈机制是不切实际的。在 DeepSeek-V3 的开发过程中,对于这些更广泛的上下文,我们采用了宪法式 AI 方法,利用 DeepSeek-V3 本身的投票评估结果作为反馈来源。这种方法产生了显著的对齐效果,显著提升了 DeepSeek-V3 在主观评估中的性能。
通过整合额外的宪法式输入,DeepSeek-V3 可以朝着宪法式方向进行优化。我们认为,将补充信息与 LLM 结合作为反馈来源的这一范式至关重要。LLM 作为一种多功能处理器,能够将来自不同场景的非结构化信息转化为奖励,从而促进 LLM 的自我改进。除了自我奖励之外,我们还致力于发现其他通用且可扩展的奖励方法,以在更广泛的场景中持续提升模型的能力。
5.4.3 多 token 预测评估
与仅预测下一个单一 token 不同,DeepSeek-V3 通过 MTP 技术预测接下来的两个 token。结合投机性解码的框架,可以显著加速模型的解码速度。根据评估,第二个 token 预测的接受率在不同生成主题之间范围在 85% 至 90%。高接受率使得 DeepSeek-V3 能够实现显著改进的解码速度,达到 1.8 倍 TPS(每秒生成 token 数)。
六、未来工作
- 持续研究并优化我们的模型架构,旨在进一步提高训练和推理效率,力求接近对无限上下文长度的有效支持。此外,我们将努力突破 Transformer 架构的局限性,从而推动其建模能力的边界。
- 持续迭代训练数据的数量和质量,并探索引入额外训练信号源的方法,旨在驱动数据在更广泛的维度上进行规模化。
- 持续探索并迭代模型的深度思考能力,旨在通过扩展其推理长度和深度来增强其智能和问题解决能力。
- 探索更为全面和多维度的模型评估方法,以防止在研究过程中倾向于优化固定的一组基准,这可能会导致对模型能力的误导性印象,并影响我们对其基础评估的判断。
式至关重要。LLM 作为一种多功能处理器,能够将来自不同场景的非结构化信息转化为奖励,从而促进 LLM 的自我改进。除了自我奖励之外,我们还致力于发现其他通用且可扩展的奖励方法,以在更广泛的场景中持续提升模型的能力。
5.4.3 多 token 预测评估
与仅预测下一个单一 token 不同,DeepSeek-V3 通过 MTP 技术预测接下来的两个 token。结合投机性解码的框架,可以显著加速模型的解码速度。根据评估,第二个 token 预测的接受率在不同生成主题之间范围在 85% 至 90%。高接受率使得 DeepSeek-V3 能够实现显著改进的解码速度,达到 1.8 倍 TPS(每秒生成 token 数)。
六、未来工作
- 持续研究并优化我们的模型架构,旨在进一步提高训练和推理效率,力求接近对无限上下文长度的有效支持。此外,我们将努力突破 Transformer 架构的局限性,从而推动其建模能力的边界。
- 持续迭代训练数据的数量和质量,并探索引入额外训练信号源的方法,旨在驱动数据在更广泛的维度上进行规模化。
- 持续探索并迭代模型的深度思考能力,旨在通过扩展其推理长度和深度来增强其智能和问题解决能力。
- 探索更为全面和多维度的模型评估方法,以防止在研究过程中倾向于优化固定的一组基准,这可能会导致对模型能力的误导性印象,并影响我们对其基础评估的判断。
更多推荐
所有评论(0)