DeepSeek从入门到精通(5万字资料精华)

1.DeepSeek官方 核心论文

  1. 核心论文1 DeepSeek-R1:通过强化学习激励 LLM 中的推理能力
  2. 核心论文2 通过长期主义扩展开源语言模型:DeepSeek 大语言模型
  3. 核心论文3 DeepSeek-V3技术报告

2. 海外deepSeek观点重要讨论

  1. SemiAnalysis :DeepSeek 大讨论:中国在成本上的领先地位、真实的训练成本、封闭模型对利润率的影响
  2. 【洞见】硅谷Ben Thompson谈「DeepSeek」FAQ
  3. Deepseek R1可能找到了超越人类的办

核心论文1 :

DeepSeek-R1:通过强化学习激励 LLM 中的推理能力

摘要

我们介绍了第一代推理模型DeepSeek-R1-Zero和DeepSeek-R1。DeepSeek-R1-Zero是一个通过大规模强化学习(RL)训练而无需监督微调(SFT)初步步骤的模型,展示了卓越的推理能力。通过RL,DeepSeek-R1-Zero自然地展现出许多强大且有趣的推理行为。然而,它也遇到了如可读性差、语言混合等问题。为了解决这些问题并进一步提升推理性能,我们引入了DeepSeek-R1,它在RL之前结合了多阶段训练和冷启动数据。DeepSeek-R1在推理任务上的表现与OpenAI-o1-1217相当。为了支持研究社区,我们开源了DeepSeek-R1-Zero、DeepSeek-R1及其基于Qwen和Llama从DeepSeek-R1蒸馏出的六个密集模型(1.5B, 7B, 8B, 14B, 32B, 70B)。

1. 引言

近年来,大型语言模型(LLMs)经历了快速迭代与演进(Anthropic, 2024; Google, 2024; OpenAI),逐步缩小了与通用人工智能(AGI)的差距。

后训练(post-training)已成为完整训练流程中的重要组成部分。研究表明,后训练能够以相对较低的计算资源成本提升模型在推理任务中的准确性、与社会价值观对齐的能力,并适应用户偏好。在推理能力方面,OpenAI的o1系列模型首次通过扩展思维链(Chain-of-Thought, CoT)的长度实现了推理性能的显著提升,在数学、编程和科学推理等任务中取得了重大进展。然而,如何在推理过程中有效扩展计算规模仍是一个开放性问题。此前的研究尝试了多种方法,包括基于过程的奖励模型(PRM)、强化学习(RL)以及蒙特卡洛树搜索(MCTS)等算法,但这些方法均未达到与OpenAI o1系列模型相匹敌的通用推理性能。

本文首次探索了如何通过纯强化学习(RL)提升语言模型的推理能力。我们的目标是在不依赖监督数据(SFT)的前提下,通过纯RL过程激励模型自主演化推理能力。具体而言,我们以DeepSeek-V3-Base为基模型,采用GRPO(Shao et al., 2024)作为RL框架,成功训练出首个无需SFT冷启动的推理模型——DeepSeek-R1-Zero。在训练过程中,DeepSeek-R1-Zero自发涌现出多种强大的推理行为(如自我验证、反思和生成长思维链)。经过数千步RL训练后,其在AIME 2024数学竞赛中的pass@1得分从15.6%跃升至71.0%,多数投票(cons@64)后进一步提升至86.7%,性能与OpenAI-o1-0912相当。

然而,DeepSeek-R1-Zero仍面临可读性差、语言混杂等问题。为此,我们进一步提出DeepSeek-R1,通过引入少量冷启动数据(cold-start data)和多阶段训练流程优化模型。具体步骤包括:

  1. 冷启动阶段:收集数千条长思维链数据对基模型进行微调;
  2. 推理导向的强化学习:沿用DeepSeek-R1-Zero的RL流程,但引入语言一致性奖励以抑制语言混杂;
  3. 拒绝采样与监督微调:利用RL检查点生成高质量SFT数据,并结合非推理任务数据(写作、事实问答等)重新训练模型;
  4. 全场景强化学习:结合规则奖励和偏好奖励,进一步对齐人类偏好。

最终,DeepSeek-R1在推理任务中的表现与OpenAI-o1-1217相当。此外,我们通过蒸馏(distillation)将DeepSeek-R1的推理能力迁移至小型稠密模型(1.5B-70B),其中蒸馏后的14B模型显著超越开源标杆QwQ-32B-Preview,32B和70B模型则在推理基准测试中刷新了稠密模型的记录。

1.1 贡献

后训练:基础模型的大规模强化学习

蒸馏:较小的模型也可以很强大

1.2. 评估结果总结

推理任务:jinr

知识:

其他:

2. 方法

2.1 概述

传统方法严重依赖监督数据提升模型性能。本研究证明,即使不依赖监督微调(SFT),仅通过大规模强化学习(RL)即可显著提升推理能力,而引入少量冷启动数据可进一步优化性能。具体方法包括:

2.2 DeepSeek-R1-Zero:基模型的强化学习

强化学习在推理任务中展示了显著的有效性,这从我们之前的工作(Shao等人,2024;Wang等人,2023)中可以得到证实。然而,这些工作严重依赖于监督数据,而这些数据的收集非常耗时。在本节中,我们将探讨大型语言模型(LLMs)在没有任何监督数据的情况下发展推理能力的潜力,重点关注其通过纯强化学习过程进行自我演进的能力。

我们首先简要概述我们的RL算法,然后展示一些令人兴奋的结果,希望这能为研究社区提供宝贵的见解。具体内容如下:

通过这一系列探索,我们希望能够为社区提供新的思路和技术手段,促进更加高效和智能的语言模型开发。

2.2.1 强化学习算法

组相对策略优化(Group Relative Policy Optimization, GRPO):

为了节省强化学习(RL)的训练成本,我们采用了组相对策略优化(GRPO)(Shao 等人,2024),它放弃了通常与策略模型大小相同的评论家模型,而是从组分数中估计基线。具体来说,对于每个问题 q,GRPO 从旧策略 πθold 中采样一组输出 {o1,o2,⋯,oG},然后通过最大化以下目标来优化策略模型 πθ

其中 ε 和 β 是超参数,使用每个组内输出对应的一组奖励 {r1,r2,…,rG} 计算优势参数Ai:

表1 | DeepSeek-R1-Zero 的模板。prompt在训练的过程中会用特定的解释性问题替换

2.2.2. 奖励建模

奖励是训练信号的来源,它决定了 RL 的优化方向。为了训练 DeepSeek-R1-Zero,我们采用了基于规则的奖励系统,主要由两种类型的奖励组成:

在开发 DeepSeek-R1-Zero 时,我们没有应用结果或过程神经奖励模型,因为我们发现神经奖励模型在大规模强化学习过程中可能会遭受奖励黑客攻击,重新训练奖励模型需要额外的训练资源,并且使整个训练管道复杂化。

2.2.3. 训练模板

为了训练 DeepSeek-R1-Zero,我们首先设计一个简单的模板,指导基本模型遵守我们指定的指令。如表 1 所示,此模板要求 DeepSeek-R1-Zero 首先生成一个推理过程,然后是最终答案。我们有意将约束限制在这种结构格式上,避免任何特定于内容的偏见 —— 例如强制进行反思推理或推广特定的问题解决策略 —— 以确保我们能够在 RL 过程中准确观察模型的自然进展。

2.2.4. DeepSeek-R1-Zero 的性能、自进化过程和顿悟矩

DeepSeek-R1-Zero 的性能 图 2 描述了 DeepSeekR1-Zero 在整个 RL 训练过程中在 AIME 2024 基准测试中的性能轨迹。如图所示,随着 RL 训练的推进,DeepSeek-R1-Zero 的性能得到了稳定和一致的增强。值得注意的是,AIME 2024 的平均 pass@1 分数显示显着提高,从最初的 15.6% 跃升至令人印象深刻的 71.0%,达到与 OpenAI-o1-0912 相当的性能水平。这一显著改进凸显了我们的 RL 算法在随时间推移优化模型性能方面的有效性。

表 2 |DeepSeek-R1-Zero 和 OpenAI o1 模型在推理相关基准测试中的比较

图 2 |DeepSeek-R1-Zero 在训练期间的 AIME 准确性。对于每个问题,我们抽样 16 个回答并计算总体平均准确性,以确保评估稳定

表 2 提供了 DeepSeek-R1-Zero 和 OpenAI 的 o1-0912 模型在各种推理相关基准测试中的比较分析。研究结果表明,RL 赋予DeepSeek-R1-Zero 获得强大的推理能力,而无需任何监督微调数据。这是一项值得注意的成就,因为它强调了该模型仅通过 RL 有效学习和泛化的能力。此外,DeepSeekR1-Zero 的性能可以通过多数投票的应用进一步增强。例如,当 AIME 基准测试采用多数表决时,DeepSeek-R1-Zero 的性能从 71.0% 升级到 86.7%,从而超过了 OpenAI-o1-0912 的性能。DeepSeek-R1-Zero 能够在有和没有多数投票的情况下实现如此有竞争力的性能,这凸显了其强大的基础能力和在推理任务中进一步发展的潜力。

DeepSeek-R1-Zero 的自我进化过程 DeepSeek-R1-Zero 的自我进化过程是一个引人入胜的演示,展示了 RL 如何驱动模型自主提高其推理能力。通过直接从基础模型启动 RL,我们可以密切监控模型的进度,而不受监督微调阶段的影响。这种方法清楚地展示了模型如何随着时间的推移而演变,特别是在处理复杂推理任务的能力方面。

如图 3 所示,DeepSeek-R1-Zero 的思考时间显示出持续的改善贯穿整个培训过程。这种改进不是外部调整的结果,而是模型内部的内在发展。DeepSeek-R1-Zero 通过利用扩展的测试时间计算,自然而然地获得了解决日益复杂的推理任务的能力。这种计算范围从生成数百到数千个推理标记,使模型能够更深入地探索和完善其思维过程。

图 3 |RL 过程中 DeepSeek-R1-Zero 在训练集上的平均响应长度。DeepSeek-R1-Zero 自然而然地学会了用更多的思考时间来解决推理任务

这种自我进化最引人注目的方面之一是随着测试时间计算的增加而出现复杂的行为。诸如反射(模型重新审视和重新评估其先前步骤)等行为以及探索解决问题的替代方法等行为都会自发出现。这些行为没有被显式编程,而是作为模型与强化学习环境交互的结果而出现的。这种自发开发显著增强了 DeepSeek-R1-Zero 的推理能力,使其能够更高效、更准确地处理更具挑战性的任务。

DeepSeek-R1-Zero 的 Aha Moment 在 DeepSeek-R1-Zero 的训练过程中观察到的一个特别有趣的现象是 “Aha Moment” 的出现。如表 3 所示,这个时刻发生在模型的中间版本中。在这个阶段,DeepSeek-R1-Zero 通过重新评估其初始方法,学会为问题分配更多的思考时间。这种行为不仅证明了模型不断增长的推理能力,也是强化学习如何导致意想不到的复杂结果的迷人例子。

这一刻不仅是模型的 “顿悟时刻”,也是观察其行为的研究人员的 “顿悟时刻”。它强调了强化学习的力量和美感:我们不是明确地教模型如何解决问题,而是简单地为其提供正确的激励措施,然后它就会自主开发高级问题解决策略。“顿悟时刻” 有力地提醒我们,RL 有可能在人工系统中解锁新的智能水平,为未来更加自主和自适应的模型铺平道路。

表 3 |DeepSeek-R1-Zero 中间版本的一个有趣的“顿悟时刻”。该模型学会使用拟人化的语气重新思考。这对我们来说也是一个顿悟的时刻,让我们见证了强化学习的力量和美丽

DeepSeek-R1-Zero 的缺点 尽管 DeepSeek-R1-Zero 表现出很强的推理能力,并自主发展出意想不到的强大推理行为,但它面临一些问题。例如,DeepSeek-R1-Zero 正在努力应对可读性差和语言混合等挑战。为了使推理过程更具可读性并与开放社区共享,我们探索了 DeepSeek-R1,这是一种利用 RL 和人类友好型冷启动数据的方法。

2.3. DeepSeek-R1: 使用冷启动进行强化学习

受到 DeepSeek-R1-Zero 的可喜结果的启发,自然而然地出现了两个问题:1) 通过将少量高质量数据作为冷启动,是否可以进一步提高推理性能或加速收敛?2) 我们如何训练一个用户友好的模型,该模型不仅产生清晰连贯的思维链 (CoT),而且还表现出强大的通用能力?为了解决这些问题,我们设计了一个管道来训练 DeepSeek-R1 。该管道由四个阶段组成,概述如下。

2.3.1. 冷启动

与 DeepSeek-R1-Zero 不同,为了防止基础模型出现 RL 训练的早期不稳定冷启动阶段,对于 DeepSeek-R1,我们构建并收集少量长 CoT 数据,以将模型作为初始 RL 参与者进行微调。为了收集这些数据,我们探索了几种方法:以长 CoT 的 few-shot 提示为例,直接提示模型通过反射和验证生成详细的答案,以可读格式收集 DeepSeek-R1Zero 输出,并通过人工注释者进行后处理来提炼结果。

在这项工作中,我们收集了数千个冷启动数据,以微调 DeepSeek-V3-Base 作为 RL 的起点。与 DeepSeek-R1-Zero 相比,冷启动数据的优势包括:

2.3.2. 面向推理的强化学习

在根据冷启动数据微调 DeepSeek-V3-Base 后,我们应用了与 DeepSeek-R1-Zero 中相同的大规模强化学习训练过程。此阶段侧重于增强模型的推理能力,尤其是在推理密集型任务中,例如编码、数学、科学和逻辑推理,这些任务涉及定义明确的问题和明确的解决方案。在训练过程中,我们观察到 CoT 经常表现出语言混合,尤其是当 RL 提示涉及多种语言时。为了缓解语言混合问题,我们在 RL 训练期间引入了语言一致性奖励,其计算方式是目标语言单词在 CoT 中的比例。尽管消融实验表明,这种对齐会导致模型的性能略有下降,但这种奖励与人类的偏好一致,使其更具可读性。最后,我们将推理任务的准确性和语言一致性的奖励结合起来,直接相加形成最终的奖励。然后,我们在微调模型上应用 RL 训练,直到它在推理任务上实现收敛。

2.3.3. 抑制采样和监督微调

当面向推理的 RL 收敛时,我们利用结果检查点来收集 SFT(监督微调)数据,用于下一轮。与主要关注推理的初始冷启动数据不同,此阶段整合了来自其他领域的数据,以增强模型在写作、角色扮演和其他通用任务方面的能力。具体来说,我们生成数据并微调模型,如下所述。

推理数据 我们通过从上述 RL 训练的检查点执行拒绝采样来策划推理提示并生成推理轨迹。在上一阶段,我们只包含可以使用基于规则的奖励进行评估的数据。然而,在这个阶段,我们通过整合额外的数据来扩展数据集,其中一些数据通过使用生成奖励模型,将真实和模型预测输入到 DeepSeek-V3 中进行判断。此外,由于模型输出有时混乱且难以阅读,因此我们过滤掉了混合语言、长释义和代码块的思维链。对于每个提示,我们会对多个响应进行采样,并仅保留正确的响应。我们总共收集了大约 600k 个推理相关的训练样本。

非推理数据 对于非推理数据,例如写作、事实 QA、自我认知和翻译,我们采用 DeepSeek-V3 管道,并重用 DeepSeek-V3 的 SFT 数据集的一部分。对于某些非推理任务,我们调用 DeepSeek-V3 来生成一个潜在的思维链,然后再通过提示来回答问题。但是,对于更简单的查询,例如 “hello”,我们不提供 CoT 作为响应。最后,我们总共收集了大约 200k 个与推理无关的训练样本。

我们使用上述约 800k 样本的精选数据集对 DeepSeek-V3-Base 进行了两个 epoch 的微调。

2.3.4. 适用于所有场景的强化学习

为了进一步使模型与人类偏好保持一致,我们实现了一个二级强化学习阶段,旨在提高模型的有用性和无害性,同时完善其推理能力。具体来说,我们使用奖励信号和各种提示分布的组合来训练模型。对于推理数据,我们遵循 DeepSeek-R1-Zero 中概述的方法,该方法利用基于规则的奖励来指导数学、代码和逻辑推理领域的学习过程。对于一般数据,我们采用奖励模型来捕捉复杂和细微场景中的人类偏好。我们以 DeepSeek-V3 管道为基础,采用类似的偏好对和训练提示分布。为了提供帮助,我们只关注最终摘要,确保评估强调响应对用户的效用和相关性,同时最大限度地减少对潜在推理过程的干扰。为了实现无害性,我们会评估模型的整个响应,包括推理过程和摘要,以识别和减轻生成过程中可能出现的任何潜在风险、偏差或有害内容。最终,奖励信号和多样化数据分布的集成使我们能够训练一个在推理方面表现出色的模型,同时优先考虑有用性和无害性。

2.4. 蒸馏:赋予小模型推理能力

为了让更高效的小型模型像 DeepSeek-R1 一样具有推理功能,我们使用 DeepSeek-R1 精选的 800k 样本,直接对 Qwen (Qwen, 2024b) 和 Llama (AI@Meta, 2024) 等开源模型进行了微调,详见 §2.3.3。我们的研究结果表明,这种直接的蒸馏方法显着增强了较小模型的推理能力。我们在这里使用的基本模型是 Qwen2.5-Math-1.5B、Qwen2.5-Math-7B、Qwen2.514B、Qwen2.5-32B、Llama-3.1-8B 和 Llama-3.3-70B-Instruct。我们选择 Llama-3.3 是因为它的推理能力略好于 Llama-3.1。

对于提炼模型,我们只应用 SFT,不包括 RL 阶段,即使合并 RL 可以大大提高模型性能。我们在这里的主要目标是证明蒸馏技术的有效性,将 RL 阶段的探索留给更广泛的研究界。

3.实验

基准 测试我们在 MMLU(亨德里克斯等人,2020 年)、MMLU-Redux(格玛等人,2024 年)、MMLU-Pro(王等人,2024 年)、C-Eval(黄等人,2023 年)、CMMLU(李等人,2023 年)、IFEval(周等人,2023 年)、FRAMES(克里希纳等人,2024 年)、GPQA Diamond(赖因等人,2023 年)、SimpleQA(OpenAI,2024c)、C-SimpleQA(何等人,2024 年)、SWE-Bench Verified(OpenAI)上评估模型。全国高中数学奥林匹克竞赛(CNMO 2024)3 和 2024 年美国数学邀请赛(AIME 2024)(MAA,2024)。除了标准基准外,我们还使用大型语言模型作为评判者在开放式生成任务上评估我们的模型。具体来说,我们遵循 AlpacaEval 2.0(Dubois 等人,2024)和 Arena-Hard(Li 等人,2024)的原始配置,它们利用 GPT-4-Turbo-1106 作为评判者进行成对比较。在这里,我们只将最终摘要提供给评估,以避免长度偏差。对于蒸馏模型,我们报告在 AIME 2024、MATH-500、GPQA Diamond、Codeforces 和 LiveCodeBench 上的代表性结果。

评估提示 在 DeepSeek-V3 中设置之后,使用 simpleevals 框架中的提示评估 MMLU、DROP、GPQA Diamond 和 SimpleQA 等标准基准。对于 MMLU-Redux,我们在零镜头设置中采用 Zero-Eval 提示格式 (Lin, 2024)。在 MMLU-Pro、C-Eval 和 CLUE-WSC 方面,由于原来的提示是 few-shot,我们稍微将提示修改为 zero-shot 设置。小样本中的 CoT 可能会损害 DeepSeek-R1 的性能。其他数据集遵循其原始评估协议,并采用其创建者提供的默认提示。对于代码和数学基准测试,HumanEval-Mul 数据集涵盖了八种主流编程语言(Python、Java、C++、C#、JavaScript、TypeScript、PHP 和 Bash)。LiveCodeBench 上的模型性能使用 CoT 格式进行评估,数据收集时间为 2024 年 8 月至 2025 年 1 月。Codeforces 数据集使用 10 个 Div.2 竞赛的问题以及专家制作的测试用例进行评估,然后计算参赛者的预期评分和百分比。SWE-Bench 验证结果是通过无代理框架获得的 (Xia et al., 2024)。与 AIDER 相关的基准测试使用 “diff” 格式进行衡量。DeepSeek-R1 输出的每个基准测试上限为 32,768 个代币。

基线 我们针对几个强大的基线进行综合评估,包括 DeepSeek-V3、Claude-Sonnet-3.5-1022、GPT-4o-0513、OpenAI-o1-mini 和 OpenAI-o1-1217。由于在中国大陆访问 OpenAI-o1-1217 API 具有挑战性,因此我们根据官方报告报告其性能。对于蒸馏模型,我们还比较了开源模型 QwQ-32B-Preview (Qwen, 2024a)。

评估设置 我们将模型的最大生成长度设置为 32,768 个令牌。我们发现,使用贪婪解码来评估长输出推理模型会导致更高的重复率和不同检查点之间的显着可变性。因此,我们默认pass@kevaluation(Chen等人,2021 年)并使用非零温度报告pass@1。具体来说,我们使用 0.6 的采样温度和 0.95 的 top-P 值来为每个问题生成 k 个响应(通常在 4 到 64 之间,具体取决于测试集大小)。然后Pass@1计算为

,其中 pi表示第 i 个响应的正确性。此方法提供更可靠的性能估计。对于 AIME 2024,我们还使用 64 个样本报告了共识(多数票)结果(Wang et al., 2022),表示为 cons@64。

3.1. DeepSeek-R1 评估

表 4 |DeepSeek-R1 与其他代表性模型的比较

对于以教育为导向的知识基准测试,如 MMLU、MMLU-Pro 和 GPQA Diamond,DeepSeek-R1 比 DeepSeek-V3 表现出更优越的性能。这种提升主要归因于在与 STEM 相关的问题上准确性的提高,通过大规模强化学习在这些问题上取得了显著的进步。此外,DeepSeek-R1 在 FRAMES(一个依赖长上下文的问答任务)上表现出色,展示了其强大的文档分析能力。这凸显了推理模型在人工智能驱动的搜索和数据分析任务中的潜力。在事实基准测试 SimpleQA 上,DeepSeek-R1 优于 DeepSeek-V3,展示了其处理基于事实的查询的能力。类似的趋势是,在这个基准测试上,OpenAI-o1 超过了 GPT-4o。然而,DeepSeek-R1 在中文 SimpleQA 基准测试上的表现比 DeepSeek-V3 差,主要是因为在安全强化学习后,它倾向于拒绝回答某些查询。如果没有安全强化学习,DeepSeek-R1 可以达到超过 70%的准确率。

DeepSeek-R1 还在 IF-Eval 上提供了令人印象深刻的结果,IF-Eval 是一项基准测试,旨在评估模型遵循格式说明的能力。这些改进可以与在监督微调 (SFT) 和 RL 训练的最后阶段包含指令跟踪数据相关联。此外,在 AlpacaEval2.0 和 ArenaHard 上观察到了出色的性能,表明 DeepSeek-R1 在编写任务和开放领域问答方面的优势。DeepSeek-V3 的显著性能凸显了大规模 RL 的泛化优势,这不仅增强了推理能力,还提高了不同领域的性能。此外,DeepSeek-R1 生成的摘要长度简洁明了,在 ArenaHard 上平均有 689 个令牌,在 AlpacaEval 2.0 上平均有 2218 个字符。这表明DeepSeek-R1 避免了在基于 GPT 的评估中引入长度偏差,进一步巩固了其在多个任务中的稳健性。

在数学任务方面,DeepSeek-R1 的性能与 OpenAI-o1-1217 相当,大大超过其他模型。在编码算法任务(例如 LiveCodeBench 和 Codeforces)上观察到类似的趋势,其中以推理为中心的模型在这些基准测试中占据主导地位。在面向工程的编码任务上,OpenAI-o1-1217 在 Aider 上的性能优于 DeepSeek-R1,但在 SWE 验证上实现了相当的性能。我们相信 DeepSeek-R1 的工程性能将在下一个版本中得到提升,因为目前相关的 RL 训练数据量仍然非常有限。

3.2. 蒸馏模型评估

表 5 |DeepSeek-R1 蒸馏模型与其他类似模型在推理相关基准上的比较

如表 5 所示,只需提取 DeepSeek-R1 的输出即可使高效的 DeepSeekR1-7B(即
DeepSeek-R1-Distill-Qwen-7B,缩写如下)全面优于 GPT-4o-0513 等非推理模型。DeepSeek-R1-14B 在所有评估指标上都超过了 QwQ-32BPreview,而 DeepSeek-R1-32B 和 DeepSeek-R1-70B 在大多数基准测试中明显超过了 o1-mini。这些结果表明蒸馏法具有强大的潜力。此外,我们发现将 RL 应用于这些蒸馏模型会产生显着的进一步收益。我们认为这值得进一步探索,因此在这里只提供简单的 SFT 蒸馏模型的结果。

核心论文2:

通过长期主义扩展开源语言模型:DeepSeek 大语言模型

摘要

开源大语言模型(LLMs)的发展日新月异。然而,以往文献中关于大语言模型的扩展定律(scaling laws)结论各异,这给模型的扩展蒙上了一层阴影。我们深入研究扩展定律,并提出独特的发现,这些发现有助于在两种常用的开源配置(70 亿和 670 亿参数模型)下扩展大型模型。在扩展定律的指导下,我们推出了 DeepSeek LLM 项目,该项目致力于从长远角度推进开源语言模型的发展。为支持预训练阶段,我们开发了一个目前包含 2 万亿词元(tokens)且还在不断扩展的数据集。我们进一步对 DeepSeek LLM 基础模型进行监督微调(SFT)和直接偏好优化(DPO),从而创建了 DeepSeek Chat 模型。评估结果表明,DeepSeek LLM 670 亿参数模型在一系列基准测试中优于 LLaMA-2 700 亿参数模型,尤其是在代码、数学和推理领域。此外,开放式评估显示,我们的 DeepSeek LLM 670 亿参数 Chat 模型的性能优于 GPT-3.5。

1. 引言

在过去几年里,基于仅解码器架构的 Transformer(Vaswani 等人,2017)的大语言模型(LLMs)日益成为实现通用人工智能(AGI)的基石和途径。通过预测连续文本中的下一个单词,大语言模型在大规模数据集上进行自监督预训练,从而能够实现多种功能并具备诸多能力,如创意写作、文本摘要、代码补全等。随后出现的监督微调、奖励建模等技术,让大语言模型能够更好地遵循用户的意图和指令,赋予它们更多样化的对话能力,并迅速扩大了其影响力。

这一波发展始于一些闭源产品,如 ChatGPT(OpenAI,2022)、Claude(Anthropic,2023)和 Bard(Google,2023),这些产品的开发需要大量的计算资源和高昂的标注成本。它们极大地提高了社区对开源大语言模型能力的期望,从而激发了一系列相关研究(Bai 等人,2023;Du 等人,2022;Jiang 等人,2023;Touvron 等人,2023a,b;Yang 等人,2023)。其中,LLaMA 系列模型(Touvron 等人,2023a,b)脱颖而出。它整合了一系列研究成果,构建了高效稳定的架构,训练出了参数规模从 70 亿到 700 亿不等的高性能模型。因此,LLaMA 系列已成为开源模型在架构和性能方面事实上的基准。

在 LLaMA 之后,开源社区主要致力于训练固定参数规模(70 亿、130 亿、340 亿和 700 亿)的高质量模型,却常常忽视了对大语言模型扩展定律的研究探索(Hoffmann 等人,2022;Kaplan 等人,2020)。然而,鉴于当前开源模型仍处于通用人工智能(AGI)发展的初期阶段,对扩展定律的研究至关重要。此外,早期研究(Hoffmann 等人,2022;Kaplan 等人,2020)在模型和数据随计算资源增加的扩展方面得出了不同结论,且对超参数的讨论也不够充分。在本文中,我们广泛研究了语言模型的扩展行为,并将研究结果应用于两种广泛使用的大规模模型配置,即 70 亿和 670 亿参数模型。我们的研究旨在为未来开源大语言模型的扩展奠定基础,为该领域的进一步发展铺平道路。具体而言,我们首先研究了批量大小(batch size)和学习率的扩展定律,发现了它们随模型规模变化的趋势。在此基础上,我们全面研究了数据和模型规模的扩展定律,成功揭示了最优的模型 / 数据扩展分配策略,并预测了我们大规模模型的预期性能。此外,在开发过程中,我们发现不同数据集得出的扩展定律存在显著差异,这表明数据集的选择对模型扩展行为有显著影响,也意味着在跨数据集推广扩展定律时应谨慎行事。

在扩展定律的指导下,我们从头开始构建开源大语言模型,并尽可能多地发布信息供社区参考。我们收集了 2 万亿词元用于预训练,主要为中文和英文数据。在模型层面,我们总体上遵循 LLaMA 的架构,但将余弦退火学习率调度器替换为多步学习率调度器,在保持性能的同时便于持续训练。我们从多个来源收集了超过 100 万个实例用于监督微调(SFT)(Ouyang 等人,2022)。本文分享了我们在不同监督微调策略方面的经验以及在数据消融技术上的发现。此外,我们还利用直接偏好优化(DPO)(Rafailov 等人,2023)来提升模型的对话性能。

我们对基础模型和聊天模型进行了广泛评估。评估结果表明,DeepSeek LLM 在各种基准测试中优于 LLaMA-2 700 亿参数模型,尤其是在代码、数学和推理领域。经过监督微调(SFT)和直接偏好优化(DPO)后,DeepSeek 670 亿参数聊天模型在中文和英文开放式评估中均优于 GPT-3.5。这突出了 DeepSeek 670 亿参数模型在生成高质量回复以及在两种语言中进行有意义对话方面的卓越性能。此外,安全性评估表明,DeepSeek 670 亿参数 Chat 模型在实际应用中能够提供无害的回复。

在本文的其余部分,我们首先在第 2 节介绍 DeepSeek LLM 的预训练基本概念,包括数据组成、模型架构、基础设施和超参数。在第 3 节中,我们详细解释所发现的扩展定律及其意义。此外,我们还讨论了在选择预训练超参数时,如何参考扩展定律分析获得的见解。在第 4 节中,我们讨论微调方法,包括微调数据的组成以及监督微调(SFT)和直接偏好优化(DPO)阶段的具体方法。然后在第 5 节中,我们展示 DeepSeek LLM 的详细评估结果,涵盖基础模型和聊天模型,以及它们在开放式评估和安全性评估中的表现。最后,在第 6 节中,我们讨论 DeepSeek LLM 当前的局限性和未来的发展方向。

2. 预训练

2.1 数据

我们的主要目标是全面提高数据集的丰富性和多样性。我们从一些有影响力的研究(Computer,2023;Gao 等人,2020;Penedo 等人,2023;Touvron 等人,2023a)中获得了宝贵的见解。为实现这些目标,我们将方法分为三个关键阶段:去重、过滤和重新混合。去重和重新混合阶段通过采样独特实例来确保数据的多样性表示,过滤阶段则提高了信息密度,从而使模型训练更高效、更有效。

我们采用了激进的去重策略,扩大了去重范围。分析表明,对整个 Common Crawl 语料库进行去重,比在单个数据转储中去重能移除更多重复实例。表 1 显示,对 91 个数据转储进行去重,比单个数据转储的去重方法多移除四倍的文档。

表 1 不同 Common Crawl 数据转储的去重率

在过滤阶段,我们专注于制定可靠的文档质量评估标准。这涉及到结合语言和语义评估进行详细分析,从个体和全局视角评估数据质量。在重新混合阶段,我们调整方法以解决数据不平衡问题,着重增加代表性不足领域的数据,旨在实现更平衡、更具包容性的数据集,确保不同的观点和信息都能得到充分体现。

对于分词器(tokenizer),我们基于 tokenizers 库(Huggingface 团队,2019)实现了字节级字节对编码(BBPE)算法。我们采用预分词来防止不同字符类别的标记(如换行符、标点符号和中日韩(CJK)符号)合并,类似于 GPT-2(Radford 等人,2019)的做法。我们还按照(Touvron 等人,2023a,b)的方法将数字拆分为单个数字。根据先前经验,我们将词汇表中的常规标记数量设置为 100000。分词器在大约 24GB 的多语言语料库上进行训练,最后我们在词汇表中增加了 15 个特殊标记,使其总大小达到 100015。为确保训练期间的计算效率,并为未来可能需要的任何额外特殊标记预留空间,我们将模型训练时的词汇表大小配置为 102400。

2.2 架构

表 2 DeepSeek LLM 系列模型的详细规格。我们根据第 3 节的研究结果选择超参数

DeepSeek LLM 的微观设计在很大程度上遵循 LLaMA(Touvron 等人,2023a,b)的设计,采用带有 RMSNorm(Zhang 和 Sennrich,2019)函数的 Pre-Norm 结构,并使用 SwiGLU(Shazeer,2020)作为前馈网络(FFN)的激活函数,中间层维度为

。它还采用旋转位置嵌入(Rotary Embedding)(Su 等人,2024)进行位置编码。为优化推理成本,670 亿参数模型使用分组查询注意力(GroupedQuery Attention,GQA)(Ainslie 等人,2023)代替传统的多头注意力(Multi-Head Attention,MHA)。然而,在宏观设计方面,DeepSeek LLM 略有不同。具体来说,DeepSeek LLM 70 亿参数模型是一个 30 层的网络,而 DeepSeek LLM 670 亿参数模型有 95 层。这些层数的调整,在保持与其他开源模型参数一致性的同时,也便于进行模型流水线分区,以优化训练和推理过程。与大多数使用分组查询注意力(GQA)的研究不同,我们通过增加网络深度来扩展 670 亿参数模型的参数,而不是常见的拓宽前馈网络层的中间宽度,目的是获得更好的性能。详细的网络规格见表 2。

2.3 超参数

DeepSeek LLM 使用标准差为 0.006 的初始化方式,并使用 AdamW 优化器(Loshchilov 和 Hutter,2017)进行训练,超参数设置为:

,权重衰减(weight decay)为 0.1。

在预训练期间,我们采用多步学习率调度器,而不是典型的余弦退火调度器。具体来说,模型的学习率在经过 2000 个热身步骤后达到最大值,然后在处理完 80% 的训练词元后降至最大值的 31.6%,在处理完 90% 的训练词元后进一步降至最大值的 10%。训练阶段的梯度裁剪设置为 1.0。

基于经验发现,尽管训练过程中的损失下降趋势有所不同,但使用多步学习率调度器的最终性能与余弦退火调度器基本一致,如图 1(a)所示。在固定模型大小的情况下调整训练规模时,多步学习率调度器允许重用第一阶段的训练成果,为持续训练提供了独特的便利。因此,我们选择多步学习率调度器作为默认设置。我们在图 1(b)中还展示了调整多步学习率调度器不同阶段的比例可以略微提高性能。然而,为了平衡持续训练中的重用率和模型性能,我们选择上述三个阶段分别为 80%、10% 和 10% 的分布。

批量大小和学习率会随着模型大小而变化。70 亿和 670 亿参数模型预训练阶段的具体参数见表 2。

图 1 不同学习率调度器或不同参数的训练损失曲线。模型大小为 16 亿参数,在 1000 亿词元的数据集上进行训练

2.4 基础设施

我们使用一个名为 HAI-LLM(High-flyer,2023)的高效轻量级训练框架来训练和评估大语言模型。该框架集成了数据并行、张量并行、序列并行和 1F1B 流水线并行,就像 Megatron(Korthikanti 等人,2023;Narayanan 等人,2021;Shoeybi 等人,2019)中所做的那样。我们还利用了 FlashAttention(Dao,2023;Dao 等人,2022)技术来提高硬件利用率。采用 ZeRO-1(Rajbhandari 等人,2020)在数据并行的不同进程间划分优化器状态。我们还努力重叠计算和通信,以最小化额外的等待开销,包括最后一个微批次的反向传播过程和 ZeRO-1 中的规约 - 散射操作,以及序列并行中的通用矩阵乘法(GEMM)计算和全规约 / 规约 - 散射操作。我们融合了一些层 / 操作符来加速训练,包括尽可能融合 LayerNorm、GEMM 和 Adam 更新操作。为提高模型训练的稳定性,我们以 bf16 精度训练模型,但以 fp32 精度累加梯度。我们采用就地交叉熵计算来减少 GPU 内存消耗,即在交叉熵 CUDA 内核中动态地将 bf16 的 logits 转换为 fp32 精度(而不是在高带宽内存(HBM)中预先转换),计算相应的 bf16 梯度,并用梯度覆盖 logits。

模型权重和优化器状态每 5 分钟异步保存一次,这意味着在偶尔发生硬件或网络故障的最坏情况下,我们最多只会损失 5 分钟的训练进度。这些临时模型检查点会定期清理,以避免占用过多存储空间。我们还支持从不同的三维并行配置恢复训练,以应对计算集群负载的动态变化。

在评估方面,我们在生成任务中使用 vLLM(Kwon 等人,2023),在非生成任务中使用连续批处理,以避免手动调整批大小并减少令牌填充。

核心论文3:

DeepSeek-V3 技术报告

摘要

我们介绍了 DeepSeek-V3,这是一个强大的专家混合 (MoE) 语言模型,总共有 671B 个参数,每个令牌激活了 37B。为了实现高效的推理和具有成本效益的训练,DeepSeek-V3 采用了多头潜在注意力 (MLA) 和 DeepSeekMoE 架构,这些架构在 DeepSeek-V2 中得到了全面验证。此外,DeepSeek-V3 开创了一种用于负载均衡的辅助无损策略,并设置了多标记预测训练目标以获得更强的性能。我们在 14.8 万亿个多样化和高质量的代币上对 DeepSeek-V3 进行预训练,然后是监督微调和强化学习阶段,以充分利用其功能。综合评估表明,DeepSeek-V3 的性能优于其他开源模型,并实现了与领先的闭源模型相当的性能。尽管性能出色,但 DeepSeek-V3 只需要 2.788M H800 GPU 小时即可进行完整训练。此外,它的训练过程非常稳定。在整个训练过程中,我们没有遇到任何无法恢复的损失峰值或执行任何回滚。模型检查点可在
https://github.com/deepseek-ai/DeepSeek-V3
获取。

图 1 |DeepSeek-V3 及其对应产品的基准测试性能

1.引言

近年来,大型语言模型 (LLM) 一直在经历快速迭代和演变(Anthropic,2024 年;谷歌,2024 年;OpenAI,2024a),逐步缩小与通用人工智能 (AGI) 的差距。除了闭源模型之外,开源模型,包括 DeepSeek 系列(DeepSeek-AI,2024a,b,c;Guo et al., 2024)、LLaMA 系列 (AI@Meta, 2024a,b;Touvron et al., 2023a,b)、Qwen 系列(Qwen, 2023, 2024a,b)和 Mistral 系列(江 et al., 2023;Mistral,2024 年)也取得了重大进展,努力缩小与闭源同行的差距。为了进一步突破开源模型能力的界限,我们扩展了我们的模型并引入了 DeepSeek-V3,这是一个大型专家混合 (MoE) 模型,具有 671B 参数,其中 37B 为每个令牌激活。

凭借前瞻性的视角,我们始终如一地努力实现强大的模型性能和经济的成本。因此,在架构方面,DeepSeek-V3 仍然采用多头潜在注意力 (MLA) (DeepSeek-AI, 2024c) 进行高效推理,并采用 DeepSeekMoE (Dai et al., 2024) 进行经济高效的训练。这两种架构已在 DeepSeekV2 (DeepSeek-AI, 2024c) 中得到验证,证明了它们在实现高效训练和推理的同时保持稳健模型性能的能力。除了基本架构之外,我们还实施了两个额外的策略来进一步增强模型功能。首先,DeepSeek-V3 开创了一种用于负载均衡的辅助无损策略 (Wang et al., 2024a),目的是最大限度地减少鼓励负载均衡对模型性能的不利影响。其次,DeepSeek-V3 采用了多标记预测训练目标,我们观察到该目标可以提高评估基准的整体性能。

为了实现高效的训练,我们支持 FP8 混合精度训练,并对训练框架进行全面优化。低精度训练已成为一种很有前途的高效训练解决方案(Dettmers et al., 2022;Kalamkar 等人,2019 年;Narang 等人,2017 年;Peng et al., 2023b),其发展与硬件能力的进步密切相关(Luo et al., 2024;Micikevicius 等人,2022 年;Rouhani 等人,2023a)。在这项工作中,我们引入了一个 FP8 混合精度训练框架,并首次在超大规模模型上验证了其有效性。通过支持 FP8 计算和存储,我们实现了加速训练和减少 GPU 内存使用。对于训练框架,我们设计了 DualPipe 算法以实现高效的管道并行性,该算法具有更少的管道气泡,并通过计算 - 通信重叠隐藏了训练期间的大部分通信。这种重叠确保了,随着模型的进一步扩展,只要我们保持恒定的计算与通信比率,我们仍然可以跨节点雇用细粒度的专家,同时实现接近零的全对全通信开销。此外,我们还开发了高效的跨节点 all-to-all 通信内核,以充分利用 InfiniBand (IB) 和 NVLink 带宽。此外,我们精心优化了内存占用,从而可以在不使用昂贵的张量并行性的情况下训练 DeepSeek-V3。结合这些努力,我们实现了高培训效率。

在预训练期间,我们在 14.8T 高质量和多样化的 Token 上训练 DeepSeek-V3。预训练过程非常稳定。在整个训练过程中,我们没有遇到任何无法挽回的 loss sutage 或不得不回滚。接下来,我们对 DeepSeek-V3 进行两阶段上下文长度扩展。在第一阶段,最大上下文长度扩展到 32K,在第二阶段,它进一步扩展到 128K。在此之后,我们对 DeepSeek-V3 的基础模型进行后训练,包括监督微调 (SFT) 和强化学习 (RL),以使其与人类偏好保持一致并进一步释放其潜力。在后期训练阶段,我们从 DeepSeekR1 系列模型中提炼出推理能力,同时小心翼翼地保持模型准确性之间的平衡和世代长度。

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

我们根据一系列全面的基准测试来评估 DeepSeek-V3。尽管训练成本经济,但综合评估表明,DeepSeek-V3-Base 已成为目前可用的最强大的开源基础模型,尤其是在代码和数学方面。它的聊天版本还优于其他开源模型,并在一系列标准和开放式基准测试中实现了与领先的闭源模型(包括 GPT-4o 和 Claude-3.5-Sonnet)相当的性能。

最后,我们再次强调 DeepSeek-V3 的经济训练成本,如表 1 所示,通过我们对算法、框架和硬件的优化协同设计实现。在预训练阶段,在每万亿个令牌上训练 DeepSeek-V3 只需要 180K H800 GPU 小时,即在具有 2048 个 H800 GPU 的集群上训练 3.7 天。因此,我们的预训练阶段在不到两个月的时间里就完成了,花费了 2664K GPU 小时。结合 119K GPU 小时(用于上下文长度扩展)和 5K GPU 小时(用于后期训练),DeepSeek-V3 的完整训练成本仅为 2.788M GPU 小时。假设 H800 GPU 的租赁价格为 $2 per GPU hour, our total training costs amount to only $5.576M。请注意,上述费用仅包括 DeepSeek-V3 的官方训练费用,不包括与先前对架构、算法或数据进行研究和消融实验相关的费用。

我们的主要贡献包括:

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

训练前:迈向终极训练效率

培训后:DeepSeek-R1 的知识提炼

核心评估结果摘要

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

2.架构

我们首先介绍了 DeepSeek-V3 的基本架构,其特点是多头潜在注意力 (MLA) (DeepSeek-AI, 2024c) 用于高效推理,DeepSeekMoE (Dai et al., 2024) 用于经济训练。然后,我们提出了一个多标记预测 (MTP) 训练目标,我们观察到该目标可以提高评估基准的整体性能。对于其他未明确提及的小细节,DeepSeek-V3 遵循 DeepSeekV2 (DeepSeek-AI, 2024c) 的设置。

2.1. 基本架构

DeepSeek-V3 的基本架构仍在 Transformer (Vaswani et al., 2017) 框架内。为了实现高效的推理和经济的训练,DeepSeek-V3 还采用了 MLA 和 DeepSeekMoE,它们已经被 DeepSeek-V2 彻底验证。与 DeepSeek-V2 相比,一个例外是我们还引入了辅助无损失负载均衡策略(Wang et al., 2024a)来减轻因确保负载平衡而引起的性能下降。图 2 说明了 DeepSeek-V3 的基本架构,我们将在本节中简要回顾 MLA 和 DeepSeekMoE 的详细信息。

图 2 |DeepSeek-V3 的基本架构图示。在 DeepSeek-V2 之后,我们采用 MLA 和 DeepSeekMoE 进行高效推理和经济训练

2.1.1. 多头潜在注意力

为了引起注意,DeepSeek-V3 采用了 MLA 架构。设 d 表示嵌入维度, 表示注意力头的数量, 表示每个头的维度, 表示给定注意力层的第 t 个标记的注意力输入。MLA 的核心是对注意力键和值的低秩联合压缩,以减少推理过程中的键值 (KV) 缓存:

请注意,对于 MLA,在生成过程中只需要缓存蓝框向量,这导致 KV 缓存显着减少,同时保持与标准多头注意力 (MHA) 相当的性能(Vaswani et al., 2017)。

对于注意力查询,我们还执行了低秩压缩,这可以减少训练期间的激活记忆:

2.1.2 具有无辅助损失负载均衡的 DeepSeekMoE

DeepSeekMoE 的基本架构:对于前馈网络(FFNs),DeepSeek-V3 采用 DeepSeekMoE 架构(Dai 等人,2024 年)。与传统的 MoE 架构(如 GShard(Lepikhin 等人,2021 年))相比,DeepSeekMoE 使用更细粒度的专家,并将部分专家设置为共享专家。

与 DeepSeek-V2 略有不同,DeepSeek-V3 使用 sigmoid 函数计算亲和度分数,并对所有选定的亲和度分数进行归一化以生成门控值。

无辅助损失的负载均衡:对于 MoE 模型,专家负载不均衡会导致路由崩溃(Shazeer 等人,2017 年),并在专家并行的场景中降低计算效率。传统解决方案通常依赖辅助损失(Fedus 等人,2021 年;Lepikhin 等人,2021 年)来避免负载不均衡。然而,过大的辅助损失会损害模型性能(Wang 等人,2024 年 a)。为了在负载平衡和模型性能之间实现更好的权衡,我们率先采用了无辅助损失的负载均衡策略(Wang 等人,2024 年 a)来确保负载平衡。具体来说,我们为每个专家引入一个偏差项bi,并将其添加到相应的亲和度分数si,t中,以确定前路由K:

其中平衡因子 α 是一个超参数,将为 DeepSeek-V3 分配一个极小的值;1 表示指标功能;T 表示序列中的标记数。序列平衡损失鼓励每个序列上的 EA 负载保持平衡。

图 3 | 我们的多令牌预测 (MTP) 实施图示。我们保留了完整的因果链,用于预测每个深度的每个代币。

节点限制路由。与 DeepSeek-V2 使用的设备限制路由一样,DeepSeek-V3 也使用限制路由机制来限制训练期间的通信成本。简而言之,我们确保每个 Token 最多会被发送到 M 个节点,这些节点是根据分布在每个节点上的专家的最高

亲和力分数之和。在此约束,我们的 MoE 训练框架几乎可以实现完全的计算 - 通信重叠。

没有 token-dropping。由于有效的负载均衡策略,DeepSeek-V3 在全程训练期间保持了良好的负载均衡。因此,DeepSeek-V3 在训练期间不会丢弃任何标记。此外,我们还实施了特定的部署策略来确保推理负载均衡,因此 DeepSeek-V3 在推理过程中也不会丢弃令牌。

2.2. 多 Token 预测

受 Gloeckle 等人(2024 年)的启发,我们为 DeepSeek-V3 研究并设定了多代币预测 (MTP) 目标,将预测范围扩展到每个位置的多个未来代币。一方面,MTP 目标使训练信号致密,并可能提高数据效率。另一方面,MTP 可能使模型能够预先规划其表示形式,以便更好地预测未来的代币。图 3 说明了我们对 MTP 的实现。与 Gloeckle et al. (2024) 使用独立输出头并行预测 D 个额外标记不同,我们按顺序预测其他标记,并在每个预测深度保留完整的因果链。本节将介绍 MTP 实施的详细信息。

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

3.基础设施

3.1. 计算集群

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

图 4 | 一对单独的前向和后向 chunk 的重叠策略(transformer 块的边界未对齐)。橙色表示向前,绿色表示 “向后输入”,蓝色表示 “向后权重”,紫色表示 PP 通信,红色表示障碍。all-to-all 和 PP 通信都可以完全隐藏

3.2. 培训框架

DeepSeek-V3 的训练由 HAI-LLM 框架提供支持,这是一个由我们的工程师从头开始打造的高效轻量级训练框架。总体而言,DeepSeek-V3 应用了跨越 8 个节点的 16 路管道并行 (PP) (Qi et al., 2023a)、64 路专家并行 (EP) (Lepikhin et al., 2021) 和 ZeRO-1 数据并行 (DP) (Rajbhandari et al., 2020)。

为了促进 DeepSeek-V3 的高效训练,我们实施了细致的工程优化。首先,我们设计了 DualPipe 算法以实现高效的管道并行性。与现有的 PP 方法相比,DualPipe 的管道气泡更少。更重要的是,它重叠了前向和后向流程中的计算和通信阶段,从而解决了跨节点专家并行性带来的繁重通信开销的挑战。其次,我们开发了高效的跨节点多对多通信内核,以充分利用 IB 和 NVLink 带宽,并节省专用于通信的流式多处理器 (SM)。最后,我们在训练过程中精心优化了内存占用,从而使我们能够在不使用昂贵的张量并行 (TP) 的情况下训练 DeepSeek-V3。

3.2.1. DualPipe 和 Computation-Communication 重叠

对于 DeepSeek-V3 ,跨节点专家并行性引入的通信开销导致计算与通信的比率低下,约为 1:1。为了应对这一挑战,我们设计了一种名为 DualPipe 的创新管道并行算法,它不仅通过有效地重叠前向和后向计算通信阶段来加速模型训练,而且还减少了管道气泡。

DualPipe 的关键思想是在一对单独的前向和后向数据块中重叠计算和通信。具体来说,我们将每个块分为四个部分:attention、all-to-all dispatch、MLP 和 all-to-all combine。特别是,对于向后块,注意力和 MLP 都进一步分为两部分,向后用于输入,向后用于权重,就像在 ZeroBubble 中一样(Qi et al., 2023b)。此外,我们还有一个 PP 通信组件。如图 4 所示,对于一对前向和后向块,我们重新排列这些组件,并手动调整专用于通信与计算的 GPU SM 的比率。在这种重叠策略中,我们可以确保在执行过程中可以完全隐藏 all-to-all 和 PP 通信。鉴于高效的重叠策略,完整的 DualPipe 调度如图 5 所示。它采用双向管道调度,同时从管道的两端馈送微批次,并且很大一部分通信可以完全重叠。这种重叠还确保了,随着模型的进一步扩展,只要我们保持恒定的计算与通信比率,我们仍然可以跨节点聘请细粒度的专家,同时实现接近零的全对全通信开销。

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

表 2 | 不同管道并行方法的管道气泡和内存使用情况的比较。F 表示正向 chunk 的执行时间,B 表示完整向后 chunk 的执行时间,W 表示 “backward for weights” 块的执行时间,F&B 表示两个相互重叠的正向和向后 chunk 的执行时间。

此外,即使在通信负担不重的更通用的场景中,DualPipe 仍然表现出效率优势。在表 2 中,我们总结了不同 PP 方法的管道气泡和内存使用情况。如图所示,与 ZB1P(Qi et al., 2023b)和 1F1B (Harlap et al., 2018) 相比,DualPipe 显着减少了管道气泡

同时仅将峰值激活记忆增加了

倍。尽管 DualPipe 需要保留模型参数的两个副本,这不会显著增加内存消耗,因为我们在训练期间使用了较大的 EP 大小。与 Chimera (Li and Hoefler, 2021) 相比,DualPipe 只要求管道阶段和微批次能被 2 整除,而不要求微批次能被管道阶段整除。此外,对于 DualPipe,气泡和激活内存都不会随着微批处理数量的增加而增加。

3.2.2. 跨节点 All-to-All 通信的高效实现

为了保证 DualPipe 有足够的计算性能,我们定制了高效的跨节点 all-toall 通信内核(包括 dispatch 和 combining),以节省专用于通信的 SM 数量。内核的实现与 MoE 门控算法和我们集群的网络拓扑共同设计。具体来说,在我们的集群中,跨节点 GPU 与 IB 完全互连,节点内通信通过 NVLink 处理。NVLink 提供 160 GB/s 的带宽,大约是 IB 的 3.2 倍 (50 GB/s)。为了有效利用 IB 和 NVLink 的不同带宽,我们将每个代币的调度限制为最多 4 个节点,从而减少 IB 流量。对于每个代币,当做出路由决策时,它将首先通过 IB 传输到其目标节点上具有相同节点内索引的 GPU。一旦它到达目标节点,我们将努力确保它通过 NVLink 立即转发到托管目标专家的特定 GPU,而不会被随后到达的令牌阻止。通过这种方式,通过 IB 和 NVLink 的通信完全重叠,每个代币可以有效地为每个节点选择平均 3.2 名专家,而不会产生 NVLink 的额外开销。这意味着,尽管 DeepSeek-V3在实践中只选择 8 个路由专家,它可以在保持相同的通信成本的情况下,将这个数字扩展到最多 13 个专家(4 个节点 × 3.2 个专家 / 节点)。总体而言,在这样的通信策略下,只需 20 个 SM 就足以充分利用 IB 和 NVLink 的带宽。

详细地说,我们采用了 warp 专业化技术 (Bauer et al., 2014) 并将 20 个 SM 划分为 10 个通信信道。在调度过程中,(1) IB 发送、(2) IB 到 NVLink 转发和 (3) NVLink 接收由相应的 warp 处理。分配给每个通信任务的 warp 数量会根据所有 SM 的实际工作负载动态调整。同样,在合并过程中,(1) NVLink 发送、(2) NVLink 到 IB 转发和累积以及 (3) IB 接收和累积也由动态调整的 warp 处理。此外,dispatching 和 combining kernel 都与计算流重叠,因此我们还考虑了它们对其他 SM 计算内核的影响。具体来说,我们采用定制的 PTX(并行线程执行)指令并自动调整通信块大小,这大大减少了 L2 缓存的使用和对其他 SM 的干扰。

3.2.3. 以最小的开销节省大量内存

为了减少训练期间的内存占用,我们采用了以下技术。RMSNorm 和 MLA Up-Projection 的重新计算。我们在反向传播期间重新计算所有 RMSNorm 作和 MLA 向上投影,因此无需持久存储其输出激活。此策略的开销很小,可显著降低存储激活的内存要求。

CPU 中的指数移动平均线。在训练过程中,我们保留模型参数的指数移动平均线 (EMA),以便在学习率衰减后对模型性能进行早期估计。EMA 参数存储在 CPU 内存中,并在每个训练步骤后异步更新。这种方法允许我们维护 EMA 参数,而不会产生额外的内存或时间开销。

用于多标记预测的共享嵌入和输出头。使用 DualPipe 策略,我们将模型最浅的层(包括嵌入层)和最深的层(包括输出头)部署在相同的 PP 等级上。这种安排允许在 MTP 模块和主模型之间物理共享参数和梯度,共享嵌入和输出头。这种物理共享机制进一步提高了我们的内存效率。

3.3. FP8 训练

受到低精度训练最新进展的启发(Dettmers et al., 2022;Noune et al., 2022;Peng et al., 2023b),我们提出了一个利用 FP8 数据格式训练 DeepSeek-V3 的细粒度混合精度框架。虽然低精度训练前景广阔,但它通常受到激活、权重和梯度中存在异常值的限制(Fishman 等人,2024 年;他等人;Sun 等人,2024 年)。尽管在推理量化方面取得了重大进展(Frantar et al., 2022;Xiao et al., 2023),但相对较少的研究证明低精度技术在大规模语言模型中的成功应用或者 Input->Activation_L 预训练(Fishman 等人,2024)。为了应对这一挑战并有效地扩展动态。

图 6 | 具有 FP8 数据格式的整体混合精度框架。为澄清起见,仅说明了 Linear 运算符。

范围内,我们引入了一种细粒度量化策略:使用1XNc元素进行分块分组,或使用Nc Ncelements 进行分块分组。在我们的提高精度累积过程中,相关的反量化开销在很大程度上得到了缓解,这是实现准确的 FP8 一般矩阵乘法 (GEMM) 的关键方面。此外,为了进一步减少 MoE 训练中的内存和通信开销,我们在 FP8 中缓存和分派激活,同时在 BF16 中存储低精度优化器状态。我们在类似于 DeepSeek-V2-Lite 和 DeepSeekV2 的两个模型尺度上验证了所提出的 FP8 混合精度框架,训练了大约 1 万亿个代币(详见附录 B.1)。值得注意的是,与 BF16 基线相比,我们的 FP8 训练模型的相对损失误差始终低于 0.25%,这一水平远在训练随机性的可接受范围内。

3.3.1. 混合精度框架

建立在低精度训练中广泛采用的技术之上(Kalamkar et al., 2019;Narang et al., 2017),我们提出了一个用于 FP8 训练的混合精度框架。在这个框架中,大多数计算密度运算都是在 FP8 中进行的,而少数关键运算则战略性地保持其原始数据格式,以平衡训练效率和数值稳定性。整个框架如图 6 所示。

首先,为了加速模型训练,大多数核心计算内核,即 GEMM 作,都以 FP8 精度实现。这些 GEMM 作接受 FP8 张量作为输入,并在 BF16 或 FP32 中生成输出。如图 6 所示,与线性运算符相关的所有三个 GEMM,即 Fprop (向前传递)、Dgrad (激活向后传递)和 Wgrad (权重向后传递),都在 FP8 中执行。与原来的 BF16 方法相比,这种设计理论上将计算速度提高了一倍。此外,FP8 Wgrad GEMM 允许将激活存储在 FP8 中,以便在向后传递中使用。这大大减少了内存消耗。

尽管 FP8 格式具有效率优势,但由于某些运算符对低精度计算敏感,因此仍然需要更高的精度。此外,一些低成本的作员还可以利用更高的精度,而总体训练成本的开销可以忽略不计。为此,经过仔细调查,我们对以下组件保持原始精度(例如 BF16 或 FP32):嵌入模块、输出头、MoE 门控模块、归一化运算符和注意力运算符。这些高精度的定向保留确保了 DeepSeek-V3 的稳定训练动态。为了进一步保证数值稳定性,我们以更高的精度存储主权重、权重梯度和优化器状态。而这些高精度组件会产生一些内存开销,在我们的分布式训练系统中,可以通过跨多个 DP 等级的高效分片来最大限度地减少它们的影响。

图 7 |(a) 我们提出了一种细粒度量化方法来减轻由特征异常值引起的量化误差;为简单起见,仅对 Fprop 进行了说明。(b) 结合我们的量化策略,我们通过以 元素 MMA 的间隔提升到 CUDA 核心来提高 FP8 GEMM 精度,以实现高精度累积。

3.3.2. 通过量化和乘法提高精度

基于我们的混合精度 FP8 框架,我们引入了几种提高低精度训练精度的策略,重点关注量化方法和乘法过程。

精细量化。在低精度训练框架中,由于 FP8 格式的动态范围有限,而 FP8 格式的动态范围受到限制,因此溢出和下溢是常见的挑战,而 FP8 格式受其减少的指数位的限制。作为标准做法,通过将输入张量的最大绝对值缩放到 FP8 的最大可表示值,输入分布与 FP8 格式的可表示范围保持一致(Narang 等人,2017 年)。这种方法使低精度训练对激活异常值高度敏感,这会严重降低量化精度。为了解决这个问题,我们提出了一种细粒度的量化方法,该方法在更精细的级别上应用缩放。如图 7 (a)、(1) 所示,对于激活,我们在 1x128 个图块的基础上(即每 128 个通道每个令牌)对元素进行分组和缩放;(2) 对于权重,我们以 128x128 块为基础(即每 128 个输出通道每 128 个输入通道)对元素进行分组和缩放。这种方法确保量化过程可以通过根据较小的元素组调整尺度来更好地适应异常值。在附录 B.2 中,我们进一步讨论了当我们以与权重量化相同的方式在块的基础上对激活进行分组和缩放时,训练的不稳定性。

我们方法中的一个关键修改是沿 GEMM 作的内部维度引入每组缩放因子。标准 FP8 GEMM 不直接支持此功能。但是,结合我们精确的 FP32 累积策略,它可以得到有效实施。

值得注意的是,我们的细粒度量化策略与微缩放格式的理念高度一致(Rouhani 等人,2023b),而 NVIDIA 下一代 GPU(Blackwell 系列)的 Tensor Core 已宣布支持具有较小量化粒度的微缩放格式(NVIDIA,2024a)。我们希望我们的设计可以作为未来工作的参考,以跟上最新的 GPU 架构。

提高累积精度。低精度 GEMM 作经常存在下溢问题,其准确性在很大程度上取决于高精度累积,这通常以 FP32 精度执行(Kalamkar 等人,2019 年;Narang et al., 2017)。然而,我们观察到 FP8 GEMM 在 NVIDIA H800 GPU 上的累积精度仅限于保留 14 位左右,这明显低于 FP32 累积精度。当内部维度 K 很大时,这个问题会变得更加明显(Wortsman et al., 2023),这是大规模模型训练中的典型情况,其中批量大小和模型宽度增加。以 的两个随机矩阵的 GEMM 运算为例,在我们的初步测试中,Tensor Core 中的有限累积精度导致最大相对误差接近 2%。尽管存在这些问题,有限的累积精度仍然是少数 FP8 框架 (NVIDIA, 2024b) 的默认选项,严重限制了训练精度。

为了解决这个问题,我们采用了升级到 CUDA 核心以获得更高精度的策略(Thakkar et al., 2023 )。该过程如图 7 (b) 所示。具体来说,在 Tensor Core 上执行 MMA (矩阵乘法累加)期间,使用有限的位宽累积中间结果。一旦达到Nc的间隔,这些部分结果将被复制到 CUDA 内核上的 FP32 寄存器,在那里执行全精度 FP32 累加。如前所述,我们的细粒度量化沿内部维度 K 应用每组比例因子。这些缩放因子可以在 CUDA 核心上作为反量化过程有效地乘以,而额外的计算成本最小。

值得注意的是,此修改降低了单个 warpgroup 的 WGMMA (Warpgroup level Matrix Multiply-Accumulate) 指令发出率。但是,在 H800 架构上,两个 WGMMA 通常会同时存在:当一个 warpgroup 执行提升作时,另一个 warpgroup 能够执行 MMA 作。这种设计支持两个作的重叠,从而保持 Tensor Core 的高利用率。根据我们的实验,设置Nc=128元素(相当于 4 个 WGMMA)表示可以显著提高精度的最小累积区间,而不会引入大量开销。

Mantissa over Exponents. 与之前工作采用的混合 FP8 格式(NVIDIA,2024b;Peng et al., 2023b;Sun et al., 2019b),它在 Fprop 中使用 E4M3(4 位指数和 3 位尾数),在 Dgrad 和 Wgrad 中使用 E5M2(5 位指数和 2 位尾数),我们在所有张量上采用 E4M3 格式以获得更高的精度。我们将这种方法的可行性归因于我们的细粒度量化策略,即平铺和块级缩放。通过对较小的元素组进行作,我们的方法有效地在这些分组元素之间共享指数位,从而减轻了有限动态范围的影响。

在线量化。张量量化框架采用延迟量化(NVIDIA,2024b;Peng et al., 2023b),它保持了最大绝对值的历史值来推断当前值。为了确保准确的比例并简化框架,我们在线计算每个 1x128 激活图块或 128x128 权重块的最大绝对值。基于它,我们推导出缩放因子,然后将激活或权重在线量化为 FP8 格式。

3.3.3. 低精度存储和通信

结合我们的 FP8 训练框架,我们通过将缓存的激活和优化器状态压缩为精度较低的格式,进一步减少了内存消耗和通信开销。

Low-Precision Optimizer 状态。我们采用 BF16 数据格式而不是 FP32 来跟踪 AdamW (Loshchilov and Hutter, 2017) 优化器中的一阶和二阶矩,而不会导致可观察到的性能下降。但是,主权重(由优化器存储)和梯度(用于批量累积)仍保留在 FP32 中,以确保整个训练过程中的数值稳定性。

低精度激活。如图 6 所示,Wgrad 作在 FP8 中执行。为了减少内存消耗,自然选择以 FP8 格式缓存激活,以便线性运算符的向后传递。但是,对于低成本、高精度的训练,需要特别考虑几个运算符:

(1) attention 运算符之后的 Linear 的输入。这些激活也用于 attention 运算符的向后传递,这使得它对精度很敏感。我们采用定制的 E5M6 数据格式,专门用于这些激活。此外,这些激活将在向后通道中从 1x128 量化图块转换为 128x1 图块。为避免引入额外的量化误差,所有缩放因子都是四舍五入的,即 2 的积分幂。

(2) SwiGLU 运算符在 MoE 中的输入。为了进一步降低内存成本,我们缓存 SwiGLU 运算符的输入,并在向后传递中重新计算其输出。这些激活也通过我们的细粒度量化方法存储在 FP8 中,从而在内存效率和计算准确性之间取得平衡。

低精度通信。通信带宽是 MoE 模型训练中的关键瓶颈。为了缓解这一挑战,我们将 MoE 上投影之前的激活量化到 FP8 中,然后应用调度组件,这与 MoE 上投影中的 FP8 Fprop 兼容。就像 attention 运算符之后的 Linear 输入一样,此激活的比例因子是 2 的整数幂。类似的策略应用于 MoE 下投影之前的激活梯度。对于前向和后向组合组件,我们都将它们保留在 BF16 中,以保持训练管道关键部分的训练精度。

展开阅读全文

更新时间:2025-05-09

标签:科技   入门   精华   资料   模型   数据   性能   精度   基准   能力   高效   通信   语言   阶段

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020- All Rights Reserved. Powered By 71396.com 闽ICP备11008920号
闽公网安备35020302034903号

Top