本文档提供了 DeepSeek-V3 中混合专家(MoE)实现的详细解释。MoE 是使 DeepSeek-V3 能够实现其令人印象深刻的参数效率的核心架构组件:尽管模型总共有 671B 个参数,但在推理过程中,每个 token 只激活 37B 个参数。有关多头潜在注意力(MLA)等其他关键架构组件的信息,请参阅 多头潜在注意力(MLA)。
混合专家(MoE)架构是一种稀疏激活的神经网络设计,其中模型的参数子集(“专家”)仅为每个输入 token 激活。这种方法在不按比例增加推理过程中的计算成本的情况下,显著提高了模型的容量。
在 DeepSeek-V3 中,MoE 层取代了大多数 Transformer 块中的标准前馈网络。每个 MoE 层包含多个专门的“专家”网络和一个门控机制,该机制决定哪些专家应处理每个 token。
来源: inference/model.py646-690 README.md47-48
DeepSeek-V3 的 MoE 架构包含三个主要组件
门控网络负责确定哪些专家应处理每个输入 token。它会生成路由权重并为每个 token 选择 top-k 专家。
DeepSeek-V3 中的每个专家都实现为类似于标准 MLP 的前馈网络,但没有并行化功能。专家仅处理路由给它们的 token,并且它们的输出根据门控的路由权重进行加权。
DeepSeek-V3 中的 MoE 实现具有几个关键特征
MoE 架构通过 ModelArgs 类中定义的几个参数进行配置
| 参数 | 描述 | 默认值 |
|---|---|---|
n_routed_experts | 路由专家的总数 | 64(完整模型中为 256) |
n_shared_experts | 共享专家的数量 | 2 |
n_activated_experts | 每个token激活的专家数量 | 6 |
n_expert_groups | 专家组的数量 | 1 |
n_limited_groups | 路由的限制组数 | 1 |
score_func | 路由的评分函数(“softmax”或“sigmoid”) | “softmax” |
route_scale | 路由权重的缩放因子 | 1.0 |
moe_inter_dim | 专家 FFN 的中间维度 | 1408 |
DeepSeek-V3 中的 MoE 类协调了整个混合专家过程
前向传播通过 MoE 层遵循以下步骤
DeepSeek-V3 中的 MoE 层被纳入 Transformer 块中作为前馈网络。最初的几层使用标准的 MLP,而剩余的层使用 MoE。
来源: inference/model.py693-732 inference/model.py735-794
DeepSeek-V3 支持跨多个设备的 MoE 架构的分布式执行。这通过以下方式实现:
来源: inference/model.py654-664 inference/model.py687-689
DeepSeek-V3 中的 MoE 架构提供了几个关键优势
MoE 架构,结合多头潜在注意力(MLA)和用于负载均衡的无辅助损失策略,帮助 DeepSeek-V3 实现与领先的闭源模型相媲美的性能,同时在训练和推理方面都保持高效。
来源: README.md47-52 README.md65-67
Gate 类决定为每个输入 token 激活哪些专家
关键实现点
[n_routed_experts, dim] 的可学习权重矩阵route_scale 参数缩放最终路由权重每个专家是一个具有三个线性变换的前馈网络
w1:从 dim 投影到 inter_dimw2:从 inter_dim 投影回 dimw3:从 dim 到 inter_dim 的附加投影w1 的输出应用 SiLU 激活w3 的输出逐元素相乘w2 投影结果MoE 类中的前向传播