从0开始理解DeepSeek如何实现低成本的高效训练

Waterice

DeepSeek-R1使用极低的训练成本实现了高效的训练,其模型性能在某些任务上能够达到与ChatGPT-o1相近甚至更优的水平。本文从其训练方法进行对比分析,浅析DeepSeek的系列模型实现高效训练的原理。

从V1到R1

在DeepSeek系列的模型演进的过程中,引入了众多优化方法。以下依次列举V1到R1的各个模型,并简单列举其引入的创新方法。在后文中,会对其进行具体的分析说明。

DeepSeek V1

DeepSeek的初代模型,使用Transformer架构。

DeepSeek V2

继承V1模型,并引入混合专家架构(MoE)。

  • 总参数量:236B
  • 单Token参数量:21B
  • 引入的技术
    • MoE架构

DeepSeek V3

进一步优化了V2的架构和方法。其继承了V2的架构,并引入多令牌预测(MTP)和无辅助损失的负载均衡策略,进一步降低了训练成本。V3在推理效率和训练成本上相比V2有了进一步的优化。

  • 总参数量:671B
  • 单Token参数量:37B
  • 引入的技术
    • MTP
    • 无辅助损失的负载均衡策略

DeepSeek R1

基于V3的高性能推理模型。它与V3的架构没有区别。差异体现在训练方法:R1模型使用了强化学习方法进行训练。

  • 引入的技术
    • GRPO
    • 双重奖励系统
  • 模型细分
    • DeepSeek-R1-Zero:完全基于强化学习的端到端训练。
    • DeepSeek-R1:多阶段混合训练策略(监督微调冷启动 + 强化学习优化)。

混合专家(MoE)架构

参考文献:

MoE架构能让模型功能更能”专心“于各类数据的训练,同时也可用于减少单次传播的成本。实现方式是:对于模型中的一个前馈层(FFN),使用多个专家完成,训练或推理时对于每一次前向传播,只选取其中的一个或部分专家完成。这样,对于一个token,只需要使用到部分专家的参数,而不需要使用完整模型的参数。

GShard的MoE架构

GShard是首个把MoE结构引入Transformer结构的工作。具体做法是:将Transformer的encoder和decoder中每隔一个的FFN层,替换成MoE层。

img

左图是普通的Transformer模型,右图是引入MoE的Transformer模型。其差异在于:

  • 使用多个FFN(即专家)代替单个FFN
  • 用Gating(分发器),将前面层的输出分发给某个或某几个专家。这里使用Top-2 gating network,即选择最相近的前两个专家。

Gating Network

Gating Network用于将输出分发给部分专家。

MoE层的各专家输出的形式是相同的。对于一般的MoE而言,其输出是所有experts的加权和。设分别是 gating network 和第 i 个 expert 的输出,那么对于在当前position的输入x,输出:

我们希望是稀疏的,只有部分experts权重大于0。传统的gating network使用Softmax实现,在其基础上可以使用TopK sampling取前K个,并使用noise项使不同expert负载更均衡。

负载均衡策略

如果对各专家的负载不均衡,导致有的专家一直空闲,有的一直忙碌,一方面拖慢速度,另一方面使空闲的专家没有得到充分训练。因此,gating network需要将token均分给各个专家。

我们假设描述基础的专家与输入相似度,能够基本地描述该输入最适宜于哪个专家,那么有:

其中用于描述负载均衡度,从而依据负载调整专家对该输入的吸引程度。

Auxillary Loss

即辅助损失,这是用于衡量分发器分发的均匀效果的损失,与分发器分发的均衡程度负相关,惩罚负载不均衡的情况。传统的负载均衡策略使用辅助损失完成,将损失设计为负载均衡损失函数,形式如下:
$$
G’(x)i=L_\text{Bal}=N\cdot\sum\limits{i=1}^Nf_i\cdot P_i
$$
其中:

  • 是专家数量
  • 是分配给专家 的token数比例,即实际负载
  • 是分配给专家 的门控概率比例,即理论负载。

辅助损失会导致训练复杂性增加,影响性能。

无辅助损失的负载均衡策略

DeepSeek采用了无辅助损失的负载均衡策略。形式如下:

bias在训练过程中依据负载实时调整。

多Token预测(MTP)

参考文献:

MTP(Multi-token Prediction)

MTP的目的是加快推理,其核心是让模型在一次输入中,预测多个未来的token,而不是仅仅预测下一个token。例如:

  • 传统transformer:

    1
    2
    3
    4
    5
    6
    7
    8
    (输入):
    I'm fine,

    (输出):
    thank
    ^
    |
    单个输出
  • MTP:

    1
    2
    3
    4
    5
    6
    7
    8
    (输入):
    I'm fine,

    (输出):
    thank you , and
    ^ ^ ^ ^
    | | | |
    主输出头 其他的独立输出头

img

由于让模型一次预测多个token,准确率是是不如一次预测一个token的,并且如果不加验证直接使用预测得到的所有token作为新的输入,可能会进一步放大结果的误差。因此,我们必须引入一套验证机制,确保能够发现模型预测结果中的错误。与传统的单token方式相比,使用MTP有如下特点:

  • 一次高效预测多个token
  • 可能存在错误,需要验证机制

因此,使用推测解码方法。

推测解码

17adc9b5323ced5586dc997bda8db191.png

推测解码过程分为推测(Drafting)和验证(Verification)两个阶段:

  • 推测:根据一次输入,高效地预测多个token
  • 验证:及时发现预测结果地错误

推测解码的高效性,用一句话概括就是:将串行的推理变成并行的推理+验证。

推测

推测部分的主要目标是又好又快地预测多个token。问题的根源是一个满足要求的自回归的大模型(设为target model)推理速度太慢,因此我们需要想办法(可能会降低性能,但后续验证过程会确保结果不会太差)来让推理速度加快。一种思路是使用同类型的小模型来预测(Independent Drafting),另一种思路是修改模型架构,添加多个输出头,使用大模型进行预测(Self-Drafting)。

Independent Drafting

使用小模型来进行预测,就能减少推理过程的计算开销和时间。例如,OPT-70B的加速可以用OPT-125M进行推测,T5-XXL可以用T5-small。优势是可以直接利用现有模型资源,无需进行额外的训练。而且,由于同系列的模型使用相近的模型结构、分词方法、训练语料和训练流程,小模型本身就存在一定的和target LLM之间的“行为相似性“(behavior alignment),适合用来作为高效的“推测“模型。

使用小模型的预测还可以通过知识蒸馏(knowledge distillation)方法,增加小模型与大模型的相似度。

Self-Drafting

上述的方式存在以下缺点:

  • 并不是所有LLM都存在线程的小模型,需要额外投入
  • 引入额外小模型增加了计算复杂度(因为仍需要大模型做Verification)

因此,另一种方式是利用target model自己进行高效预测。通过在target model的输出层引入多个输出头,从而每个解码步能够并行生成等多个token,得到预测结果。这种方法就需要进行额外的训练。

验证

验证部分的主要目标是确保预测结果的正确,这部分只会用到target model。对于每一次解码得到的新token,系那个每一个token给到target model,判断其结果与Drafting过程中得到的结果是否一致。从第一个不一致的token开始,该token和后面的token都被认为是未通过验证的,下一次解码从这个token处开始。

这部分的关键在于,因为不涉及自回归,因此各token可以并行输入到target model中用于验证,所以验证过程能够高效实现。

显然,并不是所有概率最大的token都是最合适的解码结果(比如beam search)。当推测模型的性能较好时,严格要求和target LLM结果匹配会导致大量高质量的“推测”token被丢弃,仅仅是因为它们和target model top-1解码结果不一致。这导致通过验证的“推测”token数量较小,从而影响推测解码的加速比。

因此,有一些工作提出可以适当地放松“验证”要求,使得更多高质量的“推测”token被接受,增大每个解码步通过验证的“推测”token数量,进一步提升加速比。

组相对策略优化(GRPO)

参考文献:

组相对策略优化(GRPO)是DeepSeek提出的强化学习的优化方法。在此之前,我们先介绍预训练、监督微调与强化学习。

预训练、SFT和RLHF

预训练

SFT(监督微调)

监督微调使用问答对对LLM进行微调。举例如下:

PPO和GRPO

双重奖励系统

  • 标题: 从0开始理解DeepSeek如何实现低成本的高效训练
  • 作者: Waterice
  • 创建于 : 2025-02-06 12:59:31
  • 更新于 : 2025-02-06 17:15:11
  • 链接: https://blog.waterice.site/2025/02/06/从0开始理解DeepSeek如何实现低成本的高效训练/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论