4 预训练

本文为论文《DeepSeek-V3:强大高效的开源混合专家大模型》「中文全文翻译」板块的对应章节,与「论文原文」板块同一章节一一对应,层级保持一致。

4.1 数据构建

与 DeepSeek-V2 相比,我们优化了预训练语料,提高了数学和编程样本的比例,同时将多语言覆盖扩展到英语和中文之外。此外,我们的数据处理流水线经过改进,以最小化冗余,同时保持语料的多样性。受 Ding et al.(2024)启发,我们实现了文档打包(document packing)方法来保证数据完整性,但在训练过程中并未引入跨样本注意力掩码。最终,DeepSeek-V3 的训练语料由我们分词器中的 14.8T 高质量且多样的词元组成。

在 DeepSeekCoder-V2(DeepSeek-AI, 2024a)的训练过程中,我们观察到 Fill-in-Middle(FIM)策略不会损害下一词元预测能力,同时使模型能够基于上下文线索准确预测中间文本。与 DeepSeekCoder-V2 保持一致,我们也在 DeepSeek-V3 的预训练中融入了 FIM 策略。具体而言,我们采用前缀-后缀-中间(PSM)框架将数据结构化如下:

| | $\displaystyle\texttt{}f_{\text{pre}}\texttt{}f_{\text{suf}}\texttt{}f_{\text{middle}}\texttt{}.$ | |

该结构在文档级别作为预打包过程的一部分应用。FIM 策略以 0.1 的比率应用,与 PSM 框架一致。

DeepSeek-V3 的分词器采用字节级 BPE(Shibata et al., 1999),扩展词表为 128K 词元。我们的分词器的预分词器和训练数据经过了修改,以优化多语言压缩效率。此外,与 DeepSeek-V2 相比,新的预分词器引入了组合标点符号和换行的词元。然而,当模型处理没有终止换行符的多行提示时,这种技巧可能会引入词元边界偏差(Lundberg, 2023),尤其是在少样本评估提示中。为了解决这个问题,我们在训练期间随机拆分了一定比例的此类组合词元,这使模型接触到更广泛的特殊情况,并减轻了这种偏差。

4.2 超参数

模型超参数。

我们将 Transformer 层数设置为 61,隐藏维度设置为 7168。所有可学习参数均以 0.006 的标准差随机初始化。在 MLA 中,我们将注意力头数 $n_{h}$ 设置为 128,每个头的维度 $d_{h}$ 设置为 128。KV 压缩维度 $d_{c}$ 设置为 512,查询压缩维度 $d_{c}^{\prime}$ 设置为 1536。对于解耦的查询和键,我们将每个头的维度 $d_{h}^{R}$ 设置为 64。我们将除前三层以外的所有 FFN 替换为 MoE 层。每个 MoE 层由 1 个共享专家和 256 个路由专家组成,其中每个专家的中间隐藏维度为 2048。在路由专家中,每个词元将激活 8 个专家,并且每个词元将确保最多被发送到 4 个节点。多词元预测深度 $D$ 设置为 1,即除精确的下一个词元外,每个词元将额外预测一个词元。与 DeepSeek-V2 一样,DeepSeek-V3 也在压缩潜在向量之后采用额外的 RMSNorm 层,并在宽度瓶颈处乘以额外的缩放因子。在此配置下,DeepSeek-V3 包含 671B 总参数,其中每个词元激活 37B 参数。

训练超参数。

我们采用 AdamW 优化器(Loshchilov and Hutter, 2017),其超参数设置为 $\beta_{1}=0.9$、$\beta_{2}=0.95$ 和 $\mathrm{weight_decay}=0.1$。我们将最大序列长度设置为 4K,并在 14.8T 词元上预训练 DeepSeek-V3。关于学习率调度,我们首先在前 2K 步将学习率从 0 线性增加到 $2.2\times 10^{-4}$。然后,我们保持 $2.2\times 10^{-4}$ 的恒定学习率,直到模型消耗 10T 训练词元。随后,我们遵循余弦衰减曲线,在 4.3T 词元上将学习率逐渐衰减到 $2.2\times 10^{-5}$。在最后 500B 词元的训练期间,我们在前 333B 词元保持 $2.2\times 10^{-5}$ 的恒定学习率,并在剩余的 167B 词元切换到另一个 $7.3\times 10^{-6}$ 的恒定学习率。梯度裁剪范数设置为 1.0。我们采用批量大小调度策略,在前 469B 词元的训练中批量大小从 3072 逐步增加到 15360,然后在剩余训练中保持 15360。我们利用流水线并行将模型的不同层部署在不同的 GPU 上,并且对于每一层,路由专家将均匀部署在属于 8 个节点的 64 块 GPU 上。关于受限节点路由,每个词元最多被发送到 4 个节点(即 $M=4$)。对于无辅助损失的负载均衡,我们将偏置更新速度 $\gamma$ 在前 14.3T 词元上设置为 0.001,在剩余的 500B 词元上设置为 0.0。对于均衡损失,我们将 $\alpha$ 设置为 0.0001,只是为了避免任何单一序列内的极端失衡。MTP 损失权重 $\lambda$ 在前 10T 词元上设置为 0.3,在剩余的 4.8T 词元上设置为 0.1。

图

图 8:“大海捞针”(NIAH)测试上的评估结果。DeepSeek-V3 在长达 128K 的所有上下文窗口长度上均表现良好。

4.3 长上下文扩展

我们采用与 DeepSeek-V2(DeepSeek-AI, 2024c)类似的方法,为 DeepSeek-V3 赋予长上下文能力。在预训练阶段之后,我们应用 YaRN(Peng et al., 2023a)进行上下文扩展,并执行两个额外的训练阶段,每个阶段包含 1000 步,以逐步将上下文窗口从 4K 扩展到 32K,然后再扩展到 128K。YaRN 配置与 DeepSeek-V2 中使用的保持一致,专门应用于解耦的共享键 $\mathbf{k}^{R}_{t}$。两个阶段的超参数完全相同,缩放 $s=40$、$\alpha=1$、$\beta=32$,以及缩放因子 $\sqrt{t}=0.1\ln{s}+1$。在第一阶段,序列长度设置为 32K,批量大小为 1920。在第二阶段,序列长度增加到 128K,批量大小减少到 480。两个阶段的学习率均设置为 $7.3\times 10^{-6}$,与预训练阶段的最终学习率相匹配。

通过这种两阶段扩展训练,DeepSeek-V3 能够处理长达 128K 的输入,同时保持强劲的性能。图 8 显示,经过监督微调的 DeepSeek-V3 在“大海捞针”(NIAH)测试中取得了显著性能,展示了在长达 128K 的上下文窗口长度上的一致鲁棒性。

4.4 评估
4.4.1 评估基准

DeepSeek-V3 的基础模型在多语言语料上预训练,其中英语和中文占大多数,因此我们在一系列主要以英语和中文以及多语言基准上评估其性能。我们的评估基于集成在我们 HAI-LLM 框架中的内部评估框架。所考虑的基准分类列举如下,其中带下划线的基准为中文,带双下划线的基准为多语言基准:

多学科多项选择题数据集包括 MMLU(Hendrycks et al., 2020)、MMLU-Redux(Gema et al., 2024)、MMLU-Pro(Wang et al., 2024b)、MMMLU(OpenAI, 2024b)、C-Eval(Huang et al., 2023)和 CMMLU(Li et al., 2023)。

语言理解与推理数据集包括 HellaSwag(Zellers et al., 2019)、PIQA(Bisk et al., 2020)、ARC(Clark et al., 2018)和 BigBench Hard(BBH)(Suzgun et al., 2022)。

闭卷问答数据集包括 TriviaQA(Joshi et al., 2017)和 NaturalQuestions(Kwiatkowski et al., 2019)。

阅读理解数据集包括 RACE(Lai et al., 2017)、DROP(Dua et al., 2019)、C3(Sun et al., 2019a)和 CMRC(Cui et al., 2019)。

指代消歧数据集包括 CLUEWSC(Xu et al., 2020)和 WinoGrande(Sakaguchi et al., 2019)。

语言建模数据集包括 Pile(Gao et al., 2020)。

中文理解与文化数据集包括 CCPM(Li et al., 2021)。

数学数据集包括 GSM8K(Cobbe et al., 2021)、MATH(Hendrycks et al., 2021)、MGSM(Shi et al., 2023)和 CMath(Wei et al., 2023)。

代码数据集包括 HumanEval(Chen et al., 2021)、LiveCodeBench-Base(0801-1101)(Jain et al., 2024)、MBPP(Austin et al., 2021)和 CRUXEval(Gu et al., 2024)。

标准化考试包括 AGIEval(Zhong et al., 2023)。注意,AGIEval 包含英语和中文子集。

遵循我们之前的工作(DeepSeek-AI, 2024b; DeepSeek-AI, 2024c),我们对包括 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 执行基于语言建模的评估,并使用每字节比特数(BPB)作为指标,以保证使用不同分词器的模型之间进行公平比较。

表 3:DeepSeek-V3-Base 与其他代表性开源基础模型之间的比较。所有模型都在我们的内部框架中评估,并共享相同的评估设置。差距不超过 0.3 的分数被视为同一水平。DeepSeek-V3-Base 在大多数基准上取得了最佳性能,尤其是在数学和代码任务上。

4.4.2 评估结果

在表 3 中,我们将 DeepSeek-V3 的基础模型与最先进的开源基础模型进行比较,包括 DeepSeek-V2-Base(DeepSeek-AI, 2024c)(我们先前发布的版本)、Qwen2.5 72B Base(Qwen, 2024b)和 LLaMA-3.1 405B Base(AI@Meta, 2024b)。我们使用内部评估框架评估所有这些模型,并确保它们共享相同的评估设置。注意,由于过去几个月我们的评估框架发生了变化,DeepSeek-V2-Base 的性能与我们之前报告的结果略有差异。总体而言,DeepSeek-V3-Base 全面优于 DeepSeek-V2-Base 和 Qwen2.5 72B Base,并在大多数基准上超越了 LLaMA-3.1 405B Base,本质上成为最强的开源模型。

从更详细的角度来看,我们逐个将 DeepSeek-V3-Base 与其他开源基础模型进行比较。 (1) 与 DeepSeek-V2-Base 相比,由于我们的模型架构改进、模型规模和训练词元的扩大以及数据质量的提升,DeepSeek-V3-Base 如预期取得了显著更好的性能。 (2) 与最先进的中文开源模型 Qwen2.5 72B Base 相比,DeepSeek-V3-Base 仅使用了其一半的激活参数,也展现出显著优势,尤其是在英语、多语言、代码和数学基准上。至于中文基准,除了 CMMLU(一项中文多学科多项选择题任务)外,DeepSeek-V3-Base 也表现出比 Qwen2.5 72B 更好的性能。 (3) 与拥有 11 倍激活参数的最大开源模型 LLaMA-3.1 405B Base 相比,DeepSeek-V3-Base 在多语言、代码和数学基准上也展现出好得多的性能。在英语和中文语言基准上,DeepSeek-V3-Base 表现出有竞争力或更好的性能,在 BBH、MMLU 系列、DROP、C-Eval、CMMLU 和 CCPM 上尤为突出。

由于我们高效的架构和全面的工程优化,DeepSeek-V3 实现了极高的训练效率。在我们的训练框架和基础设施下,在每万亿词元上训练 DeepSeek-V3 仅需 18 万 H800 GPU 小时,这比为 72B 或 405B 稠密模型训练要便宜得多。

表 4:MTP 策略的消融结果。MTP 策略在大部分评估基准上一贯提升了模型性能。

4.5 讨论
4.5.1 多词元预测的消融实验

在表 4 中,我们展示了 MTP 策略的消融结果。具体而言,我们在两个不同规模的基线模型之上验证了 MTP 策略。在小规模下,我们训练了一个总参数为 15.7B 的基线 MoE 模型,训练 1.33T 词元。在大规模下,我们训练了一个总参数为 228.7B 的基线 MoE 模型,训练 540B 词元。在它们之上,保持训练数据和其他架构相同,我们附加了一个 1 深度的 MTP 模块,并训练了两个采用 MTP 策略的模型进行比较。注意,在推理过程中,我们直接丢弃 MTP 模块,因此被比较模型的推理成本完全相同。从表中我们可以观察到,MTP 策略在大部分评估基准上一贯提升了模型性能。

4.5.2 无辅助损失均衡策略的消融实验

在表 5 中,我们展示了无辅助损失均衡策略的消融结果。我们在两个不同规模的基线模型之上验证了该策略。在小规模下,我们训练了一个总参数为 15.7B 的基线 MoE 模型,训练 1.33T 词元。在大规模下,我们训练了一个总参数为 228.7B 的基线 MoE 模型,训练 578B 词元。两个基线模型都纯粹使用辅助损失来鼓励负载均衡,并使用带有 Top-K 亲和度归一化的 sigmoid 门控函数。它们用于控制辅助损失强度的超参数分别与 DeepSeek-V2-Lite 和 DeepSeek-V2 相同。在这两种基线模型之上,保持训练数据和其他架构相同,我们移除了所有辅助损失,并引入无辅助损失的均衡策略进行比较。从表中我们可以观察到,无辅助损失策略在大部分评估基准上一贯取得了更好的模型性能。

表 5:无辅助损失均衡策略的消融结果。与纯基于辅助损失的方法相比,无辅助损失策略在大部分评估基准上一贯取得了更好的模型性能。

4.5.3 批次级负载均衡与序列级负载均衡

无辅助损失均衡与序列级辅助损失之间的关键区别在于它们的均衡范围:批次级与序列级。与序列级辅助损失相比,批次级均衡施加了更灵活的约束,因为它不强制要求每个序列内部的均衡。这种灵活性使专家能够更好地专注于不同领域。为了验证这一点,我们记录并分析了 16B 基于辅助损失基线和 16B 无辅助损失模型在 Pile 测试集中不同领域上的专家负载。如图 9 所示,我们观察到无辅助损失模型如预期展现出更强的专家专门化模式。

为了进一步研究这种灵活性与模型性能优势之间的相关性,我们额外设计并验证了批次级辅助损失,它在每个训练批次而非每个序列上鼓励负载均衡。实验结果表明,当达到类似的批次级负载均衡水平时,批次级辅助损失也能取得与无辅助损失方法相似的模型性能。具体而言,在我们对 1B MoE 模型的实验中,验证损失分别为:2.258(使用序列级辅助损失)、2.253(使用无辅助损失方法)和 2.253(使用批次级辅助损失)。我们也在 3B MoE 模型上观察到了类似的结果:使用序列级辅助损失的模型取得了 2.085 的验证损失,而使用无辅助损失方法或批次级辅助损失的模型取得了相同的 2.080 验证损失。

此外,尽管批次级负载均衡方法展示出一致的性能优势,它们在效率方面也面临两个潜在挑战:(1) 某些序列或小批次内的负载不均衡,以及 (2) 推理过程中由领域偏移引起的负载不均衡。第一个挑战由我们使用大规模专家并行和数据并行的训练框架自然解决,这保证了每个微批次都有较大的规模。对于第二个挑战,我们也设计并实现了一个带有冗余专家部署的高效推理框架,如第 3.4 节所述,以克服它。

图

图 9:无辅助损失模型和基于辅助损失模型在 Pile 测试集中三个领域上的专家负载。无辅助损失模型比基于辅助损失的模型展现出更强的专家专门化模式。相对专家负载表示实际专家负载与理论均衡专家负载之间的比值。由于篇幅限制,我们仅以两层的结果为例进行展示,所有层的结果在附录 C 中提供。