Appearance
混合专家模型,通过路由机制在每次 forward 仅激活部分专家网络,以较低计算成本实现超大参数量。
为什么需要 Mixture of Experts
模型容量(参数量)与性能正相关,但全量激活的计算成本随参数线性增长。MoE 将模型中的 FFN 层替换为多个并行的专家网络(Expert),每个 token 仅由路由器(Router/Gate)选出的 1-2 个专家处理。以 DeepSeek-V3 为例,总参数 671B 但每个 token 仅激活 37B,计算成本与 37B 稠密模型相当。
核心原理
- Router/Gate:线性层将 hidden state 映射为专家分数,取 Top-K 选择活跃专家。
- Expert 网络:每个专家是一个独立的 FFN(或更复杂的网络),各自持有独立权重。
- 负载均衡:为防止路由坍缩(多数 token 走同一专家),通常加入 auxiliary loss 鼓励均匀分布。
- Expert Parallelism:专家按数量均匀分配到多个 GPU,每个 GPU 处理被路由到本地专家的 token。
在源码中的实现
vllm/model_executor/models/— 支持 Mixtral、DeepSeek、Qwen-MoE 等多种 MoE 架构。vllm/model_executor/layers/fused_moe/— 高性能 MoE kernel 实现(CUDA、Triton)。vllm/model_executor/layers/fused_moe/oracle/— Oracle 框架统一后端选择(W4A8、WNA16 等量化方案)。vllm/model_executor/layers/fused_moe/eep_reconfigure.py— Elastic EP 动态扩展/缩减。vllm/distributed/expert_parallel/— Expert Parallelism 的通信原语(All-to-All、NIXL EP)。vllm/distributed/elastic_ep/— Elastic EP 的分阶段生命周期管理。vllm/worker/worker.py— Worker 根据 expert_parallel_size 加载对应专家。vllm/config.py— 模型配置中解析 num_experts、num_experts_per_tok 等参数。
相关概念
- tensor-parallelism — TP 与 Expert Parallelism 可组合使用
- pipeline-parallelism — 超大规模 MoE 可能需要 PP 跨节点
- cuda-graph — MoE kernel 的 CUDA Graph capture 需处理动态路由
- flash-attention — MoE 影响的是 FFN 层,Attention 层不变