Skip to content

混合专家模型,通过路由机制在每次 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 等参数。

相关概念