DeepSeek-MoE
单卡40GB显存可跑的16B MoE大模型,40%计算量达到LLaMA2 7B同等性能
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
单卡40GB显存可跑的16B MoE大模型,40%计算量达到LLaMA2 7B同等性能
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2023 年下半年,AI 社区最热的议题之一是:大模型的算力成本何时能真正降下来? 当 GPT-4、Claude、LLaMA2 等动辄数百亿参数 dense 模型成为标杆时,推理成本让绝大多数研究团队望而却步。一块 RTX 4090(24GB)能跑 7B 参数的模型,但要跑一个 70B 参数的模型,就需要 8 卡 A100 集群——这不是普通研究者能承受的。
DeepSeekMoE 16B 正是在这一背景下诞生的。2024 年 1 月,国产 AI 团队 DeepSeek(幻方量化旗下)发布了这篇论文,并开源了模型权重和代码。它提出的核心问题是:能否在保持模型性能的同时,大幅削减激活参数?
答案是:可以。

图1:DeepSeekMoE 16B Base 在 Open LLM Leaderboard 上与同类模型的对比——在仅约 37 亿激活参数的条件下,DeepSeekMoE 16B 的表现与 LLaMA2 7B(~70 亿激活参数)相当,但计算量仅为后者的 40%。
DeepSeekMoE 的核心技术源自论文 DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models(arXiv:2401.06066)。它对传统 MoE 架构做了两项关键创新:
1. 细粒度专家分割(Fine-grained Expert Segmentation)
传统 MoE 将 FFN 层拆分为 N 个"专家",每次推理只激活 K 个。DeepSeekMoE 的做法是:将专家数量从 N 扩展到 mN(m > 1),同时将每个专家的隐藏维度从 d 缩减到 d/m。这意味着总参数量保持不变,但专家数量大幅增加,使模型能够学习到更精细的专业化知识。
举例来说:如果传统 MoE 有 8 个专家处理"语言""数学""代码""逻辑"等粗粒度任务,DeepSeekMoE 可能有 64 个专家,每个专家专注于更窄的子领域——"中文对话""英文技术写作""数学证明""Python 代码""C++ 代码"等。
2. 共享专家隔离(Shared Expert Isolation)
DeepSeekMoE 还引入了 K 个"共享专家",这些专家在每次前向传播中都会被激活,专门处理所有 token 都需要的通用知识(如语法规则、常见模式)。这部分计算是不可避免的,但它让其他专家能够更专注于各自的专业领域。
这两项创新结合起来,效果显著:在 2T tokens 训练后,DeepSeekMoE 16B 的性能与 DeepSeek 7B(dense 模型)和 LLaMA2 7B 相当,但推理计算量仅为后两者的 40%。
从代码结构来看,DeepSeekMoE 基于 Hugging Face Transformers 框架构建:
modeling_deepseek.py——这是模型的核心实现finetune/ 目录,包含 DeepSpeed ZeRO-2/3 配置和微调脚本
图2:在内部基准测试中,DeepSeekMoE 16B 与同源 Dense 模型 DeepSeek 7B 的对比——仅用 40.5% 的计算量,达到相当的性能水平。
DeepSeekMoE 最令人惊喜的特性之一是:可以在单张 40GB 显存的 GPU 上运行,无需量化。这主要得益于 MoE 的稀疏激活特性——虽然总参数量为 16.4B,但每次推理只激活约 2.7B 参数。
实测硬件需求:
| 配置项 | 要求 |
|---|---|
| GPU | NVIDIA(RTX 4090 24GB 可行,A100 40GB 更充裕) |
| VRAM | ≥ 40GB |
| RAM | ≥ 32GB |
| 磁盘 | ≥ 50GB(模型权重约 30GB) |
| Python | ≥ 3.8 |
| CUDA | ≥ 11.7 |
安装方式非常直接:
pip install -r requirements.txt
然后从 HuggingFace 下载模型权重(Base 或 Chat 版本),使用 Transformers 加载即可推理。
项目同时发布了 DeepSeekMoE 16B Chat 版本。与 Base 版本不同,Chat 版本经过了监督微调(SFT),在对话、推理和指令遵循方面表现更佳。

图3:DeepSeekMoE 16B Chat 与 DeepSeek 7B Chat、LLaMA2 7B SFT 的评测对比——在多数基准上达到相当或更优的水平,且计算量更低。
1. 训练成本依然不低 虽然推理成本大幅降低,但 DeepSeekMoE 的预训练需要 2T tokens 数据和一个庞大的 GPU 集群(从模型规模推测,训练应在数千卡级别)。这不是普通团队能复现的。
2. 专家负载均衡的工程挑战 MoE 的一个经典问题是"专家塌陷"(expert collapse)——某些专家长期不被激活。DeepSeekMoE 在论文中提到了辅助损失函数(auxiliary loss)来缓解这一问题,但在实际微调中仍需关注。
3. 非结构化 MoE 的推理延迟 尽管激活参数少,但总参数量大(16.4B),这意味着模型权重的加载和 GPU 内存带宽压力仍然存在。在低端 GPU 上可能出现内存带宽瓶颈而非计算瓶颈。
4. 商业许可需仔细阅读 代码采用 MIT 许可证,但模型权重采用"Model Agreement"——这意味着商业使用需要向 DeepSeek 申请授权,不能直接用于商业产品。
DeepSeekMoE 的发布具有重要的行业意义:
证明了细粒度 MoE 的有效性:此前,大多数开源 MoE 模型(如 Mixtral 8x7B)采用粗粒度专家分割。DeepSeekMoE 的实验表明,增加专家数量、缩小单个专家的维度,可以显著提升专业化程度。
推动了"高效大模型"趋势:DeepSeekMoE 让 16B 参数级别的模型具备了接近 70B 参数 dense 模型的性能,这意味着未来 AI 应用可以在消费级硬件上运行更强大的模型。
为国产开源 AI 生态贡献力量:DeepSeek 团队持续开源高质量模型(从 DeepSeek 7B 到 DeepSeekMoE 16B,再到后续的 DeepSeek-Coder 等),丰富了中文 AI 社区的模型选择。
安装依赖:
pip install torch>=2.0.1 transformers>=4.36.2 accelerate
加载 Base 模型推理:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "deepseek-ai/deepseek-moe-16b-base"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto")
inputs = tokenizer("DeepSeekMoE is", return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=50)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
加载 Chat 模型(对话):
model_name = "deepseek-ai/deepseek-moe-16b-chat"
# ... 相同加载方式
Fine-tuning(需要多卡 DeepSpeed 环境):
cd finetune
torchrun --nproc_per_node=8 finetune.py --config configs/ds_config_zero2_no_offload.json
⚠️ 重要提示:模型权重商业使用需向 DeepSeek 申请授权,详见 LICENSE-MODEL。