注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
DeepSeek大模型技术系列一
DeepSeek核心算法解析:如何打造比肩ChatGPT的国产大模型
DeepSeek核心算法解析:如何打造比肩ChatGPT的国产大模型DeepSeek-AI
摘要
我们推出 DeepSeek-V3,这是一款强大的混合专家(MoE)语言模型,总参数达 6710 亿,每个 token 激活 370 亿参数。为实现高效推理和经济高效的训练,DeepSeek-V3 采用多头潜在注意力(MLA)和 DeepSeekMoE 架构,这些架构在 DeepSeek-V2 中已得到充分验证。此外,DeepSeek-V3 首创了无辅助损失的负载均衡策略,并设置了多 token 预测训练目标,以提升性能。我们在 14.8 万亿多样且高质量的 token 上对 DeepSeek-V3 进行预训练,随后通过监督微调(Supervised Fine-Tuning)和强化学习(Reinforcement Learning)阶段充分发挥其能力。综合评估显示,DeepSeek-V3 性能优于其他开源模型,与领先的闭源模型相当。尽管性能卓越,但 DeepSeek-V3 的完整训练仅需 278.8 万个 H800 GPU 小时,训练过程也非常稳定,在整个训练过程中未出现任何不可恢复的损失峰值,也无需进行回滚操作。模型检查点可在https://github.com/deepseek-ai/DeepSeek-V3获取。
目录
1.引言 - 4
2.架构 - 6
2.1 基本架构 - 6
2.1.1 多头潜在注意力 - 7
2.1.2 采用无辅助损失负载均衡的 DeepSeekMoE - 8
2.2 多 token 预测 - 10
1.基础设施 - 11
3.1 计算集群 - 11
3.2 训练框架 - 12
3.2.1 DualPipe 与计算通信重叠 - 12
3.2.2 跨节点全对全通信的高效实现 - 13
3.2.3 极低的内存占用与最小开销 - 14
3.3 FP8 训练 - 14
3.3.1 混合精度框架 - 15
3.3.2 量化与乘法的精度提升 - 16
3.3.3 低精度存储与通信 - 18
3.4 推理与部署 - 18
3.4.1 预填充 - 19
3.4.2 解码 - 19
3.5 硬件设计建议 - 20
3.5.1 通信硬件 - 20
3.5.2 计算硬件 - 20
2.预训练 - 22
4.1 数据构建 - 22
4.2 超参数 - 22
4.3 长上下文扩展 - 23
4.4 评估 - 24
4.4.1 评估基准 - 24
4.4.2 评估结果 - 25
4.5 讨论 - 26
4.5.1 多 token 预测的消融研究 - 26
4.5.2 无辅助损失平衡策略的消融研究 - 27
4.5.3 批量负载平衡与序列负载平衡 - 27
3.后训练 - 28
5.1 监督微调 - 28
5.2 强化学习 - 28
5.2.1 奖励模型 - 29
5.2.2 组相对策略优化 - 30
5.3 评估 - 30
5.3.1 评估设置 - 30
5.3.2 标准评估 - 32
5.3.3 开放评估 - 33
5.3.4 DeepSeek-V3 作为生成式奖励模型 - 33
5.4 讨论 - 34
5.4.1 从 DeepSeek-R1 蒸馏知识 - 34
5.4.2 自奖励 - 34
5.4.3 多 token 预测评估 - 35
4.结论、局限性与未来方向 - 35
A. 贡献与致谢 - 45
B. 低精度训练的消融研究 - 47
B.1 FP8 与 BF16 训练对比 - 47
B.2 关于块量化的讨论 - 47
C. 基于 160 亿参数有辅助损失和无辅助损失模型的专家专业化模式 - 48
- 引言
近年来,大语言模型(LLMs)迅速迭代发展(Anthropic, 2024; Google, 2024; OpenAI, 2024a),与通用人工智能(AGI)的差距逐渐缩小。除了闭源模型,包括 DeepSeek 系列(DeepSeek-AI, 2024a,b,c; Guo 等人,2024)、LLaMA 系列(AI@Meta, 2024a,b; Touvron 等人,2023a,b)、Qwen 系列(Qwen, 2023, 2024a,b)和 Mistral 系列(Jiang 等人,2023; Mistral, 2024)在内的开源模型也在不断进步,努力缩小与闭源模型的差距。为进一步拓展开源模型的能力边界,我们扩大模型规模,推出了具有 6710 亿参数的大型混合专家(MoE)模型 DeepSeek-V3,每个 token 激活 370 亿参数。
我们以前瞻性的视角,始终追求强大的模型性能和经济的成本。因此,在架构方面,DeepSeek-V3 仍采用多头潜在注意力(MLA)(DeepSeek-AI, 2024c)实现高效推理,采用 DeepSeekMoE(Dai 等人,2024)进行经济高效的训练。这两种架构在 DeepSeek-V2 中已得到验证,证明它们能够在实现高效训练和推理的同时,保持强大的模型性能。除了基本架构,我们还实施了两种额外策略来进一步提升模型能力。首先,DeepSeek-V3 首创了无辅助损失的负载均衡策略(Wang 等人,2024a),旨在最小化因鼓励负载均衡而对模型性能产生的不利影响。其次,DeepSeek-V3 采用多 token 预测训练目标,我们发现这可以提高模型在评估基准上的整体性能。
为实现高效训练,我们支持 FP8 混合精度训练,并对训练框架进行全面优化。低精度训练已成为高效训练的一种有前景的解决方案(Dettmers 等人,2022; Kalamkar 等人,2019; Narang 等人,2017; Peng 等人,2023b),其发展与硬件能力的提升密切相关(Luo 等人,2024; Micikevicius 等人,2022; Rouhani 等人,2023a)。在本研究中,我们引入了 FP8 混合精度训练框架,并首次在超大规模模型上验证了其有效性。通过支持 FP8 计算和存储,我们实现了训练加速和 GPU 内存占用的减少。在训练框架方面,我们设计了 DualPipe 算法实现高效的流水线并行,该算法减少了流水线气泡,并通过计算 - 通信重叠在训练过程中隐藏了大部分通信开销。这种重叠确保了随着模型规模的进一步扩大,只要我们保持恒定的计算与通信比率,就可以在跨节点使用细粒度专家的同时,实现近乎为零的全对全通信开销。此外,我们还开发了高效的跨节点全对全通信内核,以充分利用 InfiniBand(IB)和 NVLink 带宽。我们还精心优化了内存占用,使得在不使用昂贵的张量并行的情况下也能训练 DeepSeek-V3。综合这些努力,我们实现了高训练效率。
在预训练阶段,我们使用 14.8 万亿高质量且多样的 token 对 DeepSeek-V3 进行训练。预训练过程非常稳定,在整个训练过程中,我们没有遇到任何不可恢复的损失峰值,也无需回滚。接下来,我们对 DeepSeek-V3 进行了两个阶段的上下文长度扩展。在第一阶段,最大上下文长度扩展到 32K,在第二阶段,进一步扩展到 128K。之后,我们对 DeepSeek-V3 的基础模型进行后训练,包括监督微调(SFT)和强化学习(RL),使其符合人类偏好并进一步释放其潜力。在后训练阶段,我们从 DeepSeekR1 系列模型中提取推理能力,同时仔细平衡模型准确性和生成长度。
训练成本 预训练 上下文扩展 后训练 总计
H800 GPU 小时数 266.4 万 11.9 万 0.5 万 278.8 万
美元成本 532.8 万美元 23.8 万美元 1 万美元 557.6 万美元
表 1 DeepSeek-V3 的训练成本(假设 H800 的租用价格为每 GPU 小时 2 美元)
我们在一系列综合基准上对 DeepSeek-V3 进行评估。尽管训练成本经济,但综合评估显示,DeepSeek-V3 基础模型已成为目前最强的开源基础模型,特别是在代码和数学领域。其聊天版本在一系列标准和开放基准上也优于其他开源模型,性能与领先的闭源模型(如 GPT-4o 和 Claude-3.5-Sonnet)相当。
最后,我们再次强调 DeepSeek-V3 经济的训练成本,总结在表 1 中,这是通过我们对算法、框架和硬件的优化协同设计实现的。在预训练阶段,训练 DeepSeek-V3 每万亿 token 仅需 18 万 H800 GPU 小时,即在拥有 2048 个 H800 GPU 的集群上训练 3.7 天。因此,我们的预训练阶段在不到两个月的时间内完成,耗费 266.4 万 GPU 小时。结合上下文长度扩展的 11.9 万 GPU 小时和后训练的 0.5 万 GPU 小时,DeepSeek-V3 的完整训练仅需 278.8 万 GPU 小时。假设 H800 GPU 的租用价格为每 GPU 小时 2 美元,我们的总训练成本仅为 557.6 万美元。需要注意的是,上述成本仅包括 DeepSeek-V3 的官方训练成本,不包括与架构、算法或数据的前期研究和消融实验相关的成本。
我们的主要贡献包括:
架构:创新的负载均衡策略和训练目标
在 DeepSeek-V2 高效架构的基础上,我们首创了无辅助损失的负载均衡策略,最小化了因鼓励负载均衡而导致的性能下降。
我们研究了多 token 预测(MTP)目标,并证明其对模型性能有益。它还可用于推测解码以加速推理。
预训练:追求极致训练效率
我们设计了 FP8 混合精度训练框架,并首次在超大规模模型上验证了 FP8 训练的可行性和有效性。
通过算法、框架和硬件的协同设计,我们克服了跨节点 MoE 训练中的通信瓶颈,实现了近乎完全的计算 - 通信重叠。这显著提高了我们的训练效率,降低了训练成本,使我们能够在不增加额外开销的情况下进一步扩大模型规模。以仅 266.4 万 H800 GPU 小时的经济成本,我们完成了在 14.8 万亿 token 上对 DeepSeek-V3 的预训练,生成了目前最强的开源基础模型。预训练后的后续训练阶段仅需 10 万 GPU 小时。
后训练:从 DeepSeek-R1 进行知识蒸馏
我们引入了一种创新方法,将长思维链(CoT)模型(具体为 DeepSeek R1 系列模型之一)的推理能力蒸馏到标准大语言模型中,特别是 DeepSeek-V3。我们的流程巧妙地将 R1 的验证和反思模式融入 DeepSeek-V3,显著提高了其推理性能。同时,我们还控制了 DeepSeek-V3 的输出风格和长度。
核心评估结果总结
知识:(1)在 MMLU、MMLU-Pro 和 GPQA 等教育基准上,DeepSeek-V3 优于所有其他开源模型,在 MMLU 上得分为 88.5,在 MMLU-Pro 上得分为 75.9,在 GPQA 上得分为 59.1。其性能与 GPT-4o 和 Claude-Sonnet-3.5 等领先的闭源模型相当,缩小了开源和闭源模型在该领域的差距。(2)在事实性基准上,DeepSeek-V3 在 SimpleQA 和 Chinese SimpleQA 上均展示了开源模型中的卓越性能。虽然在英语事实知识(SimpleQA)方面落后于 GPT-4o 和 Claude-Sonnet-3.5,但在中文事实知识(Chinese SimpleQA)方面超过了这些模型,凸显了其在中文事实知识方面的优势。
代码、数学和推理:(1)DeepSeek-V3 在所有非长 CoT 的开源和闭源模型中,在数学相关基准上取得了最先进的性能。值得注意的是,它在特定基准(如 MATH-500)上甚至超过了 o1-preview,展示了其强大的数学推理能力。(2)在编码相关任务中,DeepSeek-V3 在编码竞赛基准(如 LiveCodeBench)中表现最佳,巩固了其在该领域的领先地位。在工程相关任务中,虽然 DeepSeek-V3 的表现略低于 Claude-Sonnet-3.5,但仍大幅领先其他模型,展示了其在各种技术基准上的竞争力。
在本文的其余部分,我们首先详细介绍 DeepSeek-V3 模型架构(第 2 节)。随后,我们介绍基础设施,包括计算集群、训练框架、FP8 训练支持、推理部署策略以及对未来硬件设计的建议。接下来,我们描述预训练过程,包括训练数据的构建、超参数设置、长上下文扩展技术、相关评估以及一些讨论(第 4 节)。之后,我们讨论后训练工作,包括监督微调(SFT)、强化学习(RL)、相应的评估和讨论(第 5 节)。最后,我们总结这项工作,讨论 DeepSeek-V3 的现有局限性,并提出未来研究的潜在方向(第 6 节)。
2. 架构
我们首先介绍 DeepSeek-V3 的基本架构,其特点是采用多头潜在注意力(MLA)(DeepSeek-AI, 2024c)实现高效推理,采用 DeepSeekMoE(Dai 等人,2024)进行经济高效的训练。然后,我们提出多 token 预测(MTP)训练目标,我们发现这可以提高模型在评估基准上的整体性能。对于未明确提及的其他细节,DeepSeek-V3 遵循 DeepSeek-V2(DeepSeek-AI, 2024c)的设置。
2.1 基本架构
DeepSeek-V3 的基本架构仍基于 Transformer(Vaswani 等人,2017)框架。为实现高效推理和经济高效的训练,DeepSeek-V3 还采用了经 DeepSeek-V2 充分验证的 MLA 和 DeepSeekMoE。与 DeepSeek-V2 不同的是,我们为 DeepSeekMoE 引入了无辅助损失的负载均衡策略(Wang 等人,2024a),以减轻为确保负载均衡而对模型性能造成的影响。图 2 展示了 DeepSeek-V3 的基本架构,我们将在本节简要回顾 MLA 和 DeepSeekMoE 的细节。
图 2 DeepSeek-V3 基本架构示意图。遵循 DeepSeek-V2,我们采用 MLA 和 DeepSeekMoE 实现高效推理和经济高效的训练
2.1.1 多头潜在注意力
对于注意力机制,DeepSeek-V3 采用 MLA 架构。设表示嵌入维度,表示注意力头数,表示每个头的维度,表示给定注意力层中第个 token 的注意力输入。MLA 的核心是对注意力键值进行低秩联合压缩,以减少推理时的键值(KV)缓存:
其中是键值的压缩潜在向量;表示 KV 压缩维度;表示下投影矩阵;、分别是键值的上投影矩阵;是用于生成携带旋转位置嵌入(RoPE)(Su 等人,2024)的解耦键的矩阵;RoPE 表示应用 RoPE 矩阵的操作;表示拼接。需要注意的是,对于 MLA,在生成过程中仅需缓存蓝色框中的向量(即和),这显著减少了 KV 缓存,同时保持与标准多头注意力(MHA)(Vaswani 等人,2017)相当的性能。
对于注意力查询,我们也进行低秩压缩,这可以减少训练期间的激活内存:
其中是查询的压缩潜在向量;表示查询压缩维度;、$W^{U Q
、分别是查询的下投影和上投影矩阵;是用于生成携带 RoPE 的解耦查询的矩阵。
最终,注意力查询()、键()和值()相结合,产生最终的注意力输出:
其中表示输出投影矩阵。
2.1.2 采用无辅助损失负载均衡的 DeepSeekMoE
DeepSeekMoE 基本架构:对于前馈网络(FFNs),DeepSeek-V3 采用 DeepSeekMoE 架构(Dai 等人,2024)。与传统的 MoE 架构(如 GShard(Lepikhin 等人,2021))相比,DeepSeekMoE 使用更细粒度的专家,并将部分专家设置为共享专家。设表示第个 token 的 FFN 输入,我们按如下方式计算 FFN 输出:
否则
其中和分别表示共享专家和路由专家的数量;和分别表示第个共享专家和第个路由专家;表示激活的路由专家数量;是第个专家的门控值;是 token 与专家的亲和度;是第个路由专家的质心向量;表示在为第个 token 和所有路由专家计算的亲和度分数中,包含个最高分数的集合。与 DeepSeek-V2 略有不同,DeepSeek-V3 使用 sigmoid 函数计算亲和度分数,并对所有选定的亲和度分数进行归一化以生成门控值。
无辅助损失负载均衡:对于 MoE 模型,专家负载不均衡会导致路由崩溃(Shazeer 等人,2017),并在专家并行的场景中降低计算效率。传统解决方案通常依赖辅助损失(Fedus 等人,2021;Lepikhin 等人,2021)来避免负载不均衡。然而,过大的辅助损失会损害模型性能(Wang 等人,2024a)。为了在负载均衡和模型性能之间实现更好的平衡,我们首创了无辅助损失的负载均衡策略(Wang 等人,2024a)来确保负载均衡。具体来说,我们为每个专家引入一个偏差项,并将其添加到相应的亲和度分数中,以确定前路由:
否则
注意,偏差项仅用于路由。与 FFN 输出相乘的门控值仍由原始亲和度分数导出。在训练过程中,我们持续监控每个训练步骤中整个批次的专家负载。在每个步骤结束时,如果相应专家负载过高,我们将偏差项减小;如果负载过低,则将其增大,其中是一个称为偏差更新速度的超参数。通过动态调整,DeepSeek-V3 在训练过程中保持专家负载平衡,并且比仅通过辅助损失鼓励负载均衡的模型表现更好。
互补的序列级辅助损失:虽然 DeepSeek-V3 主要依靠无辅助损失策略来实现负载平衡,但为了防止单个序列内出现极端不平衡,我们还采用了互补的序列级平衡损失:
𝟙
其中平衡因子是一个超参数,对于 DeepSeek-V3,其取值极小;𝟙表示指示函数;表示序列中的 token 数量。序列级平衡损失鼓励每个序列上的专家负载保持平衡。
图 3 多 token 预测(MTP)实现示意图。我们在每个深度保持每个 token 预测的完整因果链
节点限制路由:与 DeepSeek-V2 使用的设备限制路由类似,DeepSeek-V3 也采用受限路由机制来限制训练期间的通信成本。简而言之,我们确保每个 token 最多被发送到个节点,这些节点根据分布在每个节点上的专家的最高个亲和度分数之和来选择。在这种约束下,我们的 MoE 训练框架几乎可以实现完全的计算 - 通信重叠。
无 token 丢弃:由于有效的负载均衡策略,DeepSeek-V3 在整个训练过程中保持良好的负载平衡。因此,DeepSeek-V3 在训练过程中不会丢弃任何 token。此外,我们还实施了特定的部署策略来确保推理负载平衡,所以 DeepSeek-V3 在推理过程中也不会丢弃 token。
2.2 多 token 预测
受 Gloeckle 等人(2024)的启发,我们为 DeepSeek-V3 研究并设置了多 token 预测(MTP)目标,将预测范围扩展到每个位置的多个未来 token。一方面,MTP 目标使训练信号更密集,可能提高数据效率。另一方面,MTP 可能使模型能够预先规划其表示,以便更好地预测未来 token。图 3 展示了我们的 MTP 实现。与 Gloeckle 等人(2024)使用独立输出头并行预测个额外 token 不同,我们顺序预测额外 token,并在每个预测深度保持完整的因果链。我们在本节介绍 MTP 实现的详细信息。
MTP 模块:具体来说,我们的 MTP 实现使用个顺序模块来预测个额外 token。第个 MTP 模块由一个共享嵌入层、一个共享输出头、一个 Transformer 块和一个投影矩阵组成。对于第个输入 token ,在第个预测深度&