注:本文包含 AI 辅助创作
- 参考链接:
Paper Summary
- 核心内容总结:
- DeepSeek-V3 是一个大型 MoE 语言模型(671B-A37B),在 14.8T Token 上进行了训练
- 除了 DeepSeek-V2 中的 MLA 和 DeepSeekMoE 架构外,还开创性地采用了无辅助损失(auxiliary-loss-free)的负载平衡策略,并设置了 Multi-token 预测(Multi-token prediction)训练目标以获得更强的性能
- 性能:截止到发布,DeepSeek-V3 是最强的开源模型,并且实现了与领先的闭源模型(如 GPT-4o 和 Claude-3.5-Sonnet)相媲美的性能
- 最大特点:
- 性能强大且保持了经济的训练成本,其完整训练(包括预训练、上下文长度扩展和后训练)仅需 2.788M H800 GPU 小时
- 训练过程非常稳定,在整个训练过程中,论文没有遇到任何不可恢复的损失尖峰或执行任何回滚
- DeepSeek-V3 采用了:
- 多头潜在注意力(Multi-head Latent Attention, MLA),from DeepSeek-V2
- DeepSeekMoE 架构, from DeepSeek-V2
- DeepSeek-V3 开创了一种无辅助损失的(auxiliary-loss-free)负载均衡策略,并设定了 Multi-token 预测训练目标以获得更强的性能
- 论文在 14.8T 个多样化和高质量的 Token 上对 DeepSeek-V3 进行了预训练(随后进行了 SFT 和 RL)
Introduction and Discussion
- LLMs 经历了快速的迭代和演进 (Anthropic, 2024; Google, 2024; OpenAI, 2024a),逐步缩小了通往通用人工智能(Artificial General Intelligence, AGI)的差距(以上都是闭源模型)
- 开源模型,包括 DeepSeek 系列 (DeepSeek-AI, 2024a, 2024b, 2024c; 2024)、LLaMA 系列 (Al@Meta, 2024a,2023b)、Qwen 系列 (Qwen, 2023, 2024a, 2024b) 和 Mistral 系列 (2023; Mistral, 2024),也取得了显著进展,努力缩小与闭源模型的差距
- 为了进一步推动开源模型能力的边界,论文扩大了模型规模并推出了 DeepSeek-V3,这是一个大型 MoE 模型,拥有 671B 参数,其中每个 Token 激活 37B 参数
- 以前瞻性的视角,论文始终致力于实现强大的模型性能和经济高效的成本
- 在架构方面,DeepSeek-V3 仍然采用 MLA (DeepSeek-AI, 2024c) 以实现高效推理,并采用 DeepSeekMoE (2024) 以实现经济高效的训练
- 这两种架构已在 DeepSeek-V2 (DeepSeek-AI, 2024c) 中得到验证,证明了它们在保持强大模型性能的同时实现高效训练和推理的能力
- 除了基本架构之外,论文还实施了两种额外的策略以进一步增强模型能力
- 1)DeepSeek-V3 开创了一种无辅助损失的负载均衡策略 (2024a),旨在最小化因鼓励负载均衡而对模型性能产生的不利影响
- 2)DeepSeek-V3 采用了 Multi-token 预测训练目标,论文观察到这可以提升在评估基准上的整体性能
- 为了实现高效训练,论文支持 FP8 混合精度训练并对训练框架进行了全面的优化
- 低精度训练已成为一种有前景的高效训练解决方案 (2022; 2019; 2017; 2023b),其发展与硬件能力的进步密切相关 (2024; 2022; 2023a)
- 论文引入了一个 FP8 混合精度训练框架,并首次在超大规模模型上验证了其有效性
- 通过对 FP8 计算和存储的支持,论文实现了加速训练和降低 GPU 内存使用
- 至于训练框架,论文设计了 DualPipe 算法以实现高效的流水线并行(Pipeline Parallelism, PP),该算法具有更少的流水线气泡,并通过计算-通信重叠(Overlap)隐藏了训练过程中的大部分通信
- 这种重叠确保了随着模型的进一步扩展,只要论文保持恒定的计算-通信比,论文仍然可以在节点间使用细粒度专家(fine-grained experts),同时实现接近零的全交换(all-to-all)通信开销
- 论文还开发了高效的跨节点全交换通信内核,以充分利用 InfiniBand (IB) 和 NVLink 带宽
- 论文精心优化了内存占用,使得在不使用昂贵的张量并行(Tensor Parallelism, TP)的情况下训练 DeepSeek-V3 成为可能
- 结合这些努力,论文实现了高训练效率
- 在预训练期间,论文在 14.8T 高质量和多样化的 Token 上训练 DeepSeek-V3
- 预训练过程非常稳定,在整个训练过程中,论文没有遇到任何不可恢复的损失尖峰或不得不回滚的情况
- 接下来,论文对 DeepSeek-V3 进行了两阶段的上下文长度扩展
- 在第一阶段,最大上下文长度扩展到 32K
- 在第二阶段,进一步扩展到 128K
- 此后,论文进行了Post-training,包括对 DeepSeek-V3 基础模型进行 SFT 和 RL ,以使其与人类偏好对齐并进一步释放其潜力
- 在后训练阶段,论文从 DeepSeek-R1 系列模型中蒸馏推理能力,同时仔细维护模型准确性和生成长度之间的平衡
- 论文在全面的基准测试套件上评估了 DeepSeek-V3
- 综合评估显示 DeepSeek-V3-Base 已成为当前最强的开源基础模型,尤其是在代码和数学领域
- 其聊天版本也在一系列标准和开放式基准测试中优于其他开源模型,并实现了与领先闭源模型(包括 GPT-4o 和 Claude-3.5-Sonnet)相媲美的性能
- 最后,论文再次强调 DeepSeek-V3 的经济训练成本,总结在表 1 中,这是通过论文对算法、框架和硬件的优化协同设计实现的
- 在预训练阶段,在每万亿 Token 上训练 DeepSeek-V3 仅需 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 的官方训练,不包括先前在架构、算法或数据上的研究和消融实验相关的成本

- 论文的主要贡献包括:
- 架构:创新的负载均衡策略和训练目标 (Architecture: Innovative Load Balancing Strategy and Training Objective)
- 在 DeepSeek-V2 的高效架构基础上,论文开创了一种无辅助损失的负载均衡策略 (auxiliary-loss-free strategy for load balancing),该策略最小化了因鼓励负载均衡而产生的性能下降
- 论文研究了 Multi-token 预测 (Multi-token Prediction, MTP) 目标,并证明其有益于模型性能。它也可用于推测解码 (speculative decoding) 以加速推理
- 预训练:追求极致的训练效率 (Pre-Training: Towards Ultimate Training Efficiency)
- 论文设计了一个 FP8 混合精度训练框架 (FP8 mixed precision training framework),并首次在超大规模模型上验证了 FP8 训练的可行性和有效性
- 通过算法、框架和硬件的协同设计 (co-design),论文克服了跨节点 MoE 训练中的通信瓶颈,实现了近乎完全的计算-通信重叠 (computation-communication overlap)
- 这显著提高了论文的训练效率并降低了训练成本,使论文能够在没有额外开销的情况下进一步扩大模型规模
- 仅以 2.664M H800 GPU 小时的经济成本,论文完成了 DeepSeek-V3 在 14.8T Token 上的预训练,产生了当前最强的开源基础模型
- 预训练之后的后续训练阶段仅需 0.1M GPU 小时
- 后训练:来自 DeepSeek-R1 的知识蒸馏 (Post-Training: Knowledge Distillation from DeepSeek-R1)
- 论文引入了一种创新方法,将推理能力从长思维链 (long Chain-of-Thought, long CoT) 模型,特别是从 DeepSeek R1 系列模型之一,蒸馏到标准大语言模型中,尤其是 DeepSeek-V3
- 论文的流程巧妙地将 R1 的验证和反思模式融入 DeepSeek-V3,并显著提高了其推理性能
- 同时,论文也保持了对 DeepSeek-V3 输出风格和长度的控制
- 核心评估结果总结 (Summary of Core Evaluation Results)
- 知识 (Knowledge) :
- (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) 在教育类基准测试如 MMLU、MMLU-Pro 和 GPQA 上,DeepSeek-V3 优于所有其他开源模型,在 MMLU 上达到 88.5,在 MMLU-Pro 上达到 75.9,在 GPQA 上达到 59.1
- 代码、数学和推理 (Code, Math, and Reasoning) :
- (1) DeepSeek-V3 在所有非长思维链的开源和闭源模型中,在数学相关基准测试上达到了最先进的性能。值得注意的是,它在特定基准测试上(如 MATH-500)甚至超过了 o1-preview,展示了其强大的数学推理能力
- (2) 在代码相关任务上,DeepSeek-V3 成为代码竞赛基准测试(如 LiveCodeBench)中表现最佳的模型,巩固了其在该领域的领先地位
- 对于工程相关任务,虽然 DeepSeek-V3 的表现略低于 Claude-Sonnet-3.5,但它仍然以显著优势领先所有其他模型,展示了其在各种技术基准测试上的竞争力
- 知识 (Knowledge) :
- 架构:创新的负载均衡策略和训练目标 (Architecture: Innovative Load Balancing Strategy and Training Objective)
- 剩余部分组织如下:
- 详细阐述论文的 DeepSeek-V3 模型架构(第 2 节)
- 介绍论文的基础设施,包括论文的计算集群、训练框架、对 FP8 训练的支持、推理部署策略以及论文对未来硬件设计的建议(第 3 节)
- 描述论文的预训练过程,包括训练数据的构建、超参数设置、长上下文扩展技术、相关评估以及一些讨论(第 4 节)
- 讨论论文在后训练方面的工作,包括 SFT 、 RL 、相应的评估和讨论(第 5 节)
- 总结讨论 DeepSeek-V3 现有的局限性,并提出未来研究的潜在方向(第 6 节)
Architecture
- 论文首先介绍 DeepSeek-V3 的基本架构,其特点是采用 MLA (DeepSeek-AI) 实现高效推理,以及采用 DeepSeekMoE (2024) 实现经济高效的训练
- 然后,论文介绍一种 MTP 训练目标,论文观察到该目标能够提升模型在评估基准上的整体性能
- 对于其他未明确提及的细节,DeepSeek-V3 遵循 DeepSeek-V2 (DeepSeek-AI) 的设置
Basic Architecture
- DeepSeek-V3 的基本架构仍然在 Transformer (2017) 框架内
- 为了高效推理和经济高效的训练,DeepSeek-V3 同样采用了 MLA 和 DeepSeekMoE,这两者已在 DeepSeek-V2 中得到充分验证
- 与 DeepSeek-V2 相比,一个例外是:
- 论文额外为 DeepSeekMoE 引入了一种 无辅助损失负载均衡 (auxiliary-loss-free load balancing) 策略 (Wang 等人),以减轻因努力确保负载均衡而导致的模型性能下降
- 图 2 展示了 DeepSeek-V3 的基本架构,论文将在本节简要回顾 MLA 和 DeepSeekMoE 的细节
Multi-Head Latent Attention
- 对于注意力机制,DeepSeek-V3 采用 MLA 架构
- 令 \(d\) 表示嵌入维度,\(n_{h}\) 表示注意力头数,\(d_{h}\) 表示每个头的维度,\(\mathbf{h}_{t}\in\mathbb{R}^{d}\) 表示给定注意力层中第 \(t\) 个 Token 的注意力输入
- MLA 的核心是对注意力 Key 和 Value 进行低秩联合压缩,以减少推理期间的 Key-Value 缓存 (Key-Value, KV cache):
$$
\begin{align}
\boxed{\mathbf{c}_{t}^{KV} } &= \mathbf{W}^{DKY}\mathbf{h}_{t},\\
\left[\mathbf{k}_{t,1}^{C};\mathbf{k}_{t,2}^{C};…;\mathbf{k}_{t,n_{h} }^{C}\right] = \mathbf{k}_{t}^{C} &=\mathbf{W}^{UK}\mathbf{c}_{t}^{KV},\\
\boxed{\mathbf{k}_{t}^{R}} &= \text{RoPE}(\mathbf{W}^{KR}\mathbf{h}_{t}),\\
\mathbf{k}_{t,i} &= \left[\mathbf{k}_{t,i}^{C};\mathbf{k}_{t}^{R}\right],\\
[\mathbf{v}_{t,1}^{C};\mathbf{v}_{t,2}^{C};…;\mathbf{v}_{t,n_{h} }^{C}] = \mathbf{v}_{t}^{C} &=\mathbf{W}^{UV}\mathbf{c}_{t}^{KV}
\end{align}
$$- 其中 \(\mathbf{c}_{t}^{KV}\in\mathbb{R}^{d_{c} }\) 是 Key 和 Value 的压缩潜在向量;
- \(d_{c}(\ll d_{h}n_{h})\) 表示 KV 压缩维度;
- \(W^{DKY}\in\mathbb{R}^{d_{c}\times d}\) 表示下投影矩阵;
- \(W^{UK},W^{UV}\in\mathbb{R}^{d_{h}n_{h}\times d_{c} }\) 分别是 Key 和 Value 的上投影矩阵;
- \(W^{KR}\in\mathbb{R}^{d_{h}^{R}\times d}\) 是用于生成携带 旋转位置嵌入 (Rotary Positional Embedding, RoPE) (2024) 的解耦 Key 的矩阵;
- RoPE(\(\cdot\)) 表示应用 RoPE 矩阵的操作;
- [\(\cdot\);\(\cdot\)] 表示拼接
- 对于 MLA,在生成过程中只需要缓存蓝色框内的向量(即 \(\mathbf{c}_{t}^{KV}\) 和 \(\mathbf{k}_{t}^{R}\)),这能在保持性能与标准 多头注意力 (Multi-Head Attention, MHA) (2017) 相当的同时,显著减少 KV 缓存
- 对于注意力 Query ,论文也执行低秩压缩,这可以减少训练期间的激活内存:
$$
\begin{align}
\mathbf{c}_{t}^{Q}&=W^{DQ}\mathbf{h}_{t},\\
\left[\mathbf{q}_{t,1}^{C};\mathbf{q}_{t,2}^{C};…;\mathbf{q}_{t,n_{h} }^{C}\right]=\mathbf{q}_{t}^{C}&=W^{UQ}\mathbf{c}_{t}^{Q},\\
\left[\mathbf{q}_{t,1}^{R};\mathbf{q}_{t,2}^{R};…;\mathbf{q}_{t,n_{h} }^{R}\right]=\mathbf{q}_{t}^{R}&=\text{RoPE}(W^{QR}\mathbf{c}_{t}^{Q}),\\
\mathbf{q}_{t,i}&=\left[\mathbf{q}_{t,i}^{C};\mathbf{q}_{t,i}^{R}\right],
\end{align}
$$- 其中 \(\mathbf{c}_{t}^{Q}\in\mathbb{R}^{d_{c}^{\prime} }\) 是 Query 的压缩潜在向量;
- \(d_{c}^{\prime}(\ll d_{h}n_{h})\) 表示 Query 压缩维度;
- \(W^{DQ}\in\mathbb{R}^{d_{c}^{\prime}\times d}\),\(W^{UQ}\in\mathbb{R}^{d_{h}n_{h}\times d_{c}^{\prime} }\) 分别是 Query 的下投影和上投影矩阵;
- \(W^{QR}\in\mathbb{R}^{d_{h}^{R}n_{h}\times d_{c}^{\prime} }\) 是用于生成携带 RoPE 的解耦 Query 的矩阵
- 最终,注意力 Query (\(\mathbf{q}_{t,i}\))、 Key (\(\mathbf{k}_{j,i}\)) 和值 (\(\mathbf{v}_{j,i}^{C}\)) 被组合以产生最终的注意力输出 \(\mathbf{u}_{t}\):
$$
\begin{align}
\mathbf{o}_{t,i}&=\sum_{j=1}^{t}\text{Softmax}_{j}(\frac{\mathbf{q}_{t,i}^{T}\mathbf{k}_{j,i} }{\sqrt{d_{h}+d_{h}^{R} } })\mathbf{v}_{j,i}^{C},\\
\mathbf{u}_{t}&=W^{O}\left[\mathbf{o}_{t,1};\mathbf{o}_{t,2};…;\mathbf{o}_{t,n_{h} }\right],
\end{align}
$$- 其中 \(W^{O}\in\mathbb{R}^{d\times d_{h}n_{h} }\) 表示输出投影矩阵
DeepSeekMoE with Auxiliary-Loss-Free Load Balancing
Basic Architecture of DeepSeekMoE
- 对于 前馈网络 (Feed-Forward Networks, FFNs),DeepSeek-V3 采用 DeepSeekMoE 架构 (2024)
- 与传统的 MoE 架构(如 CShard (2021))相比,DeepSeekMoE 使用更细粒度的专家,并将一些专家隔离为共享专家
- 令 \(\mathbf{u}_{t}\) 表示第 \(t\) 个 Token 的 FFN 输入,论文计算 FFN 输出 \(\mathbf{h}_{t}^{\prime}\) 如下:
$$
\begin{align}
\mathbf{h}_{t}^{\prime} &=\mathbf{u}_{t}+\sum_{i=1}^{N_{s} }\text{FFN }_{i}^{(s)}\left(\mathbf{u}_{t}\right)+\sum_{i=1}^{N_{r} }g_{i,t}\text{ FFN}_{i}^{(r)}\left(\mathbf{u}_{t}\right),\\
g_{i,t} &= \frac{g_{i,t}^{\prime} }{\sum_{j=1}^{N_{r} }g_{j,t}^{\prime} },\\
g_{i,t}^{\prime} &= \begin{cases}s_{i,t},&s_{i,t}\in\text{Topk}(\{s_{j,t}|1\leqslant j\leqslant N_{r}\},K_{r}),\\ 0,&\text{otherwise},\end{cases} \\
s_{i,t} &= \text{Sigmoid}\left(\mathbf{u}_{t}^{T}\mathbf{e}_{t}\right),
\end{align}
$$- FFN\({}_{i}^{(s)}(\cdot)\) 表示第 \(i\) 个共享专家;
- \(N_{s}\) 表示共享专家数量
- FFN\({}_{i}^{(r)}(\cdot)\) 表示第 \(i\) 个路由专家;
- 和 \(N_{r}\) 表示路由专家数量
- \(K_{r}\) 表示激活的路由专家数量;
- \(g_{i,t}\) 是第 \(i\) 个专家的门控值;
- \(s_{i,t}\) 是 Token 到专家的亲和度;
- \(\mathbf{e}_{t}\) 是第 \(i\) 个路由专家的质心向量;
- Topk\((\cdot,K)\) 表示包含为第 \(t\) 个 Token 和所有路由专家计算的亲和度分数中 \(K\) 个最高分的集合
- FFN\({}_{i}^{(s)}(\cdot)\) 表示第 \(i\) 个共享专家;
- 与 DeepSeek-V2 略有不同,DeepSeek-V3 使用 sigmoid 函数计算亲和度分数,并在所有选定的亲和度分数之间应用归一化以产生门控值
Auxiliary-Loss-Free Load Balancing
- 对于 MoE 模型,不平衡的专家负载将导致 路由崩溃 (routing collapse) (2017),并在使用专家并行的情况下降低计算效率
- 传统的解决方案通常依赖 辅助损失 (auxiliary loss) (2021;) 来避免负载不平衡,但过大的辅助损失会损害模型性能 (Wang 等人)
- 为了在负载均衡和模型性能之间取得更好的权衡,论文开创了一种 无辅助损失负载均衡 (auxiliary-loss-free load balancing) 策略 (Wang 等人) 来确保负载均衡
- 论文为每个专家引入一个偏置项 \(b_{i}\),并将其加到相应的亲和度分数 \(s_{i,t}\) 上以确定 top-K 路由:
$$g^{\prime}_{i,t}=\begin{cases}s_{i,t},&s_{i,t}+b_{i}\in\text{Topk}((s_{j,t}+b_{j}|1\leqslant j\leqslant N_{r}),K_{r}),\\ 0,&\text{otherwise}.\end{cases}$$ - 特别说明:偏置项仅用于路由
- 将与 FFN 输出相乘的门控值仍然来自原始亲和度分数 \(s_{i,t}\)
- 论文为每个专家引入一个偏置项 \(b_{i}\),并将其加到相应的亲和度分数 \(s_{i,t}\) 上以确定 top-K 路由:
- 在训练期间,论文持续监控每个训练步骤的整个批次的专家负载
- 在每个步骤结束时,如果某个专家对应的负载过重,论文将其偏置项减少 \(y\),如果其对应的专家负载不足,则将其偏置项增加 \(y\),其中 \(y\) 是一个称为 偏置更新速度 (bias update speed) 的超参数
- 通过这种动态调整,DeepSeek-V3 在训练期间保持均衡的专家负载,并且比那些仅通过纯辅助损失来鼓励负载均衡的模型实现了更好的性能
Complementary Sequence-Wise Auxiliary Loss
- 尽管 DeepSeek-V3 主要依赖无辅助损失策略进行负载均衡,但为了防止任何单个序列内出现极端不平衡,论文也采用了互补的序列级均衡损失:
$$
\begin{align}
\mathcal{L}_{\text{Bal} }&=\alpha\sum_{i=1}^{N_{r} }f_{i}P_{i},\\
f_{i}&=\frac{N_{r} }{K_{r}T}\sum_{t=1}^{T}\mathbb{I}\left(s_{i,t}\in\text{Topk}(\{s_{j,t}|1\leqslant j\leqslant N_{r}\},K_{r})\right),\\
s^{\prime}_{i,t}&=\frac{s_{i,t} }{\sum_{j=1}^{N_{r} }s_{j,t} },\\
P_{i}&=\frac{1}{T}\sum_{t=1}^{T}s^{\prime}_{i,t},
\end{align}
$$- 平衡因子 \(\alpha\) 是一个超参数,对于 DeepSeek-V3 将被赋予一个极小的值;
- \(\mathbb{I}(\cdot)\) 表示指示函数;
- \(T\) 表示序列中的 Token 数
- 序列级均衡损失鼓励每个序列上的专家负载保持均衡
- 理解:
- 每次计算最小化 损失 \(\mathcal{L}_{\text{Bal} }\) 时,都可以看做是一个求解约束优化问题的过程
- 约束优化问题为:
$$
\begin{align}
\min_{P_i} \quad &\sum_{i=1}^{N_{r} }f_{i}P_{i} \\
\text{s.t.} &\sum_i P_i = 1
\end{align}
$$- 求解约束优化问题时,系数 \(f_{i}\) 可以看做是固定值(是每个序列的统计值,不同序列该值不同)
- 变量是 \(P_{i}\) ,需要满足一定约束
$$ \sum_i P_i=1 $$- 该约束可以通过定义推导得到:
$$ \sum_j P_i = \sum_i \frac{1}{T}\sum_{t=1}^{T}s^{\prime}_{i,t} = \sum_i \frac{1}{T}\sum_{t=1}^{T} \frac{s_{i,t} }{\sum_{j=1}^{N_{r} }s_{j,t} } = \frac{1}{T}\sum_{t=1}^{T} \sum_i \frac{s_{i,t} }{\sum_{j=1}^{N_{r} }s_{j,t} } = \frac{1}{T}\sum_{t=1}^{T} 1 = \frac{1}{T}T = 1$$
- 该约束可以通过定义推导得到:
- 直观上看,最小化 \(\sum_{j=1}^{D+1}f_iP_i\) 的解就是让概率 \(P_i\) 随着 \(f_i\) 变化, \(f_i\) 越小,则 \(P_i\) 应该越大
- 这样才能才能满足最小化 \(\sum_{j=1}^{D+1}f_iP_i\)
- 从梯度上看
$$ \frac{\partial \mathcal{L}_{\text{ LB} }}{\partial P_i} = \alpha f_i $$- 对于 \(f_i\) 越大的组,其概率 \(P_i\) 下降的越多
- 进一步理解:\(P_i\) 下降是通过调整模型 router 参数实现的,这会导致参数更新后下一轮中真实统计值 \(f_i\) 下降,最终会收敛到一个大家的真实分配统计值 \(f_i\) 都差不多相同的地方(这也就实现了所谓的均衡)
Node-Limited Routing
- 与 DeepSeek-V2 使用的设备受限路由类似,DeepSeek-V3 也使用一种受限路由机制来限制训练期间的通信成本
- 注:该方法在 DeepSeek-V2 中被称为 Device-Limited Routing
- 对于 DeepSeek-V2,除了对被路由专家进行简单的 top-K 选择外,还额外确保每个 Token 的目标专家最多分布在 \(M\) 个设备上
- 具体来说,对于每个 Token
- 首先筛选出 \(M\) 个设备,这些设备中包含亲和度得分(affinity scores)最高的专家;
- 随后,在这 \(M\) 个设备的专家中执行 top-K 选择
- 在实际实验中作者发现,当 \(M \ge 3\) 时,这种设备受限路由能够实现良好的性能,其效果与无限制的 top-K 路由基本持平
- 注:该方法在 DeepSeek-V2 中被称为 Device-Limited Routing
- 简而言之,论文确保每个 Token 最多被发送到 \(M\) 个节点 ,这些节点是根据分布在该节点上的专家的最高 \(\frac{K}{M}\) 个亲和度分数之和来选择的
- 理解(为什么是选择依据是每个节点最高 \(\frac{K}{M}\) 个亲和度之和?):对于每个 Token,需要分发到共 \(K\) 个专家,在限定只能发送到 \(M\) 个节点的情况下,则每个节点平均需要负责这个 Token 的 \(\frac{K}{M}\) 个专家,所以根据每个节点的最高 \(\frac{K}{M}\) 个亲和度之和来选择最终的 \(M\) 个节点
- 在此约束下,论文的 MoE 训练框架几乎可以实现完全的计算-通信重叠
- 理解:因为限定了每个 Token 需要分发的节点数量,这种情况下可以大幅减少通信开销,避免一个 Token 被发送到太多的节点而造成通信开销太大的情况
No Token-Dropping
- 由于有效的负载均衡策略,DeepSeek-V3 在整个训练过程中保持良好的负载均衡,DeepSeek-V3 在训练期间不丢弃任何 Token
- 论文还实现了特定的部署策略以确保推理时的负载均衡,因此 DeepSeek-V3 在推理期间也不丢弃 Token
Multi-token Prediction
- 受 Gloeckle 等人 (2024) 的启发,论文研究并为 DeepSeek-V3 设定了 MTP 目标,该目标将每个位置的预测范围扩展到多个未来 Token
- 1)MTP 目标使训练信号更加密集,并可能提高数据效率
- 2)MTP 可能使模型能够预规划其表示,以更好地预测未来 Token
- 图 3 展示了论文的 MTP 实现
- 与 Gloeckle 等人 (2024) 使用独立的输出头并行预测 \(D\) 个额外 Token 不同,论文顺序预测额外 Token ,并在每个预测深度保持完整的因果链

- 与 Gloeckle 等人 (2024) 使用独立的输出头并行预测 \(D\) 个额外 Token 不同,论文顺序预测额外 Token ,并在每个预测深度保持完整的因果链
- 注:上图是训练的流程,按照 Teacher Forcing 方式训练的,所以 MTP 头的输入是真实的 Token,在推理时,会使用主网络的输出作为第二个 Token 的输入,以此类推,详情见后文
MTP Modules
- 具体来说,论文的 MTP 实现使用 \(D\) 个顺序模块来预测 \(D\) 个额外 Token
- 注:从图3可以看出,并行头只在模型的最后一层(主模型的 Head 层前)上增加,而不是在 Transformer 网络前面的层增加
- 注:加入的内容是单层的 Transformer 再加一个 Head
- 第 \(k\) 个 MTP 模块包含一个共享嵌入层 \(\text{Emb}(\cdot)\)、一个共享输出头 \(\text{OutHead}(\cdot)\)、一个 Transformer 块 \(\text{TRM}_{k}(\cdot)\) 和一个投影矩阵 \(M_{k}\in\mathbb{R}^{d\times 2d}\)
- 对于第 \(i\) 个输入 Token \(t_{i}\),在第 \(k\) 个预测深度(注:这里的预测深度是指往后预测的 Token 数,不是 Transformer 网络层深度)
- 论文首先将第 \(i\) 个 Token 在第 \((k-1)\) 个深度的表示 \(\mathbf{h}_{i}^{k-1}\in\mathbb{R}^{d}\) 与第 \((i+k)\) 个 Token 的嵌入通过线性投影相结合:
$$\mathbf{h}_{i}^{ \prime{k} }=M_{k}[\textrm{RMSNorm}(\mathbf{h}_{i}^{ {k}-1});\textrm{RMSNorm}(\textrm{Emb}(t_{i+k}))],$$ - 其中 \([.;.]\) 表示拼接
- 特别地,当 \(k=1\) 时,\(\mathbf{h}_{i}^{ {k}-1}\) 指的是主模型给出的表示
- 特别注意:对于每个 MTP 模块,其嵌入层与主模型共享
- 组合后的 \(\mathbf{h}_{i}^{ {k} }\) 作为第 \(k\) 个深度的 Transformer 块的输入,以产生当前深度的输出表示 \(\mathbf{h}_{i}^{ {k} }\):
$$\mathbf{h}_{1:T-k}^{ {k} }=\textrm{TRM}_{k}(\mathbf{h}_{1:T-k}^{ \prime{k} }),$$ - 其中 \(T\) 表示输入序列长度,\({}_{ {i:j} }\) 表示切片操作(包括左右边界)
- 最后,以 \(\mathbf{h}_{i}^{ {k} }\) 作为输入,共享输出头将计算第 \(k\) 个额外预测 Token 的概率分布 \(p_{ {i+1+k} }^{ {k} }\in\mathbb{R}^{V}\),其中 \(V\) 是词汇表大小:
$$p_{ {i+k+1} }^{ {k} }=\textrm{OutHead}(\mathbf{h}_{i}^{ {k} }).$$
- 论文首先将第 \(i\) 个 Token 在第 \((k-1)\) 个深度的表示 \(\mathbf{h}_{i}^{k-1}\in\mathbb{R}^{d}\) 与第 \((i+k)\) 个 Token 的嵌入通过线性投影相结合:
- 输出头 \(\textrm{OutHead}(\cdot)\) 将表示线性映射为 logits,随后应用 \(\textrm{Softmax}(\cdot)\) 函数来计算第 \(k\) 个额外 Token 的预测概率
- 同样,对于每个 MTP 模块,其输出头与主模型共享
- 论文保持预测因果链的原则与 EAGLE (Li 等人) 类似,但 EAGLE 主要目标是 推测解码 (speculative decoding) (2023; 2023),而论文利用 MTP 来改进训练
MTP Training Objective
- 对于每个预测深度,论文计算一个交叉熵损失 \(\mathcal{L}_{\textrm{MTP} }^{ {k} }\):
$$\mathcal{L}_{\textrm{MTP} }^{ {k} }=\textrm{CrossEntropy}(p_{2+ k:T+1}^{ {k} },t_{2+k:T+1})=\frac{1}{T}\sum_{i=2+k}^{T+1}\log p_ {i}^{ {k} }[t_{i}],$$- 其中 \(T\) 表示输入序列长度,\(t_{i}\) 表示第 \(i\) 个位置的真实 Token
- \(p_{i}^{ {k} }[t_{i}]\) 表示由第 \(k\) 个 MTP 模块给出的 \(t_{i}\) 的相应预测概率
- 最后,论文计算所有深度上 MTP 损失的平均值,并将其乘以权重因子 \(\lambda\) 以获得总体 MTP 损失 \(\mathcal{L}_{\textrm{MTP} }\),该损失作为 DeepSeek-V3 的额外训练目标:
$$\mathcal{L}_{\textrm{MTP} }=\frac{\lambda}{D}\sum_{k=1}^{D}\mathcal{L}_{\textrm{ MTP} }^{ {k} }.$$
MTP in Inference
- 论文的 MTP 策略主要旨在提高主模型的性能 ,因此在推理期间,我们可以直接丢弃 MTP 模块,主模型可以独立且正常地运行
- 也可以将这些 MTP 模块重新用于推测解码,以进一步改善生成延迟
- 理解:实际上,后续的其他工作来看,还是提高主模型本身的性能用的多
- 额外补充:关于 MTP 推理的其他讲解
- 参考链接:deepseek技术解读(2)-MTP(Multi-token Prediction)的前世今生 - 姜富春的文章 - 知乎
- 基本思想:
- 预测阶段(Predict) :通过 K 个头一次生成 K 个 Token 的预测
- 验证阶段(Verify) :将 K 个 Token 组装成 K 个 <input,label> 对,并行地利用输入 Main Model 作为评估验证,如果输出 label 与 Main Model 一致,则接受该 token
- 接受阶段(Accept) :最终接受满足 Main Model 的最大长度 tokens 作为输出
- 但是,从上述 图3 来看,多头预估时,预测 \(t^{\prime}_3\) 的输入包括了 \(t_1\) 的 Transformer 最后一层表征和 \(t_2\) 的 Embedding(即 Teacher Forcing 的形式),所以推理时是无法直接使用的,流程同上述方法一样,但应该使用下图的形式:
](/Notes/NLP/LLM-Technical-Reports/NLP——技术报告解读-DeepSeek-V3/MTP-Inference.png)
- 特别说明:虽然主头的预测和后面头的预测是串行的,但是实际上,后面的头进需要走一个 Transformer 层,速度是很快的,和动辄几十层的主网络比起来(比如 DeepSeek-V3 是 61 层),算是很快的了(几乎可以认为是并行了)
Infrastructures
Compute Clusters
- DeepSeek-V3 在一个配备有 2048 个 NVIDIA H800 GPU 的集群上进行训练
- H800 集群中的每个节点包含 8 个通过节点内的 NVLink 和 NVSwitch 连接的 GPU
- 在不同节点之间,利用 InfiniBand (IB) 互连来促进通信
Training Framework
- DeepSeek-V3 的训练由 HAI-LLM 框架支持,这是一个由论文的工程师从头开始精心打造的、高效且轻量级的训练框架
- DeepSeek-V3 应用了 16 路流水线并行 (Pipeline Parallelism, PP) (2023b)、跨越 8 个节点的 64 路专家并行 (Expert Parallelism, EP) (2021) 和 ZeRO-1 数据并行 (Data Parallelism, DP) (2020)
- 为了促进 DeepSeek-V3 的高效训练,论文实施了细致的工程优化
- 首先,论文设计了 DualPipe 算法用于高效的流水线并行
- 与现有的 PP 方法相比,DualPipe 具有更少的流水线气泡
- 更重要的是,它在前向和后向过程中重叠了计算和通信阶段,从而解决了跨节点专家并行引入的沉重通信开销的挑战
- 其次,论文开发了高效的跨节点 All-to-All 通信内核,以充分利用 IB 和 NVLink 的带宽,并节省专用于通信的流式多处理器 (Streaming Multiprocessors, SMs)
- 最后,论文精心优化了训练期间的内存占用,从而使得论文能够在训练 DeepSeek-V3 时不使用昂贵的张量并行 (Tensor Parallelism, TP)
- 首先,论文设计了 DualPipe 算法用于高效的流水线并行
DualPipe and Computation-Communication Overlap
- 对于 DeepSeek-V3,跨节点专家并行引入的通信开销导致了大约 1:1 的低效计算-通信比
- 为了应对这一挑战,论文设计了一种名为 DualPipe 的创新流水线并行算法,该算法不仅通过有效重叠前向和后向计算-通信阶段来加速模型训练,而且还减少了流水线气泡
- DualPipe 的关键思想是在一对独立的前向和后向块 (chunk) 内重叠计算和通信
- 论文将每个块划分为四个组件:注意力 (attention)、 All-to-All 分发 (all-to-all dispatch)、MLP 和 All-to-All 合并 (all-to-all combine)
- 特别地,对于一个后向块,注意力和 MLP 都进一步分为两部分:对输入的梯度 (backward for input) 和对权重的梯度 (backward for weights),类似于 ZeroBubble (2023a) 中的做法
- 此外,论文还有一个 PP 通信组件
- 如图 4 所示,对于一对前向和后向块,论文重新排列了这些组件,并手动调整了专用于通信与计算的 GPU SMs 的比例
- 在这种重叠策略中,我们可以确保 All-to-All 通信和 PP 通信在执行过程中都能被完全隐藏
- 颜色上看:
- 绿色(B)表示 backward for input
- 蓝色(W)表示 backward for weight
- 橙色(F)表示 forward
- 通信上看:
- 绿色(B)表示 backward 的通信
- 橙色(F)表示 forward 的通信
- 紫色(PP)表示 PP 的通信

- 鉴于高效的重叠策略,完整的 DualPipe 调度如图 5 所示
- 它采用了双向流水线调度,同时从流水线的两端输入微批次 (micro-batches),并且大部分通信可以完全重叠
- 这种重叠也确保了,随着模型的进一步扩展,只要论文保持恒定的计算-通信比,论文仍然可以在跨节点使用细粒度专家,同时实现接近零的 All-to-All 通信开销

- 即使在通信负担较轻的更一般情况下,DualPipe 仍然展现出效率优势
- 在表 2 中,论文总结了不同 PP 方法的流水线气泡和内存使用情况
- 如表所示,与 ZB1P (2023b) 和 1F1B (2018) 相比,DualPipe 显著减少了流水线气泡,同时仅将峰值激活内存增加了 \(\frac{1}{PP}\) 倍
- 尽管 DualPipe 需要保留两份模型参数 ,但这并不会显著增加内存消耗 ,因为论文在训练期间使用了较大的 EP 规模
- 与 Chimera (2021) 相比,DualPipe 仅要求流水线阶段和微批次能被 2 整除,而不要求微批次能被流水线阶段整除
- 此外,对于 DualPipe,气泡和激活内存都不会随着微批次数量的增加而增加
Efficient Implementation of Cross-Node All-to-All Communication
- 为了确保 DualPipe 具有足够的计算性能,论文定制了高效的跨节点 All-to-All 通信内核(包括分发和合并),以节省专用于通信的 SMs 数量
- 这些内核的实现与论文的 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 个 SMs 就足以充分利用 IB 和 NVLink 的带宽
- 详细来说,论文采用了 warp 专业化技术 (2014),并将 20 个 SMs 划分为 10 个通信通道,在分发过程中下面的操作由各自的 warp 处理
- (1) IB 发送
- (2) IB 到 NVLink 转发
- (3) NVLink 接收
- 分配给每个通信任务的 warp 数量根据所有 SMs 上的实际工作负载动态调整,类似地,在合并过程中下面的步骤也有由动态调整的 warp 处理
- (1) NVLink 发送
- (2) NVLink 到 IB 转发和累加
- (3) IB 接收和累加
- 此外,分发和合并内核都与计算流重叠,因此论文也考虑了它们对其他 SM 计算内核的影响
- 具体来说,论文采用了定制的 PTX (Parallel Thread Execution) 指令并自动调整通信块大小,这显著减少了 L2 缓存的使用以及对其他 SMs 的干扰
Extremely Memory Saving with Minimal Overhead
- 为了减少训练期间的内存占用,论文采用了以下技术
- RMSNorm 和 MLA 上投影的重计算 (Recomputation of RMSNorm and MLA Up-Projection)
- 论文在反向传播期间重新计算所有 RMSNorm 操作和 MLA 上投影,从而无需持久存储它们的输出激活
- 以微小的开销为代价,该策略显著减少了存储激活所需的内存
- CPU 中的指数移动平均 (Exponential Moving Average in CPU)
- 在训练期间,论文保留模型参数的指数移动平均 (EMA) 用于在学习率衰减后早期估计模型性能
- EMA 参数存储在 CPU 内存中,并在每个训练步骤后异步更新
- 这种方法使论文能够维护 EMA 参数,而不会产生额外的内存或时间开销
- 在训练期间,论文保留模型参数的指数移动平均 (EMA) 用于在学习率衰减后早期估计模型性能
- Multi-token 预测的共享嵌入和输出头 (Shared Embedding and Output Head for Multi-token Prediction)。通过 DualPipe 策略,论文将模型的最浅层(包括嵌入层)和最深层(包括输出头)部署在同一个 PP 排名 (rank) 上。这种安排使得 MTP 模块和主模型之间能够物理共享共享嵌入和输出头的参数和梯度。这种物理共享机制进一步提高了论文的内存效率
FP8 Training
- 受低精度训练最新进展 (2022; 2023b) 的启发,论文提出了一个利用 FP8 数据格式的细粒度混合精度框架来训练 DeepSeek-V3
- 虽然低精度训练前景广阔,但它通常受到激活、权重和梯度中异常值 (outliers) 存在的限制 (2024; 2024)
- 尽管在推理量化方面取得了显著进展 (2022; 2023),但相对较少的研究证明了低精度技术在大规模语言模型预训练中的成功应用 (2024)
- 为了应对这一挑战并有效扩展 FP8 格式的动态范围,论文引入了一种细粒度的量化策略:
- 使用 \(1\times N_{c}\) 元素的 tile-wise 分组 (tile-wise grouping) 或 \(N_{c}\times N_{c}\) 元素的块级分组 (block-wise grouping)
- 注:tile-wise 说明量化维度是按照块做的,不是整个张量统一量化(tile 粒度比张量粒度更细)
- 相关的反量化开销在论文提高了精度的累加过程下得到了很大程度的缓解,这是实现精确 FP8 通用矩阵乘法 (General Matrix Multiplication, GEMM) 的关键方面
- 为了进一步减少 MoE 训练中的内存和通信开销,论文以 FP8 格式缓存和分发激活,同时以 BF16 格式存储低精度的优化器状态
- 论文在两个与 DeepSeek-V2-Lite 和 DeepSeek-V2 规模相似的模型上验证了所提出的 FP8 混合精度框架,训练了大约 1T 个 Token(更多细节见附录 B.1)
- 使用 \(1\times N_{c}\) 元素的 tile-wise 分组 (tile-wise grouping) 或 \(N_{c}\times N_{c}\) 元素的块级分组 (block-wise grouping)
- 与 BF16 基线相比,论文的 FP8 训练模型的相对损失误差始终低于 0.25%,这一水平完全在训练随机性的可接受范围内
Mixed Precision Framework
- 基于低精度训练中广泛采用的技术 (2019; 2017),论文提出了一个用于 FP8 训练的混合精度框架
- 在此框架中,大多数计算密集型操作以 FP8 精度进行,而一些关键操作则策略性地保持其原始数据格式,以平衡训练效率和数值稳定性
- 整体框架如图 6 所示
- 首先,为了加速模型训练,大多数核心计算内核,即 GEMM 操作,都以 FP8 精度实现
- 这些 GEMM 操作接受 FP8 张量作为输入,并产生 BF16 或 FP32 的输出。如图 6 所示,与线性算子 (Linear operator) 相关的所有三个 GEMM,即 Fprop(前向传播)、Dgrad(激活反向传播)和 Wgrad(权重反向传播),都在 FP8 中执行
- 该设计理论上比原始的 BF16 方法提高一倍的计算速度
- 此外,FP8 的 Wgrad GEMM 允许激活以 FP8 格式存储,用于反向传播。这显著减少了内存消耗

- 尽管 FP8 格式具有效率优势,但某些算子由于其对低精度计算的敏感性,仍然需要更高的精度
- 此外,一些低成本算子也可以使用更高的精度,而对整体训练成本的开销可以忽略不计
- 因此,经过仔细研究,论文为以下组件保留了原始精度(例如 BF16 或 FP32):嵌入模块、输出头、MoE 门控模块、归一化算子和注意力算子
- 这些有针对性的高精度保留确保了 DeepSeek-V3 的训练动态稳定性
- 为了进一步保证数值稳定性,论文以更高的精度存储主权重 (master weights)、权重梯度和优化器状态
- 虽然这些高精度组件会产生一些内存开销,但它们的影响可以通过在论文的分布式训练系统中跨多个 DP 排名进行高效分片来最小化
Improved Precision from Quantization and Multiplication
- 基于论文的混合精度 FP8 框架,论文引入了若干策略来增强低精度训练的准确性,重点关注量化方法和乘法过程
Fine-Grained Quantization
- 在低精度训练框架中,由于 FP8 格式的有限动态范围(受限于其减少的指数位),溢出和下溢是常见的挑战
- 作为标准实践,通过将输入张量的最大绝对值缩放到 FP8 格式的最大可表示值来将输入分布对齐到 FP8 格式的可表示范围 (2017)
- 这种方法使得低精度训练对激活异常值高度敏感,这会严重降低量化精度
- 为了解决这个问题,论文提出了一种细粒度量化方法,在更细粒度的级别上应用缩放
- 如图 7 (a) 所示
- (1) 对于激活,论文在 1x128 的 tile 基础上(即每个 Token 每 128 个通道)对元素进行分组和缩放;
- (2) 对于权重,论文在 128x128 的块基础上(即每 128 个输入通道每 128 个输出通道)对元素进行分组和缩放

- 这种方法通过根据更小的元素组调整缩放比例,确保量化过程能更好地适应异常值
- 在附录 B.2 中,论文进一步讨论了当论文以与权重量化相同的方式对激活进行块级分组和缩放时出现的训练不稳定性
- 论文方法中的一个关键修改是引入了沿 GEMM 操作内部维度 (inner dimension) 的每组缩放因子 (per-group scaling factors)
- 此功能在标准的 FP8 GEMM 中并不直接支持
- 但结合论文精确的 FP32 累加策略,它可以被高效实现
- 值得注意的是,论文的细粒度量化策略与微缩放格式 (microscaling formats) 的思想高度一致 (2023a),而 NVIDIA 下一代 GPU(Blackwell 系列)的 Tensor Cores 已宣布支持具有更小量化粒度的微缩放格式 (2022b)
- 作者希望论文的设计能为未来的工作提供参考,以跟上最新的 GPU 架构
Increasing Accumulation Precision
- 低精度 GEMM 操作经常遭受下溢问题,其精度在很大程度上依赖于高精度累加,这通常以 FP32 精度执行 (2019; 2017)
- 但论文观察到在 NVIDIA H800 GPU 上,FP8 GEMM 的累加精度仅限于保留大约 14 位,这显著低于 FP32 的累加精度
- 当内部维度 K 很大时,这个问题会更加明显 (2023),这在大规模模型训练中增加批大小和模型宽度时是典型情况
- 以两个随机矩阵的 GEMM 操作为例,其中 \(\textit{K}=4096\),在论文的初步测试中,Tensor Cores 中有限的累加精度导致最大相对误差接近 \(2%\)
- 尽管存在这些问题,有限的累加精度仍然是一些 FP8 框架中的默认选项 (2022c),严重限制了训练精度
- 为了解决这个问题,论文采用了提升到 CUDA Cores 以获得更高精度的策略 (2023)
- 该过程如图 7 (b) 所示
- 在 Tensor Cores 上执行 MMA(矩阵乘积累加)期间,中间结果使用有限的位宽进行累加
- 一旦达到 \(N_c\) 个元素的间隔,这些部分结果将被复制到 CUDA Cores 上的 FP32 寄存器中,在那里执行全精度的 FP32 累加
- 如前所述,论文的细粒度量化沿内部维度 K 应用每组缩放因子
- 这些缩放因子可以作为反量化过程在 CUDA Cores 上高效地相乘,而只需最小的额外计算成本
- 值得注意的是,这种修改降低了单个 warpgroup 的 WGMMA (Warpgroup-level Matrix Multiply-Accumulate) 指令发出率
- 但在 H800 架构上,通常可以同时维持两个 WGMMA:当一个 warpgroup 执行提升操作时,另一个能够执行 MMA 操作
- 这种设计使得两个操作能够重叠,保持了 Tensor Cores 的高利用率
- 根据论文的实验,设置 \(N_c\) = 128 个元素,相当于 4 个 WGMMAs,是能够显著提高精度而不引入大量开销的最小累加间隔
Mantissa over Exponents(尾数优先于指数)
- 与先前工作采用的混合 FP8 格式 (2022c; 2023b;) 相比,后者在 Fprop 中使用 E4M3(4 位指数和 3 位尾数),在 Dgrad 和 Wgrad 中使用 E5M2(5 位指数和 2 位尾数),论文在所有张量上采用 E4M3 格式以获得更高的精度
- 论文将此方法的可行性归功于论文的细粒度量化策略,即 tile 和块级缩放
- 通过在更小的元素组上操作,论文的方法有效地在这些分组元素之间共享指数位,从而减轻了有限动态范围的影响
Online Quantization
- 张量级量化框架 (2022c; 2023b) 中采用了延迟量化 (delayed quantization),它维护先前迭代的最大绝对值历史记录以推断当前值
- 为了确保准确的缩放因子并简化框架,论文为每个 1x128 激活 tile 或 128x128 权重块在线计算最大绝对值
- 基于此,论文推导出缩放因子,然后将激活或权重在线量化为 FP8 格式
Low-Precision Storage and Communication
- 结合论文的 FP8 训练框架,论文通过将缓存的激活和优化器状态压缩成更低精度的格式,进一步减少了内存消耗和通信开销
- 低精度优化器状态 (Low-Precision Optimizer States)
- 论文采用 BF16 数据格式而不是 FP32 来跟踪 AdamW (2017) 优化器中的一阶矩和二阶矩,而不会引起可观察到的性能下降
- 然而,主权重(由优化器存储)和梯度(用于批大小累加)仍然保留在 FP32 中,以确保整个训练过程中的数值稳定性
- 低精度激活 (Low-Precision Activation)
- 如图 6 所示,Wgrad 操作以 FP8 精度执行
- 为了减少内存消耗,一个自然的选择是以 FP8 格式缓存激活,用于线性算子的反向传播。然而,论文对几个算子进行了特殊考虑,以实现低成本的高精度训练:
- (1) 注意力算子后的线性算子的输入
- 这些激活也用于注意力算子的反向传播,这使得它对精度敏感
- 论文为这些激活专门采用了一种定制的 E5M6 数据格式
- 此外,这些激活在反向传播中将从 1x128 量化 tile 转换为 128x1 tile
- 为了避免引入额外的量化误差,所有的缩放因子都是 2 的整数幂舍入缩放
- (2) MoE 中 SwiGLU 算子的输入
- 为了进一步降低内存成本,论文缓存 SwiGLU 算子的输入,并在反向传播中重新计算其输出
- 这些激活也使用论文的细粒度量化方法以 FP8 格式存储,在内存效率和计算精度之间取得了平衡
- (1) 注意力算子后的线性算子的输入
- 低精度通信 (Low-Precision Communication)
- 通信带宽是 MoE 模型训练的关键瓶颈
- 为了缓解这一挑战,论文在 MoE 上投影之前将激活量化为 FP8,然后应用分发组件,这与 MoE 上投影中的 FP8 Fprop 兼容
- 与注意力算子后的线性算子的输入类似,此激活的缩放因子是 2 的整数幂
- 类似的策略应用于 MoE 下投影之前的激活梯度
- 对于前向和后向的合并组件,论文将它们保留在 BF16 中,以在训练管道的关键部分保持训练精度
Inference and Deployment
- 论文将 DeepSeek-V3 部署在 H800 集群上,其中每个节点内的 GPU 使用 NVLink 互连,集群中的所有 GPU 通过 IB 完全互连
- 为了同时确保在线服务的服务水平目标 (Service-Level Objective, SLO) 和高吞吐量,论文采用了以下将预填充 (prefilling) 和解码 (decoding) 阶段分离的部署策略
Prefilling
- 预填充阶段的最小部署单元由 4 个节点(32 个 GPU)组成
- 注意力部分采用 4 路张量并行 (Tensor Parallelism, TP4) 结合序列并行 (Sequence Parallelism, SP),以及 8 路数据并行 (Data Parallelism, DP8)
- 其较小的 TP 规模(4)限制了 TP 通信的开销
- 对于 MoE 部分,论文使用 32 路专家并行 (Expert Parallelism, EP32),这确保了每个专家处理足够大的批大小,从而提高了计算效率
- 对于 MoE All-to-All 通信,论文使用与训练相同的方法:
- 首先通过 IB 跨节点传输 Token ,然后通过 NVLink 在节点内 GPU 之间转发
- 特别地,论文对浅层的稠密 MLP 使用 1 路张量并行以节省 TP 通信
- 为了实现 MoE 部分中不同专家之间的负载平衡,论文需要确保每个 GPU 处理大致相同数量的 Token
- 为此,论文引入了冗余专家 (redundant experts) 的部署策略,该策略复制高负载专家并冗余部署它们
- 高负载专家是基于在线部署期间收集的统计信息检测出来的,并定期调整(例如,每 10 分钟)
- 在确定了冗余专家集合后,论文根据观察到的负载,仔细地在节点内的 GPU 之间重新安排专家,力求在不增加跨节点 All-to-All 通信开销的情况下,尽可能平衡 GPU 间的负载
- 对于 DeepSeek-V3 的部署,论文为预填充阶段设置了 32 个冗余专家
- 对于每个 GPU,除了它原本承载的 8 个专家外,它还将承载一个额外的冗余专家
- 在预填充阶段,为了提高吞吐量并隐藏 All-to-All 和 TP 通信的开销,论文同时处理两个计算工作量相似的微批次,将一个微批次的注意力和 MoE 与另一个微批次的分发和合并重叠起来
- 最后,作者正在探索一种专家的动态冗余 (dynamic redundancy) 策略,其中每个 GPU 承载更多专家(例如,16 个专家),但在每次推理步骤中只激活 9 个
- 在每层的 All-to-All 操作开始之前,论文实时计算全局最优的路由方案
- 鉴于预填充阶段涉及大量计算,计算此路由方案的开销几乎可以忽略不计
Decoding
- 在解码期间,论文将共享专家视为路由专家
- 从这个角度来看,每个 Token 将在路由期间选择 9 个专家,其中共享专家被视为一个总是被选中的高负载专家
- 解码阶段的最小部署单元由 40 个节点(320 个 GPU)组成
- 注意力部分采用 TP4 结合 SP,以及 DP80,而 MoE 部分使用 EP320
- 对于 MoE 部分,每个 GPU 仅承载一个专家,其中 64 个 GPU 负责承载冗余专家和共享专家
- 分发和合并部分的 All-to-All 通信通过 IB 上的直接点对点传输进行,以实现低延迟
- 论文还利用 IBSDA (2022a) 技术进一步最小化延迟并提高通信效率
- 与预填充类似,论文基于在线服务的统计专家负载,以一定的间隔定期确定冗余专家集合
- 但论文不需要重新安排专家,因为每个 GPU 只承载一个专家
- 论文也在探索用于解码的动态冗余策略。然而,这需要更仔细地优化计算全局最优路由方案的算法以及与分发内核的融合以减少开销
- 为了提高吞吐量并隐藏 All-to-All 通信的开销,论文也在探索在解码阶段同时处理两个计算工作量相似的微批次
- 与预填充不同,注意力在解码阶段消耗的时间比例更大
- 因此,论文将一个微批次的注意力与另一个微批次的(分发+MoE+合并)重叠起来
- 在解码阶段,每个专家的批大小相对较小(通常在 256 个 Token 以内),瓶颈是内存访问而非计算
- 由于 MoE 部分只需要加载一个专家的参数,内存访问开销很小,因此使用较少的 SMs 不会显著影响整体性能
- 因此,为了避免影响注意力部分的计算速度,我们可以只分配一小部分 SMs 给(分发+MoE+合并)
Suggestions on Hardware Design
- 基于论文 All-to-All 通信和 FP8 训练方案的实现,论文向 AI 硬件供应商提出以下芯片设计建议
Communication Hardware
- 在 DeepSeek-V3 中,论文实现了计算和通信之间的重叠 ,以在计算期间隐藏通信延迟
- 与串行计算和通信相比,这显著降低了对通信带宽的依赖
- 但当前的通信实现依赖于昂贵的 SMs(例如,论文分配了 H800 GPU 中可用的 132 个 SMs 中的 20 个用于此目的),这将限制计算吞吐量
- 而且使用 SMs 进行通信会导致显著的效率低下,因为 Tensor Cores 完全未被充分利用
- 目前,SMs 主要为 All-to-All 通信执行以下任务:
- 在 IB (InfiniBand) 和 NVLink 域之间转发数据 ,同时聚合来自单个 GPU、目的地为同一节点内多个 GPU 的 IB 流量
- 在 RDMA 缓冲区(已注册的 GPU 内存区域)和输入/输出缓冲区之间传输数据
- 执行归约操作以进行 All-to-All 合并
- 在跨 IB 和 NVLink 域的分块数据传输到多个专家期间,管理细粒度的内存布局
- 论文期望未来的供应商能够开发出将这些通信任务从宝贵的计算单元 SM 上卸载的硬件,作为 GPU 协处理器或类似 NVIDIA SHARP (2016) 的网络协处理器
- 此外,为了降低应用程序编程的复杂性,作者希望这种硬件能从计算单元的角度统一 IB(横向扩展)和 NVLink(纵向扩展)网络
- 通过这种统一的接口,计算单元可以基于简单的原语提交通信请求,轻松地在整个 IB-NVLink 统一域中完成诸如读、写、多播和归约等操作
Compute Hardware
- Tensor Cores 中更高的 FP8 GEMM 累加精度 (Higher FP8 GEMM Accumulation Precision in Tensor Cores)
- 在 NVIDIA Hopper 架构当前的 Tensor Core 实现中,FP8 GEMM 受到有限累加精度的困扰
- 在基于最大指数通过右移对齐 32 个尾数乘积后,Tensor Core 仅使用每个尾数乘积的最高 14 位进行加法,并截断超出此范围的位(加法结果累加到寄存器中也采用 14 位精度)
- 论文的实现通过将 128 次 FP8×FP8 乘法的加法结果累加到 CUDA core 中具有 FP32 精度的寄存器中,部分缓解了这一限制
- 尽管这有助于实现成功的 FP8 训练,但这仅仅是由于 Hopper 架构在 FP8 GEMM 累加精度方面的硬件缺陷而做出的妥协
- 未来的芯片需要采用更高的精度
- 支持 tile 和块级量化 (Support for Tile- and Block-Wise Quantization)
- 当前的 GPU 仅支持每张量 (per-tensor) 量化,缺乏对论文 tile 和块级量化等细粒度量化的原生支持
- 在当前实现中,当达到 \(N_{C}\) 间隔时,部分结果将从 Tensor Cores 复制到 CUDA cores,乘以缩放因子,并添加到 CUDA cores 上的 FP32 寄存器中
- 尽管结合论文精确的 FP32 累加策略,反量化开销得到了显著缓解,但 Tensor Cores 和 CUDA cores 之间频繁的数据移动仍然限制了计算效率
- 论文建议未来的芯片通过使 Tensor Cores 能够接收缩放因子并实现具有组缩放的 MMA 来支持细粒度量化
- 通过这种方式,整个部分和累加和反量化可以直接在 Tensor Cores 内部完成,直到产生最终结果,从而避免频繁的数据移动
- 支持在线量化 (Support for Online Quantization)
- 尽管论文的研究证明了在线量化的有效性,但当前的实现难以有效支持它
- 在现有流程中,论文需要从 HBM(高带宽内存)中读取 128 个 BF16 激活值(先前计算的输出)进行量化,然后量化后的 FP8 值写回 HBM,只是为了再次读取用于 MMA
- 为了解决这种低效率问题,论文建议未来的芯片将 FP8 转换和 TMA(Tensor Memory Accelerator)访问融合到单个融合操作中,这样量化可以在激活从全局内存传输到共享内存的过程中完成,避免频繁的内存读写
- 论文还建议支持 warp 级的转换指令以加速,这进一步促进了层归一化和 FP8 转换的更好融合
- 或者,可以采用近内存计算方法,将计算逻辑放置在 HBM 附近
- 在这种情况下,BF16 元素在从 HBM 读入 GPU 时可以直接转换为 FP8,将片外内存访问减少大约 50%
- 支持转置 GEMM 操作 (Support for Transposed GEMM Operations)
- 当前的架构使得将矩阵转置与 GEMM 操作融合变得很麻烦
- 在论文的工作流程中,前向传播期间的激活被量化为 1x128 的 FP8 tile 并存储
- 在后向传播期间,矩阵需要被读出、反量化、转置、重新量化为 128x1 tile ,并存储在 HBM 中
- 为了减少内存操作,论文建议未来的芯片能够在 MMA 操作之前直接从共享内存中对矩阵进行转置读取,以支持训练和推理中所需的那些精度
- 结合 FP8 格式转换和 TMA 访问的融合,这一增强将显著简化量化工作流程
Pre-Training
Data Construction
- 与 DeepSeek-V2 相比,论文通过提高数学和编程样本的比例来优化预训练语料库,同时将多语言覆盖范围扩展到英语和中文之外
- 论文的数据处理流程经过改进,在保持语料库多样性的同时最大限度地减少了冗余
- 受 (2024) 的启发,论文实施了文档打包方法(Document Packing Method)以保证数据完整性,但在训练期间并未引入跨样本注意力掩码
- 最终,DeepSeek-V3 的训练语料库包含 14.8T 个高质量且多样化的 Token(使用论文的分词器)
- 在 DeepSeekCoder-V2 (2024) 的训练过程中,论文观察到 Fill-in-Middle (FIM) 策略在使模型能够根据上下文线索准确预测中间文本的同时,并不会损害其下一个 Token 预测能力
- 与 DeepSeekCoder-V2 保持一致,论文也在 DeepSeek-V3 的预训练中纳入了 FIM 策略
- 具体来说,论文采用 Prefix-Suffix-Middle (PSM, Prefix, Suffix, Middle) 框架来结构化数据,如下所示:
$$ \text{<|fim_begin|>} f_{\text{pre} } \text{<|fim_hole|>} f_{\text{suff} } \text{<|fim_end|>} f_{\text{middle} } \text{<|eos_token|>} $$ - 该结构在文档级别应用,作为预打包过程的一部分
- FIM 策略的应用率为 0.1,与 PSM 框架保持一致
- 注:Fill-in-Middle(FIM,中间填充)是大语言模型的一种训练目标,核心是让模型根据上下文的 “前缀” 和 “后缀” 信息,预测并补全中间缺失的内容;这种设计旨在增强模型对文本全局逻辑的理解能力,尤其适用于需要双向参考上下文的场景
- DeepSeek-V3 的分词器采用字节级 BPE (1999),并扩展了 128K Token 的词汇表
- 论文对分词器的预分词器和训练数据进行了修改,以优化多语言压缩效率
- 与 DeepSeek-V2 相比,新的预分词器引入了结合标点符号和换行符的 Token
- 然而,当模型处理没有终止换行符的多行提示(特别是少样本评估提示)时,这种技巧可能会引入 Token 边界偏差 (2023)
- 为了解决这个问题,论文在训练期间随机拆分一定比例的此类组合 Token ,使模型接触到更广泛的特例,从而减轻这种偏差
Hyper-Parameters
- 模型超参数 (Model Hyper-Parameters)
- 论文将 Transformer 层数设置为 61,隐藏维度设置为 7168
- 所有可学习参数均使用标准差为 0.006 进行随机初始化
- 在 MLA 中,论文将注意力头数 \(n_{h}\) 设置为 128,每个头的维度 \(d_{h}\) 设置为 128
- KV 压缩维度 \(d_{c}\) 设置为 512, Query 压缩维度 \(d^{\prime}_{c}\) 设置为 1536
- 对于解耦的 Query 和 Key ,论文将每个头的维度 \(d^{R}_{h}\) 设置为 64
- 论文将除前三层之外的所有 FFN 替换为 MoE 层
- 每个 MoE 层包含 1 个共享专家和 256 个路由专家,其中每个专家的中间隐藏维度为 2048
- 在路由专家中,每个 Token 将激活 8 个专家,并且确保每个 Token 最多被发送到 4 个节点
- 多 Token 预测深度 \(D\) 设置为 1 ,即除了精确的下一个 Token 外,每个 Token 还会预测一个额外的 Token
- 与 DeepSeek-V2 一样,DeepSeek-V3 也在压缩潜在向量之后采用了额外的 RMSNorm 层,并在宽度瓶颈处乘以额外的缩放因子
- 总结:在此配置下,DeepSeek-V3 总共包含 671B 参数,其中每个 Token 激活 37B 参数
- 训练超参数 (Training Hyper-Parameters)
- 采用 AdamW 优化器 (2017),超参数设置为 \(\beta_{1}=0.9\),\(\beta_{2}=0.95\),权重衰减 = 0.1
- 在预训练期间,论文将最大序列长度设置为 4K,并在 14.8T Token 上对 DeepSeek-V3 进行预训练
- 学习率调度方面
- 首先,在前 2K 步期间将其从 \(0\) 线性增加到 \(2.2\times 10^{-4}\)
- 然后,论文保持 \(2.2\times 10^{-4}\) 的恒定学习率,直到模型消耗完 10T 训练 Token
- 随后,论文在 4.3T Token 内,按照余弦衰减曲线将学习率逐渐衰减到 \(2.2\times 10^{-5}\)
- 在最后 500B Token 的训练期间,论文在前 333B Token 中保持 \(2.2\times 10^{-5}\) 的恒定学习率,并在剩余的 167B Token 中切换到另一个恒定学习率 \(7.3\times 10^{-6}\)
- 梯度裁剪范数设置为 1.0
- 论文采用批量大小调度策略(batch size scheduling strategy)
- 在前 469B Token 的训练中,批量大小从 3072 逐渐增加到 15360,然后在剩余训练中保持 15360
- 论文利用流水线并行将模型的不同层部署在不同的 GPU 上,对于每一层,路由专家将均匀部署在属于 8 个节点的 64 个 GPU 上
- 问题:这里如何理解?
- 至于节点限制路由 ,每个 Token 最多被发送到 4 个节点(即 \(M=4\))
- 对于无辅助损失的负载平衡,论文在前 14.3T Token 中将偏置更新速度 \(\gamma\) 设置为 0.001,在剩余的 500B Token 中设置为 0.0
- 对于平衡损失,论文将 \(\alpha\) 设置为 0.0001,仅用于避免任何单个序列内的极端不平衡
- MTP 损失权重 \(\lambda\) 在前 10T Token 中设置为 0.3,在剩余的 4.8T Token 中设置为 0.1
Long Context Extension
- 论文采用与 DeepSeek-V2 (2024) 类似的方法来使 DeepSeek-V3 具备长上下文能力
- 在预训练阶段之后,论文应用 YaRN (2023) 进行上下文扩展,并执行两个额外的训练阶段,每个阶段包含 1000 步,以逐步将上下文窗口从 4K 扩展到 32K,然后再扩展到 128K
- YaRN 配置与 DeepSeek-V2 中使用的配置一致,仅应用于解耦的共享 Key \(\mathbf{k}_{t}^{R}\)
- 两个阶段的超参数保持相同
- 尺度 \(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 在 “Needle In A Haystack” (NIAH) 测试中取得了显著性能,在上下文窗口长度高达 128K 的范围内表现出一致的鲁棒性
Evaluations
Evaluation Benchmarks
- DeepSeek-V3 的基础模型是在英语和中文占多数的多语言语料库上进行预训练的,因此论文在一系列主要以英语和中文为主的基准测试上评估其性能,同时也包括一个多语言基准测试
- 论文的评估基于集成在论文 HAI-LLM 框架中的内部评估框架
- 所考虑的基准测试分类并列出如下,其中带下划线的基准测试为中文,带双下划线的基准测试为多语言:
- 多学科多项选择题 (Multi-subject multiple-choice) 数据集包括 MMLU (2020)、MMLU-Redux (2024)、MMLU-Pro (2024)、MMMLU (2024)、C-Eval (2023) 和 CMMLU (2023)
- 语言理解和推理 (Language understanding and reasoning) 数据集包括 HellaSwag (2019)、PIQA (2020)、ARC (2018) 和 BigBench Hard (BBH) (2022)
- 闭卷问答 (Closed-book question answering) 数据集包括 TriviaQA (2017) 和 NaturalQuestions (2019)
- 阅读理解 (Reading comprehension) 数据集包括 RACE (2017)、DROP (2019)、C3 (2019) 和 CMRC (2019)
- 指代消解 (Reference disambiguation) 数据集包括 CLUEWSC (2020) 和 WinoGrande (2019)
- 语言建模 (Language modeling) 数据集包括 Pile (2020)
- 中文理解与文化 (Chinese understanding and culture) 数据集包括 CCPM (2021)
- 数学 (Math) 数据集包括 GSM8K (2021)、MATH (2021)、MGSM (2023) 和 CMath (2023)
- 代码 (Code) 数据集包括 HumanEval (2021)、LiveCodeBench-Base (0801-1101) (2024)、MBPP (2021) 和 CRUXEval (2024)
- 标准化考试 (Standardized exams) 包括 AGIEval (2023)。注意,AGIEval 包含英语和中文子集
- 遵循论文之前的工作 (2024, 2024)
- 对包括 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) 作为度量标准,以保证使用不同分词器的模型之间的公平比较
- 理解:Pile-test 是大语言模型评估中常用的标准测试集,源于更庞大的通用文本数据集 The Pile
- The Pile 由 EleutherAI 构建的大规模开源文本数据集,总规模约 800GB,涵盖 22 个不同来源的文本类型(如学术论文、网页文本、书籍、新闻、代码等),旨在为模型提供多样化、高质量的训练与评估数据,避免单一数据分布导致的 “过拟合评估”
- Pile-test 是 The Pile 的测试子集,与训练集(Pile-train)严格划分,用于客观衡量模型在通用语言理解与生成任务上的泛化能力,由于其覆盖场景广,模型在 Pile-test 上的表现能更真实反映 “通用能力”,而非仅适配某类特定数据
- 问题:这里 BPB 是什么含义?
- 回答:Bits-Per-Byte(字节每比特,简称 BPB)是一种用于消除 “分词器差异” 影响、实现不同模型公平比较的度量标准,其核心是 “归一化模型的预测成本
- 比如,计算模型的困惑度时,如果按照 Token 计算,可能是不公平的,不同模型的 Token 数量不一样,但是如果按照 BPB 计算,则能保证与 Tokenizer 无关
- 理解:Pile-test 是大语言模型评估中常用的标准测试集,源于更庞大的通用文本数据集 The Pile
Evaluation Results
- 在表 3 中,论文将 DeepSeek-V3 的基础模型与最先进的开源基础模型进行了比较,包括 DeepSeek-V2-Base (2024)(论文之前的发布)、Qwen2.5 72B Base (2024) 和 LLaMA-3.1 405B Base (2024)

- 论文在内部评估框架下评估所有这些模型,并确保它们共享相同的评估设置
- 请注意,由于过去几个月论文评估框架的变化,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 相比,由于论文模型架构的改进、模型规模和训练 Token 的扩大以及数据质量的提高,DeepSeek-V3-Base 如预期般取得了显著更好的性能
- (2) 与最先进的中文开源模型 Qwen2.5 72B Base 相比,DeepSeek-V3-Base 仅以一半的激活参数量,也在英语、多语言、代码和数学基准测试上展现出了显著优势,尤其是在中文基准测试上,除了中文多学科多项选择题任务 CMMLU 外,DeepSeek-V3-Base 也显示出比 Qwen2.5 72B 更好的性能
- (3) 与最大的开源模型 LLaMA-3.1 405B Base(其激活参数量是 DeepSeek-V3-Base 的 11 倍)相比,DeepSeek-V3-Base 在多语言、代码和数学基准测试上也表现出更优的性能
- 对于英语和中文语言基准测试,DeepSeek-V3-Base 显示出竞争性或更好的性能,尤其在 BBH、MMLU 系列、DROP、C-Eval、CMMLU 和 CCPM 上表现突出
- 得益于论文高效的架构和全面的工程优化,DeepSeek-V3 实现了极高的训练效率
- 在论文的训练框架和基础设施下,训练 DeepSeek-V3 每万亿 Token 仅需 180K H800 GPU 小时,这比训练 72B 或 405B 的稠密模型要便宜得多
Discussion
Ablation Studies for Multi-token Prediction
- 在表 4 中,论文展示了 MTP 策略的消融结果

- 具体来说,论文在两个不同规模的基线模型上验证了 MTP 策略
- 在小规模上,论文在 1.33T Token 上训练了一个包含 15.7B 总参数的基线 MoE 模型
- 在大规模上,论文在 540B Token 上训练了一个包含 228.7B 总参数的基线 MoE 模型
- 在此基础上,保持训练数据和其他架构不变,论文为它们附加了一个深度为 1 的 MTP 模块,并训练了两个采用 MTP 策略的模型进行比较
- 注意,在推理期间,论文直接丢弃 MTP 模块,因此比较模型的推理成本完全相同
- 从表中我们可以观察到,MTP 策略在大多数评估基准上持续提升了模型性能
Ablation Studies for the Auxiliary-Loss-Free Balancing Strategy
- 在表 5 中,论文展示了无辅助损失平衡策略的消融结果

- 论文在两个不同规模的基线模型上验证了该策略
- 在小规模上,论文在 1.33T Token 上训练了一个包含 15.7B 总参数的基线 MoE 模型
- 在大规模上,论文在 578B Token 上训练了一个包含 228.7B 总参数的基线 MoE 模型
- 这两个基线模型都纯粹使用辅助损失来鼓励负载平衡,并使用 sigmoid 门控函数和 top-K 亲和度归一化
- 它们控制辅助损失强度的超参数分别与 DeepSeek-V2-Lite 和 DeepSeek-V2 相同
- 在这两个基线模型的基础上,保持训练数据和其他架构不变,论文移除了所有辅助损失,并引入了无辅助损失平衡策略进行比较
- 从表中我们可以观察到,与纯辅助损失方法相比,无辅助损失策略在大多数评估基准上持续实现了更好的模型性能
Batch-Wise Load Balance VS. Sequence-Wise Load Balance
- 无辅助损失平衡与序列级辅助损失之间的关键区别在于它们的平衡范围:批次级与序列级
- 与序列级辅助损失相比,批次级平衡施加了更灵活的约束,因为它不强制每个序列在域内平衡
- 这种灵活性允许专家更好地专精于不同领域
- 为了验证这一点,论文记录并分析了基于辅助损失的 16B 基线模型和无辅助损失的 16B 模型在 Pile 测试集上不同领域的专家负载
- 如图 9 所示,论文观察到无辅助损失模型如预期那样表现出更大的专家专精模式(注:也就是说有辅助损失的模型得到的专家负载均衡结果更加平均)

- 为了进一步研究这种灵活性与模型性能优势之间的相关性,论文额外设计并验证了一种批次级辅助损失,该损失鼓励每个训练批次而不是每个序列上的负载平衡
- 实验结果表明,当达到相似水平的批次级负载平衡时,批次级辅助损失也可以实现与无辅助损失方法相似的模型性能
- 具体来说,在论文使用 1B MoE 模型的实验中,验证损失分别为:2.258(使用序列级辅助损失)、2.253(使用无辅助损失方法)和 2.253(使用批次级辅助损失)
- 论文在 3B MoE 模型上也观察到了类似的结果:使用序列级辅助损失的模型验证损失为 2.085,而使用无辅助损失方法或批次级辅助损失的模型验证损失均为 2.080
- 此外,尽管批次级负载平衡方法显示出持续的性能优势,但它们在效率方面也面临两个潜在的挑战:
- (1) 某些序列内或小批次内的负载不平衡
- (2) 推理期间由领域偏移引起的负载不平衡
- 第一个挑战通过论文使用大规模专家并行和数据并行的训练框架自然得到解决,这保证了每个微批次的规模足够大
- 对于第二个挑战,论文也设计并实现了一个具有冗余专家部署的高效推理框架,如第 3.4 节所述,以克服它
Post-Training
Supervised Fine-Tuning
- 论文精心策划了论文的指令微调数据集,包含了涵盖多个领域的 150 万条实例,每个领域都采用了针对其特定需求而定制的不同数据创建方法
- 推理数据 (Reasoning Data)
- 对于推理相关的数据集,包括那些专注于数学、代码竞赛问题和逻辑谜题的,论文通过利用内部的 DeepSeek-R1 模型来生成数据
- 问题:DeepSeek-R1 的一些流程依赖着 DeepSeek-V3 添加一些 CoT 数据吧,两者之间目前从论文看起来是互相依赖的关系
- 具体来说,虽然 R1 生成的数据表现出很高的准确性,但它存在一些问题,如过度思考、格式不佳和长度过长
- 论文的目标是在 R1 生成的高精度推理数据和常规格式的清晰简洁的推理数据之间取得平衡
- 为了建立论文的方法,论文首先为特定领域(例如代码、数学或通用推理)开发一个专家模型,该模型使用结合了 SFT 和 RL 的训练流程
- 这个专家模型作为最终模型的数据生成器
- 训练过程涉及为每个实例生成两种不同类型的 SFT 样本:
- 第一种将问题与其原始回答配对,格式为
<问题, 原始回答>; - 第二种则结合了系统提示、问题以及 R1 的回答,格式为
<系统提示, 问题, R1 回答>
- 第一种将问题与其原始回答配对,格式为
- 系统提示经过精心设计,包含指导模型产生富含反思和验证机制的回答的指令
- 在 RL 阶段,模型利用高温采样来生成融合了 R1 生成数据和原始数据模式的回答,即使在没有显式系统提示的情况下也是如此。经过数百个 RL 步骤后,中间的 RL 模型学会了融入 R1 的模式,从而战略性地提升了整体性能
- 在完成 RL 训练阶段后,论文实施拒绝采样来为最终模型筛选高质量的 SFT 数据,其中专家模型被用作数据源
- 这种方法确保了最终训练数据保留了 DeepSeek-R1 的优势,同时产生的回答简洁有效
- 对于推理相关的数据集,包括那些专注于数学、代码竞赛问题和逻辑谜题的,论文通过利用内部的 DeepSeek-R1 模型来生成数据
- 非推理数据 (Non-Reasoning Data)
- 对于非推理数据,例如创意写作、角色扮演和简单问答,论文使用 DeepSeek-V2.5 来生成回答,并聘请人工标注员来验证数据的准确性和正确性
- SFT 设置 (SFT Settings)
- 使用 SFT 数据集对 DeepSeek-V3-Base 进行了两个 epoch 的微调
- 使用了余弦衰减学习率调度
- 学习率从 \(5 \times 10^{-6}\) 开始,逐渐降低到 \(1 \times 10^{-6}\)
- 在训练期间,每个单独的序列由多个样本打包而成
- 论文采用了样本掩码策略来确保这些样本保持隔离且相互不可见
Reinforcement Learning
Reward Model
- 论文在 RL 过程中使用了基于规则的奖励模型 (Reward Model, RM) 和基于模型的 RM
- 基于规则的 RM (Rule-Based RM)
- 对于可以使用特定规则验证的问题,论文采用基于规则的奖励系统来确定反馈
- 例如,某些数学问题具有确定性的结果,论文要求模型以指定的格式(例如,在一个框内)提供最终答案,从而允许论文应用规则来验证正确性
- 类似地,对于 LeetCode 问题,我们可以利用编译器根据测试用例生成反馈
- 通过在可能的情况下利用基于规则的验证,论文确保了更高水平的可靠性,因为这种方法能够抵抗操纵或利用(manipulation or exploitation)
- 对于可以使用特定规则验证的问题,论文采用基于规则的奖励系统来确定反馈
- 基于模型的 RM (Model-Based RM)
- 对于具有自由形式标准答案的问题,论文依赖奖励模型来确定回答是否符合预期的标准答案
- 相反,对于没有明确标准答案的问题,例如涉及创意写作的问题,奖励模型的任务是基于问题和相应的回答作为输入来提供反馈
- 该奖励模型是从 DeepSeek-V3 SFT 检查点训练而来的
- 为了增强其可靠性,论文构建了不仅提供最终奖励,还包含导致该奖励的思维链 (Chain-of-Thought) 的偏好数据
- 这种方法有助于减轻特定任务中 Reward Hacking 的风险
GRPO (Group Relative Policy Optimization)
- 与 DeepSeek-V2 (2024c) 类似,论文采用组相对策略优化 (Group Relative Policy Optimization, GRPO) (2024),它摒弃了通常与策略模型大小相同的评论家模型 (Critic Model),而是从组分数中估计基线
- 具体来说,对于每个问题 \(q\),GRPO 从旧策略模型 \(\pi_{\theta_{old} }\) 中采样一组输出 \(\{o_{1}, o_{2}, \cdots, o_{G}\}\),然后通过最大化以下目标来优化策略模型 \(\pi_{\theta}\):
$$
\mathcal{J}_{GRPO}(\theta) = \mathbb{E} \left[ q \sim P(Q), \{o_{i}\}_{i=1}^{G} \sim \pi_{\theta_{old} }(O|q) \right] \frac{1}{G} \sum_{i=1}^{G} \left( \min \left( \frac{\pi_{\theta}(o_{i}|q)}{\pi_{\theta_{old} }(o_{i}|q)} A_{i}, \text{clip} \left( \frac{\pi_{\theta}(o_{i}|q)}{\pi_{\theta_{old} }(o_{i}|q)}, 1-\epsilon, 1+\epsilon \right) A_{i} \right) - \beta \mathbb{D}_{KL} \left( \pi_{\theta} || \pi_{ref} \right) \right), \\
\mathbb{D}_{KL} \left( \pi_{\theta} || \pi_{ref} \right) = \frac{\pi_{ref}(o_{i}|q)}{\pi_{\theta}(o_{i}|q)} - \log \frac{\pi_{ref}(o_{i}|q)}{\pi_{\theta}(o_{i}|q)} - 1,
$$- 其中 \(\epsilon\) 和 \(\beta\) 是超参数;\(\pi_{ref}\) 是参考模型;\(A_{i}\) 是优势 (Advantage),由每个组内输出对应的奖励 \(\{r_{1}, r_{2}, \ldots, r_{G}\}\) 推导得出:
$$
A_{i} = \frac{r_{i} - \text{mean}(\{r_{1}, r_{2}, \cdots, r_{G}\})}{\text{std}(\{r_{1}, r_{2}, \cdots, r_{G}\})}.
$$
- 其中 \(\epsilon\) 和 \(\beta\) 是超参数;\(\pi_{ref}\) 是参考模型;\(A_{i}\) 是优势 (Advantage),由每个组内输出对应的奖励 \(\{r_{1}, r_{2}, \ldots, r_{G}\}\) 推导得出:
- 论文在 RL 过程中融入了来自不同领域的提示,例如编码、数学、写作、角色扮演和问答
- 这种方法不仅使模型更符合人类偏好,还提高了在基准测试上的性能,特别是在可用 SFT 数据有限的情况下
Evaluations
Evaluation Settings
- 评估基准 (Evaluation Benchmarks)
- 除了用于基础模型测试的基准之外,论文还在 IFEval (2023)、FRAMES (2024)、LongBench v2 (2024)、GPQA (2023)、SimpleQA (OpenAI, 2024c)、C-SimpleQA (2024)、SWE-Bench Verified (OpenAI, 2024d)、Aider、LiveCodeBench (2024)(2024年8月至11月的问题)、Codeforces、中国高中数学奥林匹克 (Chinese National High School Mathematics Olympiad, CNMO 2024) 和美国数学邀请赛 2024 (American Invitational Mathematics Examination 2024, AIME 2024) (MAA, 2024) 上进一步评估了指令模型
- 对比基线 (Compared Baselines)
- 论文对论文的聊天模型与几个强大的基线进行了全面评估,包括 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 进行评估
- 详细评估配置 (Detailed Evaluation Configurations)
- 对于包括 MMLU、DROP、GPQA 和 SimpleQA 在内的标准基准,论文采用了来自 simple-evals 框架的评估提示
- 注:simple-evals 是一个轻量级的大语言模型评估框架,主要用于快速验证模型在特定任务上的基础能力,其Evaluation Prompts设计遵循简洁、直接的任务导向原则,通常针对具体任务类型构建标准化提示模板
- 对于 MMLU-Redux,论文在零样本设置下使用了 Zero-Eval 提示格式 (Lin, 2024)
- 对于其他数据集,论文遵循其原始的评估协议,使用数据集创建者提供的默认提示
- 对于代码和数学基准,HumanEval-Mul 数据集总共包含了 8 种主流编程语言(Python、Java、C++、C#、JavaScript、TypeScript、PHP 和 Bash)
- 使用 CoT 和非 CoT 方法来评估模型在 LiveCodeBench 上的性能,其数据收集自 2024 年 8 月至 11 月
- Codeforces 数据集使用参赛者百分比来衡量
- SWE-Bench verified 使用无代理框架 (Agentless Framework) (2024) 进行评估
- 论文使用 “diff” 格式来评估与 Aider 相关的基准
- 对于数学评估,AIME 和 CNMO 2024 在温度为 0.7 的情况下进行评估,结果取 16 次运行的平均值,而 MATH-500 则使用贪婪解码
- 论文允许所有模型为每个基准输出最多 8192 个 Token
- 对于包括 MMLU、DROP、GPQA 和 SimpleQA 在内的标准基准,论文采用了来自 simple-evals 框架的评估提示
Standard Evaluation
- 表 6 展示了评估结果,表明 DeepSeek-V3 是性能最好的开源模型

- 此外,它与前沿的闭源模型(如 GPT-4o 和 Claude-3.5-Sonnet)相比也具有竞争力
- 英文基准 (English Benchmarks)
- MMLU 是一个广泛认可的基准,旨在评估大语言模型在不同知识领域和任务上的表现
- DeepSeek-V3 展示了具有竞争力的性能,与顶级模型如 LLaMA-3.1-405B、GPT-4o 和 Claude-Sonnet 3.5 不相上下,同时显著优于 Qwen2.5 72B
- DeepSeek-V3 在 MMLU-Pro(一个更具挑战性的教育知识基准)上表现出色,紧随 Claude-Sonnet 3.5 之后
- 在 MMLU-Redux(一个带有修正标签的 MMLU 改进版本)上,DeepSeek-V3 超越了其同行
- 在 GPQA-Diamond(一个博士级评估测试平台)上,DeepSeek-V3 取得了显著成果,仅次于 Claude 3.5 Sonnet,并以显著优势优于所有其他竞争对手
- 在长上下文理解基准测试中,如 DROP、LongBench v2 和 FRAMES,DeepSeek-V3 继续展示其作为顶级模型的地位
- DeepSeek-V3 在 DROP 的 3-shot 设置中取得了令人印象深刻的 91.6 F1 分数,超过了该类别中的所有其他模型
- 在 FRAMES(一个需要在 100k Token 上下文中进行问答的基准测试)上,DeepSeek-V3 紧随 GPT-4o,同时以显著优势优于所有其他模型
- 这证明了 DeepSeek-V3 在处理极长上下文任务方面的强大能力
- DeepSeek-V3 的长上下文能力进一步通过其在 LongBench v2(一个在 DeepSeek V3 发布前几周才发布的数据集)上的最佳表现得到了验证
- 在事实性知识基准 SimpleQA 上,DeepSeek-V3 落后于 GPT-4o 和 Claude-Sonnet,这主要归因于其设计重点和资源分配
- DeepSeek-V3 分配了更多的训练 Token 来学习中文知识,导致在 C-SimpleQA 上表现卓越
- 在指令遵循基准测试中,DeepSeek-V3 显著优于其前身 DeepSeek-V2 系列,突显了其理解和遵守用户定义格式约束能力的提升
- MMLU 是一个广泛认可的基准,旨在评估大语言模型在不同知识领域和任务上的表现
- 代码和数学基准 (Code and Math Benchmarks)
- 编码对于大语言模型来说是一项具有挑战性且实用的任务,涵盖了以工程为重点的任务(如 SWE-Bench-Verified 和 Aider)以及算法任务(如 HumanEval 和 LiveCodeBench)
- 在工程任务中,DeepSeek-V3 落后于 Claude-Sonnet-3.5-1022,但显著优于开源模型
- 开源的 DeepSeek-V3 有望推动编码相关工程任务的进步
- 通过提供对其强大功能的访问,DeepSeek-V3 可以推动软件工程和算法开发等领域的创新和改进,使开发人员和研究人员能够突破开源模型在编码任务中能力的界限
- 在算法任务中,DeepSeek-V3 表现出卓越的性能,在 HumanEval-Mul 和 LiveCodeBench 等基准测试中优于所有基线
- 这一成功归功于其先进的知识蒸馏技术,该技术有效地增强了其在算法任务中的代码生成和问题解决能力
- 在数学基准测试中,DeepSeek-V3 展示了卓越的性能,显著超过了基线,并为非 o1 类模型设定了新的最先进水平
- 具体来说,在 AIME、MATH-500 和 CNMO 2024 上,DeepSeek-V3 在绝对分数上比第二好的模型 Qwen2.5 72B 高出约 10%,这对于如此具有挑战性的基准测试来说是一个显著的差距
- 这种卓越的能力突显了从 DeepSeek-R1 进行蒸馏技术的有效性,该技术已被证明对非 o1 类模型非常有益
- 中文基准 (Chinese Benchmarks)
- Qwen 和 DeepSeek 是两个对中文和英文都有强大支持的代表性模型系列
- 在事实性基准 Chinese SimpleQA 上,DeepSeek-V3 超过了 Qwen2.5-72B 16.4 分,尽管 Qwen2.5 是在包含 18T Token (比 DeepSeek-V3 预训练的 14.8T Token 多 20%)的更大语料库上训练的
- 在 C-Eval(一个代表性的中文教育知识评估基准)和 CLUEWSC(中文 Winograd 模式挑战赛)上,DeepSeek-V3 和 Qwen2.5-72B 表现出相似的水平,表明这两个模型都为具有挑战性的中文推理和教育任务进行了良好的优化
Open-Ended Evaluation
- 除了标准基准测试,论文还使用大语言模型作为评判者对论文的模型在开放式生成任务上进行了评估,结果如表 7 所示

- 论文遵循 AlpacaEval 2.0 (2024) 和 Arena-Hard (2024a) 的原始配置,它们利用 GPT-4-Turbo-1106 作为成对比较的评判者
- 在 Arena-Hard 上,DeepSeek-V3 相对于基线 GPT-4-0314 取得了超过 86% 的惊人胜率,与 Claude-Sonnet-3.5-1022 等顶级模型表现相当
- 这凸显了 DeepSeek-V3 的强大能力,尤其是在处理复杂提示(包括编码和调试任务)方面
- DeepSeek-V3 实现了一个突破性的里程碑,成为第一个在 Arena-Hard 基准测试中超过 85% 的开源模型
- 这一成就显著缩小了开源模型和闭源模型之间的性能差距,为开源模型在挑战性领域所能达到的水平设定了新标准
- 类似地,DeepSeek-V3 在 AlpacaEval 2.0 上展示了卓越的性能,优于闭源和开源模型
- 这证明了其在写作任务和处理直接问答场景方面的出色熟练度
- 值得注意的是,它以 20% 的显著优势超过了 DeepSeek-V2.5-0905,突显了其在处理简单任务方面的实质性改进,并展示了其进步的有效性
DeepSeek-V3 as a Generative Reward Model
- 论文将 DeepSeek-V3 的判断能力与最先进的模型(即 GPT-4o 和 Claude-3.5)进行了比较
- 表 8 展示了这些模型在 RewardBench (2024) 中的性能(注:RewardBench 是用来评估 Reward Model 本身性能的)

- DeepSeek-V3 达到了与最佳版本的 GPT-4o-0806 和 Claude-3.5-Sonnet-1022 相当的水平,同时超越了其他版本
- 此外,DeepSeek-V3 的判断能力也可以通过投票技术得到增强
- 因此,论文采用 DeepSeek-V3 并结合投票来为开放式问题提供自我反馈,从而提高对齐过程的有效性和鲁棒性
Discussion
Distillation from DeepSeek-R1
- 论文基于 DeepSeek-V2.5 对从 DeepSeek-R1 进行蒸馏的贡献进行了消融研究
- 基线是在短 CoT 数据上训练的,而其对比模型则使用上述专家检查点生成的数据
- 表 9 展示了蒸馏数据的有效性,在 LiveCodeBench 和 MATH-500 基准测试上均显示出显著的改进

- 论文的实验揭示了一个有趣的权衡:蒸馏带来了更好的性能,但也显著增加了平均回答长度
- 为了在模型准确性和计算效率之间保持平衡,论文为 DeepSeek-V3 在蒸馏过程中仔细选择了最优设置
- 论文的研究表明,从推理模型进行知识蒸馏为后训练优化提供了一个有前景的方向
- 虽然论文目前的工作侧重于蒸馏数学和编码领域的数据,但这种方法显示出在需要复杂推理的各种任务领域中具有更广泛应用的潜力
- 在这些特定领域展示的有效性表明,长 CoT 蒸馏对于增强其他认知任务中的模型性能可能很有价值
- 在不同领域进一步探索这种方法仍然是未来研究的一个重要方向
Self-Rewarding
- 奖励在强化学习中起着关键作用,引导着优化过程
- 在通过外部工具易于验证的领域,例如某些编码或数学场景,强化学习表现出卓越的功效
- 但在更一般的场景中,通过硬编码构建反馈机制是不切实际的
- 在 DeepSeek-V3 的开发过程中,对于这些更广泛的上下文,论文采用了 Constitutional AI 方法 (2022),利用 DeepSeek-V3 自身的投票评估结果作为反馈源
- 这种方法产生了显著的对齐效果,显著提升了 DeepSeek-V3 在主观评估中的性能
- 通过整合额外的 Constitutional 输入,DeepSeek-V3 可以向 Constitutional 方向优化
- 作者相信,这种将补充信息与大语言模型作为反馈源相结合的范式至关重要
- 大语言模型作为一个通用的处理器,能够将来自不同场景的非结构化信息转化为奖励,最终促进大语言模型的自我改进
- 除了自我奖励,论文还致力于发现其他通用和可扩展的奖励方法,以持续提升模型在一般场景中的能力
Multi-token Prediction Evaluation
- DeepSeek-V3 不仅仅预测下一个单独的 Token ,而是通过 MTP 技术预测接下来的 2 个 Token
- 结合推测解码 (Speculative Decoding) (2023; 2023) 的框架,它可以显著加速模型的解码速度
- 一个自然的问题是,额外预测的 Token 的接受率如何
- 根据论文的评估,在不同生成主题下,第二个 Token 预测的接受率在 85% 到 90% 之间,表现出一致的可靠性
- 这种高接受率使得 DeepSeek-V3 能够实现显著提高的解码速度,提供 1.8 倍的 TPS(每秒 Token 数)
Limitations, and Future Directions
Limitations
- 在承认其强大性能和成本效益的同时,论文也认识到 DeepSeek-V3 存在一些局限性,尤其是在部署方面
- 首先,为了确保高效的推理,DeepSeek-V3 推荐的部署单元相对较大,这可能会给小型团队带来负担
- 其次,尽管论文为 DeepSeek-V3 设计的部署策略已经实现了端到端生成速度超过 DeepSeek-V2 的两倍,但仍有进一步提升的潜力
- 幸运的是,随着更先进硬件的发展,这些局限性有望得到自然解决
Future Directions
- DeepSeek 始终坚持具有长期主义(longtermism)的开源模型路线,旨在稳步接近通用人工智能(Artificial General Intelligence, AGI)的终极目标
- 未来,论文计划在以下几个方向进行战略性投入和研究:
- DeepSeek 将持续研究和改进论文的模型架构,旨在进一步提高训练和推理效率,努力实现对无限上下文长度的高效支持
- 此外,DeepSeek 将尝试突破 Transformer 的架构限制,从而推动其建模能力的边界
- DeepSeek 将持续迭代训练数据的数量和质量,并探索纳入额外的训练信号源,旨在推动数据在更全面维度上的扩展
- DeepSeek 将持续探索和迭代模型的深度思考能力,旨在通过扩展其推理长度和深度来增强其智能和问题解决能力
- DeepSeek 将探索更全面、多维度的模型评估方法,以防止在研究过程中倾向于优化固定的基准测试集,这可能造成对模型能力的误导性印象并影响论文的基础评估
- DeepSeek 将持续研究和改进论文的模型架构,旨在进一步提高训练和推理效率,努力实现对无限上下文长度的高效支持
附录 B: Ablation Studies for Low-Precision Training
- 图 10:BF16 与 FP8 训练的损失曲线比较(结果使用系数为 0.9 的指数移动平均(Exponential Moving Average, EMA)进行了平滑处理)
B.1: FP8 v.s. BF16 Training
- 论文在两个不同规模的基线模型上验证了论文的 FP8 混合精度框架,并与 BF16 训练进行了比较
- 在小规模上,论文训练了一个总参数量约为 16B 的 MoE 基线模型,使用了 1.33T token
- 在大规模上,论文训练了一个总参数量约为 230B 的 MoE 基线模型,使用了约 0.9T token
- 论文在图 10 中展示了训练曲线,并证明了通过论文的高精度累加和细粒度量化策略,相对误差保持在 0.25% 以下
B.2:Discussion About Block-Wise Quantization(分块量化)
- 尽管论文的切片式(tile-wise)细粒度量化有效缓解了特征异常值(feature outliers)引入的误差,但它需要对激活量化进行不同的分组,即在正向传播中使用 1x128 的分组,在反向传播中则需要 128x1 的分组
- 激活梯度也需要类似的处理过程
- 一个直接的策略是像论文量化模型权重那样,对每 128x128 个元素应用分块(block-wise)量化
- 这样,反向传播只需要进行转置操作
- 论文进行了一项实验,将与 Dgrad 相关的所有张量都在分块基础上进行量化
- 结果显示,计算激活梯度并以链式方式反向传播到浅层的 Dgrad 操作对精度高度敏感
- 论文在总参数量约为 16B、训练了约 300B Token 的 MoE 模型上,激活梯度的分块量化会导致模型发散
- 论文假设这种敏感性源于激活梯度在 Token 之间高度不平衡,导致了与 Token 相关的异常值 (2023)
- 这些异常值无法通过分块量化方法有效管理
附录 C:16B 基于辅助损失和无辅助损失模型的专家专业化模式 (Expert Specialization Patterns of the 16B Aux-Loss-Based and Aux-Loss-Free Models)
- 本节记录了 16B 基于辅助损失的基线模型和无辅助损失模型在 Pile 测试集上的专家负载
- 如图 11 所示,无辅助损失模型在所有层中都倾向于表现出更强的专家专业化程度(Expert Specialization)
- 问题:如何理解这里的 专家专业化程度(Expert Specialization)?
- 理解:是指某些任务上,某类专家被激活的更多,而在另外的任务上,其他专家被激活的更多,专家体现出一定的专业化倾向(注:这不是我们想要的,因为会导致模型拟合能力下降,且单个序列上不利于 EP 负载均衡)
- 图 11:无辅助损失模型和基于辅助损失的模型在 Pile 测试集的三个领域上的专家负载
- 无辅助损失模型 比 基于辅助损失模型 表现出 更强的专家专业化模式
- 相对专家负载(Relative Expert Load)表示实际专家负载与理论平衡专家负载之间的比率
