- DeepSeek-V3 Technical Report解读
- TL;DR
- 优势
- 训练数据
- 参数量
- Method
- 架构
- MLA(Multi-Head Latent Attention)
- DeepSeekMoE
- MoE
- DeepSeekMoE
- MTP(Multi-Token Prediction)
- 基建
- FP8训练
- 部署
- Prefilling
- Decoding
- Pre-Training
- Data
- Long Context Extension
- Post-Training
- SFT
- Reinforcement Learning
- 架构
- 总结与思考
- 相关链接
DeepSeek-V3 Technical Report解读
DeepSeek近期大火,我从AI从业人员(非大语言模型研发)角度,记录一些自己的思考,供大家参考。
link
时间:24.12
单位:DeepSeek-AI
主页:https://github.com/deepseek-ai/DeepSeek-V3
TL;DR
优势
- 训练成本低:仅577万美金
- 效果:超过所有开源大模型,与闭源大模型效果相当
训练数据
pre-training(tokens) | post-training(tokens) |
---|---|
1.8T | 1.5M |
参数量
实际推理时仅37B
- 使用MoE架构可仅推理部分专家参数,但完整参数量比较大
- 参数量代表模型大小,将决定推理速度及部署成本
Method
架构
MLA(Multi-Head Latent Attention)
MHA(Multi-Head Attention)的改进版本,名字中增加了"latent",简单来讲就是把kv特征从高维通过一个FC压缩到低维,可显著减少KV Cache。此外,还增加了KV与Q各自的RoPE位置编码。
deepseekv3使用的multihead latent attention与transformer中的multi-head attention有什么区别?
DeepSeek-V3 使用的 Multi-head Latent Attention (MLA) 与 Transformer 中的 Multi-head Attention (MHA) 在结构和计算方式上有一些关键区别,主要体现在以下几个方面:-
Key-Value (KV) 压缩
- Multi-head Latent Attention (MLA):MLA 引入了低秩联合压缩机制,用于减少推理时的 KV 缓存。具体来说,MLA 对注意力机制中的键(Key)和值(Value)进行低秩压缩,生成一个压缩的潜在向量 ( \mathbf{c}_{t}^{KV} ),然后通过上投影矩阵将其还原为原始的键和值。这种方式显著减少了 KV 缓存的大小,同时保持了与标准 MHA 相当的性能。
- Multi-head Attention (MHA):标准的 MHA 没有对键和值进行压缩,每个头的键和值都是独立的,因此 KV 缓存较大,尤其是在处理长序列时,内存开销较大。
-
查询(Query)压缩
- Multi-head Latent Attention (MLA):MLA 对查询(Query)也进行了低秩压缩,生成一个压缩的潜在向量 ( \mathbf{c}_{t}^{Q} ),然后通过上投影矩阵还原为原始的查询。这种压缩进一步减少了训练时的激活内存。
- Multi-head Attention (MHA):标准的 MHA 没有对查询进行压缩,查询的维度与键和值相同,因此在训练时需要存储较大的激活内存。
-
解耦的键和查询
- Multi-head Latent Attention (MLA):MLA 引入了 Rotary Positional Embedding (RoPE) 的解耦键和查询,分别通过不同的矩阵生成。这种设计使得模型能够更好地捕捉位置信息,同时减少了计算复杂度。
- Multi-head Attention (MHA):标准的 MHA 通常使用相同的位置编码机制,没有显式地将键和查询解耦。
-
计算复杂度
- Multi-head Latent Attention (MLA):由于引入了低秩压缩和解耦机制,MLA 在计算复杂度上有所降低,尤其是在处理长序列时,能够显著减少内存和计算开销。
- Multi-head Attention (MHA):标准的 MHA 计算复杂度较高,尤其是在处理长序列时,内存和计算开销较大。
-
缓存机制
- Multi-head Latent Attention (MLA):MLA 只需要缓存压缩后的潜在向量 ( \mathbf{c}{t}^{KV} ) 和解耦的键 ( \mathbf{k}^{R} ),这大大减少了推理时的缓存需求。
- Multi-head Attention (MHA):标准的 MHA 需要缓存完整的键和值,缓存需求较大。
总结
DeepSeek-V3 的 Multi-head Latent Attention (MLA) 通过引入低秩压缩和解耦机制,显著减少了推理时的 KV 缓存和训练时的激活内存,同时保持了与标准 MHA 相当的性能。这种设计使得 MLA 在处理长序列时更加高效,尤其是在资源受限的环境中具有明显的优势。
DeepSeekMoE
MoE
- 由多个专家网络(experts)和一个路由器(router/gating network)组成
- 路由器负责决定输入应该由哪些专家处理
- 每个专家实际上是一个FFN(Feed-Forward Network)层的变体
DeepSeekMoE
- 通过将一个专家FFN输出切分为多个fine-grained expert,增加了专家数量
- 优化了负载均衡机制(每个专家设置token上限),避免专家使用不均衡
大语言模型中的MoE是什么技术,有什么好处?而deepseekv3中使用的DeepSeekMoE又与常规MoE有什么区别?训练时如何进行训练数据与专家之间的分配?
让我详细分析一下MoE技术及其在训练中的关键问题:MoE(Mixture of Experts)的基本架构:
由多个专家网络(experts)和一个路由器(router/gating network)组成
路由器负责决定输入应该由哪些专家处理
每个专家实际上是一个FFN(Feed-Forward Network)层的变体
最终输出通常是选中专家输出的加权组合
- MoE的主要优势:
可以显著增加模型参数量而不会导致计算量同比增加
每次前向推理只激活部分专家,降低了计算和内存开销
不同专家可以学习不同的特征和模式,增强了模型的表达能力
具有更好的可扩展性,便于分布式训练和部署 - DeepSeekMoE的创新:
采用了改进的专家选择策略,使专家分工更加明确
优化了负载均衡机制,避免专家使用不均衡
改进了训练稳定性,减少了训练中的振荡问题
在推理时可以根据资源约束动态调整激活的专家数量 - 训练数据与专家分配的关键策略:
路由决策训练:
路由器通过可微分的gate value来学习为每个输入选择合适的专家
使用软路由(soft routing)在训练初期,逐渐过渡到硬路由(hard routing)
负载均衡:
使用auxiliary loss来平衡不同专家的使用频率
通过capacity factor控制单个专家能处理的最大token数量
专家特化:
在训练早期允许专家之间有一定重叠,避免过早特化
随着训练进行,逐渐增加专家间的分化程度
使用contrastive loss等技术来增强专家间的差异性
训练过程中的关键挑战:
如何避免专家坍缩(expert collapse)现象
如何在专家分工与通用能力之间取得平衡
如何处理专家数量与模型性能之间的权衡
如何确保负载均衡而不影响模型性能
这些技术细节反映了MoE在实践中的复杂性。您对哪些具体方面感兴趣?我可以进一步展开说明。
MTP(Multi-Token Prediction)
一种语言模型训练和推理的技术,让模型能够一次预测多个token而不是传统的一次只预测一个token。为了保留思维链(CoT, chain of thought),实际设计时使用main model + K-1个MTP模块来一次性预测K个token,而非使用一个main model预测K个token。
什么是multi token prediction?
Multi-Token Prediction (MTP)是一种语言模型训练和推理的技术,让模型能够一次预测多个token而不是传统的一次只预测一个token。我来详细解释一下:- 传统自回归预测:
- 一次只预测一个token
- 每预测完一个token就要将其加入上下文
- 预测第n+1个token时需要依赖前n个token的预测结果
- 这种方式推理速度较慢,因为需要n次前向计算
- Multi-Token Prediction的工作方式:
- 模型一次预测多个(如2个、4个或更多)连续的token
- 在训练时,模型学习同时预测一个序列中的多个位置
- 在推理时,可以一次性输出多个token,减少前向计算次数
- 通常会使用特殊的损失函数来优化多token预测的准确性
- MTP的主要优势:
- 显著提升推理速度,因为减少了前向计算的次数
- 在训练时可以捕捉到更长范围的依赖关系
- 潜在地提升了模型对上下文的理解能力
- MTP的挑战:
- 预测难度随着同时预测的token数量增加而增加
- 需要在预测长度和准确性之间做权衡
- 可能需要更复杂的训练策略和更多的计算资源
- 应用场景:
- 高性能推理服务
- 实时文本生成
- 对延迟敏感的应用
基建
FP8训练
- 实际训练推理时使用混合精度来解决量化误差与训练稳定性问题,如下图
- FP8有两种格式:E4M3(指数4位,尾数3位)和E5M2,根据不同的计算类型选择格式
deepseekv3是如何使用FP8训练的?有有哪些难点问题,如何解决的?
FP8训练是一项降低模型训练精度以提升训练效率的技术。让我详细分析DeepSeek-V3中FP8训练的关键点:- 基础FP8配置:
- 使用混合精度训练策略,将部分计算降低到FP8精度
- FP8有两种格式:E4M3(指数4位,尾数3位)和E5M2(指数5位,尾数2位)
- DeepSeek会根据不同的计算类型选择合适的FP8格式
- 主要技术难点:
-
动态范围问题:
- FP8的动态范围远小于FP16/FP32
- 容易出现数值溢出或下溢
- 梯度爆炸风险增加
-
量化误差:
- FP8量化会带来更大的舍入误差
- 误差累积可能导致训练不稳定
- 精度损失可能影响模型收敛
-
训练稳定性:
- 较低的精度可能导致训练不收敛
- 某些操作在FP8下可能变得不稳定
- Loss波动可能增大
- DeepSeek的解决方案:
-
精度混合策略:
- 关键计算保持在更高精度(如FP16/FP32)
- 只将适合的计算降低到FP8
- 动态调整不同操作的精度
-
数值稳定性优化:
- 使用动态缩放来控制数值范围
- 实现自适应的量化策略
- 优化梯度裁剪和规范化方法
-
训练策略改进:
- 优化学习率调度
- 改进优化器配置
- 调整batch size和累积步数
- 实现细节:
-
量化管理:
- 实现动态的量化和反量化
- 追踪和管理量化状态
- 处理特殊数值情况
-
性能优化:
- 硬件加速支持
- 内存访问优化
- 计算图优化
- 收益与取舍:
-
优势:
- 显著降低显存占用
- 提升训练速度
- 减少能耗
-
代价:
- 需要更复杂的训练管理
- 可能需要更多的调优工作
- 某些场景可能有轻微的精度损失
FP8训练是一个非常技术性的话题,您想深入了解哪些具体方面?比如量化策略的具体实现,或者稳定性优化的具体方法?
部署
Prefilling
用于模型加载时准备工作,以及prompt信息输入处理。
DeepSeek使用4路TP + PP + 8路DP + 32k路EP。
请解释大模型部署时,TP(Tensor Parallelism), SP(Sequence Parallelism), DP(Data Parallelism), PP(Pipeline Parallelism), EP(Expert Parallelism)之间的区别
我来详细解释一下这几种并行策略的区别和特点:- Tensor Parallelism (张量并行)
- 核心思想:将模型的参数(权重矩阵)切分到不同的设备上
- 主要应用:将大矩阵乘法运算分解成多个小矩阵乘法
- 优点:可以处理单个GPU显存无法容纳的超大模型
- 缺点:设备间通信开销较大
- 典型场景:比如在Transformer中,将attention的QKV矩阵切分到不同GPU上计算
- Data Parallelism (数据并行)
- 核心思想:不同设备使用相同的模型副本,但处理不同的数据batch
- 工作方式:每个设备独立计算梯度,然后进行梯度同步和更新
- 优点:实现简单,扩展性好
- 缺点:每个设备都需要存储完整的模型副本
- 适用场景:当单个GPU显存足够存储模型,但需要加速训练时
- Pipeline Parallelism (流水线并行)
- 核心思想:将模型的不同层分配到不同设备上
- 工作方式:数据按照流水线方式在设备间流动
- 优点:可以处理大模型,通信开销相对较小
- 缺点:设备利用率不均衡,需要复杂的调度策略
- 典型应用:将Transformer的不同层分配到不同GPU上
- Sequence Parallelism (序列并行)
- 核心思想:将输入序列按长度维度切分到不同设备
- 特点:主要用于降低attention计算中的内存占用
- 优点:可以处理更长的序列长度
- 缺点:需要额外的同步开销
- 应用:在处理超长文本或者需要扩展context window时特别有用
- Expert Parallelism (专家并行)
- 核心思想:在MoE(Mixture of Experts)架构中,将不同的expert分配到不同设备
- 工作方式:数据会被路由到不同的expert上进行处理
- 优点:可以显著增加模型容量而不增加推理计算量
- 缺点:expert之间的负载均衡是个挑战
- 典型应用:如Switch Transformer等MoE模型
这些并行策略通常会组合使用:
- TP+PP组合:
- 将模型参数切分(TP)与层间并行(PP)结合
- 可以同时解决单层太大和总层数太多的问题
- 典型实现如Megatron-LM
- TP+DP组合:
- 结合参数切分和数据并行
- 适用于需要同时解决模型大小和训练速度的场景
- PP+DP组合:
- 将流水线并行和数据并行结合
- 可以在保持较低通信开销的同时提升训练速度
- SP+TP组合:
- 用于处理超长序列的大模型
- 可以同时解决序列长度和模型大小的问题
选择并行策略时需要考虑的因素:
- 模型架构和规模
- 可用硬件资源
- 训练/推理的性能要求
- 机器间的网络带宽
- 实现的复杂度
- 显存使用效率
在实际部署中,往往需要根据具体场景采用多种并行策略的组合。比如在超大规模模型训练中,可能会同时使用TP+PP+DP三种并行方式,以达到最优的资源利用效率。
Decoding
推理过程token的预测部署机制
Pre-Training
the training corpus for DeepSeek-V3 consists of 14.8T high-quality and diverse tokens in our tokenizer.
Data
能否仔细解释一下,什么是Fill-in-Middle Strategy?
Fill-in-the-Middle (FIM) 策略 Fill-in-the-Middle (FIM) 是一种训练技术,用于增强语言模型在给定上下文(前缀和后缀)的情况下生成中间内容的能力。这种技术特别适用于需要理解前后文语境的任务,如代码生成、文本补全等。 1. 原理和实现 数据增强:FIM 通过数据增强来训练模型。具体来说,将文档随机分成三部分:前缀(prefix)、中间(middle)和后缀(suffix),然后将中间部分移到文档的末尾,并使用特殊的哨兵token(如Long Context Extension
输入Context Length: 4K(Pre-Training) -> 32K(Extension Step1) -> 128K(Extension Step2)
核心方法是使用 YaRN
YaRN 是什么方法,为什么能扩展上下文长度?
YaRN 方法及其在上下文扩展中的作用 YaRN(Yet another RoPE extensioN method) 是一种高效的上下文窗口扩展方法,它通过改进 Rotary Position Embeddings (RoPE) 的位置编码方式,显著减少了扩展上下文长度所需的训练数据和步骤。- RoPE 的改进
RoPE 是一种用于在 Transformer 模型中有效编码位置信息的方法。然而,传统的 RoPE 在训练时的上下文长度限制使得模型难以在更长的上下文中保持良好的性能。YaRN 通过以下几种技术改进了 RoPE,从而实现了上下文窗口的扩展:
NTK 感知插值(NTK-aware Interpolation):通过调整不同维度的扩展比例来保留高频信息,避免了传统插值方法中高频信息的丢失。
动态缩放(Dynamic Scaling):在推理过程中动态调整缩放比例,以适应更长的上下文长度。
分段插值(NTK-by-parts Interpolation):选择性地对 RoPE 的不同维度进行插值,以保留局部关系。
注意力温度调整(Attention Scaling):通过调整注意力机制中的温度参数,保持低困惑度。 - 训练效率的提升
YaRN 方法在扩展上下文长度时,显著减少了所需的训练数据和步骤:
数据量减少:YaRN 只需要传统方法 1/10 的训练数据。
训练步骤减少:YaRN 只需要传统方法 2.5 倍的训练步骤。 - 实验验证
在实验中,YaRN 展示了其卓越的性能和效率:
困惑度评估:在长文档的困惑度评估中,YaRN 显著优于其他方法。
基准测试:在标准化基准测试中,YaRN 维持了接近基线的分数,即使在扩展的上下文中。
如何将上下文长度从4K扩展到128K
DeepSeek-V3 使用 YaRN 方法,通过以下步骤将上下文长度从4K扩展到128K:
第一阶段:从4K扩展到32K
使用 YaRN 方法,通过调整 RoPE 的位置编码和动态缩放,将上下文长度扩展到32K。
超参数设置:尺度(scale)为40,α为1,β为32,缩放因子为 t=0.1lns+1。
序列长度:32K。
批量大小:1920。
学习率:7.3 × 10^-6。
第二阶段:从32K扩展到128K
继续使用 YaRN 方法,进一步将上下文长度扩展到128K。
超参数设置与第一阶段相同。
序列长度:128K。
批量大小:480。
学习率:7.3 × 10^-6。
通过这两个阶段的训练,DeepSeek-V3 能够处理长达128K的输入序列,显著提升了其在长文本任务中的表现。
Post-Training
SFT
数据量:1.5M,包括 Reasoning Data(主要来自R1蒸馏)、Non-Reasoning Data(DeepSeek V2.5蒸馏加人工标注)。
Reinforcement Learning
文中 强化学习 部分介绍了哪些信息?
Context Extension 阶段的作用和训练时间- Context Extension 阶段的作用
Context Extension(上下文扩展)阶段的主要目的是扩展模型能够处理的上下文长度。具体来说,DeepSeek-V3通过两个阶段的训练,逐步将上下文长度从4K扩展到32K,再进一步扩展到128K。这一过程使得模型能够处理更长的输入序列,从而在处理长文本任务时表现得更加出色。 - 需要长时间训练的原因
尽管上下文扩展阶段的目标相对明确,但这一过程需要大量的训练时间,主要有以下原因:
复杂的训练过程:上下文扩展训练需要对模型进行微调,以适应更长的上下文长度。这涉及到对模型架构和训练策略的调整,以确保模型在处理长序列时能够保持稳定性和高效性。
大规模数据处理:为了使模型能够适应更长的上下文,需要使用大量的训练数据。处理这些大规模数据需要大量的计算资源和时间。
优化需求:在扩展上下文长度的过程中,需要不断优化模型的性能,以确保其在长文本任务中的表现。这包括调整学习率、优化超参数等,这些都需要通过多次迭代训练来实现。
通过这两个阶段的上下文扩展训练,DeepSeek-V3能够处理长达128K的输入序列,这为其在长文本理解和生成任务中的出色表现奠定了基础。
总结与思考
- 之所以称之为"AI界PDD"主要原因是,组合了MoE(降参数量)、MLA(降KV Cache)、工程化(FP8,底层重写CUDA,很硬核)。最终,训练成本低,推理成本也比较低。
- 文中提到的后续改进方向,应该也是这个行业的提升空间:
- infinite context length
个人认为是agent普及的先觉条件,现在大模型无法记住太久远的记忆,导致无法代替一个长期坚守岗位程序维护代码的程序员,虽然大模型从零到一整出一套代码速度很快。
- iterate on the quantity and quality of our training data(数据循环蒸馏)
- additional training signal sources(多模态)
- deep thinking capabilities (reasoning length and depth)
- comprehensive and multi-dimensional model evaluation methods
探索更具泛化性的Benchmark,防止行业在固定Benchmark上过拟合,重要!!!。
相关链接
https://zhuanlan.zhihu.com/p/14988009150