官方报告:DeepSeek-V3 模型是如何炼成的!

大模型向量数据库机器学习

DeepSeek-V3 官方报告解读

picture.image

https://arxiv.org/abs/2412.19437


1. 论文背景:为什么要开发 DeepSeek-V3?

近年来,大型语言模型(LLM)发展迅速,不仅闭源模型(如 GPT-4o、Claude-3.5-Sonnet)表现强劲,开源模型也在不断进步,比如 DeepSeek 系列、LLaMA 系列等。DeepSeek-V3 的目标是进一步提升开源模型的能力,缩小与闭源模型的差距,同时保持训练成本的经济性。

  • 模型规模 :DeepSeek-V3 总共有 6710 亿个参数,但每次处理一个 token 时只激活 370 亿个参数,这种设计降低了计算成本。
  • 核心目标 :在性能上,DeepSeek-V3 要达到甚至超过其他开源模型,并且在某些领域(如数学、编程)接近闭源模型的水平;同时,训练成本要尽可能低,做到“经济高效”。

2. DeepSeek-V3 的架构:它长什么样?

DeepSeek-V3 的架构基于 Transformer 框架,但加入了一些创新设计,主要包括以下几个关键部分:

2.1 多头潜在注意力(MLA)

  • 作用 :MLA 是为了让模型在推理(inference)时更高效。它通过低秩压缩(low-rank compression)减少了键值缓存(KV cache)的占用空间。
  • 通俗解释 :想象一下,模型在处理长文本时需要记住很多信息(键和值),但如果直接存储所有信息,内存会爆满。MLA 把这些信息压缩到一个更小的空间,只存储最重要的部分,这样既节省内存,又不影响性能。
  • 与 DeepSeek-V2 的关系 :MLA 在 DeepSeek-V2 中已经验证过效果,DeepSeek-V3 继续沿用。

2.2 DeepSeekMoE:混合专家的优化

  • 什么是 MoE? :MoE 是一种模型结构,里面有很多“专家”(expert),每个 token 会选择一部分专家来处理。DeepSeekMoE 是 DeepSeek 团队特有的 MoE 设计,特点是专家分工更细(finer-grained experts),并且有一些专家是共享的(shared experts)。
  • 创新点:无辅助损失的负载均衡(Auxiliary-Loss-Free Load Balancing)
  • 问题 :MoE 模型容易出现“专家负载不均衡”(有的专家忙死,有的专家闲着),传统的解决方法是加一个辅助损失(auxiliary loss),但这可能会损害模型性能。
  • 解决方案 :DeepSeek-V3 引入了一种新方法,通过动态调整每个专家的“偏置项”(bias term),来平衡负载。这种方法不依赖辅助损失,减少了对性能的负面影响。
  • 额外措施 :为了防止单个序列(sequence)内的极端不平衡,还加了一个很小的序列级辅助损失(sequence-wise balance loss),但影响很小。
  • 节点限制路由(Node-Limited Routing) :为了减少训练时的通信成本,每个 token 最多只送到 4 个节点(node),这样可以更好地利用硬件资源。
  • 无 token 丢弃 :由于负载均衡做得好,训练和推理时都不需要丢弃 token,效率更高。

2.3 多 token 预测(Multi-Token Prediction, MTP)

  • 作用 :传统的语言模型一次只预测下一个 token,DeepSeek-V3 则可以同时预测未来两个 token(next 2 tokens)。
  • 好处
  • 训练信号更密集 :一次预测多个 token,相当于给模型提供了更多的学习信号,提高了数据效率。
  • 推理加速 :结合“推测解码”(speculative decoding),可以显著提升生成速度,达到 1.8 倍的每秒 token 生成速率(TPS)。
  • 实现方式
  • DeepSeek-V3 用了一个主模型(main model)预测下一个 token,再加了一个 MTP 模块预测第二个 token。
  • 训练时,MTP 模块的损失会加到总损失中,但推理时可以直接丢掉 MTP 模块,主模型照常工作。
  • 效果 :实验表明,MTP 策略在大多数评估基准上都提升了模型性能,尤其是数学和编程任务。

3. 训练过程:如何打造 DeepSeek-V3?

DeepSeek-V3 的训练分为三个阶段:预训练(Pre-Training)、长上下文扩展(Long Context Extension)和后训练(Post-Training)。训练成本总计 278.8 万 H800 GPU 小时,假设每小时 2 美元,费用约 557.6 万美元。

3.1 预训练:喂饱模型的大餐

  • 数据
  • 总共用了 14.8 万亿个高质量、多样化的 token,涵盖多种语言(主要是英语和中文),还特别增加了数学和编程相关的样本。
  • 数据处理上,减少了冗余,同时保持多样性。采用文档打包(document packing)方法,但不使用跨样本注意力掩码(cross-sample attention masking)。
  • 引入了填空(Fill-in-Middle, FIM)策略,类似于 DeepSeekCoder-V2,帮助模型学习上下文预测的能力。
  • 分词器
  • 使用字节级 BPE(Byte-level Byte Pair Encoding),词汇表大小为 128K。
  • 优化了多语言压缩效率,新增了一些特殊 token(如标点符号和换行符的组合),但为了避免 token 边界偏差(token boundary bias),训练时随机拆分了部分组合 token。
  • 超参数
  • Transformer 层数为 61,隐藏维度为 7168。
  • MoE 层从第 4 层开始,每层有 1 个共享专家和 256 个路由专家,每次激活 8 个路由专家。
  • 训练时,序列长度为 4K,批次大小从 3072 逐步增加到 15360。
  • 使用 AdamW 优化器,学习率从 0 增加到 2.2 × 10⁻⁴,然后逐步衰减。
  • 稳定性 :整个预训练过程非常稳定,没有出现不可恢复的损失尖峰(loss spikes),也没有需要回滚(rollback)。

3.2 长上下文扩展:让模型能读长文

  • 目标 :将模型的上下文窗口从 4K 扩展到 128K。
  • 方法
  • 第一阶段:从 4K 扩展到 32K,序列长度 32K,批次大小 1920,训练 1000 步。
  • 第二阶段:从 32K 扩展到 128K,序列长度 128K,批次大小 480,训练 1000 步。
  • 使用 YaRN(Yet Another Rope-based Extension)方法,分为两个阶段:
  • 学习率保持预训练结束时的值(7.3 × 10⁻⁶)。
  • 效果
  • 在“针在干草堆”(Needle In A Haystack, NIAH)测试中,DeepSeek-V3 在 128K 上下文长度下表现良好,证明了长上下文处理能力。

3.3 后训练:让模型更贴近人类需求

  • 监督微调(Supervised Fine-Tuning, SFT)
  • 推理数据 (数学、编程、逻辑):使用内部 DeepSeek-R1 模型生成数据,但 R1 生成的答案可能过于冗长或格式不佳。通过设计系统提示(system prompt)和拒绝采样(rejection sampling),平衡了准确性和简洁性。
  • 非推理数据 (写作、角色扮演、问答):用 DeepSeek-V2.5 生成答案,再由人工验证。
  • 数据集包含 150 万个实例,覆盖多个领域:
  • 训练两轮(2 epochs),学习率从 5 × 10⁻⁶ 衰减到 1 × 10⁻⁶,样本间使用掩码(sample masking)避免相互干扰。
  • 强化学习(Reinforcement Learning, RL)
  • 规则型 RM :对于有明确规则的任务(如数学题、编程题),用规则验证答案。例如,数学题要求答案在框中,编程题用编译器验证。
  • 模型型 RM :对于自由形式的任务(如写作),用 DeepSeek-V3 的 SFT 检查点训练 RM,并加入推理链(chain-of-thought)数据,防止奖励作弊(reward hacking)。
  • 奖励模型(Reward Model, RM)
  • 优化方法 :使用 Group Relative Policy Optimization(GRPO),通过组内评分估计基线(baseline),避免使用庞大的 critic 模型。
  • 效果 :RL 提升了模型在基准测试上的表现,尤其是在 SFT 数据有限的场景下。

4. 训练效率:为什么 DeepSeek-V3 训练成本低?

DeepSeek-V3 的训练效率得益于硬件、算法和框架的协同优化:

4.1 计算集群

  • 使用了 2048 个 NVIDIA H800 GPU 的集群,节点内通过 NVLink 连接,节点间通过 InfiniBand(IB)连接。

4.2 训练框架(HAI-LLM)

  • 并行策略
  • 16 路流水线并行(Pipeline Parallelism, PP):将模型的不同层分配到不同 GPU。
  • 64 路专家并行(Expert Parallelism, EP):跨越 8 个节点,专家均匀分布。
  • ZeRO-1 数据并行(Data Parallelism, DP):减少内存占用。
  • DualPipe 算法
  • 创新的流水线并行算法,减少了流水线气泡(pipeline bubbles),并通过计算-通信重叠(computation-communication overlap)隐藏通信延迟。
  • 即使模型规模扩大,只要保持计算-通信比率恒定,跨节点专家并行的通信开销几乎为零。
  • 高效通信
  • 跨节点全对全(all-to-all)通信优化,利用 IB 和 NVLink 的带宽差异,每个 token 最多送到 4 个节点,减少 IB 流量。
  • 使用 warp specialization 技术,仅用 20 个 SM(流式多处理器)即可充分利用带宽。
  • 内存优化
  • RMSNorm 和 MLA 上投影(up-projection)采用重计算(recomputation),减少激活内存。
  • 指数移动平均(EMA)参数存储在 CPU,异步更新,节省 GPU 内存。
  • MTP 模块的嵌入层和输出头与主模型共享,进一步节省内存。

4.3 FP8 训练

  • 背景 :FP8 是低精度格式,比传统的 BF16 更节省内存和计算资源,但容易出现溢出(overflow)和量化误差。
  • 创新点
  • 细粒度量化(Fine-Grained Quantization) :激活按 1×128 瓦片(tile)量化,权重按 128×128 块(block)量化,减少量化误差。
  • 高精度累加(Increasing Accumulation Precision) :在 Tensor Cores 处理 FP8 GEMM 时,每隔 128 个元素(4 个 WGMMA)将中间结果提升到 CUDA Cores 的 FP32 寄存器,减少累加误差。
  • 在线量化(Online Quantization) :实时计算最大绝对值,简化量化流程。
  • 低精度存储和通信 :激活和优化器状态(AdamW 的动量)用 FP8 或 BF16 存储,通信时部分激活用 FP8 量化,减少带宽压力。
  • 效果 :与 BF16 训练相比,FP8 训练的损失误差低于 0.25%,在 16B 和 230B 规模模型上验证了可行性。

4.4 推理和部署

  • 部署单位
  • 预填充(prefilling)阶段:最小单位为 4 个节点(32 个 GPU),注意力部分用 4 路张量并行(TP4)+序列并行(SP)+8 路数据并行(DP8),MoE 部分用 32 路专家并行(EP32)。
  • 解码(decoding)阶段:最小单位为 40 个节点(320 个 GPU),注意力部分用 TP4+SP+DP80,MoE 部分用 EP320。
  • 负载均衡
  • 通过冗余专家(redundant experts)策略,动态复制高负载专家,定期调整(每 10 分钟)。
  • 探索动态冗余策略,每次推理前计算全局最优路由方案,但需要进一步优化。
  • 吞吐量提升
  • 同时处理两个微批次(micro-batches),一个的注意力与另一个的 MoE 通信重叠。
  • 解码阶段,注意力耗时较多,分配少量 SM 处理 MoE,保持整体性能。

4.5 硬件建议

  • 通信硬件
  • 当前通信依赖 SM,效率低,建议开发专用通信协处理器(如 NVIDIA SHARP),统一 IB 和 NVLink 网络,简化编程。
  • 计算硬件
  • 建议提升 Tensor Cores 的 FP8 GEMM 累加精度,至少支持 34 位。
  • 支持瓦片级和块级量化,避免 Tensor Cores 和 CUDA Cores 间频繁数据移动。
  • 支持在线量化,融合 FP8 转换和 TMA 访问,减少内存读写。
  • 支持转置 GEMM 操作,简化量化流程。

5. 性能评估:DeepSeek-V3 表现如何?

DeepSeek-V3 在多个基准测试上进行了评估,分为基模型(base model)和聊天模型(chat model)两部分。

5.1 基模型表现

  • 比较对象 :DeepSeek-V2、Qwen2.5 72B、LLaMA-3.1 405B(均为基模型)。
  • 关键结果
  • 英语基准 :在 MMLU(87.1%)、MMLU-Pro(64.4%)、DROP(89.0 F1)等任务上全面领先,尤其是知识密集型任务。
  • 代码基准 :在 HumanEval(65.2%)、MBPP(75.4%)、LiveCodeBench(19.4%)等任务上表现出色,远超其他开源模型。
  • 数学基准 :在 GSM8K(89.3%)、MATH(61.6%)、MGSM(79.8%)等任务上大幅领先,接近闭源模型水平。
  • 中文基准 :在 C-Eval(90.1%)、CMMLU(88.8%)等任务上优于 Qwen2.5 72B。
  • 多语言基准 :MMMLU 非英语部分(79.4%),表现优异。
  • 结论 :DeepSeek-V3 是目前最强的开源基模型,尤其在代码和数学领域。

5.2 聊天模型表现

  • 比较对象 :DeepSeek-V2、DeepSeek-V2.5、Qwen2.5 72B、LLaMA-3.1 405B、Claude-3.5-Sonnet、GPT-4o。
  • 关键结果
  • 在 Arena-Hard(85.5%)和 AlpacaEval 2.0(70.0%)上,首次将开源模型推向 85% 以上,接近闭源模型。
  • 在 C-Eval(86.5%)、C-SimpleQA(64.8%)上优于 Qwen2.5 72B。
  • 在 AIME 2024(39.2%)、MATH-500(90.2%)、CNMO 2024(43.2%)上大幅领先,创非 o1 类模型新纪录。
  • 在 HumanEval-Mul(82.6%)、LiveCodeBench(37.6%)等算法任务上领先。
  • 在 SWE-Bench(42.0%)、Aider(79.7%)等工程任务上,仅次于 Claude-3.5,但远超其他开源模型。
  • MMLU(88.5%)、MMLU-Pro(75.9%)、GPQA-Diamond(59.1%)接近闭源模型,优于所有开源模型。
  • 长上下文任务(如 DROP 91.6 F1、LongBench v2 48.7%)表现出色。
  • 事实性任务(如 SimpleQA 24.9%)稍逊于 GPT-4o 和 Claude,但中文事实性任务(C-SimpleQA 64.8%)领先。
  • 英语基准
  • 代码基准
  • 数学基准
  • 中文基准
  • 开放式评估
  • 结论 :DeepSeek-V3 是最强的开源聊天模型,在多个领域接近或超过闭源模型,尤其在数学和编程任务上表现突出。

5.3 消融研究

  • MTP 策略 :在不同规模模型上验证,MTP 提升了大多数基准的性能,尤其在代码和数学任务上。
  • 无辅助损失负载均衡 :相比传统辅助损失方法,新策略在大多数基准上表现更好,且专家分工更明确。
  • 批次级 vs 序列级负载均衡 :批次级均衡(如无辅助损失方法)更灵活,允许专家在不同领域更专注,性能更优。

6. 创新点总结:DeepSeek-V3 做了哪些突破?

  • 架构创新
  • 无辅助损失负载均衡策略,减少性能损失。
  • MTP 训练目标,提升数据效率和推理速度。
  • 预训练效率
  • FP8 混合精度训练,首次在大规模模型上验证可行性。
  • DualPipe 算法和通信优化,实现计算-通信近乎完全重叠。
  • 总训练成本仅 278.8 万 H800 GPU 小时,经济高效。
  • 后训练优化
  • 从 DeepSeek-R1 蒸馏推理能力,显著提升数学和编程性能。
  • 自奖励(self-rewarding)方法,通过投票反馈优化对齐效果。

7. 局限性和未来方向

7.1 局限性

  • 部署成本 :推荐部署单位较大(预填充 32 GPU,解码 320 GPU),对小型团队有一定负担。
  • 推理速度 :虽然比 DeepSeek-V2 快 2 倍,仍有提升空间。

7.2 未来方向

  • 架构优化 :进一步提升训练和推理效率,探索无限上下文长度支持,突破 Transformer 架构限制。
  • 数据扩展 :增加训练数据量和质量,探索更多训练信号来源。
  • 推理能力 :提升模型的深度思考能力,延长推理链长度。
  • 评估方法 :开发更全面的评估方法,避免过度优化特定基准,误导能力评估。

8. 总结:DeepSeek-V3 的意义

DeepSeek-V3 是目前最强大的开源语言模型,特别是在代码和数学领域,性能接近甚至超过闭源模型(如 GPT-4o、Claude-3.5-Sonnet)。它的训练成本低(557.6 万美元),得益于 FP8 训练、通信优化和架构创新。DeepSeek 团队秉持开源精神,致力于推动 AGI(通用人工智能)发展,未来将继续优化架构、数据和推理能力,为开源社区带来更多突破。


0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
边缘云趋势展望:AI时代的基础设施
《火山引擎边缘云,AI时代的基础设施》 刘浩 | 火山引擎边缘云高级产品总监
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论