DeepSeek-V3 的核心架构: DeepSeekMoE
实践效果:在671B总参数量下实现单 token 仅激活3.7%参数,推理速度提升2.1倍,训练成本降低67%。以上纯个人总结及观点, 如有错误, 还请大佬们指教。
一. 引言
对于最近大火的 DeepSeek,我只能说天时地利人和,在 2024 年初,在工作的时候接触过 DeepSeek LLM,有发展潜力,但在代码和数学领域,还是 GPT, Kimi,智谱清言等大模型性能更好,社会上也都押宝在大厂大投资累计起来的模型上,不成想 2025 年让 DeepSeek 这匹黑马闯了出来。(以我自己的立场来看,DeepSeek 影响这么大是因为打破了某些骗人的虚假泡泡,纯个人观点)
最近大火的是 DeepSeek 发布的两个参数为 660B 的 DeepSeek-R1-Zero 和 DeepSeek-R1,其中 R1 在几天前也开源了。
-
R1-Zero 基于 DeepSeek-V3-Base,纯粹通过 RL(强化学习)训练,无 STF(监督微调)。
-
R1 则基于 R1-Zero,先利用少量人工标注的高质量数据进行冷启动微调,然后再进行 RL。
(DeepSeek-R1 蒸馏出六个小模型,参数从小到大分别为 1.5B、7B、8B、14B、32B 以及 70B,这六个模型完全开源。感兴趣的可以点击地址下载模型玩一玩: https://huggingface.co/deepseek-ai?continueFlag=f18057c998f54575cb0608a591c993fb)
今天简单介绍一下 DeepSeek-V3 的核心架构: DeepSeekMoE,那么需要先理解一下混合专家模型 MoE(Mixture of Experts)。
二. 混合专家模型(Mixture of Experts, MoE)
在深度学习里,想让模型变得更强,往往就得让它变得更大、更复杂。但这样一来,计算资源的需求就会蹭蹭往上涨。混合专家模型(MoE)通过引入稀疏计算,以及根据任务动态分配资源的机制,高效的解决了在有限的计算资源下最大化模型性能这一问题。
混合专家模型(MoE)是一种基于 Transformer 架构的模型,主要由稀疏MoE层和门控网络/路由机制(Router)两个核心组件构成。
图1
1. 稀疏 MoE 层
-
替代传统 FFN : 在 Transformer 架构中,稀疏 MoE 层通常用于替换标准的前馈神经网络(FFN)层。传统 FFN 需要处理所有输入类型,而 MoE 通过分工协作的专家网络实现更高效的计算。
-
专家网络结构:
-
每个专家(Expert)是一个独立的子网络,通常为轻量级 FFN(参数更少),专注于特定输入特征或任务。图1中显示两组专家系统,每组4个FFN专家(FFN 1-4)。
-
专家可以是分层或嵌套结构(如多层 MoE),相互独立,可以并行计算,进一步增强表达能力。
-
2. 门控网络/路由机制(Router)
-
路由策略(Router):
-
输入隐藏状态通过路由模块(如线性层或注意力机制)生成专家权重(图1中的 p 值),选择当前输入最相关的少数专家。
-
例如: 对输入 h_t,路由输出权重向量,仅激活权重最高的专家。
-
-
动态计算:
-
每次前向传播仅激活部分专家(如1-4个),其余专家处于"关闭"状态,大幅降低计算量。
-
这种稀疏性使得模型参数规模能够扩展至万亿级别,而实际计算量仅呈线性增长。
-
最终输出 = 选中的 FFN 专家的输出 × 门控值(图1中虚线表示的值)
-
3. MoE层完整工作流程:
Input Token → Router评估 → 专家选择 → 专家处理 → 门控加权 → Output
举个例子,假设有一个 MoE 模型,用于文本分类,模型中有三个专家:
专家1: 擅长处理科技类文本
专家2: 擅长处理体育类文本
专家3: 擅长处理娱乐类文本
输入文本:"苹果公司发布了最新的iPhone 15"
分词结果:["苹果公司", "发布", "最新", "的", "iPhone", "15"]
Token向量:[T1, T2, T3, T4, T5, T6] # 每个Ti是d维向量
# 拿两个 token 举例,其他 token 同理(假设都路由到专家权重最高的专家i中)
For token "苹果公司" (T1):
专家1: 0.8
专家2: 0.1
专家3: 0.1 → 选择Top-1专家(专家1)
For token "iPhone" (T5):
专家1: 0.9
专家2: 0.05
专家3: 0.05 → 选择Top-1专家(专家1)
# 专家处理
专家1处理T1 → E1(T1) = [0.9, 0.2, ...] # 输出d维向量
专家2处理T2 → E1(T2) = [0.3, 0.8, ...]
...
专家1处理T5 → E1(T5) = [0.95, 0.1, ...]
# 门控机制,对每个 token 进行加权组合
最终表示 = ∑(门控权重 * 专家输出)
所有token处理后得到:
[0.8*E1(T1), 0.7*E1(T2), 0.6*E1(T3), 0.5*E1(T4), 0.9*E1(T5), 0.8*E1(T6)]
# 通过 Transformer 层整合上下文
上下文表示 = Transformer(MoE_output)
# 池化得到句子表示
句子向量 = MeanPooling(上下文表示)
# 最终分类
分类得分 = LinearLayer(句子向量) → [科技类: 0.92, 体育类: 0.05, 娱乐类: 0.03]
三. DeepSeek-V3 的核心架构: DeepSeekMoE
DeepSeekMoE 不仅继承了 MoE 架构的诸多优势,更在多个关键环节进行了巧妙的改进,实现了效率与性能的完美平衡,为大规模模型的高效训练与推理开辟了新的道路。
1. DeepSeekMoE 的基本架构:在 Transformer 和 MoE 机制上的创新升级
-
细粒度专家划分: 每个 MoE 层包含 1 个共享专家和 256 个路由专家,每个 token 激活 8 个路由专家。这种设计让共享专家处理通用特征,路由专家处理具体任务,提升了模型灵活性和效率。
-
稀疏激活机制: 每个 token 只激活少数专家,降低了计算开销,同时让模型能灵活处理不同类型输入,尤其适合需要高度专业化知识的场景。
2. 动态负载均衡
传统 MoE 中,负载(某些专家可能会因为处理过多的 token 而负载过高)不均衡会导致资源浪费甚至路由崩溃。DeepSeekMoE 的解决方案如下:
-
动态偏置调整: 在训练中,系统监控专家负载,自动调整偏置项:负载高的专家降低偏置,负载低的专家增加偏置,从而实现自然负载均衡。
-
无辅助损失优势: 不引入额外损失函数,避免对模型性能的负面影响,同时有效防止路由崩溃。
3. 序列级负载均衡
传统 MoE 关注全局(数据集级)和局部(Batch 级)负载均衡,而 DeepSeekMoE 首创序列级均衡。
-
序列级平衡损失: 在训练中,系统监控专家负载,自动调整偏置项: 负载高的专家降低偏置,负载低的专家增加偏置,从而实现自然负载均衡。
-
极小化平衡因子: 不引入额外损失函数,避免对模型性能的负面影响,同时有效防止路由崩溃。
4. 节点级负载均衡
-
限制路由节点: 每个 token 最多发送到 4 个节点,节点亲和度通过专家节点的历史协作效率动态计算,选择亲和度高的节点,优先选择通信延迟低、缓存命中率高的节点,减少跨节点通信的开销。
5. 推理保障机制
传统 MoE 推理中,负载不均衡可能导致 token 被丢弃。DeepSeekMoE 的解决方法如下:
-
冗余专家部署: 在推理阶段,高负载专家冗余部署在不同 GPU 上,平衡 GPU 负载。
-
动态负载迁移: 动态选择激活专家,进一步优化推理效率,确保推理过程完整。
四. 总结
实践效果:在671B总参数量下实现单 token 仅激活3.7%参数,推理速度提升2.1倍,训练成本降低67%。
以上纯个人总结及观点, 如有错误, 还请大佬们指教
更多推荐
所有评论(0)