读完论文你应该收获什么?

Problem

  1. What problem is the paper solving?
    DeepSeek-V3 旨在解决大规模混合专家模型(MoE)在训练效率、推理性能和显存占用之间的权衡问题,特别是针对以下挑战:
    • 训练成本高昂:传统 MoE 模型(如 GShard)因通信开销和负载不均衡导致训练效率低。
    • 长上下文支持不足:现有模型难以高效处理 128K+ token 的上下文窗口。
    • 推理速度与精度平衡:低精度训练(如 FP8)的数值稳定性与模型性能难以兼顾。
  2. Why is this problem important?
    • 经济性:降低训练成本(如仅需 2.788M H800 GPU 小时)对开源社区和工业界至关重要。
    • 实用性:支持长上下文和代码生成能力是迈向通用人工智能(AGI)的关键步骤。
    • 开放性:缩小开源模型与闭源模型(如 GPT-4o、Claude-3.5)的性能差距,推动技术民主化。

Context

  1. What was the previous state of the art?
    • 模型架构:DeepSeek-V2(MoE)、LLaMA-3.1(密集模型)、Qwen2.5(中文优化)。
    • 训练技术:张量并行、流水线并行、混合精度训练(BF16/FP16)。
    • 局限性
      • MoE 模型的负载失衡导致计算资源浪费。
      • 长上下文训练(如 32K+)需要复杂的位置编码扩展(如 YaRN)。
      • FP8 训练因累加误差和异常值敏感难以稳定应用。
  2. How does the paper advance the state of the art?
    • 架构创新
      • 无辅助损失负载均衡:动态调整专家偏置(公式16),避免传统辅助损失的性能下降。
      • 多令牌预测(MTP):通过多步预测增强模型前瞻性(公式21-25),加速推测解码。
    • 训练优化
      • FP8 混合精度框架:分块量化与 CUDA Core 高精度累加(3.3.2节),误差控制至 0.25%。
      • DualPipe 流水线并行:计算-通信重叠,减少流水线气泡(3.2.1节)。
    • 部署效率:冗余专家动态分配(3.4.1节),支持 128K 上下文推理。

Design

  1. How is the system designed?
    • 核心架构
      • Multi-head Latent Attention (MLA):低秩压缩 KV 缓存(公式1-5),减少显存占用 30 倍。
      • DeepSeekMoE:256 路由专家 + 1 共享专家,细粒度负载均衡(公式12-16)。
    • 训练框架
      • FP8 量化:激活分块(1x128)、权重组块(128x128),在线计算缩放因子。
      • DualPipe 并行:16 路流水线 + 64 路专家并行,隐藏跨节点通信开销。
    • 推理优化
      • 动态冗余专家:根据负载统计动态复制高负载专家(3.4.1节)。
      • 推测解码:MTP 模块生成候选,主模型并行验证(2.2节)。
  2. What are the key insights from the design?
    • 负载均衡优先:通过动态偏置调整而非硬性约束,平衡性能与效率。
    • 硬件-算法协同:分块量化、高精度累加与 Tensor Core 优化紧密结合。
    • 长上下文扩展:两阶段 YaRN 扩展(4.3节),逐步适应位置编码变化。

Results

  1. How is the design evaluated, what are the key results?
    • 基准测试
      • 通用能力:MMLU(88.5)、GPQA(59.1),超越 LLaMA-3.1 405B。
      • 代码生成:HumanEval(82.6 Pass@1)、LiveCodeBench(40.5),开源模型最佳。
      • 长上下文:128K 上下文下 "Needle In A Haystack" 测试准确率 >90%。
    • 效率指标
      • 训练成本:2.788M H800 GPU 小时,成本仅为 LLaMA-3.1 的 1/10。
      • 推理速度:推测解码加速 1.8 倍(TPS)。
  2. What related problems are still open?
    • 硬件依赖:FP8 训练和 MLA 依赖定制化优化,尚未完全通用化。
    • 无限上下文:当前 128K 扩展仍需显式训练,无法动态适应更长输入。
    • 评估偏差:tokenizer 的随机分割策略可能无法完全消除边界偏差。

Questions

  1. What questions do you have?
    • 实际部署挑战:动态冗余专家策略在超大规模集群(如千卡级别)中的负载均衡效率如何?
    • 量化误差累积:FP8 训练在超长训练周期(如 100T token)中是否会导致模型漂移?
    • 多模态扩展:MLA 和 MoE 设计能否直接迁移到多模态模型(如视频生成)?
    • 伦理与安全:开放模型的高效代码生成能力是否可能被滥用(如恶意代码生成)?

Introduction

Architecture

Basic Arch

Multi-Head Latent Attention

DeepSeek_v3_report-MLA

关于 MLA 的数学公式解析及部分问题探讨请看这篇: Understand MLA

DeepSeekMoE with Auxiliary-Loss-Free Load Balancing

DeepSeek_v3_report-MoE

关于 DeepSeekMoE 的详解请看这篇: DeepSeekMoE_notes 。这里着重看 V3 中采用的辅助无损负载均衡策略的效果。

Basic Architecture of DeepSeekMoE. 与如 GShard (Lepikhin et al., 2021) 一般的传统 MoE 不同,DeepSeekMoE 使用更细粒度的专家,以及隔离部分专家作为共用者。V3 中的 MoE 仍然采用 V2 类似的共享专家+路由专家的组合。共享专家部分在每一次推理中都使用,而路由专家则按照传统 MoE 方式进行路由。

前馈层输出 的计算方法如下:

  • 表示第 个 token 的前馈层输入, 分别表示共享专家和路由专家的数量, 表示第 个共享专家或路由专家, 表示激活的路由专家的数量,
  • 表示对第 个输入 token 第 个专家的门控得分(gating value), 是 token 和专家的亲和度(affinity),具体的计算方式是将输入向量和每个路由专家的一个内置向量 (centroid vector)做内积并经过 sigmoid 处理,这里就是与 DeepSeek V2 不同之处,V3 采用 sigmoid 处理,并且在所有亲和度得分中采取规范化(normalization),
  • 表示第 个 token 和所有路由专家计算的亲和力得分中的 个最高得分组成的集合。

因此整个流程总结起来,就是对于输入 token 向量,首先计算它和每一个专家的亲合度  ,随后选出 ,作为门控得分  ,并对门控得分进行归一化,得到选出的 的专家各自的权重  ,最后按照该权重将各个专家的输出进行加权,和共享专家的计算结果、输入向量加和得到最终输出。

Auxiliary-Loss-Free Load Balancing. 对于 MoE 模型,不平衡的专家负载将导致路由崩溃,并降低在专家并行场景中的计算效率。传统解决方案通常依赖辅助损耗来避免不平衡负载,但过大的辅助损耗将损害模型性能。而辅助无损的负载均衡策略思路是,为每个专家引入一个偏差项 ,并与亲和度得分联系起来用于计算 的路由:

注意,偏差项仅用于路由。门控得分仍将与 FFN 输出相乘,仍然从原始亲和力得分 中导出。在训练过程中,通过监控每个训练步骤的整个批次上的专家负载进行调整——在每个步骤的末尾,如果其对应的专家过载,则将偏差项减少 ,如果其相应的专家负载不足,则将其增加 ,其中 是一个称为偏差更新速度(bias update speed)的超参数。通过动态调整,V3 在训练期间保持专家负载平衡,并获得比通过纯辅助损耗鼓励负载平衡的模型更好的性能。

Complementary Sequence-Wise Auxiliary Loss. 为了避免单一序列中发生极端失衡情况,V3 还采用了互补序列辅助损耗

  • 中,序列平衡损失(sequence-wise balance loss); 是平衡因子,是一个超参数,为 DeepSeek-V3 分配一个非常小的值; 是第 个路由专家在当前批次中的激活频率; 是第 个路由专家在整个序列中的平均亲和度;这是整个序列平衡损失的核心公式,它通过加权求和的方式,将每个路由专家的激活频率 和其在整个序列中的平均亲和度 结合起来。目标是鼓励模型在单个序列中平衡专家负载,避免某些专家被过度使用或完全未被使用。
  • 中, 表示指示函数,当条件成立时返回 1,否则返回 0; 表示序列中的 token 数;此公式计算了每个路由专家在序列中被选中的频率。通过统计每个 token 的 Top- 专家选择情况,可以量化每个专家在整个序列中的使用频率。如果某个专家被频繁选中,则 较高;反之则较低。
  • 中, 表示归一化后的亲和度,表示第 个路由专家对第 个 token 的相对重要性; 表示第 个路由专家对第 个 token 的原始亲和度;此公式对亲和度进行归一化处理,确保每个 token 的亲和度总和为 1,消除了不同 token 之间亲和度绝对值差异的影响,使得后续计算更加公平。
  • 中,此公式计算了每个路由专家在整个序列中的平均归一化亲和度 ,它反映了每个专家在整个序列中的整体贡献程度。如果某个专家在整个序列中被频繁选中且具有较高的亲和度,则 较高。

Node-Limited Routing. 与 DeepSeek-V2 使用的设备限制路由一样,V3 也使用限制路由机制来限制训练期间的通信成本。简而言之,确保每个 token 将被发送到最多 个节点,这些节点是根据分布在每个节点上的专家的最高 亲和分数之和来选择的。在这种约束下,MoE 训练框架几乎可以实现完全的计算通信重叠。

No Token-Dropping. 由于有效的负载平衡策略,V3 在其完整训练期间保持良好的负载平衡。因此,V3 在训练期间不会丢弃任何 token 。此外,V3 还实现了特定的部署策略来确保推理负载平衡,因此在推理过程中也不会丢弃 token。

Multi-Token Prediction

在 V3 中,多词元预测目标(Multi-Token Prediction objective)将预测范围延伸到每个位置的多个未来 token 。MTP 目标通过密集化训练信号从而提高数据效率,并且使得模型预先规划其表示从而更好地预测未来 token 。

MTP Modules

V3 中 MTP 目标的核心思想是通过独立的输出头并行地预测 个额外 token,以顺序预测的额外 token 将保持每个预测深度上因果链的完整性

DeepSeek_v3_report-MTP-objective

准确地说,V3 MTP 使用 个顺序模块来预测 个额外 token ,其中每个 MTP 模块包含一个共用的嵌入层 、一个共用的输出头 、一个 Transformer 块组 、以及一个线性投影矩阵 、一个 RMSNorm 标准化层。

整体的计算流程如下:

若要在第 层预测深度对第 个输入 token 进行预测,则首先将第 个 token 在 层预测深度的表示和第 个 token 的嵌入组合后与线性投影矩阵进行运算,当 时, 指的就是主模型给出的表示(representation)。

组合后的表示 接着作为第 层深度的 Transformer Block()的输入,以产生当前深度的输出表示:

这里 仍是输入序列的长度,而 代表切片操作(左右皆闭的区间)。Transformer Block 的输出 是经过上下文建模后的表示,相比输入 ,它包含了更丰富的语义信息和上下文相关性。这种变化使得模型能够更好地预测未来词元。

最后,将 作为输入,共用的输出头会计算出第 个额外预测 token 的概率分布

的作用是将隐藏表示 线性映射到 logits 向量再应用 Softmax 处理,从而计算出概率分布(深度学习中,logits 是模型对每个类别的原始预测值,经过 Softmax 归一化后转化为概率分布)。

V3 维护预测的因果链的核心原理与 EAGLE 相类,但主要目标是推测解码(speculative decoding,这里的意思是,快速生成多个候选 token,由主模型并行验证,通过接受率判断是否保留候选,减少解码步骤,获得更高的生成速度),同时还能改进训练效果。

MTP Training Objective

对每个预测深度,都计算出 MTP 的交叉熵损失:

最终整理所有深度 MTP 损失的均值,其会作为 V3 的额外训练目标

是权重因子。

MTP in Inference

MTP 策略主要是为了改进主模型的性能,因此推理时可以放弃 MTP 模块,让主模型自行推导。另外,还可以将 MTP 重新用于推测解码,进一步改善生成延迟。

Infrastructure

训练硬件:

  • 2048 块 Nvidia H800 GPU,分散在 256 个节点中组成集群;
  • 节点内部的 8 个 GPU 通过 NVLink 和 NVSwitch 进行连接;节点之间通过 InfiniBand 互联。

Training Framework

V3 的训练框架是从头构建的轻量级训练框架 HAI-LLM,应用了跨 8 节点的 16 路流水线并行(Pipeline Parallelism)和 64 路专家并行(Eexpert Parallelism),以及 ZeRO-1 数据并行(Data Parallelism)。为了促进高效训练,V3 采用了细致的工程优化:

  • DualPipe 算法
  • 跨节点的全连接通信内核
  • 训练中优化内存占用:避免使用开销巨大的张量并行(Tensor Parallelism)

DualPipe and Computation-Communication Overlap

跨节点的专家并行会引入通信开销,导致计算和通信之比接近 1:1,显然计算资源未得到充分利用,因此设计了 DualPipe 算法,通过将前向和后向传播过程中的计算和通信阶段重叠减少流水线的气泡,使得 PP 更高效。

DualPipe 的核心思想是在一对独立的前向和后向块(forward and backward chunk)内重叠计算和通信。具体来说,V3将每个块分为四个部分:attentionall-to-all dispatchMLPall-to-all combine 。特别是,对于向后块,attentionMLP 进一步分为两部分,分别用于输入和权重—— backward for inputbackward for weights 。此外,还有一个 PP communication 组件。这些组件在计算和通信过程的分配就如图 4 所示: DeepSeek_v3_report-overlapping-strategy 在这种重叠策略中,就可以确保在计算过程中可以完全隐藏 all-to-all 和 PP 通信。另外,对于一对前向和后向块,还可以重新排列这些组件,并手动调整专用于通信与计算的 GPU SM 的比例。

在高效的重叠策略基础上,完整的 DualPipe 调度如图 5 所示: DeepSeek_v3_report-DualPipe 它采用双向流水线调度,同时从流水线两端馈送 micro-batch ,并且可以完全重叠大部分通信。这种重叠也确保了,即使随着模型规模的进一步扩展,只要保持恒定的计算与通信比率,就仍然可以在节点之间采用细粒度的专家,同时实现接近零的 all-to-all 通信开销

此外,即使在没有繁重通信负担的更一般场景中,DualPipe 算法仍然表现出效率优势。在表 2 中,总结了不同 PP 方法的流水线气泡和内存使用情况: DeepSeek_v3_report-DualPipe-advantages 如表所示,

  • 与 ZB1P 和 1F1B 相比,DualPipe 显著减少了气泡,同时仅将激活时内存占用的峰值增加了 倍;
  • 尽管 DualPipe 需要保留模型参数的两个副本,但这并不会显著增加内存消耗,因为我们在训练过程中使用了较大的专家并行规模;
  • 与 Chimera 双向流水线相比,DualPipe 只要求阶段数和 micro-batch 可被 2 整除,而不要求 micro-batch 可由流水线阶段整除;
  • 此外,对于 DualPipe,气泡和激活内存都不会随着 micro-batch 数量的增加而增加。

Efficient Implementation of Cross-Node All-to-All Communication

为了节省专用于通信的流式多处理器(Streaming Multiprocessors)的数量,V3 定制了高效的跨节点全对全通信内核(包括调度和组合),其实现是MoE 门控算法集群的网络拓扑的联合设计。

具体来说,在集群中,跨节点的 GPU 通过 IB 实现完全互连,而节点内通信通过 NVLink 。NVLink 提供 160 GB/s 的带宽,大约是 IB(50 GB/s)的 3.2 倍。为了有效地利用 IB 和 NVLink 的不同带宽,需要限制每个 token 最多分派给 4 个节点,从而减少 IB 流量(若分派到更多节点,IB带宽会成为瓶颈)。对于每个 token ,当做出路由决定时,它将首先通过 IB 传输到目标节点上具有相同节点索引的 GPU。一旦它到达目标节点,就努力确保它通过 NVLink 即时转发到符合其目标专家的特定 GPU,而不会被随后到达的 token 所阻塞。这样,通过 IB 和 NVLink 的通信完全重叠,每个 token 在每个节点可以有效地平均选择 3.2 名专家,数量与带宽比例匹配(即3.2名专家/节点),从而充分利用节点内的高带宽,而不会产生 NVLink 的额外开销

V3 实际上仅选择 8 个路由专家,但在保持通信开销不变情况下,最高可以扩大规模到 13 个专家( )。总的说来,这种通信策略下,只需要 20 个 SM 就足以充分利用 IB 和 NVLink 的带宽。

更进一步,可以通过 warp specialization 技术,将 20 个 SM 划分为 10 个通信信道。

  • dispatch 过程中,有三个步骤:(1)IB 发送,(2)IB 到 NVLink 转发,以及(3)NVLink 接收,三者由各自的 warp 处理。分配给每个通信任务的 warp 数量根据所有 SM 的实际工作负载动态调整。
  • 同样,在 combine 过程中,同样是三个步骤:(1)NVLink 发送,(2)NVLink 到 IB 的转发和累积,以及(3)IB 接收和累积,也均由动态调整的 warp 处理。
  • 此外,dispatchcombine 内核都与计算流重叠,因此还需要考虑它们对其他 SM 计算内核的影响——具体来说,采用定制的 PTX(并行线程执行)指令并自动调整通信块大小,这大大减少了 L2 缓存的使用和对其他 SM 的干扰。

Extremely Memory Saving with Minimal Overhead

主要采用了以下三种方案减少训练中的内存占用:

Recomputation of RMSNorm and MLA Up-Projection. 通过选择性重计算(Selective Recomputation),在反向传播时动态重新计算部分中间结果(如RMSNorm的输出和MLA上投影的中间激活),而非在前向传播时存储它们。

  • 内存节省效果:减少中间激活的存储量,直接降低单卡显存占用。即使不使用TP分片参数,也能通过重计算在更少显存下运行更大模型,从而减少对TP的需求。

Exponential Moving Average in CPU. 指数移动平均(EMA)用于平滑模型参数,可以在学习率衰减后提早估计模型的性能,从而提升训练稳定性。传统实现中,EMA参数通常与模型参数一起存储在GPU显存中。对于超大规模模型,EMA参数的存储会显著增加显存占用,迫使使用TP来分片参数。V3 的实现是,将EMA参数存储在CPU内存中,而非GPU显存。由于CPU内存容量远大于GPU显存,EMA参数的存储不再受限于显存容量。

  • 内存节省效果:释放GPU显存,EMA参数不再占用显存,允许在单卡上存储更多模型参数或中间结果;减少对TP的依赖,无需通过TP分片参数即可缓解显存压力,简化并行策略。

Shared Embedding and Output Head for Multi-Token Prediction. 传统Transformer中,输入嵌入层和输出投影层是独立的参数矩阵。在多Token预测任务中,若每个Token单独预测,输出头的参数量会随预测Token数线性增长,进一步增加显存需求。而利用 DualPipe 策略,可以将最浅层(即嵌入层)和最深层(即输出层)可以存放在相同 PP rank 的阶段中,这样的安排使得输入嵌入层和输出投影层的参数和梯度实现直接的共享。

FP8 Training

低精度训练已有广泛研究并且未来可期,但仍受限于当前激活、权重、梯度,在大规模语言模型的预训练中缺乏有效的研究和应用。V3 提出了细粒度的量化策略: 个元素的片分组和 个元素的块分组

FP8 精度的运算(例如通用矩阵乘法 GEneral Matrix Multiplication)想要保证精确的关键,在于经过精度增加的累积处理,大大减轻相关的去量化。此外,为了进一步减少 MoE 训练中的内存和通信开销,V3 以 FP8 格式对激活值进行缓存和调度,以 BF16 格式存储低精度优化器的状态。

经过两个类似于 DeepSeek-V2-Lite 和 DeepSeek V2 的模型尺度上 1 trillion tokens 训练的验证,FP8 训练模型相对于基线 BF16 的相对损失误差一直保持在 0.25%以下,这是处于训练随机性可接受范围内的效果。

Mixed Precision Framework

DeepSeek_v3_report-FP8-framework

核心思路是:大多计算密集型操作在 FP8 格式执行,少数关键操作有策略地维持原数据格式以平衡训练效率(准确说是稳定训练动态,降低崩溃几率从而提高效率)和数值稳定

首先,为了加速模型训练,大多数核心计算内核(core computation kernel),即 GEMM 操作,都是以 FP8 精度实现的。这些 GEMM 操作接受 FP8 张量作为输入,并以 BF16 或 FP32 格式输出。如图 6 所示,与线性算子相关的所有三个 GEMM,即 Fprop(forward pass)、Dgrad(activation backward pass)和 Wgrad(weight backward pass),都以 FP8 格式执行。与原始的 BF16 方法相比,这种设计理论上可以将计算速度提高一倍。此外,FP8 Wgrad GEMM 允许将激活值以 FP8 格式存储,以用于反向传递。这大大降低了内存消耗。

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

Improved Precision from Quantization and Multiplication

基于混合精度的 FP8 训练框架,V3 采用了一些策略来强化低精度训练的准确度,聚焦于量化方法和乘法处理。

1. Fine-Grained Quantization. 在低精度训练框架中,由于 FP8 格式的范围有限,存在上溢和下溢风险。一般做法是,将输入张量的最大绝对值缩放到 FP8 的最大可表示值,将输入分布与 FP8 格式的可表示范围对齐。但此方法会导致低精度训练对激活异常值高度敏感,严重降低量化精度。

DeepSeek_v3_report-fine-grained-quantization

为了解决这个问题,V3 提出了一种细粒度量化方法,该方法在更细粒度的级别上应用缩放。如图 7(a)所示:

  1. 对于激活,在 的分片基础上对元素进行分组和缩放(即每 128 个通道对应一个 token);
  2. 对于权重,以 的分块为基础(即每 128 个输入通道每 128 个输出通道)对元素进行分组和缩放。 这种方法通过根据较小的元素分组调整放缩,确保量化过程能够更好地适应离群值。在附录B.2 中,进一步讨论了以类似权重量化的方式在块的基础上对激活进行分组和缩放时的训练不稳定性。此方法的关键改变是沿 GEMM 操作的内部维度引入每组缩放因子,原本标准 FP8 GEMM 不支持此功能,但结合下面的精确 FP32 累积策略可以实现。

2. Increasing Accumulation Precision. 低精度 GEMM 操作饱受下溢问题之困扰,其准确性很大程度上取决于高精度的累积(通常在 FP32 精度下进行)。然而,FP8 GEMM 在 NVIDIA H800 GPU 上的累积精度仅限于保留约 14 位,远低于 FP32 的累积精度。当内部维度 K 较大时(大规模模型训练的典型场景,此时训练中批量大小和模型宽度都会增加),这个问题将变得更加明显。 以 K=4096 的两个随机矩阵的 GEMM 运算为例,张量核(Tensor Core)中有限的累积精度将导致最大相对误差接近 2%。尽管存在这些问题,有限的累积精度仍然是少数 FP8 框架的默认选项,严重限制了训练精度。 DeepSeek_v3_report-fine-grained-quantization 为了解决这个问题,V3 采取了 promotion to CUDA Core 以提高精度的策略。该过程如图 7(b)所示,具体来说,在 Tensor Core 上执行 MMA(矩阵乘法累加)期间,使用有限的位宽累加中间结果。一旦达到 区间,这些部分结果将被复制到 CUDA Core 上的 FP32 寄存器,在那里进行全精度 FP32 的累加。如前所述,细粒度量化会沿着内部维度 K 应用每组缩放因子。这些缩放因子可以在 CUDA Core 上高效地相乘,作为去量化过程,额外的计算成本最小。

值得注意的是,此修改降低了单个 warpgroup 上的 WGMMA(WarpGroup MMA)指令发布率。然而,在 H800 架构上,两个 WGMMA 同时存在是很常见的:当一个 warpgroup 执行 promotion 操作时,另一个能够执行 MMA 操作。这种设计实现了两个操作的重叠,保持了 Tensor 核心的高利用率。根据实验,设置 个元素,相当于 4 个 WGMMA,代表了可以在不引入大量开销的情况下显著提高精度的最小累积间隔。

3. Mantissa over Exponents. 与先前工作采用的混合 FP8 格式不同——在 Fprop 中使用 E4M3,在 DgradWgrad 中使用 E5M2。V3 在所有张量上都采用 E4M3 格式以获得更高的精度,这种方案的可行性归因于细粒度量化策略,即分片和分块缩放。通过对较小的元素组进行操作,此方法在这些分组的元素之间有效地共享指数位,减轻了有限动态范围的影响。

4. Online Quantization. 过去的工作是将延迟量化(delayed quantization)用于张量层级的量化框架,该框架维护了先前迭代中的历史最大绝对值,以推断当前值。为了确保准确的放缩并简化框架,本工作中在线计算每个 1x128 激活分片或 128x128 权重分块的最大绝对值。在此基础上,推导出缩放因子,然后将激活或权重在线量化为 FP8 格式。

Low-Precision Storage and Communication

结合 FP8 框架,可以通过压缩缓存的激活值和优化器状态到低精度格式,进一步减少显存消耗和通信开销。

Low-Precision Optimizer States. 采用 BF16 数据格式而不是 FP32 来跟踪 AdamW 优化器中的第一和第二时刻,这不会导致明显的性能下降。然而,主权重(由优化器存储)和梯度(用于批量累积)仍保留在 FP32 中,以确保整个训练过程中的数值稳定性。

Low-Precision Activation. 如 Fig6 所示,Wgrad 操作以 FP8 精度执行。为了减少显存消耗,很直觉的选择是将激活值以 FP8 格式缓存,便于线性运算符反向传递。然而为了低成本的高精度训练,有几个特殊运算符需要考虑:

  1. Input of the Linear after the attention operator. 这些激活也用于注意力运算符的后向传递,因此对精度很敏感。所以采用针对这些激活定制的E5M6数据格式。此外,这些激活将在反向传播过程中从 1x128 量化分片转换为128x1 的量化分片。为了避免引入额外的量化误差,所有缩放因子都是四舍五入的,即2的整数幂。
  2. Inputs of the SwiGLU operator in MoE. 为了进一步降低显存消耗,需要缓存SwiGLU运算符的输入,并在反向过程中重新计算其输出。这些激活也通过细粒度量化方法存储在FP8中,在内存效率和计算精度之间取得了平衡。

Low-Precision Communication. 通信带宽是 MoE 模型训练的关键瓶颈。为了缓解这一挑战,将 MoE 向上投影之前的激活量化为 FP8,然后应用 dispatch 组件,该组件与 MoE 向上投影中的 FP8 Fprop 兼容。与注意力运算符后的 Linear 输入一样,此激活的缩放因子是 2 的整数次幂。在 MoE 向下投影之前,对激活梯度应用了类似的策略。对于前向和后向 combine 组件,将其保留在 BF16 中,以保持训练流水线中关键部分的训练精度。

Inference and Deployment

为了同时确保在线服务的服务水平目标(Service-Level Objective)和高吞吐量,采用了以下部署策略,将预填充和解码阶段分开。

Prefilling

预填充阶段的最小部署单元由 4 个节点(32 个 GPU)组成。

  • attention 部分采用 4-way TP 和序列并行(Sequence Parallelism),并结合 8-way DP 。其 4-way TP 的小尺寸限制了 TP 通信的开销。
  • 对于 MoE 部分,使用 32-way EP ,这确保了每个专家处理足够大的批处理量,从而提高了计算效率。
  • 对于 MoE 的全对全通信,使用与训练中相同的方法:首先通过 IB 在节点之间传输 token ,然后通过 NVLink 在节点内 GPU 之间转发。特别是,对浅层中的密集 MLP 使用 1-way TP 来节省 TP 通信。

为了在 MoE 部分的不同专家之间实现负载平衡,需要确保每个 GPU 处理的 token 数量大致相同。为此,引入了一种冗余专家(redundant experts)的部署策略,该策略复制高负载专家并冗余部署:

  • 高负载专家根据在线部署期间收集的统计数据进行检测,并定期进行调整。
  • 在确定冗余专家集后,根据观察到的负载情况在节点内的 GPU 之间仔细重新排列专家,努力在不增加跨节点全对全通信开销的情况下尽可能地平衡 GPU 之间的负载。
  • 为了部署 DeepSeek-V3,预填充阶段设置了 32 名冗余专家。对于每个 GPU,除了它托管的原始 8 名专家外,它还将托管 1 名冗余的专家。

此外,在预填充阶段,为了提高吞吐量、隐藏全对全以及 TP 通信的开销,需要同时处理具有相似计算工作负载的两个 micro-batch ,将一个 micro-batch 的 attentionMoE 与另一个的 dispatchcombine 重叠。

最后,deepseek 团队正在探索一种针对专家的动态冗余策略,其中每个 GPU 容纳更多的专家(例如,16 名专家),但在每个推理步骤中只有 9 名专家会被激活。在每一层的全对全操作之前,实时计算全局最优路由方案。考虑到预填充阶段涉及大量计算,计算此路由方案的开销几乎可以忽略不计。

Decoding

在解码过程中,将共享专家视为路由专家。从这个角度来看,在路由过程中,每个 token 将选择 9 个专家,其中共享的专家被视为一个总是被选择的重负载专家。解码阶段的最小部署单元由 40 个节点(320 个 GPU)组成。

  • attention 部分使用 TP4 和 SP,结合 DP80,
  • MoE 部分使用 EP320。对于 MoE 部分,每个 GPU 只托管一个专家,其中 64 个 GPU 负责托管冗余专家和共享专家
  • dispatchcombine 部件的全对全通信是通过 IB 上的直接点对点传输来实现的,以实现低延迟。
  • 此外,利用 IBGDA 技术进一步减少延迟并提高通信效率。

与预填充类似,解码时根据在线服务所统计的专家负载,在一定间隔内定期确定冗余专家集。但是不需要重新安排专家,因为每个 GPU 只托管一个专家。DeepSeek 也在探索解码的动态冗余策略。然而,这需要对计算全局最优路由方案的算法进行更仔细的优化,并与 dispatch 内核融合以减少开销。

此外,为了提高吞吐量并隐藏所有对所有通信的开销,DeepSeek 还在探索 decoding 同时处理具有相似计算工作负载的两个 micro-batch 。与预填充不同,attention 在解码阶段消耗了更多的时间。因此,将一个 micro-batch 的 attention 与另一个 micro-batch 的 dispatch+MoE+conbine 重叠。在解码阶段,每个专家的 batch size 相对较小(通常小于 256 个 token ),瓶颈是内存访问而不是计算(batch size 小,意味着要反复从显存中获取 batch)。由于 MoE 部分只需要加载一位专家的参数,因此内存访问开销最小,因此使用较少的 SM 不会显著影响整体性能。因此,为了避免影响 attention 部分的计算速度,可以只将一小部分 SM 分配给 dispatch+MoE+combine

Suggestions on Hardware Design

DeepSeek 对 AI 供应商的建议。

Communication Hardware

在 DeepSeek-V3 中,通过计算和通信之间的重叠,以隐藏计算过程中的通信延迟。与串行计算和通信相比,这大大降低了对通信带宽的依赖。然而,当前的通信实现依赖于昂贵的 SM(例如,为此目的在 H800 GPU 中可用的 132 个 SM 中分配了 20 个),这将限制计算吞吐量。此外,使用 SM 进行通信会导致显著的效率低下,因为 Tensor Core 被完全利用(这句话读起来别扭,实际意思是:Tensor Core 作为现代 GPU 的核心计算单元,专为矩阵乘法和累加操作(GEMM)优化,是深度学习训练中最重要的硬件资源,当 SM 被用于通信任务时,这些 SM 就无法参与计算任务,尤其是 Tensor Core 的高吞吐量计算。如果 Tensor Core 被完全利用,即处于满负荷运行状态,而部分 SM 却被占用进行通信任务,则会导致整体计算资源利用率下降,从而降低训练效率)。

目前,SM 主要执行以下全对全通信任务:

  • 在 IB(InfiniBand)和 NVLink 域之间转发数据,同时聚合从单个 GPU 发往同一节点内多个 GPU 的 IB 流量。
  • 在 RDMA 缓冲区(注册的 GPU 内存区域)和输入/输出缓冲区之间传输数据
  • 对全对全 combine 执行 reduce 操作
  • 在跨 IB 和 NVLink 域向多个专家传输分块数据期间管理细粒度内存布局

希望看到未来的供应商开发硬件,将这些通信任务从有价值的计算单元 SM 中卸载,作为 GPU 协处理器或网络协处理器,如 NVIDIA SHARP Graham 等人的方案。此外,为了降低应用程序编程的复杂性,我们的目标是从计算单元的角度将 IB(横向扩展)和 NVLink(向上扩展)网络统一起来。有了这个统一的接口,计算单元可以通过基于简单原语提交通信请求,在整个 IB-NVLink 统一域内轻松完成读、写、组播和 reduce 等操作。

Compute Hardware

Higher FP8 GEMM Accumulation Precision in Tensor Cores. 在 NVIDIA Hopper 架构的当前 Tensor Core 实现中,FP8 GEMM 采用定点累加(fixed-point accumulation),根据加法前的最大指数右移来对齐尾数乘积。的实验表明,在符号填充右移后,它只使用每个尾数乘积的最高 14 位,并截断超过此范围的位。然而,为了从 32 个 FP8×FP8 乘法的累加中获得精确的 FP32 结果,至少需要 34 位精度。因此,我们建议未来的芯片设计提高 Tensor 核心的累积精度,以支持全精度累积,或者根据训练和推理算法的精度要求选择合适的累积位宽。这种方法确保误差保持在可接受的范围内,同时保持计算效率。

Support for Tile- and Block-Wise Quantization. 目前的 GPU 只支持逐个张量量化(per-tensor quantization),缺乏对细粒度量化的原生支持,比如前文的分 tile/block 量化。在当前实现中,当达到 区间时,部分结果将从 Tensor Core 复制到 CUDA Core,乘以缩放因子,并加到 CUDA Core 上的 FP32 寄存器中。尽管结合前文的精确 FP32 累积策略,反量化开销得到了显著减轻,但 Tensor Core 和 CUDA Core 之间频繁的数据移动仍然限制了计算效率。因此,建议未来的芯片通过使 Tensor Core 能够接收缩放因子并实现具有按组缩放的 MMA 来支持细粒度量化。通过这种方式,所有部分和的累加和去量化可以直接在 Tensor Core 内完成,直到产生最终结果,从而避免了频繁的数据移动。

Support for Online Quantization. 尽管 DeepSeek 的研究证明了在线量化的有效性,但目前的实现很难有效地支持在线量化。在现有的过程中,需要从 HBM(高带宽存储器)读取 128 个 BF16 激活值(之前计算的输出)进行量化,然后将量化的结果以 FP8 写回 HBM,只为 MMA 再次读取。为了解决这种低效问题,我们建议未来的芯片将 FP8 cast 和 TMA(Tensor Memory Accelerator)访问集成到一个融合操作中,这样量化就可以在激活值从全局内存转移到共享内存的过程中完成,避免频繁的内存读写。我们还建议支持 warp-level 投射指令(cast instruction)以加速,这进一步促进了层归一化和 FP8 投射的更好融合。或者,可以采用就近内存计算方法,将计算逻辑放置在 HBM 附近。在这种情况下,BF16 元素可以在从 HBM 读取到 GPU 时直接转换为 FP8,从而将片外内存访问减少约 50%。

Support for Transposed GEMM Operations. 当前的架构使得将矩阵转置与 GEMM 操作融合起来很麻烦。在 V3 的工作流程中,前向传递期间的激活被量化为 1x128 FP8 tiles 并存储。在反向传递过程中,矩阵需要被读出、去量化、转置、重新量化为 128x1 的块,并存储在 HBM 中。为了减少内存操作,我们建议未来的芯片在 MMA 操作之前从共享内存中直接转置读取矩阵,以达到训练和推理所需的精度。结合 FP8 格式转换和 TMA 访问的融合,这种增强将显著简化量化工作流程。

Pre-Training

Data Construction

与 DeepSeek-V2 相比,V3 通过提高数学和编程样本的比例来优化预训练语料库(pre-training corpus),同时将多语言覆盖范围扩展到英语和中文之外。此外,数据处理流水线经过改进,在保持语料库多样性的同时尽量减少冗余。受 Ding 等人工作的启发,V3 实现了针对数据完整性的文档打包方法,但在训练过程中没有包含跨样本注意力掩码(Cross-Sample Attention Masking)。最后,V3 的训练语料库由 14.8T 高质量和多样化的 token 组成。

在 DeepSeekCoder-V2 的训练过程中,我们观察到中间填充策略(Fill-in-Middle)不会损害下一个 token 的预测能力,同时使模型能够根据上下文线索准确预测中间文本。为了与 DeepSeekCoder-V2 保持一致,V3 的预训练仍然采纳了 FIM 策略。具体来说,采用前缀后缀中间(Prefix-Suffix-Middle)框架来构建数据,如下所示:

这种结构作为预包装过程的一部分应用于文档。FIM 策略以 0.1 的比率应用,与 PSM 框架一致。

V3 的 tokenizer 采用字节级 BPE(Byte Pair Encoding),扩展了 128K 个 token 的词汇表。DeepSeek 团队还修改了 tokenizer 的 pretokenizer 和训练数据,以优化多语言压缩效率。此外,与 DeepSeek-V2 相比,新的 pretokenizer 引入了结合标点和换行的 token 。然而,当模型处理没有 terminal line breaks 的多行提示时,特别是对于 few-shot 的评估提示,这种技巧可能会引入 token 边界偏差(token boundary bias)的问题。为了解决这个问题,V3 在训练过程中随机分割了一定比例的这种组合 token,使得模型能够面对更广泛的特殊情况,并减轻了这种偏见。

Hyper Parameters

Model Hyper-Parameters.

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

Training Hyper-Parameters.

  • V3 使用 AdamW 优化器,将超参数设置为
  • 在预训练期间将最大序列长度设置为 4K,并在 14.8T tokens 上预训练 DeepSeek-V3。
  • 对于学习率调度,首先在前 2K 个步骤中将其从 线性增加到 。然后,保持 的恒定学习率,直到模型消耗 10T 的训练 token 。随后,按照余弦衰减曲线,在 4.3T token 中将学习率逐渐衰减到 。在最后 500B 个token 的训练过程中,前 333B 个token 中保持 的恒定学习率,并在剩余的 167B 个token 中将学习率切换到 的另一个恒定学习率。
  • 梯度剪裁规范(gradient clipping norm)设置为 1.0。
  • V3 采用批量大小调度(batch size scheduling)策略,在前 469B 个token 的训练中,批量大小从 3072 逐渐增加到 15360,然后在剩余的训练中保持 15360。
  • V3 利用流水线并行性在不同的 GPU 上部署模型的不同层,对于每一层,路由专家将统一部署在属于 8 个节点的 64 个 GPU 上。对于节点受限路由,每个token 将被发送到最多 4 个节点(即 M=4)。
  • 为了实现辅助无损耗负载平衡,前 14.3T token 的偏差更新速度 设置为 0.001,剩余 500B token 设置为
  • 对于平衡损失, 设置为 0.0001,只是为了避免任何单个序列中的极端不平衡。
  • 对于前 10T token,MTP 损失权重 设置为 0.3,对于剩余的 4.8T token,设置为 0.1。

Long Context Extension

V3 采用与 DeepSeek-V2 类似的方法启用长上下文功能——在预训练阶段之后,应用 YaRN 进行上下文扩展,并执行两个额外的训练阶段,每个阶段包括 1000 个步骤,以逐步将上下文窗口从 4K 扩展到 32K,然后扩展到 128K。

YaRN 配置与 DeepSeek-V2 中使用的配置一致,仅应用于解耦的共享密钥 。两个阶段的超参数保持一致,放缩因子 ,放缩因子 。在第一阶段,序列长度设置为 32K,batch size 为 1920。在第二阶段,序列长度增加到 128K,batch size 减少到 480。两个阶段的学习率都设置为 ,与预训练阶段的最终学习率相匹配。

DeepSeek_v3_report-long-context-extension 通过这个两阶段的扩展训练,DeepSeek-V3 能够处理长达 128K 的输入,同时保持强大的性能。图 8 显示,DeepSeek-V3 在监督微调后,在“Needle In A Haystack”(NIAH)测试中取得了显著的性能,证明了在高达 128K 的上下文窗口长度上具有一致的鲁棒性。

Evaluations

Benchmarks. V3 的基础模型在多语言(中英为主)语料库上进行预训练,评估框架集成在 HAI-LLM 内部。根据 DeepSeek 团队之前的工作,对 HellaSwag、PIQA、WinoGrande、RACE Middle、RACE High、MMLU、MMLU Redux、MMLU Pro、MMMLU、ARC Easy、ARC Challenge、c-Eval、CMMLU、C3 和 CCPM 等数据集采用基于 perplexity 的评估,并对 TriviaQA、NaturalQuestions、DROP、MATH、GSM8K、MGSM、HumanEval、MBPP、LiveCodeBench Base、CRUXEval、BBH、AGIEval、CLUEWSC、CMRC 和 CMath 采用基于生成的评估。此外,对 Pile-test 进行了基于语言建模(language-modeling-based)的评估,并使用每字节比特数(Bits-Per-Byte)作为指标,以确保使用不同 tokenizer 的模型之间的公平比较。

Results. DeepSeek_v3_report-pretrain-benchmark 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 在多语言、代码和数学基准测试方面也表现出更好的性能。对于英语和汉语基准测试,DeepSeek-V3-Base 显示出有竞争力或更好的性能,尤其在 BBH、MMLU 系列、DROP、C-Eval、CMMLU 和 CCPM 上表现出色。

由于高效的架构和全面的工程优化,V3 实现了极高的训练效率。在 DeepSeek 的训练框架和基础设施下,在每万亿个 token 上训练 V3 只需要 180K H800 GPU 小时,这比训练 72B 或 405B 密集模型便宜得多。

Discussion

Ablation Studies for Multi-Token Prediction. DeepSeek_v3_report-ablation-for-MTP 具体来说,在不同尺度的两个基线模型上验证了 MTP 策略:

  • 在小规模上训练的基线 MoE 模型,该模型在 1.33T 令牌上包含 15.7B 个总参数。
  • 在大规模上,训练的基线 MoE 模型,该模型在 540B 令牌上包含 228.7B 个总参数。
  • 在它们之上,保持训练数据和其他架构不变,附加了一个 1 深度的 MTP 模块,并使用 MTP 策略训练两个模型进行比较。请注意,在推理过程中,直接丢弃了 MTP 模块,因此比较模型的推理成本完全相同。 从表中可以看出,MTP 策略在大多数评估基准上都提高了模型性能。

Ablation Studies for Auxiliary-Loss-Free Balancing Strategy. DeepSeek_v3_report-ablation-for-auxiliary-free 在表 5 中显示了辅助无损耗平衡策略的消融结果,同样在不同尺度的两个基线模型上验证了这一策略:

  • 这两个基线模型都纯粹使用辅助损失来促进负载平衡,并使用带有 top-K 亲和度归一化的 sigmoid 门控函数。- 它们控制辅助损失强度的超参数分别与 DeepSeek-V2-Lite 和 DeepSeek-V2 相同。
  • 在这两个基线模型之上,在保持训练数据和其他架构不变的情况下,通过删除所有辅助损耗,并引入了辅助无损耗平衡策略进行比较。 从表中可以观察到,辅助无损失策略在大多数评估基准上始终取得了更好的模型性能。

Batch-Wise Load Balance VS. Sequence-Wise Load Balance. DeepSeek_v3_report-scope-of-load-balance 辅助无损耗平衡和序列辅助损耗之间的关键区别在于它们的平衡范围:批量级和序列级:

  • 与序列辅助损失相比,批量级平衡施加了更灵活的约束,因为它不会对每个序列强制执行域内平衡。这种灵活性使专家能够更好地专注于不同的领域。
  • 为了验证这一点,通过记录并分析 Pile-test 集中不同域上基于 16B 辅助损失的基线和 16B 辅助无损失模型的专家载荷。如图 9 所示,可以观察到辅助无损失模型如预期的那样展示了更大的专家专业化模式。

为了进一步研究这种灵活性与模型性能优势之间的相关性,DeepSeek 团队设计并验证了一个批量辅助损失,该损失鼓励在每个训练批量而不是每个序列上进行负载平衡。实验结果表明,当实现类似水平的批量负载平衡时,分批辅助损耗也可以实现与无辅助损耗方法类似的模型性能。具体来说,

  • 在对 1B MoE 模型的实验中,验证损失为:2.258(使用顺序辅助损失)、2.253(使用无辅助损失方法)和 2.253(采用批量辅助损失)。
  • 在 3B MoE 模型上观察到类似的结果:使用顺序辅助损失的模型实现了 2.085 的验证损失,使用无辅助损失方法或批量辅助损失的模式实现了相同的 2.080 的验证损失。

此外,尽管批量负载平衡方法显示出一致的性能优势,但它们在效率方面也面临着两个潜在的挑战:

  1. 某些序列或小批量内的负载不平衡,
  2. 推理过程中域偏移引起的负载不均衡。 第一个挑战自然是通过 DeepSeek 的训练框架来解决的,该框架使用大规模的专家并行性和数据并行性,保证了每个微批的大容量。对于第二个挑战,如第 3.4 节所述,设计并实现了一个具有冗余专家部署的高效推理框架以克服它。

Post-Training

Supervised Fine-Tuning

在 V3 的指令调优数据集中,包含跨越多个域的 150 万个实例,每个域都采用根据其特定要求所量身定制的不同数据创建方法。

Reasoning Data. 对于与推理相关的数据集,包括那些专注于数学、代码竞赛问题和逻辑谜题的数据,V3 利用 DeepSeek-R1 模型生成数据。不过要注意,虽然 R1 生成的数据表现出很强的准确性,但它存在过度思考、格式不佳和长度过长等问题。DS 团队的目标是平衡 R1 生成的推理数据的高准确性和符合规则格式的推理数据的清晰性和简洁性。 为了建立自己的方法论,首先使用监督微调(SFT)和强化学习(RL)相结合的训练流程,开发一个针对特定领域(如代码、数学或一般推理)量身定制的专家模型。该专家模型充当最终模型的数据生成器。训练过程涉及为每个实例生成两种不同类型的 SFT 样本:1. 将问题与其原始响应以 <problem,original response> 的格式耦合在一起,2. 将系统提示与问题和 R1 响应以 <system prompt,problem, R1 respond> 的格式结合在一起。 系统提示经过精心设计,包括指导模型产生富含反射和验证机制的响应的指令。在 RL 阶段,即使在没有明确的系统提示的情况下,该模型也利用 high-temperature 采样来生成响应,该响应整合了 R1 生成的数据和原始数据的模式。经过数百个强化学习步骤后,中间强化学习模型学会了结合 R1 模式,从而从战略上提高了整体性能。 在完成 RL 训练阶段后,通过拒绝抽样并为最终模型策划高质量的 SFT 数据,其中专家模型用作数据生成源。这种方法确保最终的训练数据保持 DeepSeek-R1 的优势,同时产生简洁有效的响应。

Non-Reasoning Data. 对于非推理数据,如创意写作、角色扮演和简单问答,利用 DeepSeek-V2.5 生成响应,并招募人类注释者来验证数据的准确性和正确性。

SFT Settings. 使用 SFT 数据集对 DeepSeek-V3-Base 进行了两个 epoch 的微调,使用余弦衰减学习率调度,从 开始,逐渐降低到 。在训练过程中,每个序列都是从多个样本中打包而成的,其中采用了一种样本掩蔽策略,以确保这些示例保持孤立和相互不可见。

Reinforcement Learning

Reward Model

DeepSeek 团队在强化学习过程中采用了基于规则的奖励模型(Reward Model)和基于模型的 RM 。

Rule-Based RM. 对于可以使用特定规则验证的问题,采用基于规则的奖励系统来确定反馈。例如,某些数学问题具有确定性结果,则可以要求模型以指定的格式(例如在框中)提供最终答案,从而允许我们应用规则来验证正确性。同样,对于 LeetCode 问题,则可以利用编译器根据测试用例生成反馈。通过尽可能利用基于规则的验证,可以确保更高的可靠性,因为这种方法能够抵抗操纵或利用。

Model-Based RM. 对于具有自由形式、答案有明确事实的问题,则依靠奖励模型来确定答案是否与预期的基本事实相匹配。相反,对于没有明确依据的问题,例如涉及创造性写作的问题,奖励模型的任务是根据问题和相应的答案作为输入提供反馈。奖励模型是从 DeepSeek-V3 SFT 检查点训练的。为了提高其可靠性,DS 团队构建了偏好数据,该数据不仅提供了最终的奖励,还包括导致奖励的思维链。这种方法有助于降低特定任务中奖励黑客(reward hacking)的风险。

Group Relative Policy Optimization

与 DeepSeek-V2类似,V3 采用了组相对策略优化(Group Relative Policy Optimization),其思路是:放弃通常与策略模型大小相同的批评模型,而是根据组分数估计基线。具体来说,对于每个问题 ,GRPO 从旧策略模型 中采样一组输出 ,然后通过最大化以下目标来优化策略模型

其中 是超参数; 是参考模型; 是优势,来源于与每个组内的输出对应的奖励

在强化学习过程中,通过整合来自不同领域的提示,如编码、数学、写作、角色扮演和问答。这种方法不仅使模型更符合人类偏好,而且提高了基准测试的性能,特别是在可用 SFT 数据有限的情况下。

Evaluations

Benchmark & Baseline. 除了用于基础模型测试的基准之外,还进一步评估了 IFEval、FRAMES、LongBench v2、GPQA、SimpleQA、CSimpleQA、SWE Bench Verified、Aider 1、LiveCodeBench、Codeforces 2、中国国家高中数学奥林匹克竞赛 和 美国邀请性数学考试 2024 的指导模型。 根据几个强力基线模型对 V3 进行综合评估,包括 DeepSeek-V2-0506、DeepSeek-V2.5-0905、Qwen2.5 72B 指令、LLaMA-3.1 405B 指令、Claude-Sonnet-3.5-1022 和 GPT-4o-0513。对于 DeepSeek-V2 系列,选择最具代表性的模型进行比较。对于封闭源代码模型,通过它们各自的 API 执行评估。

Detailed Evaluation Configurations. 对于包括 MMLU、DROP、GPQA 和 SimpleQA 在内的标准基准测试,采用了 simple evals 框架中的评估提示。在 zero-shot 设置中使用 Zero-Eval 提示格式进行 MMLU Redux。对于其他数据集,使用数据集创建者提供的默认提示遵循其原始评估协议。对于代码和数学基准测试,HumanEval Mul 数据集总共包括 8 种主流编程语言(Python、Java、Cpp、C#、JavaScript、TypeScript、PHP 和 Bash)。使用 CoT 和非 CoT 方法在 LiveCodeBench 上评估模型性能,数据收集时间为 2024 年 8 月至 2024 年 11 月。Codeforces 数据集使用竞争对手的百分比进行测量。使用无代理框架评估验证的 SWE 试验台。使用“diff”格式来评估 Aider 相关的基准。对于数学评估,AIME 和 CNMO 2024 在 0.7 的温度下进行评估,结果平均超过 16 次,而 MATH-500 采用贪婪解码。允许所有模型为每个基准输出最多 8192 个 token 。

Standard Evaluation

下表是性能展示: DeepSeek_v3_report-posttrain-eval

English Benchmarks. MMLU 是一个被广泛认可的基准,旨在评估大型语言模型在不同知识领域和任务中的性能。DeepSeek-V3 显示出具有竞争力的性能,与顶级机型如 LLaMA3.1-405B、GPT-4o 和 Claude Sonnet 3.5 不相上下,同时显著优于 Qwen2.5 72B。此外,DeepSeek-V3 在 MMLU Pro 中表现出色,MMLU Pro 是一个更具挑战性的教育知识基准,紧随 Claude Sonnet 3.5 之后。在 MMLU-Redux 上,DeepSeek-V3 超越了它的同行。此外,在博士级评估测试平台 GPQA Diamond 上,DeepSeek-V3 取得了显著的成绩,仅次于 Claude 3.5 十四行诗,并以巨大的优势超过了所有其他竞争对手。在理解 DROP、LongBench v2 和 FRAMES 等长上下文基准中,DeepSeek-V3 继续展示其作为顶级模型的地位。它实现了令人印象深刻的 91.6 F1 成绩在 3 杆设置下降,跑赢了所有其他型号在这一类别。在 FRAMES 上,DeepSeekV3 是一个需要回答超过 100k 个令牌上下文的问题的基准,它紧随 GPT-4o 之后,同时以显著的优势超过了所有其他模型。这证明了 DeepSeek-V3 处理超长上下文任务的强大能力。DeepSeek-V3 的长上下文功能通过其在 LongBench v2 上的同类最佳性能得到进一步验证,LongBench v2 是在 DeepSeek V3 发布前几周发布的数据集。在事实知识基准上,SimpleQA、DeepSeek-V3 落后于 GPT-4o 和 Claude Sonnet,主要是由于其设计重点和资源分配。DeepSeek-V3 分配了更多的培训令牌来学习中文知识,从而在 C-SimpleQA 上获得了优异的性能。在遵循指令的基准测试中,DeepSeek-V3 显著优于其前身 DeepSeek-V2-series,突出了其更好地理解和遵守用户定义的格式约束的能力。

Code and Math Benchmarks. 对于 LLMs 来说,编码是一项具有挑战性和实用性的任务,包括以工程为中心的任务,如 SWE Bench Verified and 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 是两个具有代表性的模型系列,支持中文和英文。尽管 Qwen2.5 是在一个更大的语料库上训练的,包含 18T 标记,比 DeepSeek-V3 预先训练的 14.8T 标记多 20%。但在汉语教育知识评估的代表性基准 C-Eval 和 CLUEWSC(Chinese Winograd Schema Challenge)上,DeepSeekV3 和 Qwen2.5-72B 表现出相似的性能水平,表明这两个模型在挑战汉语推理和教育任务方面都得到了很好的优化。

Open-Ended Evaluation

除了标准基准之外,还使用 LLM 作为评判标准来评估开放式生成任务模型,结果如表 7 所示。 DeepSeek_v3_report-open-ended-eval 具体而言,坚持 AlpacaEval 2.0 和 Arena-Hard 的原始配置,它们利用 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 中这些模型的性能。 DeepSeek_v3_report-rewardbench-eval DeepSeek-V3 的性能可与 GPT-4o-0806 和 Claude-3.5-Sonnet-1022 的最佳版本媲美,同时超过其他版本。此外,投票技术还可以增强 DeepSeek-V3 的判断能力。因此,使用 DeepSeekV3 和投票来提供开放式问题的自我反馈,从而提高对齐过程的有效性和鲁棒性。

Discussion

Distillation from DeepSeek-R1

在基于 DeepSeek-V2.5 的 DeepSeok-R1 蒸馏的贡献上进行消融实验。基线是在短 CoT 数据上训练的,而其竞争对手使用由上述专家检查点生成的数据。表 9 展示了蒸馏数据的有效性,显示了 LiveCodeBench 和 MATH-500 基准测试的显著改进。 DeepSeek_v3_report-distill-from-R1 此实验揭示了一个有趣的权衡:蒸馏导致更好的性能,但也大大增加了平均响应长度。为了在模型精度和计算效率之间保持平衡,DS 团队在蒸馏中为 DeepSeek-V3 仔细选择了最佳设置。

从研究中表明,从推理模型中提取知识是 post-training 优化的一个很有前途的方向。虽然当前的工作侧重于从数学和编码领域提取数据,但这种方法显示了在各种任务领域中更广泛应用的潜力。在这些特定领域中证明的有效性表明,长 CoT 蒸馏对于提高其他需要复杂推理的认知任务中的模型性能是有价值的。跨不同领域进一步探索这种方法仍然是未来研究的一个重要方向。

Self-Rewarding

奖励在 RL 中发挥着关键作用,指导优化过程。在通过外部工具进行验证的领域中,例如一些编码或数学场景,RL 表现出非凡的功效。然而,在更一般的场景中,通过硬编码构建反馈机制是不切实际的。在 DeepSeek-V3 的开发过程中,对于这些更广泛的环境,采用宪法人工智能方法(constitutional AI approach),利用 DeepSeek-V3 本身的投票评估结果作为反馈来源。该方法产生了显著的对齐效果,显著提高了 DeepSeek-V3 在主观评估中的性能。

通过集成其他宪法输入,DeepSeek-V3 可以朝 constitutional direction 进行优化。DS 团队认为,这种将补充信息与 LLM 相结合作为反馈来源的范式至关重要。LLM 充当一个多功能处理器,能够将非结构化信息从各种场景转换为奖励,最终促进 LLM 的自我改进。除了自我奖励之外,DS 团队还致力于发现其他通用和可扩展的奖励方法,以在一般场景中一致地提高模型功能。

Multi-Token Prediction Evaluation

DeepSeek-V3 不是仅预测下一个单个令牌,而是通过 MTP 技术预测两个令牌。结合推测解码框架,可以显著加快模型的解码速度。关于额外预测的令牌的接受率的自然问题出现。根据评估,第二令牌预测的接受率在各种生成主题中介于 85%和 90%之间,表现出一致的可靠性。这种高接受率使 DeepSeek-V3 能够实现显著提高的解码速度,提供 1.8 倍的 TPS(每秒令牌数)。

Limitations, and Future Directions

在承认其强大的性能和成本效益的同时,也应当认识到 DeepSeek-V3 有一些限制,特别是在部署方面。首先,为了确保有效的推断,DeepSeek-V3 的推荐部署单元相对较大,这可能会给小型团队带来负担。其次,尽管 DeepSeek-V3 部署策略实现了两倍于 DeepSeek-V2 的端到端生成速度,但仍有进一步增强的潜力。幸运的是,随着更先进硬件的开发,这些限制有望自然地得到解决。DeepSeek 始终坚持开源模型的路线,并具有长期性,旨在稳步接近 AGI 的最终目标。

未来,计划在以下方向对研究进行战略性投资:

  • 我们将持续研究和改进我们的模型架构,旨在进一步提高训练和推理效率,努力实现对无限上下文长度的有效支持。此外,我们将尝试突破Transformer的架构限制,从而推动其建模能力的边界。
  • 我们将不断迭代我们的训练数据的数量和质量,并探索合并额外的训练信号源,旨在推动数据在更全面的维度范围内扩展。
  • 我们将不断探索和迭代我们模型的深度思考能力,旨在通过扩展其推理长度和深度来增强其智能和解决问题的能力。
  • 我们将探索更全面和多维的模型评估方法,以防止在研究期间优化固定基准集的趋势,这可能会对模型能力产生误导性印象,并影响我们的基础评估。