Deepseek V3 Technical Report

绫波波 发布于 2025-02-06 290 次阅读


MetaData

摘要

DeepSeek-V3是一个功能强大的专家混合(Mixture-of-Experts,MoE)语言模型,具备以下显著特点:

  • 参数规模与激活机制
    • 参数总量:包含6710亿个参数。
    • 参数激活:每个符元激活370亿个参数,实现高效的信息处理。
  • 架构创新
    • 多头潜在注意力(Multi-head Latent Attention,MLA):采用此架构以优化推理效率。
    • DeepSeekMoE架构:该架构在DeepSeek-V2中已得到充分验证,进一步提升了模型的性能。
  • 训练策略与性能提升
    • 无辅助损失的负载均衡策略:开创性策略,确保模型在训练过程中的稳定性。
    • 多Token预测训练目标:设定此目标以增强模型的性能。
    • 预训练与微调:在14.8万亿个多样化且高质量的Token上进行预训练,随后进行监督微调和强化学习阶段,充分发挥模型能力。
  • 性能评估与训练效率
    • 性能卓越:综合评估显示,DeepSeek-V3的性能优于其他开源模型,达到与领先的闭源模型相当的水平。
    • 训练成本低:完整训练仅需278.8万H800GPU小时,体现了高效的训练效率。
    • 训练过程稳定:整个训练过程中未遇到任何不可恢复的损失峰值,无需进行回滚。
  • 模型获取

1 引言

近年来,大型语言模型(LLM)正在经历快速迭代和发展,逐渐缩小与人工通用智能(AGI)之间的差距。除了闭源模型之外,开源模型也在取得显著进展,努力缩小与闭源模型的差距。其中包括DeepSeek系列、LLaMA系列、Qwen系列和Mistral系列。为进一步突破开源模型的能力边界,我们扩展了我们的模型,并引入了DeepSeek-V3,这是一个拥有6710亿参数的大型专家混合模型(MoE),其中每个符元激活370亿参数。
我们始终致力于在强大的模型性能和经济成本之间取得平衡。在架构方面,DeepSeek-V3继续采用多头潜在注意力(MLA)以实现高效推理,并采用DeepSeekMoE以实现经济高效的训练。这两种架构已在DeepSeek-V2中得到验证,证明了它们在保持强大模型性能的同时,能够实现高效训练和推理。除了基本架构之外,我们还引入了两种额外的策略以进一步增强模型能力。首先,DeepSeek-V3开创了一种无辅助损失(auxiliary-loss-free)的策略用于负载均衡,旨在最大限度地减少因鼓励负载均衡而对模型性能造成的负面影响。其次,DeepSeek-V3采用多符元(multi-token)预测训练目标,这有助于提高在评估基准上的整体性能。
为了实现高效训练,我们支持FP8混合精度(FP8 mixed precision training)训练,并对训练框架进行了全面优化。低精度训练已成为一种很有前景的高效训练解决方案,其发展与硬件能力的进步密切相关。在本工作中,我们引入了一个FP8混合精度训练框架,并首次在一个极大规模的模型上验证了其有效性。通过支持FP8计算和存储,我们实现了训练加速和GPU内存使用的减少。至于训练框架,我们设计了DualPipe算法以实现高效的流水线并行。该算法具有更少的流水线气泡,并通过计算-通信重叠隐藏了训练期间的大部分通信。这种重叠确保,随着模型进一步扩展,只要我们保持恒定的计算与通信比率,我们仍然可以在节点间使用细粒度的专家,同时实现接近于零的全对全通信开销。此外,我们还开发了高效的跨节点全对全通信内核,以充分利用InfiniBand(IB)和NVLink带宽。我们还精心优化了内存占用,使得无需使用代价高昂的张量并行就能训练DeepSeek-V3。通过这些努力,我们实现了高训练效率。
在预训练期间,我们在14.8T高质量和多样化的符元上训练DeepSeek-V3,整个预训练过程非常稳定。在整个训练过程中,我们没有遇到任何不可恢复的损失峰值,也无需回滚。接下来,我们对DeepSeek-V3进行了两阶段上下文长度扩展。在第一阶段,最大上下文长度扩展到32K,第二阶段进一步扩展到128K。此后,我们进行了后训练,包括在DeepSeek-V3的基础模型上进行监督微调(SFT)和强化学习(RL),以使其与人类偏好对齐,并进一步释放其潜力。在后期训练阶段,我们从DeepSeek-R1系列模型中提取推理能力,同时仔细保持模型精度和生成长度之间的平衡。
我们在全面的基准测试集上评估了DeepSeek-V3。尽管其训练成本经济,但综合评估显示,DeepSeek-V3-Base已成为目前可用的最强开源基础模型,尤其是在代码和数学方面。其聊天版本也优于其他开源模型,并在一系列标准和开放式基准测试中实现了与领先的闭源模型(包括GPT-4o和Claude-3.5-Sonnet)相当的性能。
最后,我们再次强调DeepSeek-V3的经济高效的训练成本。如表1所示,这一成本是通过我们对算法、框架和硬件的优化协同设计实现的。在预训练阶段,训练DeepSeek-V3每万亿个符元仅需18万个H800GPU小时,即在我们拥有2048个H800GPU的集群上运行3.7天。因此,我们的预训练阶段在不到两个月内完成,耗费了266.4万个GPU小时。加上上下文长度扩展的11.9万个GPU小时和后期训练的5000个GPU小时,DeepSeek-V3的全部训练仅需278.8万个GPU小时。假设H800GPU的租赁价格为每GPU小时2美元,我们的总训练成本仅为557.6万美元。请注意,上述成本仅包括DeepSeek-V3的正式训练,不包括与先前关于架构、算法或数据的研究和消融实验相关的成本。

表1 DeepSeek-V3的训练成本,假设H800的租赁价格为每GPU小时2美元

我们的主要贡献包括:

架构:创新的负载均衡策略和训练目标

  • 在DeepSeek-V2高效架构的基础上,我们开创了一种无辅助损失的负载均衡策略,最大限度地减少了因鼓励负载均衡而造成的性能下降。
  • 我们研究了一种多符元预测(MTP)目标,并证明它有利于提升模型性能。它还可以用于推测性解码,以加速推理过程。

预训练:迈向极致训练效率

  • 我们设计了一个FP8混合精度训练框架,并首次验证了FP8训练在超大规模模型上的可行性和有效性。
  • 通过算法、框架和硬件的协同设计,我们克服了跨节点MoE训练中的通信瓶颈,实现了接近完全的计算通信重叠。这显著提高了我们的训练效率并降低了训练成本,使我们能够在无需额外开销的情况下进一步扩大模型规模。
  • 我们仅以 266.4 万 H800 GPU 小时的经济成本,在 14.8 万亿符元上完成了 DeepSeek-V3 的预训练,从而产生了目前最强大的开源基础模型。预训练后的后续训练阶段仅需 0.1 万 GPU 小时。

训练后阶段:来自 DeepSeek-R1 的知识蒸馏

  • 我们引入了一种创新的方法,将推理能力(特别是来自DeepSeek R1系列模型之一的)从长链思维(CoT)模型中蒸馏到标准的大语言模型(LLM)中,特别是DeepSeek-V3。我们的流程巧妙地将R1的验证和反思模式(verification and reflection patterns)融入DeepSeek-V3,并显著提高了其推理性能。同时,我们也保持了对DeepSeek-V3输出风格和长度的控制。

核心评估结果总结

  • 知识:
    • 在MMLU、MMLU-Pro和GPQA等教育基准测试中,DeepSeek-V3的性能优于所有其他开源模型,在MMLU上达到88.5,在MMLU-Pro上达到75.9,在GPQA上达到59.1。其性能与GPT-4o和Claude-Sonnet-3.5等领先的闭源模型相当,缩小了该领域开源模型和闭源模型之间的差距。
    • 对于事实性基准测试,DeepSeek-V3在SimpleQA和中文SimpleQA上都展现出优于其他开源模型的性能。虽然在英文事实知识(SimpleQA)方面落后于GPT-4o和Claude-Sonnet-3.5,但在中文事实知识(中文 SimpleQA)方面却超过了这些模型,突显了其在中文事实知识方面的优势。
  • 代码、数学和推理:
    • 在所有非长链思维(CoT)开源和闭源模型中,DeepSeek-V3 在与数学相关的基准测试中实现了最先进的性能。值得注意的是,它甚至在某些基准测试(例如 MATH-500)上超越了 o1-preview,展现了其强大的数学推理能力。
    • 在与编码相关的任务中,DeepSeek-V3成为编码竞赛基准测试(例如 LiveCodeBench)中性能最高的模型,巩固了其在该领域的领先地位。对于工程相关任务,虽然DeepSeek-V3的性能略低于Claude-Sonnet-3.5,但它仍然显著超越其他所有模型,证明了其在各种技术基准测试中的竞争力。

在本文的其余部分,我们将首先详细介绍DeepSeek-V3模型架构(第2节)。随后,我们将介绍我们的基础设施,包括我们的计算集群、训练框架、对FP8训练的支持、推理部署策略以及我们对未来硬件设计的建议(第3节)。接下来,我们将描述我们的预训练过程,包括训练数据的构建、超参数设置、长上下文扩展技术、相关的评估以及一些讨论(第4节)。此后,我们将讨论我们在训练后的努力,包括监督微调(SFT)、强化学习(RL)、相应的评估和讨论(第5节)。最后,我们将总结这项工作,讨论DeepSeek-V3现有的局限性,并为未来的研究提出潜在的方向(第6节)。

2 架构

我们首先介绍DeepSeek-V3的基本架构。其核心特点是多头潜在注意力(MLA),用于实现高效推理,以及DeepSeekMoE,用于实现经济高效的训练。随后,我们将介绍多符元预测(MTP)训练目标,我们观察到这一目标可以显著提升模型在评估基准上的整体性能。对于其他未明确提及的细节,DeepSeek-V3均遵循DeepSeek-V2的设置。

2.1 基本架构

DeepSeek-V3的基本架构仍然基于Transformer框架。为了实现高效的推理和经济的训练,DeepSeek-V3采用了多头潜在注意力(MLA)和DeepSeekMoE,这些技术已经在DeepSeek-V2中得到了充分验证。与DeepSeek-V2相比,唯一的例外是,我们额外引入了一种无辅助损失的负载均衡策略,用于DeepSeekMoE,以减轻因需要保证负载均衡而导致的性能下降。图2展示了DeepSeek-V3的基本架构,我们将在本节中简要回顾MLA和DeepSeekMoE的细节。

图2 DeepSeek-V3基本架构图示。遵循DeepSeek-V2,我们采用MLA和DeepSeekMoE来实现高效的推理和经济高效的训练。

2.1.1 多头潜在注意力

对于注意力机制,DeepSeek-V3 采用了多头潜在注意力(MLA)架构。设d表示嵌入维度,n_h表示注意力头的数量,d_h表示每个头的维度,h_t\in\mathbb{R}^d表示给定注意力层中第t个符元的注意力输入。MLA的核心是注意力键和值的低秩联合压缩(low-rank joint compression),以减少推理过程中的键值(KV)缓存:

其中:
\mathbf{c}_{t}^{kv} \in \mathbb{R}^{d_c}是键和值的压缩潜在向量;
d_{c} (\ll d_hn_h)表示KV压缩维度;
W^{UK},W^{UV} \in \mathbb{R}^{d_hn_h×d_c}分别是键和值的降维和升维投影矩阵;
\mathbf{W}^{KR} \in \mathbb{R}^{d_h^R×d} 是用于生成携带旋转位置嵌入(RoPE)的解耦键的矩阵;
\text{RoPE}(\cdot)表示应用RoPE矩阵的操作;
[\cdot; \cdot]表示向量连接。
请注意,对于MLA,在生成过程中只需要缓存蓝色方框内的向量(即\mathbf{c}_{t}^{KV}\mathbf{k}_{t}^{R}),这在保持与标准多头注意力(Multi-Head Attention,MHA)相当的性能的同时,显著减少了KV缓存。
对于注意力查询,我们也执行低秩压缩,以减少训练过程中的激活内存:

其中:
\mathbf{c}_{t}^{Q} \in \mathbb{R}^{d_{c}'}是查询的压缩潜在向量;
d_{c}'(\ll d_hn_h)表示查询压缩维度;
\mathbf{W}^{DQ} \in \mathbb{R}^{d_{c}' \times d}\mathbf{W}^{UQ} \in \mathbb{R}^{d_hn_h \times d_{q}'}分别是查询的降维和升维投影矩阵;
\mathbf{W}^{QR} \in \mathbb{R}^{d_h^Rn_h \times d{q}'}是用于生成携带RoPE的解耦查询的矩阵。
最终,注意力查询(\mathbf{q}_{t,i})、键(\mathbf{k}_{j,i})和值(\mathbf{v}_{j,i}^{C})组合起来产生最终的注意力输出\mathbf{u}_{t}

其中\mathbf{W}_{O} \in \mathbb{R}^{d \times d_hn_h}表示输出投影矩阵。

2.1.2 具有无辅助损失的负载均衡的DeepSeekMoE
DeepSeekMoE的基本架构

对于前馈网络(FFNs),DeepSeek-V3 采用了 DeepSeekMoE 架构。与 GShard 等传统的 MoE 架构相比,DeepSeekMoE 使用更细粒度的专家,并将一些专家隔离为共享专家。设u_t表示第t个符元的FFN输入,我们按以下方式计算FFN输出h_t':

其中:N_sN_r分别表示共享专家和路由专家的数量;FNN_{i}^{(s)}(\cdot)FNN_{i}^{(r)}(\cdot)分别表示第i个共享专家和第i个路由专家;K_r表示激活的路由专家的数量;g_{i,t}是第i个专家的门控值;s_{i,t}是符元到专家的亲和力;e_i是第i个路由专家的质心向量;Topk(⋅,K)表示包含针对第i个符元和所有路由专家计算出的亲和力分数中K个最高分数的集合。与DeepSeek-V2略有不同的是,DeepSeek-V3使用Sigmoid函数计算亲和力分数,并在所有选择的亲和力分数中应用归一化来生成门控值。

无辅助损失的负载均衡

对于 MoE 模型,不均衡的专家负载会导致路由崩溃,并在专家并行场景中降低计算效率。常规解决方案通常依赖于辅助损失来避免不均衡负载。然而,过大的辅助损失会损害模型性能。为了在负载均衡和模型性能之间取得更好的平衡,我们开创了一种无辅助损失的负载均衡策略来确保负载均衡。
具体来说,我们为每个专家引入一个偏差项b_i,并将其添加到相应的亲和力分数s_{i,t}中以确定top-K路由:

注意,偏差项仅用于路由。门控值将乘以FFN输出,仍然来自原始亲和力分数s_{i,t}。在训练过程中,我们持续监控每个训练步骤整个批次的专家负载。在每个步骤结束时,如果其对应的专家过载,我们将偏差项减少\gamma;如果其对应的专家负载不足,我们将偏差项增加\gamma,其中\gamma是一个称为偏差更新速度的超参数。通过动态调整,DeepSeek-V3在训练过程中保持均衡的专家负载,并取得比通过纯辅助损失来鼓励负载均衡的模型更好的性能。

补充的序列级辅助损失

尽管DeepSeek-V3主要依赖于无辅助损失的策略来进行负载均衡,但为了防止任何单个序列内的极端不平衡,我们还采用了一种补充的序列级平衡损失:

其中,平衡因子\alpha是一个超参数,对于DeepSeek-V3,它将被赋予一个极小的值;\mathbb{1}(⋅)表示指示函数;T表示序列中符元的数量。基于序列的平衡损失鼓励每个序列上的专家负载保持平衡。

节点限制路由

与DeepSeek-V2使用的设备限制路由类似,DeepSeek-V3也使用受限路由机制来限制训练期间的通信成本。简而言之,我们确保每个符元最多会被发送到M个节点,这些节点根据每个节点上分布的专家最高\frac{K_r}{M}个亲和力分数之和来选择。在此约束下,我们的MoE训练框架几乎可以实现完全的计算-通信重叠。

不丢弃符元

由于有效的负载均衡策略,DeepSeek-V3在其整个训练过程中保持良好的负载平衡。因此,DeepSeek-V3 在训练过程中不会丢弃任何符元。此外,我们还实现了特定的部署策略以确保推理负载平衡,因此 DeepSeek-V3在推理过程中也不会丢弃符元。

2.2 多符元预测

受相关研究的启发,我们研究并为DeepSeek-V3设置了一个多符元预测(Multi-Token Prediction,MTP)目标,该目标将预测范围扩展到每个位置的多个未来符元。一方面,MTP目标使训练信号更加密集,并可能提高数据效率。另一方面,MTP可以使模型预先规划其表示,以便更好地预测未来的符元。图3说明了我们对MTP的实现。与某些研究使用独立的输出头并行预测多个附加符元不同,我们顺序预测附加符元,并在每个预测深度保持完整的因果链。我们在本节介绍了MTP实现的细节。

图3 我们多符元预测 (MTP) 实现的示意图。 我们保留每个深度每个符元预测的完整因果链。

MTP模块

具体来说,我们的MTP实现使用D个顺序模块来预测D个附加符元。第k个MTP模块由一个共享嵌入层Emb(⋅)、一个共享输出头OutHead(⋅)、一个Transformer块 TRM_k(⋅)和一个投影矩阵M_k\in\mathbb{R}^{d×2d}组成。对于第i个输入符元t_i,在第k个预测深度,我们首先结合第i个符元在第 (k-1)个深度h_i^{k-1}\in\mathbb{R}^d的表示和第(i+k)个符元Emb(t_{i+k})的嵌入,进行线性投影:

其中[\cdot; \cdot]表示连接。特别是,当k=1时,\mathbf{h}_i^{k-1}指的是主模型给出的表示。请注意,对于每个MTP模块,其嵌入层与主模型共享。组合的\mathbf{h}_i^{k'}作为第 k个深度的Transformer块的输入,以产生当前深度\mathbf{h}_i^k的输出表示:

其中T表示输入序列长度,i:j表示切片操作(包含左右边界)。最后,以\mathbf{h}i^k作为输入,共享输出头将计算第k个附加预测符元 P_{i+1+k}^{k} \in \mathbb{R}^V的概率分布,其中V是词汇量大小:

输出头\text{OutHead}(\cdot)将表示线性映射到logits,随后应用\text{Softmax}(\cdot)函数来计算第k个附加符元的预测概率。此外,对于每个MTP模块,其输出头与主模型共享。我们保持预测因果链的原则类似于某些研究,但其主要目标是推测性解码,而我们利用MTP改进训练。

MTP训练目标

对于每个预测深度,我们计算交叉熵损失\mathcal{L}_{MTP}^k

其中:T表示输入序列长度,t_i表示第i个位置的真实符元,P_i^k[t_i]表示由第k个MTP模块给出的t_i的对应预测概率。最后,我们将所有深度的MTP损失取平均值,并乘以权重因子\gamma,得到整体MTP损失\mathcal{L}_{MTP},这作为DeepSeek-V3的附加训练目标:

推理中的MTP

我们的MTP策略主要旨在提高主模型的性能,因此在推理过程中,我们可以直接丢弃MTP模块,主模型可以独立正常运行。此外,我们还可以将这些MTP模块重新用于推测性解码,以进一步提高生成延迟。

3 基础设施

3.1 计算集群

DeepSeek-V3的训练是在一个配备2048个NVIDIA H800 GPU的集群上完成的。该集群中的每个节点包含8个GPU,这些GPU通过节点内的NVLink和NVSwitch进行连接。在不同节点之间,利用InfiniBand(IB)互连来促进通信。

3.2 训练框架

DeepSeek-V3的训练由HAI-LLM框架支持,这是一个由我们的工程师从头开始构建的高效轻量级训练框架。总体而言DeepSeek-V3应用了16路流水线并行(Pipeline Parallelism,PP),跨越8个节点的64路专家并行(Expert Parallelism,EP),以及ZeRO-1数据并行(Data Parallelism,DP)。
为了促进DeepSeek-V3的高效训练,我们实现了细致的工程优化。首先,我们设计了用于高效流水线并行的DualPipe算法。与现有的流水线并行方法相比,DualPipe的流水线气泡更少。更重要的是,它重叠了前向和后向过程中的计算和通信阶段,从而解决了跨节点专家并行引入的沉重通信开销的挑战。其次,我们开发了高效的跨节点全对全通信内核,以充分利用IB和NVLink带宽,并节省专门用于通信的流多处理器(Streaming Multiprocessors,SM)。最后,我们仔细优化了训练期间的内存占用,从而使我们能够在不使用代价高昂的张量并行(Tensor Parallelism,TP)的情况下训练DeepSeek-V3。

3.2.1 DualPipe和计算-通信重叠

对于DeepSeek-V3,跨节点专家并行引入的通信开销导致计算与通信比率低效,约为1:1。为了应对这一挑战,我们设计了一种名为DualPipe的创新流水线并行算法。该算法不仅通过有效地重叠前向和后向计算-通信阶段来加速模型训练,还减少了流水线气泡。
DualPipe的核心思想是重叠一对单独的前向和后向块中的计算和通信。具体来说,我们将每个块划分为四个主要组件:
注意力(Attention)、全对全调度(All-to-All Sharding)、MLP(多层感知机)、全对全组合(All-to-All Combining)。特别地,对于后向块,注意力和MLP进一步被分成两部分:输入的反向和权重的反向,类似于ZeroBubble中的方法。此外,我们还有一个PP通信组件。 如图4所示,对于一对前向和后向块,我们重新排列这些组件并手动调整专用于通信与计算的GPU SM比例。在这种重叠策略中,我们可以确保在执行过程中所有到所有和PP通信都可以完全隐藏。鉴于高效的重叠策略,完整的DualPipe调度如图5所示。它采用双向流水线调度,同时从流水线的两端馈送微批次,并且可以完全重叠很大一部分通信。这种重叠还确保,随着模型进一步扩展,只要我们保持恒定的计算与通信比率,我们仍然可以在节点之间使用细粒度的专家,同时实现接近零的全部到全部通信开销。

图4:一对单独的前向和后向块的重叠策略(Transformer块的边界未对齐)。橙色表示前向,绿色表示“输入的反向”,蓝色表示“权重的反向”,紫色表示流水线并行通信,红色表示屏障。全对全通信和流水线并行通信都可以完全隐藏。

图5:8个PP秩和两个方向上20个微批次的DualPipe调度示例。反向的微批次与正向的微批次对称,为了简化说明,我们省略了它们的批次ID。由共享黑边包围的两个单元格具有相互重叠的计算和通信。

此外,即使在没有大量通信负担的更一般情况下,DualPipe仍然表现出效率优势。在表2中,我们总结了不同流水线并行(PP)方法的流水线气泡和内存使用情况。如表所示,与ZB1P和1F1B相比,DualPipe显著减少了流水线气泡,而峰值激活内存仅增加了\frac{1}{PP}倍。尽管DualPipe需要保留模型参数的两个副本,但这不会显著增加内存消耗,因为我们在训练期间使用了较大的专家并行(EP)大小。与Chimera相比,DualPipe只需要流水线阶段和微批次能够被2整除,而不需要微批次能够被流水线阶段整除。此外,对于DualPipe,气泡和激活内存都不会随着微批次数量的增加而增加。

表2: 不同流水线并行方法的流水线阻塞和内存使用情况比较。F表示前向块的执行时间,B表示完整后向块的执行时间,W表示“权重后向”块的执行时间,F&B表示两个相互重叠的前向和后向块的执行时间。

3.2.2 高效实现跨节点全对全通信

为了确保DualPipe具有足够的计算性能,我们定制了高效的跨节点全对全通信内核(包括调度和组合),以节省专用于通信的流多处理器(Streaming Multiprocessors,SM)数量。内核的实现与MoE门控算法和我们集群的网络拓扑结构共同设计。具体来说,在我们的集群中,跨节点GPU通过InfiniBand(IB)完全互连,节点内通信通过NVLink处理。NVLink提供160 GB/s的带宽,大约是IB (50 GB/s)的3.2倍。
为了有效利用IB和NVLink的不同带宽,我们将每个符元最多调度到4个节点,从而减少IB通信量。对于每个符元,在其路由决策做出后,它将首先通过IB传输到目标节点上具有相同节点内索引的GPU。一旦到达目标节点,我们将努力确保它通过NVLink即时转发到承载其目标专家的特定GPU,而不会被随后到达的符元阻塞。通过这种方式,通过IB和NVLink的通信完全重叠,每个符元可以有效地选择每个节点平均3.2个专家,而不会产生NVLink的额外开销。这意味着,尽管DeepSeek-V3在实践中只选择8个路由专家,但它可以将此数量最多扩展到13个专家(4个节点\times3.2个专家/节点),同时保持相同的通信成本。总体而言,在这种通信策略下,只需要20个SM就能充分利用IB和NVLink的带宽。
详细来说,我们采用warp专业化技术,并将20个SM分成10个通信通道。在调度过程中,(1)IB发送,(2)IB到NVLink转发,以及(3)NVLink接收分别由各自的warp处理。分配给每个通信任务的warp数会根据所有SM上的实际工作负载动态调整。同样,在合并过程中,(1)NVLink发送,(2)NVLink到IB的转发和累积,以及(3)IB接收和累积也由动态调整的warp处理。此外,调度和合并内核都与计算流重叠,因此我们也考虑它们对其他SM计算内核的影响。具体来说,我们采用定制的PTX(Parallel Thread Execution,并行线程执行)指令并自动调整通信块大小,这显著减少了L2缓存的使用以及对其他SM的干扰。

3.2.3 极低的内存占用,几乎没有额外开销

为了减少训练期间的内存占用,我们采用了以下技术:

RMSNorm和MLA上投影的重新计算

我们在反向传播过程中重新计算所有RMSNorm操作和MLA上投影,从而无需持久存储它们的输出激活值。通过少量额外开销,此策略显著减少了存储激活值所需的内存。

CPU 中的指数移动平均

在训练期间,我们保留模型参数的指数移动平均(Exponential Moving Average, EMA),以便在学习率衰减后尽早估计模型性能。EMA参数存储在CPU内存中,并在每个训练步骤之后异步更新。此方法使我们能够在不产生额外内存或时间开销的情况下维护EMA参数。

用于多符元预测的共享嵌入和输出头

使用DualPipe策略,我们将模型中最浅的层(包括嵌入层)和最深的层(包括输出头)部署在同一个流水线并行(PP)秩上。此安排使得MTP模块和主模型之间可以物理共享共享嵌入和输出头的参数和梯度。这种物理共享机制进一步提高了我们的内存效率。

3.3 FP8训练

受近期低精度训练进展的启发,我们提出了一种利用FP8数据格式对DeepSeek-V3进行训练的细粒度混合精度框架。尽管低精度训练前景广阔,但其往往受限于激活值、权重和梯度中异常值的存在。尽管在推理量化方面已取得显著进展,但在大规模语言模型预训练中成功应用低精度技术的研究相对较少。为应对这一挑战并有效扩展 FP8 格式的动态范围,我们引入了一种细粒度量化策略:采用 1 \times N_c 元素的分块分组或 N_c \times N_c 元素的块分组。在我们提高精度的累加机制下,相关的去量化开销得到了很大程度的缓解,这是实现准确的 FP8 通用矩阵乘法(GEMM)的关键方面。此外,为了进一步降低 MoE 训练中的内存和通信开销,我们在 FP8 中缓存和分发激活值,同时以 BF16 格式存储低精度优化器状态。我们在两个类似于 DeepSeek-V2-Lite 和 DeepSeek-V2 的模型规模上验证了所提出的 FP8 混合精度框架,训练了大约 1 万亿个标记。值得注意的是,与 BF16 基线相比,我们的 FP8 训练模型的相对损失误差始终低于 0.25%,这一水平完全在训练随机性的可接受范围内。

3.3.1 混合精度框架
我们提出了一种用于FP8训练的混合精度框架。该框架在大多数计算密集型操作中采用FP8精度,同时战略性地保留部分关键操作的原始数据格式(例如BF16或FP32),以平衡训练效率与数值稳定性。图6展示了框架的整体结构。
图6 使用FP8数据格式的整体混合精度框架。为清楚起见,仅说明了Linear运算符。
 
首先,为了加速模型训练,核心计算内核(即GEMM运算)大多以FP8精度实现。这些GEMM运算以FP8张量为输入,并输出BF16或FP32的结果。如图6所示,与Linear算子相关的三个GEMM运算——Fprop(前向传播)、Dgrad(激活反向传播)和Wgrad(权重反向传播)——均以FP8精度执行。这种设计理论上可将计算速度提升一倍,相较于原有的BF16方法。此外,FP8 Wgrad GEMM允许以FP8格式存储激活值,供反向传播使用,从而显著减少内存消耗。
尽管FP8格式在效率上具有显著优势,但某些算子由于对低精度计算较为敏感,仍需更高的精度。此外,一些计算成本较低的算子可以使用更高精度,而不会对整体训练成本产生显著影响。因此,经过细致研究,我们为以下组件保留了原始精度(例如,BF16或FP32):嵌入模块、输出头、MoE门控模块、归一化算子以及注意力算子。这些组件有针对性地保留高精度,确保了模型的稳定训练动态。为进一步保障数值稳定性,我们将主权重、权重梯度和优化器状态以更高精度存储。虽然这些高精度组件会带来一定的内存开销,但可通过在分布式训练系统中跨多个数据并行(DP)节点进行高效分片,从而最大限度地降低其影响。
3.3.2 量化与乘法带来的精度改进
基于混合精度FP8框架,我们引入了多种策略以提高低精度训练的精度,重点关注量化方法和乘法过程。
细粒度量化
在低精度训练框架中,由于FP8格式的动态范围有限(受其减少的指数位限制),上溢和下溢是常见问题。传统方法通过将输入张量的最大绝对值缩放至FP8的最大可表示值,以使输入分布与FP8格式的可表示范围对齐。然而,这种方法对激活异常值高度敏感,会显著降低量化精度。为解决这一问题,我们提出了一种细粒度量化方法,该方法在更细粒度的级别应用缩放。如图7(a)所示:(1) 对于激活,我们基于1×128的块(即每个符元的128个通道)对元素进行分组和缩放;(2) 对于权重,我们基于128×128的块(即每个128个输入通道对应128个输出通道)对元素进行分组和缩放。该方法通过根据较小的元素组调整比例,确保量化过程能够更好地适应异常值。在附录B.2中,我们进一步讨论了在激活量化中应用与权重类似的块级分组和缩放时的训练不稳定性。
图 7:(a) 我们提出了一种细粒度量化方法来减轻由特征异常值引起的量化误差;为简单起见,仅说明了Fprop(b) 结合我们的量化策略,我们通过以[letax]N_c=128[/latex]个元素 MMA 的间隔提升到 CUDA 内核来提高 FP8 GEMM 精度,以实现高精度累积。
我们方法的一个关键改进是在GEMM运算的内维中引入每组缩放因子。标准FP8 GEMM运算不支持这一功能,但结合我们精确的FP32累加策略,可以有效地实现它。
值得注意的是,我们的细粒度量化策略与微缩放格式的理念高度一致,而NVIDIA下一代GPU(Blackwell系列)的Tensor Cores已宣布支持具有更小量化粒度的微缩放格式。我们希望我们的设计可以作为未来工作的参考,以跟上最新的GPU架构。
提高累加精度
低精度GEMM运算通常会遇到下溢问题,其精度在很大程度上取决于高精度累加,通常以FP32精度执行。然而,我们观察到NVIDIA H800 GPU上FP8 GEMM的累加精度仅限于保留约14位,远低于FP32累加精度。当内部维度K较大时,这一问题将更加突出,这在大规模模型训练中是一个典型场景,其中批量大小和模型宽度都会增加。以K=4096的两个随机矩阵的GEMM运算为例,在我们的预备测试中,Tensor Core中有限的累加精度导致最大相对误差接近2%。尽管存在这些问题,但在一些FP8框架中,有限的累加精度仍然是默认选项,严重限制了训练精度。
为解决这一问题,我们采用将计算提升到CUDA Core以获得更高精度的方法。该过程如图7(b)所示。具体而言,在Tensor Core上执行MMA(矩阵乘法累加)期间,使用有限的位宽累加中间结果。一旦达到N_c间隔,这些部分结果将被复制到CUDA Core上的FP32寄存器中,在那里执行全精度FP32累加。如前所述,我们的细粒度量化沿内部维度K应用每个组的比例因子。这些比例因子可以在CUDA Core上高效地乘以,作为反量化过程,并具有最小的额外计算成本。
值得注意的是,这种修改降低了单个线程块的WGMMA(线程组级矩阵乘法累加)指令发出率。然而,在H800架构上,通常有两个WGMMA同时存在:当一个线程块执行提升操作时,另一个线程块能够执行MMA操作。这种设计能够使这两个操作重叠,保持Tensor Core的高利用率。根据我们的实验,设置间隔为128个元素,相当于4个WGMMAs,代表了可以在不引入大量额外开销的情况下显著提高精度的最小累加间隔。
尾数比指数
与先前工作采用的混合FP8格式形成对比,该格式在Fprop中使用E4M3(4位指数和3位尾数),在Dgrad和Wgrad中使用E5M2(5位指数和2位尾数),我们对所有张量采用E4M3格式以获得更高的精度。我们将这种方法的可行性归因于我们细粒度的量化策略,即基于块的缩放。通过对较小的元素组进行操作,我们的方法有效地在这些分组元素之间共享指数位,从而减轻了有限动态范围的影响。
在线量化
延迟量化被用于张量量化框架,该框架维护先前迭代中最大绝对值的记录以推断当前值。为了确保精确的比例并简化框架,我们针对每个1×128激活块或128×128权重块在线计算最大绝对值。基于此,我们推导出缩放因子,然后将激活或权重在线量化为FP8格式。

  • alipay_img
  • wechat_img
Talk is cheap, show me the code.
最后更新于 2025-02-13