大模型 MoE,你明白了么?
最近被T4卡搞得有点抽风就多些一点关于大模型的讲解的。由浅至深的讲个透,愿天下用老旧显卡的人儿都可以远离傻*问题。
作者:吴佳浩
最后更新:2025-12-11
适用人群:大模型上下游相关从业者
——以 Qwen2/Qwen3 为例,从入门到回家
1. 什么是 MoE(Mixture of Experts)
核心概念
MoE = 混合专家模型,它让模型由多个"专家网络"组成,每次推理只激活少量专家,从而实现:
- ✅ 保留大模型能力 - 总参数量大,能力强
- ✅ 降低推理成本 - 只激活部分参数,计算量小
- ✅ 提升领域能力 - 专家各司其职,术业有专攻
核心理念
💡 不需要每个 token 都用 300 亿参数计算,而是只调用其中最适合解决该问题的专家。
这就像一个医院:
- 你头疼不需要召集所有科室医生
- 只需要神经科专家诊断
- 但医院仍然拥有全科能力
为什么需要 MoE?
Dense 模型的问题:
| 参数量 | 推理需要激活 | 显存需求 |
|---|---|---|
| 70B | 全 70B | 极高(>140GB FP16) |
MoE 的改进:
| 总参数量 | 每次激活 | 实际推理成本 |
|---|---|---|
| 70B(含16个专家) | Top-1=3B | 像跑 3B 模型一样 cheap |
核心思想:选对专家,而不是计算全部专家。
2. MoE 架构全景
2.1 基础架构流程
1flowchart TD 2 A[输入 Token:<br/>写一段 Python 代码] --> B{Router 路由器<br/>分析 token 特征} 3 4 B -->|权重 0.8| C1[Expert 1<br/>代码专家] 5 B -->|权重 0.2| C2[Expert 5<br/>逻辑专家] 6 7 B -.不激活.-> C3[Expert 2] 8 B -.不激活.-> C4[Expert 3] 9 B -.不激活.-> C5[Expert 4] 10 11 C1 --> D[加权合并输出] 12 C2 --> D 13 D --> E[最终输出] 14 15 style B fill:#FFD700 16 style C1 fill:#90EE90 17 style C2 fill:#90EE90 18 style C3 fill:#E0E0E0 19 style C4 fill:#E0E0E0 20 style C5 fill:#E0E0E0 21
关键要素解释:
- Router(路由器) - 根据输入内容选择最适合的专家(Top-1 / Top-2)
- Experts(专家) - 每个都是独立的 FFN 网络,拥有专属参数
- 选择性激活 - 只激活部分专家,其余专家在当前 token 不参与运算
- 加权合并 - 将激活专家的输出按权重求和
2.2 完整 Transformer 层结构
1flowchart TB 2 subgraph "传统 Transformer 层" 3 A1[Input] --> A2[Multi-Head Attention] 4 A2 --> A3[Add & Norm] 5 A3 --> A4[Dense FFN<br/>所有参数激活] 6 A4 --> A5[Add & Norm] 7 A5 --> A6[Output] 8 end 9 10 subgraph "MoE Transformer 层" 11 B1[Input] --> B2[Multi-Head Attention] 12 B2 --> B3[Add & Norm] 13 B3 --> B4{MoE Layer<br/>路由器选择} 14 B4 --> B5[Expert 1] 15 B4 --> B6[Expert 2] 16 B4 -.-> B7[Expert N] 17 B5 --> B8[Sparse Activation<br/>仅部分专家激活] 18 B6 --> B8 19 B7 -.-> B8 20 B8 --> B9[Add & Norm] 21 B9 --> B10[Output] 22 end 23 24 style A4 fill:#FFB6C1 25 style B4 fill:#87CEEB 26 style B8 fill:#90EE90 27
对比要点:
- 传统模型:FFN 层所有参数都参与计算
- MoE 模型:用多专家 + 路由器替代 Dense FFN
3. Dense 模型 vs MoE 模型:显存与计算对比
3.1 什么是 Dense(稠密模型)
Dense = 所有参数全部参与推理
1graph LR 2 A[输入] --> B[Layer 1<br/>32B 参数] 3 B --> C[Layer 2<br/>32B 参数] 4 C --> D[Layer 3<br/>32B 参数] 5 D --> E[输出] 6 7 style B fill:#FF6B6B 8 style C fill:#FF6B6B 9 style D fill:#FF6B6B 10
示例:
- Qwen2.5-32B Dense
- 推理时 32B 全激活
- 显存占用 60+ GB(FP16)
- 性能强但成本高
显存对比表:
| 模型 | FP16 | FP8 | INT8 | INT4 |
|---|---|---|---|---|
| Qwen3 Dense 32B(全激活) | 60+ GB | 30 GB | 28 GB | 15 GB |
| Qwen3 MoE 30B(激活 ~3B) | 6 GB | 3 GB | 3 GB | 1.5 GB |
👉 MoE 推理显存 ≈ Dense 的 1/10~1/20
3.2 什么是 MoE(混合专家模型)
MoE = 总参数大,但每次只激活少量专家
1graph TB 2 A[Input] --> B[Layer 1<br/>Total Params 30B] 3 B --> C{Router<br/>Select Top-2} 4 5 C -->|Active| D1[Expert 1<br/>1.5B] 6 C -->|Active| D2[Expert 5<br/>1.5B] 7 C -.-> D3[Other Experts<br/>Not Activated<br/>27B] 8 9 D1 --> E[Merge Output] 10 D2 --> E 11 E --> F[Next Layer] 12 13 style D1 fill:#90EE90 14 style D2 fill:#90EE90 15 style D3 fill:#E0E0E0 16 17
示例:
- Qwen1.5-MoE-33B
- 总参数:33B
- 激活专家:Top-1(约 3B)
- 显存占用:~6GB(FP16)
- 推理成本 ≈ 3B Dense 模型
3.3 显存占用对比表(重要!)
以 Qwen3 32B Dense & Qwen3 30B MoE 为例:
| 模型配置 | FP16(全精度) | FP8 | INT8 | INT4 |
|---|---|---|---|---|
| Qwen3 Dense 32B(全参数激活) | 60+ GB | ~30 GB | ~28 GB | ~15 GB |
| Qwen3 MoE 30B(激活 3B) | ~6 GB | ~3 GB | ~3 GB | ~1.5 GB |
1gantt 2 title 显存占用对比(GB) 3 dateFormat X 4 axisFormat %s 5 section 30B 模型 6 FP16 :0, 60 7 FP8 :0, 30 8 INT8 :0, 28 9 INT4 :0, 15 10 section 3B 模型 11 FP16 :0, 6 12 FP8 :0, 3 13 INT8 :0, 3 14 INT4 :0, 1.5 15
结论:
⚡ MoE 推理显存消耗 ≈ Dense 的 1/10
原因:
- Dense:所有层、所有参数都要参与计算
- MoE:每层只用少数专家(如激活 3B)
这就是为什么 30B MoE 可以在消费级显卡运行。
4. MoE 的关键概念
4.1 专家数量(Experts)
1mindmap 2 root((MoE 专家池<br/>16 个专家)) 3 Expert 1 4 推理能力 5 逻辑分析 6 Expert 2 7 创意写作 8 故事创作 9 Expert 3 10 数学计算 11 公式推导 12 Expert 4 13 代码生成 14 算法实现 15 Expert 5 16 语言翻译 17 多语言理解 18 Expert 6~16 19 其他领域 20 动态分工 21
专家分工示例:
- Expert 1:推理、逻辑分析
- Expert 3:数学、计算
- Expert 5:代码生成
- Expert 7:语言翻译
- Expert 10:创意写作
- …
4.2 Top-K(激活专家数量)
1flowchart LR 2 A[输入 Token] --> B{Router 打分} 3 B --> C[专家得分排序] 4 5 subgraph "Top-1 策略" 6 C --> D1[选择得分最高的 1 个专家] 7 D1 --> E1[速度最快<br/>成本最低] 8 end 9 10 subgraph "Top-2 策略" 11 C --> D2[选择得分最高的 2 个专家] 12 D2 --> E2[性能更好<br/>成本适中] 13 end 14 15 style D1 fill:#90EE90 16 style D2 fill:#87CEEB 17
常见配置:
- Top-1:每次激活 1 个专家(速度快)
- Top-2:每次激活 2 个专家(性能好)
4.3 参数关系图
1graph TB 2 A[MoE 模型<br/>总参数 30B] --> B[共 16 个专家] 3 B --> C1[Expert 1<br/>1.9B 参数] 4 B --> C2[Expert 2<br/>1.9B 参数] 5 B --> C3[Expert 3<br/>1.9B 参数] 6 B --> C4[...] 7 B --> C5[Expert 16<br/>1.9B 参数] 8 9 D[推理时 Top-1] --> E[只激活 1 个专家<br/>约 3B 参数] 10 E --> F[其余 15 个专家<br/>不参与计算] 11 12 style E fill:#90EE90 13 style F fill:#E0E0E0 14
关键公式:
1总参数 = 专家数量 × 单专家参数 + 共享参数 2激活参数 = Top-K × 单专家参数 + 共享参数 3推理成本 ∝ 激活参数(而非总参数) 4
5. 常见疑问:没激活的专家是不是浪费?
❌ 错误理解
1flowchart LR 2 A[用户提问] --> B[激活 Expert 4<br/>代码专家] 3 B --> C[其他 15 个专家<br/>完全没用?] 4 5 style C fill:#FFB6C1 6
✅ 正确理解
1flowchart TB 2 A[MoE 专家池] --> B[不同任务触发不同专家] 3 4 B --> C1[任务 1: 写代码<br/>触发 Expert 4] 5 B --> C2[任务 2: 数学题<br/>触发 Expert 3] 6 B --> C3[任务 3: 翻译<br/>触发 Expert 7] 7 B --> C4[任务 4: 创作<br/>触发 Expert 2] 8 9 C1 --> D[所有专家都会被使用<br/>只是时机不同] 10 C2 --> D 11 C3 --> D 12 C4 --> D 13 14 style D fill:#90EE90 15
真相:
- 训练时 - 所有专家都会被激活并学习
- 推理时 - 根据任务动态选择最合适的专家
- 长期使用 - 每个专家都会在各自擅长的领域发光
类比:
🏥 医院有 16 个科室,你看病只挂 1 个科室,但其他科室不是浪费,而是在服务其他患者。
6. Qwen3(Dense / MoE)部署推荐方案
场景分析
1flowchart TD 2 A[你的硬件条件?] --> B{显卡显存} 3 4 B -->|24GB 消费级| C[推荐方案 1] 5 B -->|48GB 专业卡| D[推荐方案 2] 6 B -->|80GB+ 服务器| E[推荐方案 3] 7 8 C --> C1["Qwen3-14B Dense FP8 显存: ~14GB 性能: 强"] 9 C --> C2["Qwen1.5-MoE-33B INT4 显存: ~1.5GB 性能: 中上"] 10 11 D --> D1["Qwen3-32B Dense FP8 显存: ~30GB 性能: 极强"] 12 13 E --> E1["Qwen3-72B Dense FP8 显存: ~72GB 性能: 顶级"] 14 15 style C1 fill:#90EE90 16 style C2 fill:#87CEEB 17 style D1 fill:#FFD700 18 style E1 fill:#FF6B6B 19
方案 1:注重性能(推荐)
Qwen3-14B Dense(INT4 或 FP8)
| 精度 | 显存占用 | 推荐指数 | 说明 |
|---|---|---|---|
| FP16 | ~28GB | ❌ | 超出 24GB 显存 |
| FP8 | ~14GB | ⭐⭐⭐⭐⭐ | 强烈推荐 |
| INT4 | ~7GB | ⭐⭐⭐⭐ | 轻量级最佳 |
优势:
- 性能显著强于 7B
- 性价比 > 70%
- 适合日常对话、代码生成
方案 2:大模型能力 + 小显存
Qwen1.5-MoE-33B(INT4)
| 指标 | 数值 |
|---|---|
| 总参数 | 33B |
| 激活参数 | ~3B |
| 显存占用 | ~1.5GB (INT4) |
优势:
- ✅ 显存占用极低(4GB 显卡可跑)
- ✅ 推理速度快
- ✅ 性能接近 30B Dense(尤其中文、推理)
劣势:
- ⚠️ 特定任务效果可能不如 Dense 精细
方案 3:企业级旗舰
Qwen3-72B Dense(FP8)
硬件要求:
- A100 80GB / H100
- 或多卡 80GB GPU
性能:
- Top 级别
- 适合企业级应用
7. MoE 的训练机制(进阶)
7.1 训练流程图
1sequenceDiagram 2 participant D as 训练数据 3 participant R as Router<br/>路由器 4 participant E1 as Expert 1 5 participant E2 as Expert 2 6 participant L as Loss<br/>损失函数 7 8 D->>R: 输入 Token 9 R->>R: 计算专家得分 10 R->>E1: 激活 (权重 0.7) 11 R->>E2: 激活 (权重 0.3) 12 E1->>L: 输出 O1 13 E2->>L: 输出 O2 14 L->>L: 计算任务损失<br/>+ 负载均衡损失 15 L-->>E1: 反向传播更新 16 L-->>E2: 反向传播更新 17 L-->>R: 更新路由参数 18
7.2 路由器训练机制
1flowchart TB 2 A[输入 Token 表示] --> B[Router 小型网络<br/>Linear + Softmax] 3 B --> C[输出专家概率分布] 4 5 C --> D{Top-K 选择} 6 D --> E1[专家得分: 0.35] 7 D --> E2[专家得分: 0.28] 8 D --> E3[专家得分: 0.15] 9 D --> E4[其他专家...] 10 11 E1 --> F[选择 Top-2] 12 E2 --> F 13 14 F --> G[+ 负载均衡损失<br/>防止专家偏向] 15 16 style G fill:#FFD700 17
训练优化:
- 使用 Softmax + Top-K
- 加入 负载均衡(Load Balancing)损失项
- 确保专家不会"偏向性过强"
7.3 专家特化过程
1flowchart LR 2 A[训练初期<br/>专家无明显分工] --> B[中期<br/>逐渐形成偏好] 3 B --> C[后期<br/>专家特化完成] 4 5 subgraph "训练初期" 6 A1[Expert 1<br/>通用能力] 7 A2[Expert 2<br/>通用能力] 8 A3[Expert 3<br/>通用能力] 9 end 10 11 subgraph "训练后期" 12 C1[Expert 1<br/> 代码专家] 13 C2[Expert 2<br/> 数学专家] 14 C3[Expert 3<br/> 创意专家] 15 end 16 17 A1 -.演化.-> C1 18 A2 -.演化.-> C2 19 A3 -.演化.-> C3 20 21 style C1 fill:#90EE90 22 style C2 fill:#87CEEB 23 style C3 fill:#FFB6C1 24
关键训练技术:
- OBST(One-Batch Selective Training)
- GShard(Google)
- Switch Transformer(Google)
- DeepSpeed-MoE(微软)
7.4 防止专家闲置的机制
1mindmap 2 root((防止专家闲置)) 3 负载均衡损失 4 惩罚过度使用某个专家 5 奖励使用冷门专家 6 多任务训练 7 覆盖不同领域数据 8 确保每个专家有用武之地 9 随机噪声 10 路由器添加随机扰动 11 增加专家激活多样性 12 Expert Dropout 13 训练时随机丢弃专家 14 强制其他专家学习 15
结果: 所有专家都有机会参与训练,不会出现"活跃专家"和"僵尸专家"。
8. 完整知识体系总结
1mindmap 2 root((MoE核心知识)) 3 基础概念 4 多专家结构 5 稀疏激活 6 路由机制 7 参数关系 8 总参数不等推理成本 9 激活参数定成本 10 显存占用1/10 11 模型对比 12 Dense全激活 13 MoE选激活 14 性能成本权衡 15 训练机制 16 路由器训练 17 专家特化 18 负载均衡 19 部署方案 20 消费级14B 21 专业级32B 22 企业级72B 23 优势 24 大模型能力 25 小模型成本 26 领域特化 27
9. 十句话掌握 MoE
- MoE = 多专家结构,每次只激活少数专家
- 总参数(如 30B)≠ 推理成本
- 推理成本 ≈ 激活参数(如 3B)
- Dense = 全部激活,性能强但成本高
- MoE = "大模型能力 + 小模型成本"
- INT4/FP8 是量化技术,与 MoE 架构无关
- INT4 省显存但会略降性能
- MoE 不会浪费参数,未激活专家会在其他任务中使用
- Qwen3-14B Dense FP8 是最稳健的部署方案
- Qwen-MoE 系列适合显存 4GB~24GB 的场景
10. 个人快速决策指南
1flowchart TD 2 Start[开始选择模型] --> Q1{你的显存?} 3 4 Q1 -->|4-8GB| A1[Qwen1.5-MoE-33B INT4<br/>显存: 1.5GB<br/>性能: 中上] 5 Q1 -->|12-16GB| A2[Qwen3-7B Dense FP8<br/>显存: 7GB<br/>性能: 中] 6 Q1 -->|20-24GB| A3{优先什么?} 7 Q1 -->|40GB+| A4[Qwen3-32B Dense FP8<br/>显存: 30GB<br/>性能: 极强] 8 Q1 -->|80GB+| A5[Qwen3-72B Dense FP8<br/>显存: 72GB<br/>性能: 顶级] 9 10 A3 -->|性能| B1[Qwen3-14B Dense FP8<br/>显存: 14GB<br/>性能: 强] 11 A3 -->|兼顾| B2[Qwen3-14B Dense INT4<br/>显存: 7GB<br/>性能: 强] 12 13 style A1 fill:#87CEEB 14 style B1 fill:#90EE90 15 style A4 fill:#FFD700 16 style A5 fill:#FF6B6B 17
附录:参考资源
官方文档:
部署工具:
- vLLM
- Ollama
- llama.cpp
《大模型 MoE,你明白了么?》 是转载文章,点击查看原文。

