TL;DR
- 2024 年中国 deepseek 发表的轰动全球的大模型论文。DeepSeek-V3 是目前开源 LLM 领域的新巅峰,在保持高性能的同时,训练成本远低于 GPT-4o。DeepSeek-V3 在数学、编程、逻辑推理和长文本处理方面表现极其出色,它采用了MoE 架构、长文本优化和高效训练方法。
Paper name
DeepSeek-V3 Technical Report
Paper Reading Note
Paper URL: https://github.com/deepseek-ai/DeepSeek-V3/blob/main/DeepSeek_V3.pdf
Code URL: https://github.com/deepseek-ai/DeepSeek-V3
Introduction
背景
- 近年来,大语言模型(LLMs)正在快速发展,Anthropic、Google 和 OpenAI 等公司不断推出更强大的模型,逐步缩小与通用人工智能(AGI)之间的差距。与此同时,开源模型也在迅速进步,DeepSeek、LLaMA、Qwen 和 Mistral 等系列正在努力追赶闭源模型的领先优势。
本文方案
- 推出了 DeepSeek-V3
- DeepSeekMoE 架构,671B 参数量,每个 token 激活 37B
- 延续 DeepSeek V2 中的 MLA
- 无辅助损失的负载均衡策略,并设定了多 token 预测训练目标
- 14.8T token 数据用于预训练,然后通过 SFT 和 RL 来充分挖掘模型潜力
- FP8 混合精度训练
- 训练框架
- DualPipe 实现 PP
- computation-communication overlap 隐藏通信开销
- 开发了高效的跨节点 all-to-all 通信核心(communication kernels),充分利用 InfiniBand(IB) 和 NVLink 带宽
- 精细优化了内存占用,使得 DeepSeek-V3 在训练时无需使用昂贵的张量并行(tensor parallelism)
- 完整训练仅消耗了 278.8 万小时的 H800 GPU 计算资源。训练过程极为稳定,整个训练过程中未出现不可恢复的损失峰值,也未进行任何回滚
架构(Architecture)
DeepSeek-V3 的基本架构 核心特点包括:
- 多头潜在注意力(Multi-head Latent Attention, MLA):实现 高效推理(efficient inference)
- DeepSeekMoE:用于 经济高效的训练(economical training)
- 与 DeepSeek-V2 不同的是,引入了:无辅助损失(auxiliary-loss-free)负载均衡策略,用于 减轻负载均衡过程中对模型性能的影响。
- 引入了 多 Token 预测(Multi-Token Prediction, MTP) 训练目标,该目标已被证实能够 提升评测基准的整体性能
- 对于未明确提及的其他细节,DeepSeek-V3 依然遵循 DeepSeek-V2 的默认设置
多头潜在注意力(Multi-Head Latent Attention, MLA)
在注意力机制(attention)方面,DeepSeek-V3 采用了 MLA 架构。
令:
- d d d 表示嵌入维度(embedding dimension)。
- n h n_h nh 表示注意力头的数量(number of attention heads)。
- d h d_h dh 表示每个头的维度(dimension per head)。
- h t ∈ R d h_t \in \mathbb{R}^d ht∈Rd 表示 第 t t t 个 token 在某一注意力层的输入(attention input for the t t t-th token at a given attention layer)。
MLA 的核心思想是:
- 对注意力键(Key, K)和注意力值(Value, V)进行低秩联合压缩(low-rank joint compression),以减少推理过程中 Key-Value(KV)缓存的占用:
c t K V = W D K V h t c^{KV}_{t} = W^{DKV} h_t ctKV=WDKVht
[ k t , 1 C ; k t , 2 C ; . . . ; k t , n h C ] = k t C = W U K c t K V [k^C_{t,1}; k^C_{t,2}; ...; k^C_{t,n_h}] = k^C_t = W^{UK} c^{KV}_{t} [kt,1C;kt,2C;...;kt,nhC]=ktC=WUKctKV
k t R = R o P E ( W K R h t ) k^R_t = RoPE(W^{KR} h_t) ktR=RoPE(WKRht)
k t , i = [ k t , i C ; k t R ] k_{t,i} = [k^C_{t,i}; k^R_t] kt,i=[kt,iC;ktR]
[ v t , 1 C ; v t , 2 C ; . . . ; v t , n h C ] = v t C = W U V c t K V [v^C_{t,1}; v^C_{t,2}; ...; v^C_{t,n_h}] = v^C_t = W_{UV} c^{KV}_{t} [vt,1C;vt,2C;...;vt,nhC]=vtC=WUVctKV
其中:
- c t K V ∈ R d c c^{KV}_{t} \in \mathbb{R}^{d_c} ctKV∈Rdc 是 键(Key)和值(Value)的压缩潜在向量。
- d c ( ≪ d h n h ) d_c (\ll d_h n_h) dc(≪dhnh) 为 KV 压缩维度。
- W D K V ∈ R d c × d W^{DKV} \in \mathbb{R}^{d_c \times d} WDKV∈Rdc×d 为 降维投影矩阵。
- W U K , W U V ∈ R d h n h × d c W^{UK}, W^{UV} \in \mathbb{R}^{d_h n_h \times d_c} WUK,WUV∈Rdhnh×dc 分别为 键和值的升维投影矩阵。
- W K R ∈ R d h R × d W^{KR} \in \mathbb{R}^{d^{R}_{h} \times d} WKR∈RdhR×d 是 生成旋转位置编码(RoPE)解耦键(decoupled key)的矩阵。
- R o P E ( ⋅ ) RoPE(\cdot) RoPE(⋅) 表示 应用旋转位置编码(RoPE)矩阵的操作。
- [ ⋅ ; ⋅ ] [ \cdot ; \cdot ] [⋅;⋅] 表示 向量拼接(concatenation)。
需要注意的是,在 MLA 中,仅需 缓存蓝框标记的向量(即 c t K V c^{KV}_{t} ctKV 和 k t R k^R_t ktR),从而 显著减少 KV 缓存的存储需求,同时 保持与标准多头注意力(MHA,Multi-Head Attention)相当的性能。
为了进一步 减少训练过程中激活(activation)占用的内存,同样对 注意力查询(Query, Q) 进行了低秩压缩:
c t Q = W D Q h t c^{Q}_{t} = W^{DQ} h_t ctQ=WDQht
[ q t , 1 C ; q t , 2 C ; . . . ; q t , n h C ] = q t C = W U Q c t Q [q^C_{t,1}; q^C_{t,2}; ...; q^C_{t,n_h}] = q^C_t = W^{UQ} c^{Q}_{t} [qt,1C;qt,2C;...;qt,nhC]=qtC=WUQctQ
[ q t , 1 R ; q t , 2 R ; . . . ; q t , n h R ] = q t R = R o P E ( W Q R c t Q ) [q^R_{t,1}; q^R_{t,2}; ...; q^R_{t,n_h}] = q^R_t = RoPE(W^{QR} c^{Q}_{t}) [qt,1R;qt,2R;...;qt,nhR]=qtR=RoPE(WQRctQ)
q t , i = [ q t , i C ; q t , i R ] q_{t,i} = [q^C_{t,i}; q^R_{t,i}] qt,i=[qt,iC;qt,iR]
其中:
- c t Q ∈ R d c ′ c^{Q}_{t} \in \mathbb{R}^{d'_c} ctQ∈Rdc′ 是 查询(Query)的压缩潜在向量。
- d c ′ ( ≪ d h n h ) d'_c (\ll d_h n_h) dc′(≪dhnh) 为 查询压缩维度。
- W D Q ∈ R d c ′ × d W^{DQ} \in \mathbb{R}^{d'_c \times d} WDQ∈Rdc′×d 和 W U Q ∈ R d h n h × d c ′ W^{UQ} \in \mathbb{R}^{d_h n_h \times d'_c} WUQ∈Rdhnh×dc′ 分别是 查询的降维投影矩阵和升维投影矩阵。
- W Q R ∈ R d R h n h × d c ′ W^{QR} \in \mathbb{R}^{d_R h n_h \times d'_c} WQR∈RdRhnh×dc′ 是 生成旋转位置编码(RoPE)解耦查询(decoupled query)的矩阵。
最终,注意力查询( q t , i q_{t,i} qt,i)、键( k j , i k_{j,i} kj,i)和值( v j , i C v^C_{j,i} vj,iC)被组合,以生成最终的注意力输出 u t u_t ut:
o t , i = ∑ j = 1 t Softmax j ( q t , i T k j , i d h + d h R ) v j , i C o_{t,i} = \sum_{j=1}^{t} \text{Softmax}_j \left(\frac{q^T_{t,i} k_{j,i}}{\sqrt{d_h + d^{R}_{h}}}\right) v^C_{j,i} ot,i=j=1∑tSoftmaxj dh+dhR qt,iTkj,i vj,iC
u t = W O [ o t , 1 ; o t , 2 ; . . . ; o t , n h ] u_t = W^O [o_{t,1}; o_{t,2}; ...; o_{t,n_h}] ut=WO[ot,1;ot,2;...;ot,nh]
其中:
- W O ∈ R d × d h n h W^O \in \mathbb{R}^{d \times d_h n_h} WO∈Rd×dhnh 是 输出投影矩阵(output projection matrix)。
更多 MLA 的介绍可以参考:https://kexue.fm/archives/10091
DeepSeekMoE 无辅助损失的负载均衡
DeepSeekMoE 的基本架构
对于前馈网络(FFNs),DeepSeek-V3 采用了 DeepSeekMoE 架构。与 GShard 等传统 MoE 架构相比,DeepSeekMoE 采用了更精细的专家划分,并隔离了一部分专家作为共享专家。设 u t u_t ut 表示第 t t t 个 token 的 FFN 输入,我们计算 FFN 输出 h t ′ h'_t ht′ 如下:
h t ′ = u t + ∑ i = 1 N s FFN i ( s ) ( u t ) + ∑ i = 1 N r g i , t FFN i ( r ) ( u t ) , h'_t = u_t + \sum_{i=1}^{N_s} \text{FFN}^{(s)}_i (u_t) + \sum_{i=1}^{N_r} g_{i,t} \text{FFN}^{(r)}_i (u_t), ht′=ut+i=1∑NsFFNi(s)(ut)+i=1∑Nrgi,tFFNi(r)(ut),
g i , t = g i , t ′ ∑ j = 1 N r g j , t ′ , g_{i,t} = \frac{g'_{i,t}}{\sum_{j=1}^{N_r} g'_{j,t}}, gi,t=∑j=1Nrgj,t′gi,t′,
g i , t ′ = { s i , t , s i , t ∈ Topk ( { s j , t ∣ 1 ≤ j ≤ N r } , K r ) 0 , 否则 g'_{i,t} = \begin{cases} s_{i,t}, & s_{i,t} \in \text{Topk}(\{s_{j,t} | 1 \leq j \leq N_r \}, K_r) \\ 0, & \text{否则} \end{cases} gi,t′={si,t,0,si,t∈Topk({sj,t∣1≤j≤Nr},Kr)否则
s i , t = Sigmoid ( u t T e i ) , s_{i,t} = \text{Sigmoid}( u_t^T e_i), si,t=Sigmoid(utTei),
其中, N s N_s Ns 和 N r N_r Nr 分别表示共享专家和路由专家的数量; FFN i ( s ) ( ⋅ ) \text{FFN}^{(s)}_i(\cdot) FFNi(s)(⋅) 和 FFN i ( r ) ( ⋅ ) \text{FFN}^{(r)}_i(\cdot) FFNi(r)(⋅) 分别表示第 i i i 个共享专家和第 i i i 个路由专家; K r K_r Kr 表示被激活的路由专家数量; g i , t g_{i,t} gi,t 为第 i i i 个专家的门控值; s i , t s_{i,t} si,t 表示 token 到专家的亲和度; e i e_i ei 为第 i i i 个路由专家的中心向量; Topk ( ⋅ , K ) \text{Topk}(\cdot, K) Topk(⋅,K) 表示从计算出的亲和度分数中选择前 K K K 个最高分的集合。与 DeepSeek-V2 略有不同,DeepSeek-V3 使用 sigmoid 函数计算亲和度分数,并在所有选定的亲和度分数上进行归一化,以生成门控值。
无辅助损失的负载均衡
参考文章 (Auxiliary-loss-free load balancing strategy for mixture-of-experts) 中的分析,对于 MoE 模型,专家负载不均衡会导致路由崩溃,在专家并行的场景下降低计算效率。传统解决方案通常依赖辅助损失来避免负载不均衡。然而,过大的辅助损失会损害模型性能。为了在负载均衡和模型性能之间取得更好的权衡,创新性地提出了一种无辅助损失的负载均衡策略来保证负载均衡。
具体而言,为每个专家引入了一个偏置项
b
i
b_i
bi,并将其加到相应的亲和度分数
s
i
,
t
s_{i,t}
si,t 上,以确定 top-K 路由:
g
i
,
t
′
=
{
s
i
,
t
,
s
i
,
t
+
b
i
∈
Topk
(
{
s
j
,
t
+
b
j
∣
1
≤
j
≤
N
r
}
,
K
r
)
0
,
否则
g'_{i,t} = \begin{cases} s_{i,t}, & s_{i,t} + b_i \in \text{Topk}(\{s_{j,t} + b_j | 1 \leq j \leq N_r \}, K_r) \\ 0, & \text{否则} \end{cases}
gi,t′={si,t,0,si,t+bi∈Topk({sj,t+bj∣1≤j≤Nr},Kr)否则
需要注意的是,偏置项仅用于路由,最终与 FFN 输出相乘的门控值仍然基于原始亲和度分数 s i , t s_{i,t} si,t 计算。在训练过程中,我们持续监测每个训练步骤的批次专家负载。在每个步骤结束时,如果某个专家超载,我们将其对应的偏置项减少 γ \gamma γ;如果专家负载不足,我们将其偏置项增加 γ \gamma γ,其中 γ \gamma γ 是一个称为偏置更新速度的超参数。通过这种动态调整,DeepSeek-V3 在训练过程中保持了专家负载的平衡,并且相比于仅依赖辅助损失进行负载均衡的模型,获得了更好的性能。
互补的序列级辅助损失
虽然 DeepSeek-V3 主要依赖无辅助损失策略进行负载均衡,但为了防止单个序列内的极端不均衡,我们还引入了一种互补的序列级负载均衡损失:
L
Bal
=
α
∑
i
=
1
N
r
f
i
P
i
,
L_{\text{Bal}} = \alpha \sum_{i=1}^{N_r} f_i P_i,
LBal=αi=1∑NrfiPi,
f i = N r K r T ∑ t = 1 T 1 ( s i , t ∈ Topk ( { s j , t ∣ 1 ≤ j ≤ N r } , K r ) ) , f_i = \frac{N_r}{K_r T} \sum_{t=1}^{T} 1(s_{i,t} \in \text{Topk}(\{s_{j,t} | 1 \leq j \leq N_r \}, K_r)), fi=KrTNrt=1∑T1(si,t∈Topk({sj,t∣1≤j≤Nr},Kr)),
s i , t ′ = s i , t ∑ j = 1 N r s j , t , s'_{i,t} = \frac{s_{i,t}}{\sum_{j=1}^{N_r} s_{j,t}}, si,t′=∑j=1Nrsj,tsi,t,
P i = 1 T ∑ t = 1 T s i , t ′ , P_i = \frac{1}{T} \sum_{t=1}^{T} s'_{i,t}, Pi=T1t=1∑Tsi,t′,
其中,平衡因子 α \alpha α 是一个超参数,在 DeepSeek-V3 中被赋予极小的值; 1 ( ⋅ ) 1(\cdot) 1(⋅) 为指示函数; T T T 表示序列中的 token 数量。序列级负载均衡损失鼓励每个序列中的专家负载保持均衡。
受限的节点路由
与 DeepSeek-V2 使用的设备受限路由类似,DeepSeek-V3 采用了一种受限路由机制,以降低训练过程中的通信成本。简而言之,我们确保每个 token 仅被发送到最多 M M M 个节点,这些节点的选择依据是分布在每个节点上的专家的最高 K r M \frac{K_r}{M} MKr 亲和度分数之和。在该约束下,我们的 MoE 训练框架几乎可以实现计算与通信的完全重叠。
无 token 丢弃
由于 DeepSeek-V3 采用了有效的负载均衡策略,在整个训练过程中保持了良好的负载均衡。因此,DeepSeek-V3 在训练过程中不会丢弃任何 token。此外,我们还实施了专门的部署策略来确保推理时的负载均衡,因此 DeepSeek-V3 在推理过程中同样不会丢弃 token。
多 Token 预测 (Multi-Token Prediction, MTP)
受 Better & faster large language models via multi-token prediction (Gloeckle, 2024) 启发,我们为 DeepSeek-V3 研究并设定了多 Token 预测(Multi-Token Prediction, MTP)目标,该方法在每个位置扩展了预测范围至多个未来 Token。一方面,MTP 目标可以增加训练信号的密度,提高数据效率;另一方面,MTP 可能使模型提前规划其表示,以更好地预测未来 Token。图 3 展示了我们 MTP 的实现方式。与 Gloeckle 等(2024)不同,该方法使用独立的输出头并行预测
D
D
D 个额外 Token,而我们采用顺序预测的方式,并在每个预测深度保持完整的因果链。
MTP(多 Token 预测)模块的核心思想是:通过多个预测层(MTP 模块),在每个位置不仅预测下一个 Token,还预测多个未来 Token,从而提高训练效率。
MTP 结构
DeepSeek-V3 的 MTP 采用 D D D 个顺序模块 来预测 D D D 个额外 Token。每个第 k k k 层 MTP 模块包含:
- 共享的嵌入层 Emb ( ⋅ ) \text{Emb}(\cdot) Emb(⋅)(与主模型共享)。
- 共享的输出头 OutHead ( ⋅ ) \text{OutHead}(\cdot) OutHead(⋅)(与主模型共享)。
- Transformer 块 TRM k ( ⋅ ) \text{TRM}_k(\cdot) TRMk(⋅)。
- 投影矩阵 M k ∈ R d × 2 d M_k \in \mathbb{R}^{d \times 2d} Mk∈Rd×2d。
在第 k k k 层预测深度,对于第 i i i 个输入 Token:
- 先取前一层的 Token 表示 h k − 1 i ∈ R d h_{k-1}^{i} \in \mathbb{R}^{d} hk−1i∈Rd。
- 获取当前要预测的 Token t i + k t_{i+k} ti+k 的嵌入 Emb ( t i + k ) \text{Emb}(t_{i+k}) Emb(ti+k)。
- 通过线性变换进行组合
- 送入 Transformer 块进行处理
- 由共享的输出头计算
k
k
k 层深度的 Token 预测概率:
P k i + k + 1 = OutHead ( h k i ) . P_k^{i+k+1} = \text{OutHead}(h_k^i). Pki+k+1=OutHead(hki).
MTP 训练目标
每个 MTP 预测层使用 交叉熵损失 计算误差:
L
k
MTP
=
−
1
T
∑
i
=
2
+
k
T
+
1
log
P
k
i
[
t
i
]
.
L_k^{\text{MTP}} = -\frac{1}{T} \sum_{i=2+k}^{T+1} \log P_k^i[t_i].
LkMTP=−T1i=2+k∑T+1logPki[ti].
然后,对所有深度的损失取平均,并乘以一个权重因子
λ
\lambda
λ 作为最终的 MTP 训练目标:
L
MTP
=
λ
1
D
∑
k
=
1
D
L
k
MTP
.
L^{\text{MTP}} = \lambda \frac{1}{D} \sum_{k=1}^{D} L_k^{\text{MTP}}.
LMTP=λD1k=1∑DLkMTP.
MTP 在推理中的作用
MTP 主要用于训练时增强模型预测能力。在 推理阶段:
- MTP 模块可以被直接丢弃,主模型仍能正常运作。
- MTP 还能用于推测解码(speculative decoding),进一步提高生成速度。
基建 (Infrastructures)
训练集群
- 2048 块 NVIDIA H800 GPU,节点内部通过 NVLink 和 NVSwitch 连接。不同节点之间使用 InfiniBand (IB) 互连
训练框架
- 基于内部打造的 HAI-LLM 训练框架
- 模型并行
- 16 路流水并行(PP, Pipeline Parallelism)
- 64 路专家并行(EP, Expert Parallelism)
- ZeRO-1 数据并行(DP, Data Parallelism)
- 工程优化
- DualPipe 算法,优化流水并行。相比传统 PP 方法,DualPipe 减少了流水线气泡(pipeline bubbles)。在前向传播和反向传播过程中重叠计算与通信,有效降低跨节点专家并行带来的通信开销
- 重叠策略。橙色表示前向,绿色表示 backward for input,蓝色表示 backward for weights,紫色代表 PP 通信。all-to-all 和 PP 通信可以通过这种重叠策略隐藏起来。同时需要手动调节用于通信和计算的 GPU SMs 比例。
- 双向 DualPipe scheduling 示例。同时从 pipeline 的两端提供 micro batch 数据
- 重叠策略。橙色表示前向,绿色表示 backward for input,蓝色表示 backward for weights,紫色代表 PP 通信。all-to-all 和 PP 通信可以通过这种重叠策略隐藏起来。同时需要手动调节用于通信和计算的 GPU SMs 比例。
- 开发高效的跨节点 all-to-all 通信内核,充分利用 IB 和 NVLink 带宽,并优化 Streaming Multiprocessors(SMs),减少通信对计算资源的影响
- NVLink 带宽 为 160 GB/s,大约是 IB(50 GB/s)的 3.2 倍。所以设计每个 token 仅分发最多 4 个节点,以减少 IB 传输量。路由决策后,token 先通过 IB 传输到目标节点上具有相同索引的 GPU。一旦 token 抵达目标节点,立即通过 NVLink 直接传输至目标专家所在的 GPU,避免被后续 token 阻塞。
- 采用 warp specialization,仅需 20 个 SM 即可充分利用 IB 和 NVLink 的带宽,大幅降低通信计算资源消耗
- 深度优化 PTX(Parallel Thread Execution)指令,并自动调整通信块大小(chunk size),显著减少 L2 缓存使用量,降低对其他 SM 计算任务的干扰
- 优化训练过程中的内存占用,使 DeepSeek-V3 无需使用昂贵的 Tensor 并行(TP, Tensor Parallelism),即可高效训练。
- 不存储 RMSNorm 和 MLA(Multi-Layer Attention)上投影的中间激活值,而是直接重新计算
- 在 CPU 上存储指数移动平均(EMA)。同时 EMA 参数的更新是异步进行的,不影响训练计算
- 在 DualPipe 训练框架下,将模型的最浅层(包括嵌入层)和最深层(包括输出头)部署在相同的流水并行(PP)分区上。这样可以物理共享 MTP 模块与主模型的嵌入层和输出头的参数与梯度。
- DualPipe 算法,优化流水并行。相比传统 PP 方法,DualPipe 减少了流水线气泡(pipeline bubbles)。在前向传播和反向传播过程中重叠计算与通信,有效降低跨节点专家并行带来的通信开销
FP8 训练
- FP8(8-bit 浮点数格式) 来训练 DeepSeek-V3。
- 相比 BF16 训练基线,FP8 训练的相对损失误差始终低于 0.25%,该误差处于训练随机性的可接受范围内。
- 两个不同规模的模型上进行了 FP8 训练实验(规模接近 DeepSeek-V2-Lite 和 DeepSeek-V2),并在 1 万亿 tokens 规模上验证了该方法的有效性。
- 16B 模型跑了 1.33T token
- 230B 模型跑了 0.9T token
混合精度训练示例
- 三类 GEMM(通用矩阵乘法)运算全部使用 FP8:
- Fprop(前向传播)
- Dgrad(激活值的反向传播)
- Wgrad(权重的反向传播)
- FP8 WgradGEMM 允许在反向传播时存储 FP8 格式的激活值,从而显著减少内存占用。
- 为了 降低 MoE(Mixture of Experts)训练的内存与通信开销,我们:
- 使用 FP8 存储和分发激活值
- 使用 BF16(bfloat16)存储低精度优化器状态
- 保留以下关键组件的 BF16 或 FP32 计算精度:
- 嵌入层
- 输出头
- MoE 门控模块
- 归一化(Normalization)
- 注意力(Attention)运算
量化和矩阵运算精度优化
- 引入了一种细粒度量化策略,FP8 由于指数位较少(exponent bits 限制),动态范围较窄,容易出现溢出(overflow)或下溢(underflow) 问题
- Tile-wise 量化(1× N c N_c Nc 组):激活值(activations),每个 token 以 128 维通道为单位进行量化
- Block-wise 量化( N c N_c Nc× N c N_c Nc 组):权重(weights),每 128 输入通道 × 128 输出通道为单位量化
- 提高矩阵乘法(GEMM)计算精度,FP8 GEMM 仅能保留约 14 位精度(远低于 FP32)
- 使用 CUDA Cores 进行高精度累加。 在矩阵乘-累加(MMA)计算过程中,将部分计算结果提升到 FP32 精度,再进行高精度累加
- 优化 WGMMA(Warpgroup-level Matrix Multiply-Accumulate)指令执行。并行执行不同 warp 组,在 H800 架构上同时进行累加计算与 MMA 操作,以维持 Tensor Cores 的高利用率
低精度存储与通信优化
-
AdamW 优化器 中:
- 一阶/二阶矩(moments)使用 BF16 存储(替代 FP32),不会影响训练性能。
- 主权重(master weights)和梯度仍然使用 FP32,以确保数值稳定性。
-
低精度激活存储
- Wgrad 操作使用 FP8 计算,因此可以在反向传播时缓存 FP8 激活值,减少内存开销。
- 特殊算子优化:
- 注意力后续的线性层输入(Linear after Attention):
- 这些激活值同时用于注意力反向传播,因此存储精度要求更高。
- 采用 E5M6 数据格式(5-bit exponent, 6-bit mantissa)。
- MoE 中 SwiGLU 运算的输入:
- 采用 FP8 格式缓存,并在反向传播时重计算,降低显存需求。
- 注意力后续的线性层输入(Linear after Attention):
-
低精度通信。MoE 训练的 通信带宽是主要瓶颈,为此我们:
- 在 MoE 上投影(MoE up-projection)前,使用 FP8 量化激活值,减少通信数据量。
- 在 MoE 下投影(MoE down-projection)前,使用 FP8 量化梯度,降低通信成本。
- 在 MoE 前向/反向合并(combine)操作中,保留 BF16 精度,确保训练稳定性
推理与部署
- DeepSeek-V3 部署在 H800 集群 上,其中:
- 节点内 GPU 通过 NVLink 互连
- 集群内所有 GPU 通过 InfiniBand (IB) 互连
- 推理过程分为两阶段:
- Prefilling(前填充阶段):并行处理多个 Token,优化批量计算
- Decoding(解码阶段):逐步生成 Token,优化低延迟计算
Prefilling(前填充阶段)
前填充阶段的 最小部署单元 由 4 个节点(32 块 GPU) 组成,采用:
- 注意力计算(Attention):
- 4 路 Tensor 并行(TP4)+ 序列并行(SP),结合 8 路数据并行(DP8)。
- TP 规模小(TP=4),减少 TP 通信开销。
- MoE 计算:
- 32 路专家并行(EP32),确保 每个专家处理足够大的 batch,提高计算效率。
- MoE all-to-all 通信策略 与训练相同:
- 先通过 IB 进行跨节点通信。
- 再通过 NVLink 在节点内进行数据转发。
1. 负载均衡优化
由于 MoE 计算的负载分布不均,我们采用 冗余专家(Redundant Experts)策略:
- 检测高负载专家(基于在线部署统计数据)。
- 每 10 分钟调整一次专家部署:
- 复制高负载专家,部署多个冗余副本,让多个 GPU 共同分担计算。
- 在节点内重新分配专家,确保 每块 GPU 处理相同数量的 Tokens,同时 不增加跨节点 all-to-all 通信开销。
对于 DeepSeek-V3 的前填充阶段:
- 部署 32 个冗余专家。
- 每块 GPU 除了原本的 8 个专家,还会额外存储 1 个冗余专家。
2. 提高吞吐量
为了 隐藏 all-to-all 和 TP 通信的开销,我们:
- 同时处理两个微批(micro-batch),并行计算:
- 一个微批计算 Attention 和 MoE
- 另一个微批执行 dispatch 和 combine
- 交错处理,实现计算与通信的重叠,提高吞吐量。
3. 动态冗余专家(Dynamic Redundancy)
我们正在探索 动态冗余专家策略:
- 每个 GPU 负载更多专家(例如 16 个)。
- 但每次推理时,只激活其中 9 个。
- 在每一层 all-to-all 操作之前,动态计算最优的路由方案。
由于 前填充阶段计算量较大,计算 最优路由方案 的额外开销可以忽略不计。
解码阶段(Decoding)
在 解码阶段,我们 将共享专家(Shared Experts)视为路由专家,即:
- 每个 Token 选择 9 个专家。
- 共享专家是高负载专家,始终被选择。
解码阶段的 最小部署单元:
- 40 个节点(320 块 GPU)。
- 注意力计算:
- 4 路 Tensor 并行(TP4)+ 序列并行(SP),结合 80 路数据并行(DP80)。
- MoE 计算:
- 320 路专家并行(EP320)。
- 每块 GPU 仅存储 1 个专家。
- 64 块 GPU 额外用于存储冗余专家和共享专家。
1. 高效低延迟的 all-to-all 通信
- 直接使用 IB 进行点对点传输,减少通信延迟。
- 利用 IBGDA(NVIDIA, 2022)技术,进一步优化通信效率。
与 前填充阶段类似,我们 定期调整冗余专家集合,但:
- 无需重新分配专家,因为 每块 GPU 仅存储 1 个专家。
2. 动态冗余专家(Dynamic Redundancy)
我们正在探索 动态冗余专家策略:
- 需要 优化最优路由方案计算算法。
- 需要 与 dispatch 计算内核融合,减少额外计算开销。
3. 提高吞吐量
- 与前填充类似,我们 同时处理两个微批(micro-batch):
- 一个微批计算 Attention
- 另一个微批计算 dispatch+MoE+combine
- 交错处理,隐藏通信开销。
4. 计算瓶颈分析
在 解码阶段:
- 注意力计算占比更大(比前填充阶段更重要)。
- 每个专家的 batch size 相对较小(通常 ≤ 256 tokens)。
- 主要瓶颈是内存访问,而不是计算速度。
- 由于 MoE 只需加载 1 个专家参数,内存访问开销较低。
优化策略:
- 减少用于 dispatch+MoE+combine 的 SM 资源分配,避免影响 Attention 计算速度。
对硬件设计的建议
基于 DeepSeek-V3 在 all-to-all 通信和 FP8 训练方案 的实现,我们向 AI 硬件厂商 提出以下改进建议,以优化未来的芯片架构。
通信硬件优化
在 DeepSeek-V3 的训练过程中,我们通过 计算与通信重叠(computation-communication overlap) 技术 隐藏通信延迟,从而 降低对通信带宽的依赖。然而,当前的通信实现依赖于 GPU 的 SM(Streaming Multiprocessors),导致计算资源浪费:
- H800 GPU 上的 132 个 SM 中,20 个被用于通信,减少了可用于计算的资源。
- SM 负责通信时,Tensor Cores 处于闲置状态,降低计算吞吐量。
当前 SM 处理的 all-to-all 通信任务
- 在 IB(InfiniBand)和 NVLink 之间转发数据:
- 聚合 IB 流量,使数据从单个 GPU 传输到同一节点内的多个 GPU。
- 在 RDMA 缓冲区和输入/输出缓冲区之间传输数据。
- 执行 all-to-all combine 过程中的 reduce 操作。
- 在 IB 和 NVLink 域之间传输数据时,管理数据的细粒度内存布局。
改进建议
- 建议未来的 AI 硬件厂商 开发一种 独立的 GPU/网络协处理器(类似 NVIDIA SHARP,Graham 等, 2016),用于 卸载 GPU 的通信任务。
此外,我们希望 统一 IB(scale-out)和 NVLink(scale-up)网络,以降低编程复杂度:- 计算单元可以 通过统一的接口 直接执行:
- 读取(read)
- 写入(write)
- 多播(multicast)
- 归约(reduce)
- 计算单元可以 通过统一的接口 直接执行:
这种 统一的 IB-NVLink 计算-通信接口 允许 GPU 更高效地执行 all-to-all 操作,避免 SM 资源浪费,提高计算利用率。
计算硬件优化
1. 提高 Tensor Core 中 FP8 GEMM 累加精度
- 在 NVIDIA Hopper 架构 下,FP8 GEMM 采用 定点累加(fixed-point accumulation):
- 在累加前,基于最大指数(exponent)右移对齐尾数(mantissa)。
- 实验发现:H800 GPU 仅保留最高 14 位尾数,并截断超出部分。
- 问题:
- FP8×FP8 矩阵相乘,累加 32 个值时,至少需要 34 位精度 以匹配 FP32 计算精度。
- 建议:
- 提高 Tensor Cores 的 FP8 累加精度,支持 全精度累加。
- 动态调整累加位宽,根据 训练和推理算法的精度需求选择合适的精度,确保计算误差在可接受范围内,同时维持计算效率。
2. 支持 Tile- 和 Block-级量化
当前 GPU 仅支持 逐张量(per-tensor)量化,但不支持 更细粒度的 Tile 和 Block 级量化:
- 当前实现:
- 计算到达 N c N_c Nc 间隔时,部分累加结果会从 Tensor Cores 复制到 CUDA Cores,再乘以缩放因子(scaling factor),然后存入 FP32 寄存器进行累加。
- 尽管 结合 FP32 累加策略后,解量化(dequantization)开销显著降低,但 Tensor Cores 与 CUDA Cores 之间的频繁数据移动仍然降低了计算效率。
- 建议:
- 让 Tensor Cores 原生支持 Tile- 和 Block-级量化:
- 直接在 Tensor Cores 内部进行累加和解量化(MMA + group scaling),避免数据在 Tensor Cores 和 CUDA Cores 之间频繁移动。
- 这样,整个部分和累加及解量化流程可在 Tensor Cores 内部完成,直到最终结果生成,显著提升计算效率。
- 让 Tensor Cores 原生支持 Tile- 和 Block-级量化:
3. 支持在线量化(Online Quantization)
-
问题:
- 现有硬件难以高效支持 在线量化(Online Quantization)。
- 现阶段,量化过程如下:
- 从 HBM(高带宽内存)读取 128 个 BF16 激活值(上一层计算输出)。
- 将激活值 量化成 FP8 并写回 HBM。
- 在后续 MMA 计算时,再次从 HBM 读取 FP8 激活值。
- 频繁的内存读写 降低了计算效率。
-
建议:
- 将 FP8 量化与 TMA(Tensor Memory Accelerator)访问融合,在 激活值从全局内存传输到共享内存(shared memory)时完成量化,避免额外的内存访问。
- 引入 Warp 级别的 cast 指令,加速 FP8 量化:
- 这样可以 更高效地融合 Layer Normalization(LN)和 FP8 量化。
- 采用近内存计算(Near-Memory Computing):
- 在 HBM 附近放置计算逻辑,在 激活值从 HBM 读取到 GPU 时,直接将 BF16 转换为 FP8。
- 这种方式 可减少约 50% 的片外内存访问(off-chip memory access),提高内存带宽利用率。
4. 支持转置 GEMM 操作(Transposed GEMM)
-
问题:
- 现有架构 无法高效地将矩阵转置(transpose)与 GEMM 操作融合。
- 当前 FP8 训练流程:
- 前向传播:
- 量化激活值,存储为 1×128 的 FP8 Tile。
- 反向传播:
- 读取矩阵 → \rightarrow → 解量化(dequantization) → \rightarrow → 转置(transpose) → \rightarrow → 重新量化成 128×1 Tiles → \rightarrow → 存储到 HBM。
- 前向传播:
- 如此繁琐的内存操作,导致性能损失。
-
建议:
- 未来 GPU 应支持直接从共享内存中读取转置矩阵,然后执行 MMA 操作:
- 避免额外的矩阵转置、解量化、重量化开销。
- 配合 FP8 量化和 TMA 访问的融合优化,可 显著简化量化流程,提高计算效率。
- 未来 GPU 应支持直接从共享内存中读取转置矩阵,然后执行 MMA 操作:
预训练 (Pre-Training)
数据构建
相比 DeepSeek-V2,我们优化了预训练语料库,增加了数学和编程数据的比例,同时扩展了多语言覆盖范围,不再局限于英语和中文。此外,我们优化了数据处理流程,减少冗余,确保数据多样性。借鉴 Ding 等人(2024)的研究,我们在数据处理过程中引入了文档打包(document packing)方法,以保证数据完整性,但没有在训练时使用跨样本注意力屏蔽(cross-sample attention masking)。
DeepSeek-V3 的训练语料包含 14.8 万亿(T)高质量、多样化的 token。在 DeepSeekCoder-V2(DeepSeek-AI,2024a)的训练中,我们观察到 Fill-in-Middle(FIM)填充中间策略不会影响模型的下一个 token 预测能力,还能增强模型对上下文的理解。因此,在 DeepSeek-V3 的预训练中,我们同样采用 FIM 策略,使用 前缀-后缀-中间(PSM) 结构进行数据预处理:
<|fim_begin|> 𝑓pre<|fim_hole|> 𝑓suf<|fim_end|> 𝑓middle<|eos_token|>
FIM 策略的应用比例为 10%,与 PSM 框架一致。
DeepSeek-V3 使用 Byte-level BPE(字节级 BPE) 分词器,词汇量扩展至 128K。新分词器优化了 多语言压缩效率,并引入标点符号与换行符的组合 token,提升处理长文本的能力。但这种方法可能会在处理缺少换行符的多行文本时引入token 边界偏差(Lundberg, 2023)。为缓解该问题,我们在训练过程中随机拆分部分组合 token,使模型能适应更多特殊情况。
超参数设置
模型超参数
- Transformer 层数: 61
- 隐藏维度: 7168
- 参数初始化标准差: 0.006
- 注意力头数(𝑛ℎ): 128,每个头的维度(𝑑ℎ):128
- KV 压缩维度(𝑑𝑐): 512,查询压缩维度(𝑑′𝑐):1536
- 解耦查询和键的 per-head 维度(𝑑𝑅 ℎ): 64
- FFN 结构: 除前三层外,其余全部采用 MoE(专家混合) 结构
- 每个 MoE 层包含 1 个共享专家 + 256 个路由专家
- 每个专家的隐藏层维度:2048
- 每个 token 仅激活 8 个专家,最多发送到 4 个节点
- 多 token 预测深度(𝐷): 1,即每个 token 额外预测一个 token
- 额外优化措施:
- 采用 RMSNorm 进行归一化
- 在压缩潜变量后引入额外的 缩放因子
- 总参数量: 6710 亿(B)
- 每个 token 激活参数量: 370 亿(B)
训练超参数
- 优化器: AdamW(Loshchilov & Hutter, 2017)
- β1 = 0.9,β2 = 0.95,权重衰减(weight decay)= 0.1
- 最大序列长度: 4K
- 训练数据量: 14.8T token
- 学习率调度:
- 前 2000 步:学习率从 0 线性增长到 2.2 × 10⁻⁴
- 前 10T token 训练期间:保持学习率 2.2 × 10⁻⁴
- 接下来的 4.3T token 训练:学习率从 2.2 × 10⁻⁴ 逐渐衰减到 2.2 × 10⁻⁵(余弦衰减)
- 最后 500B token 训练:
- 前 333B token:学习率保持 2.2 × 10⁻⁵
- 剩余 167B token:学习率降至 7.3 × 10⁻⁶
- 梯度裁剪(Gradient Clipping):1.0
- 批量大小策略:
- 前 469B token 训练:批量大小从 3072 逐步增大到 15360
- 剩余训练阶段:批量大小维持 15360
- 分布式训练:
- 流水线并行(Pipeline Parallelism):不同 Transformer 层分布在不同 GPU 上
- MoE 路由专家 均匀部署在 64 张 GPU,跨 8 个节点
- 每个 token 最多可发送至 4 个节点
- 负载均衡策略:
- 前 14.3T token 训练:偏差更新速率(𝛾)= 0.001
- 最后 500B token 训练:𝛾 = 0.0
- 平衡损失权重(𝛼) = 0.0001,避免 token 分配极端失衡
- MTP(多 token 预测)损失权重(𝜆):
- 前 10T token 训练: 0.3
- 剩余 4.8T token 训练: 0.1
长上下文扩展
DeepSeek-V3 采用与 DeepSeek-V2 类似的方法,实现长上下文处理能力。在预训练结束后,我们使用 YaRN(Peng et al., 2023a) 进行上下文扩展训练,并执行两个额外的训练阶段,每个阶段包含 1000 步,逐步将上下文窗口扩展:
- 第一阶段: 4K → 32K
- 第二阶段: 32K → 128K
YaRN 配置与 DeepSeek-V2 一致,仅适用于解耦的共享键 𝑘𝑅𝑡,并保持相同的超参数:
- 比例系数(𝑠): 40
- 𝛼 = 1,𝛽 = 32
- 缩放因子: √𝑡 = 0.1 ln 𝑠 + 1
训练细节:
- 第一阶段(32K 序列长度): 批量大小 1920
- 第二阶段(128K 序列长度): 批量大小 480
- 学习率(两阶段一致): 7.3 × 10⁻⁶(与预训练最终学习率相同)
通过这两阶段的扩展训练,DeepSeek-V3 能够处理最长 128K 的输入,并在监督微调后,在 “大海捞针”(NIAH)测试中表现优异,展现了稳定的长上下文能力。
评估
评测基准
DeepSeek-V3 主要在英语和中文的多语言语料上预训练,因此,我们在多个英文、中文及多语言基准测试上评估其表现。这些基准测试通过 HAI-LLM 评测框架进行。
评测数据集分类
-
多学科选择题数据集:
- MMLU(Hendrycks et al., 2020)
- MMLU-Redux(Gema et al., 2024)
- MMLU-Pro(Wang et al., 2024b)
- MMMLU(OpenAI, 2024b)
- C-Eval(Huang et al., 2023)(中文)
- CMMLU(Li et al., 2023)(中文)
-
语言理解与推理数据集:
- HellaSwag(Zellers et al., 2019)
- PIQA(Bisk et al., 2020)
- ARC(Clark et al., 2018)
- BigBench Hard(BBH)(Suzgun et al., 2022)
-
封闭式问答数据集:
- TriviaQA(Joshi et al., 2017)
- NaturalQuestions(Kwiatkowski et al., 2019)
-
阅读理解数据集:
- RACE(Lai et al., 2017)
- DROP(Dua et al., 2019)
- C3(Sun et al., 2019a)(中文)
- CMRC(Cui et al., 2019)(中文)
-
指代消解数据集:
- CLUEWSC(Xu et al., 2020)(中文)
- WinoGrande(Sakaguchi et al., 2019)
-
语言建模数据集:
- Pile(Gao et al., 2020)
-
中文理解与文化数据集:
- CCPM(Li et al., 2021)(中文)
-
数学数据集:
- GSM8K(Cobbe et al., 2021)
- MATH(Hendrycks et al., 2021)
- MGSM(Shi et al., 2023)
- CMath(Wei et al., 2023)(中文)
-
代码数据集:
- HumanEval(Chen et al., 2021)
- LiveCodeBench-Base(Jain et al., 2024)
- MBPP(Austin et al., 2021)
- CRUXEval(Gu et al., 2024)
-
标准化考试数据集:
- AGIEval(Zhong et al., 2023)(包括英语和中文)
评测方法
-
困惑度(Perplexity)评测:
用于 HellaSwag、PIQA、WinoGrande、RACE-Middle、RACE-High、MMLU、MMLU-Redux、MMLU-Pro、MMMLU、ARC-Easy、ARC-Challenge、C-Eval、CMMLU、C3 和 CCPM。 -
生成评测:
用于 TriviaQA、NaturalQuestions、DROP、MATH、GSM8K、MGSM、HumanEval、MBPP、LiveCodeBench-Base、CRUXEval、BBH、AGIEval、CLUEWSC、CMRC 和 CMath。 -
语言建模评测:
用于 Pile-test,以 Bits-Per-Byte(BPB) 作为评测指标,确保在不同分词器间的公平比较。
基础模型评测结果
DeepSeek-V3 经过这些全面的基准测试,展现了强大的多语言理解、数学推理、代码生成和长文本处理能力。
消融实验
- MTP 消融实验:MTP 策略在大多数基准测试中都提升了模型性能。
- aux loss free 消融实验:无辅助损失策略在大多数基准测试中都带来了更好的模型性能。
- 基线模型:使用传统辅助损失(auxiliary loss)进行负载均衡,并采用Sigmoid 门控 + Top-K 归一化。
- 新模型:去除所有辅助损失,引入无辅助损失负载均衡策略进行训练。
- 无辅助损失模型更容易形成领域专精模式
后训练(Post-Training)
监督微调(Supervised Fine-Tuning, SFT)
我们构建了一个包含 150 万条数据的微调数据集,涵盖多个领域,并针对不同任务定制数据创建方法。
推理数据
针对数学、编程竞赛问题和逻辑推理任务,我们利用DeepSeek-R1 生成数据。虽然 R1 生成的内容准确性较高,但存在过度思考、格式混乱、冗长等问题。因此,我们的目标是在高准确性和清晰简洁性之间取得平衡。
数据生成流程
<问题, 原始回答><系统提示, 问题, R1 生成的回答>
非推理数据
- 例如创意写作、角色扮演、简单问答等任务,我们使用 DeepSeek-V2.5 生成数据,并由人工标注员审核数据质量。
SFT 训练设置
- 训练 2 轮(epochs)。
- 学习率:5 × 10⁻⁶ → 1 × 10⁻⁶(余弦衰减)。
- 数据打包训练,但采用样本屏蔽策略,确保样本相互独立。
强化学习(Reinforcement Learning, RL)
奖励模型(Reward Model, RM)
我们使用 基于规则的奖励模型(Rule-Based RM) 和 基于模型的奖励模型(Model-Based RM)。
基于规则的奖励模型
- 适用于可验证问题(如数学、LeetCode 代码测试)。
- 示例:
- 数学问题的答案需以特定格式呈现,便于自动验证。
- 代码问题可使用编译器测试正确性。
基于模型的奖励模型
- 适用于开放式问题(如创意写作)。
- 训练方法:
- 使用 DeepSeek-V3 SFT 检查点训练奖励模型。
- 构建偏好数据,不仅提供最终奖励,还包含推理过程,降低奖励黑箱效应。
群体相对策略优化(Group Relative Policy Optimization, GRPO)
{𝑜1, 𝑜2, ..., 𝑜𝐺}
RL 训练任务涵盖:
- 编程、数学、写作、角色扮演、问答,提升模型对人类偏好的对齐能力。
评测(Evaluations)
评测设置
评测基准
在基座模型测试基准的基础上,我们增加:
- IFEval(Zhou et al., 2023)
- FRAMES(Krishna et al., 2024)
- LongBench v2(Bai et al., 2024)
- GPQA(Rein et al., 2023)
- AIME 2024(数学竞赛)
- Codeforces 2(算法竞赛)
- SWE-Bench Verified(软件工程)
- LiveCodeBench(代码评测)
对比模型
- DeepSeek-V2-0506
- DeepSeek-V2.5-0905
- Qwen2.5 72B Instruct
- LLaMA-3.1 405B Instruct
- Claude-Sonnet-3.5-1022
- GPT-4o-0513
详细评测设置
- 采用 simple-evals 框架 评测 MMLU、DROP、GPQA、SimpleQA。
- 使用 Zero-Eval 评测 MMLU-Redux(零样本测试)。
- 代码评测涵盖 8 种主流编程语言(Python, Java, C++, etc.)。
- 最大输出长度:8192 tokens。
标准 benchmar 评测结果与分析
英语任务
- MMLU:与 GPT-4o、Claude-Sonnet 3.5 表现接近,超越 Qwen2.5 72B。
- GPQA-Diamond(PhD 级评测):仅次于 Claude 3.5 Sonnet,远超其他竞争对手。
- 长文本任务(DROP、LongBench v2、FRAMES):
- DROP(3-shot F1 91.6%),所有模型中最高。
- FRAMES(100K token QA),仅次于 GPT-4o。
代码 & 数学
- 算法任务(HumanEval-Mul、LiveCodeBench):超越所有基线。
- 工程任务(SWE-Bench、Aider):虽落后 Claude-Sonnet-3.5-1022,但领先所有开源模型。
- 数学任务(AIME、MATH-500、CNMO 2024):比 Qwen2.5 72B 高 10% 绝对分数,创开源 SOTA。
中文任务
- SimpleQA(中文问答):比 Qwen2.5-72B 高 16.4 分。
- C-Eval & CLUEWSC:与 Qwen2.5-72B 相当,优化了中文推理能力。
开放式评测
- Arena-Hard(GPT-4-Turbo 1106 评判):
- DeepSeek-V3 在 Arena-Hard 取得 86% 胜率,首个开源模型突破 85%,接近 Claude-Sonnet 3.5-1022。
- AlpacaEval 2.0:
- 超越所有开源 & 闭源模型,在写作和 QA 任务中表现突出。
生成式奖励模型(Generative Reward Model, GRM)
- RewardBench 评测:
- DeepSeek-V3 接近 GPT-4o 和 Claude-3.5-Sonnet,并超越大部分版本。
- 投票机制 进一步优化奖励模型。
DeepSeek-R1 知识蒸馏
- 实验表明蒸馏数据提升 LiveCodeBench 和 MATH-500 表现。
- 但会增加平均回答长度,需要权衡计算成本。
自我奖励(Self-Rewarding)
- 结合 DeepSeek-V3 自己的投票结果 作为奖励,提高对齐效果。
多 Token 预测(MTP)评测
- 采用投机解码(Speculative Decoding),加速解码速度 1.8×。
- 第二个 token 预测的接受率高达 85%~90%,确保生成质量。
Conclusion
- DeepSeek-V3 是目前最强的开源大语言模型(LLM)之一,相比前代 DeepSeek-V2,它在规模、训练方法和推理能力上都进行了全面升级。
- DeepSeek V3 基本上是继承了 DeepSeek V2 的技术路线,能看出这个公司的研究人员对自己选择的技术路线的自信与坚持
- DeepSeek-V3 不仅成本低还性能好,性能方面甚至在一些测试中接近 GPT-4o 和 Claude-3.5-Sonnet。
- DeepSeek-V3 当前的一些局限性待解决
- 推理设备要求较高
- 推荐的最小部署单元较大,可能不适合小型团队,导致部署门槛较高。
- 推理速度仍有优化空间
- 尽管 DeepSeek-V3 端到端推理速度已超过 DeepSeek-V2 两倍,但仍有进一步提升的可能。未来可能需要更先进的硬件发展来协助进行推理加速。
- 推理设备要求较高
- deepseek 未来的研究方向
- 优化模型架构 → 让推理更快,甚至支持“无限上下文”!
- 扩展数据质量 → 让它学得更多,提升知识储备和多语言能力。
- 提升推理深度 → 让模型思考更深入,能解更复杂的题。
- 改进评测体系 → 避免过度针对某些测试优化,确保真实能力提升。