Zhangzhe's Blog

The projection of my life.

0%

DeepSeek-V3 Technical Report

URL

TL;DR

  • 本文提出了一种新的混合专家语言模型 DeepSeek-V3,共计 671B 总参数,对于每个 token 仅仅激活 37B 个参数,可以说又强又快。
  • 主要的改进点包括:
    • Multi-head Latent Attention (MLA)MLADeepSeek 系列的核心模块(Deepseek v2 就有了),通过 MLPhidden state 映射到 latent space,降低计算和存储复杂度。可参考 Deepseek v2 MLA 详解
    • Deepseek MOE:一种比 Gshard 更优的 MoE 架构,可参考 Deepseek MoE 详解
    • Multi-token predicition (MTP):一种新的 token 预测方式,与传统的 predict next token 自回归预训练方式不同,MTP 通过一次预测多个 token(例如一次预测 next tokennext2next^2 tokennext3next^3 token),仅在训练阶段使用 MTP,推理阶段只使用 next token 的预测结果,即可大幅提高模型在 benchmark 上的综合表现。
    • auxiliary-loss-free strategy for load balancing:一种新的 MoE 间负载均衡策略,无需额外的辅助损失,简化了训练过程,提高了训练效率。
  • 性能与稳定性:
    • 性能:DeepSeek-V3 的表现超过了其他开源模型,其性能已经可以与一些领先的闭源模型相媲美。
    • 稳定性:尽管性能卓越,模型全程训练仅花费了 278.8H800 GPU 小时,而且在整个训练过程中表现出极高的稳定性,没有出现不可恢复的损失暴增或需要回滚的情况。

Algorithm

总体流程

  • Pre-Training
  • Context Extension
  • Post-Training
    deepseekv3_table_1.png

Multi-token predicition (MTP)

deepseekv3.png

  • 上图给出了一次预测 next tokennext2next^2 tokennext3next^3 tokenMTP 模型结构。
  • 具体来说,MTP 是在标准 Decoder only Transformer 的基础上,额外引入了 k-1token 预测头,每个 token 预测头都是一个 Norm + Concat + Projection + Transformer block 结构。
  • 假设图上从左到右的 token head 分别记作 head0head_0head1head_1head2head_2,则 head0head_0 预测的是 next tokenhead1head_1 预测的是 next2next^2 tokenhead2head_2 预测的是 next3next^3 token
  • MTP 过程必须要保持因果性:
    • head0head_0 输入 token0token_0,主干网络输出 h0h_0output layerh0h_0 映射为 next token 预测,记作 token1token_1'
    • head1head_1 输入 h0h_0token1token_1,提取特征记作 h1h_1output layerh1h_1 映射为 next2next^2 token 预测,记作 token2token_2'
    • head2head_2 输入 h1h_1token2token_2,提取特征记作 h2h_2output layerh2h_2 映射为 next3next^3 token 预测,记作 token3token_3'
  • embedding layeroutput layerMTP 中是共享的。
  • MTP 通常只用在训练阶段,即在推理阶段只使用 head0head_0 的输出。
  • 也可以将 inference MTPspeculative decoding 结合,提高模型生成效率。

Auxiliary-loss-free strategy for load balancing

训练阶段负载均衡策略

gi,t={si,t,si,t+biTopk({si,t+bj1jNr},Kr)0,otherwiseg'_{i,t}=\begin{cases}s_{i,t},&s_{i,t}+b_i\in Topk(\{s_{i,t}+b_j|1\le j\le N_r\},K_r)\\0,& otherwise\end{cases}

  • 其中:
    • si,t=Sigmoid(utTei)s_{i,t}=Sigmoid(u_t^Te_i)
    • bib_ibias 参数
    • NrN_rExpert 的数量
    • KrK_r 是每个 token 保留的 Expert 数量
    • bjb_j 是根据每一个 Expert 被激活的次数动态调整的
      • 如果一个 Expert 被激活的次数过多(大于专家激活平均值),则 bj=bjγb_j=b_j-\gamma
      • 如果一个 Expert 被激活的次数过少(小于专家激活平均值),则 bj=bj+γb_j=b_j+\gamma
      • 其中 γ\gamma 是一个超参数,表示 bias update speed
  • 关于 bias 的详细更新策略,可参考下图
    auxiliary_loss_free.png
    • u 和本文中的 γ\gamma 等价

推理阶段

  • 推理阶段无需额外的负载均衡策略,直接使用 si,ts_{i,t} 即可。

Complementary Sequence-Wise Auxiliary Loss

  • 上面提到的 Auxiliary-loss-free strategy for load balancing 损失只能保证 Expert 的负载均衡,但可能出现一个 Sequence 中每一个 token 都激活了相同的 Expert,这种情况下,Expert 之间的负载仍然不均衡。因此 Complementary Sequence-Wise Auxiliary Loss 通过引入 Auxiliary Loss 来保证 Sequence 内部 token 之间的负载均衡。
  • 具体来说,需要关注:
    • 离散选择频率:每一个 ExpertSequence 中的激活次数
    • 连续激活强度:每一个 ExpertSequence 中平均专家分数
  • 公式表述:

LBal=αi=1NrfiPiL_{Bal}=\alpha\sum_{i=1}^{N_r}f_iP_i

fi=NrKrTt=1TI(si,tTopk({sj,t1jNr},Kr))f_i=\frac{N_r}{K_rT}\sum_{t=1}^{T}\mathbb I(s_{i,t}\in Topk(\{s_{j,t}|1\le j\le N_r\},K_r))

si,t=si,tj=1Nrsj,ts_{i,t}'=\frac{s_{i,t}}{\sum_{j=1}^{N_r}s_{j,t}}

Pi=1Tt=1Tsi,tP_i=\frac{1}{T}\sum_{t=1}^{T}s_{i,t}'

  • 其中:
    • LBalL_{Bal}Complementary Sequence-Wise Auxiliary Loss
    • α\alpha 是一个超参数,是一个很小的权重
    • fif_iExpert ii 的离散选择频率
    • PiP_iExpert ii 的连续激活强度
    • TTSequence 的长度
    • NrN_rExpert 的数量
    • KrK_r 是每个 token 激活的 Expert 数量
    • I()\mathbb I(\cdot) 是指示函数
    • si,ts_{i,t}Sigmoid(utTei)Sigmoid(u_t^Te_i),表示专家的分数
  • 道理也很简单,就是希望在一个 Sequence 中,每一个 Expert 被激活的次数和激活的强度都是均衡的。

训练框架设计

  • 模型训练基于自主研发的 HAI-LLM 框架,这是一个经过优化的高效轻量级训练系统,目前没有开源。
  • DeepSeek-V3 的并行策略包含三个层面:
    • 16 路流水线并行(Pipeline Parallelism, PP)
    • 8 个节点的 64 路专家并行(Expert Parallelism, EP)
    • ZeRO-1 数据并行(Data Parallelism, DP)
  • 开发了 DualPipe 流水线并行算法,相比于现有的 PP 算法,减少了空泡,基本上实现了计算和通信的高度重叠。
    dualpipe.png
  • 优化了跨节点全对全通信内核,充分利用节点内 GPU 间的 NVLink 带宽和节点间 InfiniBand 带宽,同时减少了通信所需的流式多处理器(SMs)资源占用
  • 通过精细的内存管理优化,使得模型训练无需依赖开销较大的张量并行(Tensor Parallelism, TP)技术

FP8

  • DeepSeek-V3 开发了 FP8 (E4M3) 混合精度训练框架,首次在超大规模模型上验证了 FP8 训练的可行性和效果。
  • 通过算法、框架和硬件的综合优化,突破了跨节点 MoE 训练中的通信瓶颈,实现了计算与通信的高度重叠。这种优化大幅提升了训练效率,降低了训练成本,同时支持了更大规模模型的训练而无需额外开销。
    fp8.png

Thoughts

  • 实际上 DeepSeek V3 技术报告中还有很多细节,尤其是很多关于工程优化的部分,此处不再一一列举
  • 工程能力,尤其是开发一套分布式训练框架且根据模型特性对其深度优化的能力,是一个大模型成功的不可或缺因素
  • 如果想要在大模型领域有所建树,不仅需要有强大的算法研究能力,还需要有强大的工程能力,比如 CUDA 编程能力等

References