(2024|ACL|DeepSeek 北大,MoE,细粒度专家分割,共享专家隔离)DeepSeekMoE:迈向极致专家专精的 MoE 语言模型
DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models论文地址https://arxiv.org/abs/2401.06066项目页面https://github.com/deepseek-ai/DeepSeek-MoE学术交流群922230617目录1. 引言大模型的成本困局与 MoE 的机遇2. 预备知识Transformer 中的 MoE 基础3. DeepSeekMoE 架构两大核心策略3.1 细粒度专家分割3.2 共享专家隔离3.3 负载均衡考量4. 验证实验2B 规模下的初步探索4.1 实验设置4.2 主要结果4.3 逼近 MoE 上界4.4 消融实验4.5 专家专精分析5. 扩展到 16B媲美 LLaMA2 7B 仅需 40% 计算5.1 设置5.2 内部对比与 DeepSeek 7B (dense)5.3 与开源模型对比6. 对齐微调MoE 也能从 SFT 受益7. 145B 大规模初步尝试8. 相关工作参考1. 引言大模型的成本困局与 MoE 的机遇近年来大语言模型LLM的规模持续增长从数十亿到数千亿参数性能也随之跃升。但随之而来的计算成本也令人望而却步。混合专家Mixture-of-Experts, MoE架构成为缓解这一矛盾的重要方向它通过条件计算只激活模型中的一小部分参数从而在保持总参数巨大的同时控制每次前向传播的计算量。然而传统的 MoE 架构如 GShard、Switch Transformer通常采用Top-K 路由K1 或 2每个 token 被分配给少数几个专家。这种做法带来了两个核心问题知识混合Knowledge Hybridity由于专家数量有限每个专家被迫学习多种不同类型的知识难以形成真正聚焦的专长。知识冗余Knowledge Redundancy不同专家可能学到相似的基础知识导致参数冗余浪费了模型容量。这两个问题共同限制了专家的“专精化”specialization进而影响了 MoE 模型的上限性能。为此文中提出了DeepSeekMoE架构旨在通过两种创新策略实现极致的专家专精细粒度专家分割Fine-Grained Expert Segmentation共享专家隔离Shared Expert Isolation实验表明DeepSeekMoE 在 2B、16B 乃至 145B 规模上均显著优于传统 MoE且能以更少的计算量媲美 dense 模型。2. 预备知识Transformer 中的 MoE 基础在标准的 Transformer 中每一层包含一个自注意力子层和一个前馈网络FFN子层。MoE 的做法是将某些层的 FFN 替换为多个并行的专家 FFN并为每个 token 动态选择其中 K 个专家进行计算。公式上对于第 l 层输出为其中 g_{i,t} 为路由权重只有 Top-K 个专家非零。这种稀疏性保证了计算效率。3. DeepSeekMoE 架构两大核心策略3.1 细粒度专家分割传统做法是将 FFN 中间维度设为较大的值如 4 倍隐藏维度每个专家容量大但数量少。DeepSeekMoE 反其道而行之将每个专家的中间维度缩小为原来的 1/m同时将专家总数扩大到 mN激活的专家数也增至 mK。这样做的效果是每个专家变得更 “小”只能学习更聚焦的知识片段。组合灵活度暴增例如 N16K2 时组合数为 C(16,2)120若 m4则总专家 64激活 8组合数高达 C(64,8)≈44亿。这种巨大的组合空间让模型能更精确地匹配每个 token 所需的知识。Fine-Grained Expert 并非是无成本的N 越大Expert 之间的负载往往越不均衡并且 Expert 之间的通信和协调成本也会增加所以 N 也不能无限增加有一个效果和效率都友好的舒适区间。3.2 共享专家隔离在常规路由中多个专家可能都需要处理一些通用的基础知识如语法、常识。这会导致冗余。为此DeepSeekMoE 设置K_s 个共享专家它们始终被激活专门负责捕捉所有 token 都可能需要的公共知识。这样一来其余的路由专家可以专注于更独特、更差异化的知识避免了冗余。同时为了保持计算量不变从路由专家中减去 K_s 个激活名额。最终DeepSeekMoE 层的输出为共享专家输出 路由专家输出之和。3.3 负载均衡考量为了规避路由崩溃某些专家始终被选中其他专家得不到训练论文采用了专家级负载均衡损失鼓励各专家被选中的频率均匀。同时在更大规模分布式训练时还引入了设备级负载均衡损失确保计算负载在各 GPU 间均衡不牺牲性能。4. 验证实验2B 规模下的初步探索4.1 实验设置模型9 层隐藏维度 1280总参数约 2B激活参数约 0.3B。训练数据100B tokens多语言混合。对比基线DenseHash LayerSwitch TransformerGShard。4.2 主要结果DeepSeekMoE 显著超越同规模 GShard甚至与 1.5 倍专家参数的 GShard 持平。4.3 逼近 MoE 上界与dense 模型 ×16即 FFN 参数扩大 16 倍对比DeepSeekMoE 的 Pile loss 仅为 1.808而 Dense×16 为 1.806差距极小。这说明 DeepSeekMoE 几乎达到了同等总参数下 MoE 的理论性能上限。4.4 消融实验共享专家隔离单独引入共享专家即可提升多数指标。细粒度分割从 1 个专家分割到 2、4 个性能持续提升。共享专家数量不同的比例对性能影响微小1:3 的共享专家/激活的路由专家比例表现整体略优在 scaling 时固定这个比例。虽然从图里看 1:7 最优但可能作者考虑到更大的计算量激活的专家仅换取微小的性能提升。综合考虑1:3 为最优。4.5 专家专精分析冗余度更低图 4当禁用 top 路由专家时DeepSeekMoE 的性能下降更剧烈说明每个专家更不可替代。共享专家不可替代禁用共享专家后即使增加一个路由专家Pile loss 从 1.808 飙升到 2.414凸显其独特作用。文中未给出对比图但从图 3 的性能对比也可得出结论。更精准的知识获取只用 4 个路由专家就能达到 GShard 同等性能说明知识更聚焦。5. 扩展到 16B媲美 LLaMA2 7B 仅需 40% 计算5.1 设置模型28 层隐藏维度 2048总参数 16.4B激活参数 2.8B。每个 MoE 层2 个共享专家 64 个路由专家激活 6 个。训练数据训练 2T tokens与 LLaMA2 7B 相同数据量。5.2 内部对比与 DeepSeek 7B (dense)在多数任务上持平或略优尤其是在语言建模和知识密集任务上。5.3 与开源模型对比在 Open LLM Leaderboard 上DeepSeekMoE 16B 显著优于同激活参数量的模型如 GPT-J 6B、Pythia 2.8B且与 LLaMA2 7B约 2.5 倍激活参数性能相当。特别优势代码生成HumanEval 26.8% vs LLaMA2 14.6%、数学推理GSM8K 18.8 vs 15.5、中文任务CMMLU 42.5 vs 32.6。6. 对齐微调MoE 也能从 SFT 受益以往认为 MoE 模型微调效果不佳但文中通过指令微调SFT证明了 DeepSeekMoE 16B 同样能获得显著提升。训练数据1.4M 条多任务指令中英双语。超参数batch size 1024学习率 1e-5训练 8 轮。结果DeepSeekMoE Chat 16B 与 LLaMA2 SFT 7B、DeepSeek Chat 7B 相比在大多数任务上持平或更优而计算量仅为其 40%。尤其在代码和中文任务上优势明显。7. 145B 大规模初步尝试进一步将模型扩展到 145B 总参数激活 22.2B训练 245B tokens。对比 GShard 137B 和 DeepSeek 67Bdense相比 GShard 137BDeepSeekMoE 145B 全面领先。与 DeepSeek 67B 相比仅用 28.5% 的计算量即可达到相近性能若再减半激活专家仅需 18.2%。这再次验证了 DeepSeekMoE 架构在大规模下的有效性和扩展性。8. 相关工作MoE 研究历经从 LSTM 到 Transformer 的演变经典工作包括 GShard、Switch Transformer、Hash Layer、StableMoE、Expert Choice 等。这些工作多采用固定数量的专家和简单路由而 DeepSeekMoE 首次系统性地从专家专精角度进行架构创新并通过细粒度和共享策略取得突破。参考https://spaces.ac.cn/archives/10945