解读 DeepSeek-V3 如何用 14.8T 高质量 token、FP8 低精度训练、DualPipe 双向流水线与 MoE 负载均衡,在压低训练与推理成本的同时把开源模型的效果推到新高度。
参考资源
https://zhuanlan.zhihu.com/p/14988009150
https://www.cnblogs.com/fariver/p/18697000
简介
DeepSeek团队2024年12月末发布了V3版本,个人认为开源模型的标杆基本就看Llama、Qwen、DeepSeek这几家了,小模型可以加上Gemma和Phi。
主要思路:
- 降低训练成本:通过FP8低精度训练、DualPipe双向流水线等
- 降低推理成本:优化MoE负载均衡等
- 优化训练数据:使用 14.8T 高质量、多样化的 token,增加了数学和编程样本的比例,扩大了多语言覆盖范围
- 进一步提升效果:多 Token 预测(MTP)、从 DeepSeek-R1 中蒸馏推理能力等
效果:
- 在 MMLU、MMLU-Pro、GPQA 等知识性基准测试中,性能与 GPT-4o、Claude-3.5-Sonnet 等领先闭源模型相当。
- 在 代码和数学 基准测试中,取得了最先进的性能,甚至超越了 GPT-4o。
- 在 AlpacaEval 2.0 和 Arena-Hard 的开放式评估中表现出色。
训练成本 :
- 总成本 :278.8 万 H800 GPU 小时,约 557.6 万美元。
- 预训练效率 :每训练 1 万亿个 token 仅需 18 万 H800 GPU 小时,训练过程稳定,无需回滚。
开源
- 技术报告:DeepSeek-V3 Technical Report
- 权重(大小足有671B,FP8精度):deepseek-ai/DeepSeek-V3 · Hugging Face
主要内容
1. 作者和团队信息
作者/团队: DeepSeek-AI 团队一直走在开源模型发展的前列,此前发布的 DeepSeek 系列模型一直在Math即Coding能力上为人称道。
2. 背景和动机
发表时间: 2024年12月末。
研究问题: 如何在保证模型性能的同时,降低训练成本,并进一步提高开源语言模型的能力?
问题背景: 近年来,大型语言模型(LLMs)发展迅速,但训练和部署成本仍然很高。同时,开源模型在性能上与闭源模型还存在一定的差距。为了解决这些问题,DeepSeek-AI 团队提出了 DeepSeek-V3,旨在实现高性能、低成本的开源 LLM。
补充说明:
3. 相关研究
已有的开源模型: DeepSeek 团队提到了 DeepSeek 系列、LLaMA 系列、Qwen 系列和 Mistral 系列等开源模型,这些模型都在努力追赶闭源模型。
已有的 MoE 模型: GShard 是一个传统的 MoE 模型,而 DeepSeekMoE 使用了更细粒度的专家,并隔离了一些专家作为共享专家。
已有的低精度训练方法: 论文提到了 FP8 混合精度训练,这是一种利用低精度数据格式进行训练的方法,可以加速训练并减少内存使用。
现有方法的不足:
4. 核心思路
整体思路: 在 DeepSeek-V2 的基础上,通过引入新的架构和训练策略,进一步提升模型的性能,同时降低训练成本。
核心创新点:
灵感来源:
5. 方案与技术
基础架构:

负载均衡:
多 Token 预测 (MTP):

训练框架:
FP8 训练
长文本扩展
推理和部署:
6. 实验与结论

预训练:
后训练:
评估:
训练成本:
核心结论: DeepSeek-V3 是一款高性能、低成本的开源模型,其性能与领先的闭源模型相当,并在多个基准测试中取得了最先进的结果,尤其是在代码和数学方面。
7. 贡献
架构创新:
预训练:
后训练:
核心评估结果:
对后续研究的启发和影响:
8. 不足
部署方面的挑战:
部分任务仍有差距: 虽然 DeepSeek-V3 在多个方面表现出色,但在一些任务上,比如英语事实知识方面,仍然落后于 GPT-4o 和 Claude-3.5-Sonnet。
可能的未来方向:
QA
Q1:什么是 MoE 模型?为什么 DeepSeek-V3 要使用 MoE 架构?
MoE (Mixture-of-Experts) 模型,即混合专家模型,是一种将多个小型专家模型组合起来,共同完成任务的架构。每个专家模型只处理部分输入,从而提高模型的效率和扩展性。
DeepSeek-V3 使用 MoE 架构的原因主要有以下几点:
- 提高模型容量: MoE 可以显著增加模型的参数数量,而无需像稠密模型那样增加计算量。这使得模型可以学习更复杂的模式和关系,提高模型的性能。
- 降低训练成本: 虽然 MoE 模型的总参数量很大,但每次激活的参数量却很小,从而减少了训练所需的计算资源。
- 提高推理效率: 在推理时,只有部分专家被激活,从而降低了推理的计算成本。
Q2:什么是 Multi-Head Latent Attention (MLA)?它如何减少键值缓存的大小?
Multi-Head Latent Attention (MLA),即多头潜在注意力机制,旨在减少推理阶段的内存占用。MLA 和传统的 MHA 的主要区别在于:
- KV 缓存: 在传统的 MHA 中,每个 token 的 Key 和 Value 向量都需要缓存起来,这在长文本生成中会占用大量的显存。而 MLA 通过低秩压缩技术,将 Key 和 Value 向量压缩成低维度的潜在向量,只需缓存压缩后的表示,从而显著减少 KV 缓存的内存占用。
- 通俗类比:想象你在听一场演讲,传统的注意力机制需要记住每个时间点的所有细节(就像记录每一秒的录音)。而 MLA 则只提取关键信息(就像只记录每个重点句子),这样需要记忆的信息就大大减少了。
公式上,键和值的计算方式为:
$$
c_t^{KV} = W_{DKV}h_t
$$
$$
k_t = \text{RoPE}(W_k^{UV}c_t^{KV})
$$
$$
v_t = W_v^{UV}c_t^{KV}
$$
其中,$h_t$ 是输入表示,$W_{DKV}$、$W_k^{UV}$、$W_v^{UV}$是投影矩阵,RoPE 是旋转位置编码。
Q3:为什么需要负载均衡? DeepSeek-V3 的无辅助损失负载均衡策略是什么?
在 MoE 模型中,如果专家负载不均衡,会导致以下问题:
- 路由崩溃: 某些专家可能会被过度使用,而其他专家则被闲置。
- 计算效率降低: 过度使用的专家会成为性能瓶颈,而闲置的专家则浪费了计算资源。
传统 MoE 模型为了实现专家间的负载均衡,通常引入辅助损失。但辅助损失会对模型的主要优化目标产生干扰,可能导致性能下降。为了解决这个问题,DeepSeek-V3 提出了无辅助损失的负载均衡策略。该策略的核心思想是:
- 引入偏置项: 为每个专家引入一个偏置项,并将这个偏置项添加到亲和度得分中,从而影响路由决策。
- 动态调整偏置项: 在训练过程中,如果一个专家被过度使用,则减小其偏置项;如果一个专家被闲置,则增大其偏置项。这样,可以动态调整专家负载,使其达到均衡。
- 不使用辅助损失: 偏置项只用于路由,而不影响最终的门控值计算,从而避免了传统辅助损失对模型性能的损害。
类比: 想象一下你在一个餐厅里,有多个厨师。如果顾客都点同样的菜,那么只有一个厨师会很忙,而其他厨师则没事做。为了解决这个问题,你可以告诉顾客:「今天点这道菜可以打折」,或者「点其他菜可以更快上菜」。这样,就可以引导顾客点不同的菜,让所有厨师都忙起来。DeepSeek-V3 的无辅助损失负载均衡策略就类似于这个引导顾客点不同菜的策略。
Q4:什么是 Multi-Token Prediction (MTP)?它为什么能提高模型性能?
在传统的语言模型训练中,模型通常只预测下一个标记。MTP 则是在每个位置上,让模型预测多个未来的标记。
实现方法:
- 引入了多个预测模块,每个模块负责预测不同深度(未来第几个)的标记。
- 在训练过程中,对每个深度的预测计算损失,然后将这些损失平均,作为整体的 MTP 损失。
好处:
- 增加训练信号: 通过预测多个 token,模型可以获得更密集的训练信号,提高数据效率。
- 增强预规划能力: MTP 可以帮助模型更好地预先规划未来 token 的表示,使其更好地捕捉长距离依赖关系,从而提高模型的性能。
Q5:什么是 FP8 混合精度训练?为什么 DeepSeek-V3 要使用 FP8 训练?
在深度学习训练中,使用低精度浮点数(如 FP16、FP8)可以降低计算和存储需求,提高训练速度。但低精度可能导致数值不稳定和模型性能下降。
解决方案:
精细量化策略:
提高积累精度:
混合精度训练框架:
DeepSeek-V3 使用 FP8 训练的主要原因是:加速训练: FP8 格式可以加速 GEMM (General Matrix Multiplication) 等核心计算操作,从而提高训练速度。
减少内存使用: FP8 格式可以显著减少内存占用,使得在有限的显存中训练更大的模型成为可能。
突破硬件限制: 目前 NVIDIA H100 及以上的 GPU 已经对 FP8 有了较好的支持,而 DeepSeek-V3 使用了 FP8 混合精度训练,使其可以更好地利用硬件性能。
Q6:DeepSeek-V3 的 DualPipe 算法是如何工作的?它如何解决通信瓶颈?
DualPipe 算法是 DeepSeek-V3 中用于解决通信瓶颈的一种高效流水线并行算法。它的核心思想是通过重叠前向和后向计算与通信,从而减少流水线气泡,提高训练效率。
具体来说,DualPipe 算法:
- 双向流水线: 同时从流水线的两端输入 micro-batch,实现双向并行计算。
- 计算-通信重叠: 将每个 chunk 分成多个部分,并调整 GPU SM 用于通信和计算的比例,使得计算和通信可以相互重叠。
- 减少流水线气泡: 通过双向流水线和计算-通信重叠,减少了流水线中的等待时间,从而提高了训练效率。
类比: 你可以将 DualPipe 算法想象成一个生产线。传统的流水线是按顺序一个一个地处理产品,而 DualPipe 算法是同时从两个方向处理产品,并让不同环节同时进行,从而提高了生产效率。
Q7:DeepSeek-V3 是如何进行知识蒸馏的?它和传统的知识蒸馏有什么不同?
DeepSeek-V3 使用了一种特殊的知识蒸馏方法,从 DeepSeek-R1 模型中提炼推理能力。与传统的知识蒸馏不同,DeepSeek-V3 的知识蒸馏:
- 重点在于推理模式: 不是简单地模仿 R1 的输出,而是将 R1 的反思和验证模式融入到 DeepSeek-V3 中。
- 生成多样化的 SFT 数据: 通过让 R1 生成带有反思和验证的响应,为 DeepSeek-V3 提供更高质量的 SFT 数据。
- 在强化学习中运用: 在 RL 阶段,通过高温度采样生成融合了 R1 和原始数据的响应,使模型学习 R1 的推理模式。
Q8:论文中提到的 **tile-wise** 和 **block-wise** 量化是什么意思?
tile-wise 和 block-wise 量化是用于提高 FP8 量化精度的两种细粒度量化方法:
- tile-wise 量化: 对于激活值(activations),将 1xNe 的元素分组成一个 tile,然后在 tile 内进行缩放(scaling)。这里的 Ne 通常是 128,所以就是一个 1x128 的 tile。这意味着,对于每一个 token,每 128 个通道(channel)会被分成一组。
- block-wise 量化: 对于权重(weights),将 Ne x Ne 的元素分组成一个 block,然后在 block 内进行缩放。这里的 Ne 也通常是 128,所以就是一个 128x128 的 block。这意味着,每 128 个输入通道和 128 个输出通道会被分组成一个 block。
这种细粒度的量化方法可以更好地适应激活值和权重中的异常值,提高量化的精度,从而使模型能够更有效地利用低精度的 FP8 格式进行训练。
类比: 你可以将 tile-wise 和 block-wise 量化想象成在打包货物时,不是把所有货物都放在一个大箱子里,而是将它们根据形状、大小等进行分类,然后分别打包。这样可以更好地利用空间,减少货物之间的挤压和碰撞。
Q9:DeepSeek-V3 与其他大型语言模型相比,有什么优势?
- 高效的训练和推理:采用了 MLA 和 DeepSeekMoE 架构,减少了内存占用和计算需求,实现了高效的训练和推理。
- 优异的性能:在多个基准测试上,DeepSeek-V3 超越了其他开源模型,在数学、代码生成、知识问答等任务上表现出色,接近甚至超过了一些闭源模型。
- 低训练成本:由于采用了 FP8 训练和优化的训练框架,DeepSeek-V3 的训练成本显著降低,总共只花费了 278.8 万 H800 GPU 小时。
- 开源:DeepSeek-V3 是目前性能最强的开源模型之一,为研究者和开发者提供了宝贵的资源,促进了人工智能社区的共同进步。
Q10:在推理阶段,如何保证专家负载均衡和高效推理?
挑战:在推理阶段,专家负载可能不均衡,导致一些专家过载,影响推理效率和吞吐量。
解决方案:
- 冗余专家部署:
- 动态调整:
- 优化的通信策略:
Q11:DeepSeek-V3 的训练过程为什么稳定,没有出现不可恢复的损失尖峰?
- 架构优化:采用了改进的 DeepSeekMoE 架构和无辅助损失的负载均衡策略,避免了路由崩溃等问题,保证了训练的稳定性。
- 精细的训练策略:
- 混合精度训练:通过 FP8 混合精度训练,既提高了训练效率,又避免了数值不稳定。
- 优化的训练框架:DualPipe 等算法减少了流水线中的气泡,保持了训练过程的连续性。
Q12:自推测解码是如何加速模型推理的?它与多token预测有什么关系?
自推测解码是一种加速模型推理的方法,它利用了多token预测的额外输出头:
- 工作原理:首先,模型使用多个输出头并行预测多个token;然后,模型使用主输出头(next-token prediction head)验证预测结果,并选择最有可能的预测结果。如果预测正确,则可以跳过多个token的生成,从而加速推理过程。
- 与多token预测的关系:自推测解码是建立在多token预测基础上的。只有通过多token预测训练的模型,才具备多个输出头,才能进行自推测解码。
Q13:论文中是如何解决多token预测带来的内存消耗问题的?
- 前向和反向传播顺序调整:在计算梯度时,模型会依次计算每个输出头的梯度,而不是一次性计算所有头的梯度。这样做的好处是,每次只需要存储一个输出头的梯度信息,从而避免了同时存储所有输出头的梯度信息,降低了GPU内存占用。
Q14:进一步研究多token预测,有哪些可以入手的方向?
- 自适应的token预测数量:研究如何根据输入数据和任务动态调整预测的token数量。
- 多头之间的关系:探索不同的多头架构,例如考虑输出头之间的相互依赖关系,设计更精巧的结构。
- 不同领域的应用:在更多领域(如图像生成、语音识别)探索多token预测的应用潜力。
- 理论分析:深入研究多token预测背后的理论机制,为实践提供更坚实的理论基础。
- 可解释性:研究如何提高多token预测模型的可解释性,更好地理解模型的决策过程。
- 结合人类认知:深入研究人类语言学习的机制,尝试将人类认知融入多token预测的框架。

