MoE 混合专家推理:路由、负载均衡与显存策略

MoE(混合专家)用稀疏激活换参数容量:推理时每个 token 只经过 Top-K 个专家。本文讲透 MoE 的推理特性——路由、负载均衡、专家并行、激活内存与显存策略,以及多机推理的性能与成本权衡。

MoE(Mixture-of-Experts)是「用稀疏激活换参数容量」的架构:总参数量很大,但每个 token 只激活其中少数几个专家。这让推理获得「大模型的质量 + 小模型的计算量」,却也带来独特难题——路由不均匀、专家并行通信、激活内存随专家数暴涨。本文从 MoE 结构出发,系统讲透路由与负载均衡、专家并行(EP)、激活内存优化、显存策略与多机推理的性能成本权衡。

前置:/ai-distributed-inference-gpu-cluster/(分布式推理与并行)、/ai-llm-inference-architecture/(推理架构与并行范式)、/ai-kernel-fusion-optimization/(内核与算子融合)、/ai-llm-quantization/(量化压缩)。

目录

1. MoE 结构:稀疏激活与路由网络

先理解 MoE 的基本结构与推理时发生了什么。

MoE 层的构成:
□ 共享 attention 部分(与其他层相同)
□ 多个专家(Expert):每个专家是一个独立的 FFN
□ 一个路由网络(Router/Gating):给 token 打分选专家
□ 推理时 token 只经过 Top-K 个专家 → 稀疏激活

与稠密模型对比:
□ 稠密 FFN:所有 token 走同一个 FFN
□ MoE FFN:总参数 = K× 单专家参数,激活仅 Top-K 个
  → 同样 FLOPs,参数量大得多 → 「大模型质量」
  → 每个 token 只算 K 个专家 → 「小模型速度」

代表模型:
□ Mixtral 8x7B:每层 8 专家,Top-2
□ DeepSeek-V3:细粒度专家 + 共享专家
□ Qwen-MoE、Grok:不同专家规模与路由策略
一次 MoE forward(Top-2,8 专家):
token → router 打分 → 得分最高的 2 个专家
      → 结果按得分加权求和
□ 未激活的 6 个专家完全不参与计算
□ 但它们的权重仍占显存 → 显存压力来自「总参数」

工程要点:MoE 的推理本质是「总参数大、激活参数小」——每个 token 只算 Top-K 个专家(稀疏激活),换来大模型质量与小模型计算量。但显存压力来自「全部专家权重」,计算与显存由此脱钩。

2. Top-K 路由与负载均衡:token 怎么选专家

路由决定一切:选得准,质量高;选得不均匀,GPU 忙闲不均。

路由打分:
□ router 输出每个专家的概率分布(softmax over 专家数)
□ 取 Top-K(如 K=2)个专家执行
□ 结果按概率加权求和(gating 加权)

为什么路由会不均匀:
□ 部分专家「全能」→ 几乎每个 token 都选它(热点)
□ 部分专家「冷门」→ 长期闲置
□ 热点专家所在 GPU 忙爆,冷门专家 GPU 空闲
  → 负载不均衡直接拉低整体吞吐

训练 vs 推理:
□ 训练用辅助负载均衡损失约束路由
□ 推理无法改路由,只能靠「调度/复制」缓解
路由打分示意:
token: "The cat sits"
router 输出(8 专家):
  e0: 0.55  e3: 0.30  e5: 0.08  e7: 0.03 ...
→ Top-2 = e0, e3
→ 输出 = 0.55×e0(x) + 0.30×e3(x)(归一化加权)

工程要点:路由的 Top-K 选择决定质量,但更关键的是「路由分布是否均匀」——少数热点专家会让对应 GPU 满载、其他 GPU 闲置。路由不均无法在推理侧直接改,只能靠调度和专家复制缓解。

3. Expert Parallel:专家切分到多卡

MoE 的最佳并行方式是 Expert Parallel(EP)——把专家分散到多张卡。

EP 的做法:
□ 每个专家整块放在某一张卡上
□ attention 部分仍走张量并行(TP)
□ 路由决定 token 去哪些卡上的专家 → all-to-all 通信

为什么 EP 适合 MoE:
□ 专家天然是「可切分的独立块」
□ 卡 A 上的 token 要访问卡 B 的专家 → 必须搬 token
□ 相比把整个专家切碎做 TP,EP 通信更少、更直接

推理流程:
□ 每张卡算路由 → 决定本卡 token 的目标专家
□ all-to-all:把 token 发给对应专家所在卡
□ 专家计算 → all-to-all:把结果发回
□ 加权求和输出
EP 数据流示意(8 卡,专家分散):
卡0 的 token t 路由到 e3(在卡3)
→ 卡0 ──all-to-all──▶ 卡3(发送 token 隐状态)
→ 卡3 上 e3 计算
→ 卡3 ──all-to-all──▶ 卡0(发送结果)
→ 卡0 加权求和,进入下一层

工程要点:EP 把「专家」作为切分单位分布到多卡,token 通过 all-to-all 跨卡访问专家——这是 MoE 推理的主流并行方式,通信开销与路由的跨卡访问量成正比。attention 部分仍保留 TP,形成「TP + EP」混合。

4. 负载均衡策略:辅助损失、调度与专家复制

负载不均可以通过工程手段缓解。

训练侧的约束(辅助损失):
□ 训练时给 router 加负载均衡损失,惩罚「过热」专家
□ 让路由分布接近均匀 → 推理时天然更均衡
□ 但强约束会损失质量(专家分化被抑制)

推理侧的缓解:
□ 专家复制(Expert Replication):
  - 热点专家在多个 GPU 上放副本
  - 路由被分散到副本,忙闲重排
□ 调度优先:把 token 多的卡上的请求降优先
□ 虚拟专家:把大专家拆成小片,更细粒度分布
□ 路由缓存:相似 prompt 复用已学到的路由结果
专家复制示意:
热点专家 e0 在卡0 满载
→ 在卡2、卡5 各放一份 e0 副本
→ 路由把 e0 的 token 平均到 3 个副本
→ 卡0 压力 1/3,卡2、卡5 的冷门资源被利用
代价:
□ 副本占用额外显存
□ 副本间的一致性:同一专家多份权重需同步(推理只读,无问题)

工程要点:负载均衡有两层——训练时用辅助损失约束路由分布,推理时用「专家复制 + 调度」缓解热点。专家复制把热点专家分摊到多卡,简单有效,代价是额外显存;冷门专家的闲置算力由此被回收。

5. 激活内存优化:显存、通信与序列专家

MoE 推理的隐性成本:激活值随专家数增长,all-to-all 通信量可观。

激活内存问题:
□ 每个 token 经过多个专家 → 每个专家的输出都要暂存
□ 稠密模型激活随 batch 线性增长
□ MoE 激活随「batch × 专家数」增长 → 显存压力更大

缓解手段:
□ 减少中间激活的驻留:一次只算一个专家、即时加权
□ 序列专家(Sequence Expert):
  - 把整个序列(batch)一次性喂给一个专家
  - 减少 per-token 的跨卡通信次数
  - 提升专家计算的批量效应(大 GEMM)
□ activation checkpointing 式重算(节省峰值显存)

通信量分析:
□ all-to-all 传输量 ∝ 跨卡 token 数 × hidden 维度
□ 路由越分散(K 大、专家分散广)→ 通信越大
□ 大批次 → 单次通信体积大,但次数少
通信体积估算:
每 token hidden = 4096 × 2 bytes(FP16)= 8 KB
10K token 跨卡传输 = 10K × 8KB = 80 MB(一次 all-to-all)
→ 网络(NVLink ~900 GB/s / 网卡 25 GB/s)是主要瓶颈

工程要点:MoE 激活显存随「batch × 专家数」增长,通信量随「跨卡 token × hidden」增长——序列专家把 batch 整体喂给一个专家以放大 GEMM、减少通信次数;NVLink 带宽决定 EP 的可扩展边界。

6. 显存策略:专家 offload、量化与投机专家

MoE 总参数大,显存策略围绕「把不用的专家挪走、压小、或先跳过」。

显存压力来源:
□ 全部专家权重常驻显存(即使未激活)
□ 70B 稠密 ≈ 140 GiB;8x7B MoE ≈ 140+ GiB(8×7B FFN)

三大策略:
□ 专家 Offload(分级存储):
  - 热专家(高频路由)在 GPU
  - 冷专家(低频路由)放 CPU RAM / NVMe
  - 被路由到冷专家时现场加载 → 吞吐换容量
  - 冷热划分基于路由统计,动态调整
□ 专家量化:
  - 不活跃专家用低精度(INT8/FP8)常驻
  - 活跃专家保留高精度 → 混合精度管理
□ 投机专家(Speculative Experts):
  - 先用「轻量路由/小专家」猜结果
  - 只在必要时唤醒大专家 → 减少专家计算量
Offload 决策示例:
┌─ 路由统计 ───────────────────────────┐
│ e0: 45%(热)→ GPU 常驻 FP16        │
│ e3: 28%(热)→ GPU 常驻 FP16        │
│ e1: 12%      → CPU RAM(FP8)       │
│ e5: 6%       → CPU RAM(FP8)       │
│ e2/e4/e6/e7: <5%(冷)→ NVMe 懒加载 │
└──────────────────────────────────────┘

工程要点:MoE 显存策略的共性是把「不常被路由的专家」降级存储——热专家高精度常驻 GPU,冷专家 offload 到 CPU/NVMe 或低精度量化,投机专家则先猜后算。核心是「按路由热度分层管理专家」,用吞吐换容量。

7. 多机推理:EP 与 TP 的组合拓扑

单机放不下全部专家时,需要跨机组合并行。

组合方式:
□ 节点内:TP(attention 张量切分)+ EP(专家分布)
□ 节点间:EP 跨节点(all-to-all 走网卡)
□ 数据并行(DP):多副本处理不同请求

拓扑考量:
□ 节点内 NVLink:带宽高,适合 attention TP 与专家跨卡
□ 节点间网络(RDMA/网卡):带宽低,EP 通信受限
□ 把「跨节点通信」降到最少:
  - 尽量让同一序列的专家落在同一节点
  - 路由局部性:按前缀聚类请求,减少跨机路由

可扩展性:
□ EP 扩展的是「容量与带宽」,单 token 延迟不降
□ DP 扩展的是「并发吞吐」
□ 需要超大模型:TP+EP+DP 三维组合
8 卡节点 × 2 节点,8x7B 模型:
□ attention:TP=8 在节点内(NVLink)
□ experts:EP=16 跨节点(部分跨机 all-to-all)
□ 或:experts EP=8 节点内 + DP=2 两副本
→ 选型看「跨机网络带宽」能否承受路由分散

工程要点:多机 MoE 是「TP + EP + DP」的组合——节点内用 NVLink 做 TP/EP,跨节点用网卡做 EP,把跨机通信压到最少。EP 扩展容量与带宽,DP 扩展并发,超大模型三者叠加。网络带宽决定 EP 的跨机边界。

8. 性能与成本分析:稀疏优势与瓶颈

MoE 到底值不值,用数字说话。

稀疏优势:
□ 同样 FLOPs:8x7B Top-2 ≈ 激活 2/8 专家
  → 每 token 计算量 ≈ 稠密 12B-14B 级别
□ 同样质量:达到稠密 70B 质量,计算量小很多
□ 单 token 延迟接近小模型,生成质量接近大模型

瓶颈与成本:
□ 显存:全部专家权重常驻 → 需要大显存或 offload
□ 通信:all-to-all 在 batch 大、K 大时成为瓶颈
□ 批量效率:专家间负载不均 → 部分卡闲置
□ 路由开销:多一跳路由计算

经济账:
□ 硬件成本:显存需求高(总参数大)
□ 运行成本:每 token 计算少(激活少)→ 电费/时延低
□ 场景适合:大并发、质量敏感、长输出
□ 场景不适合:显存小、短 prompt、极低延迟
粗略对比(质量相近的场景):
模型           每token计算     显存需求     单卡延迟
稠密 70B       ~70B 激活       ~140 GiB    高
MoE 8x7B Top-2 ~14B 激活       ~140 GiB    中(更小 batch 时)
→ 计算省 ~5x,显存不变 → 显存是 MoE 的第一成本

工程要点:MoE 的经济账是「计算省、显存不省」——同样的质量用 1/5 的计算量达成,但全部专家权重都要显存常驻。适合大并发、质量敏感场景;显存小而短 prompt 的场景优势不明显,甚至不如稠密模型。

9. 生产实践与踩坑

把 MoE 推理落到生产,以下是关键经验与坑。

工程经验:
□ 路由统计先行:上线前统计路由分布,规划热/冷专家
□ 冷热动态调整:路由随业务变化,定期重划分
□ EP 拓扑按网络带宽选:NVLink 充足再开跨节点 EP
□ 与量化配合:专家低精度常驻是显存的第一杠杆

高频踩坑:
□ 忽略路由不均 → 热点卡 100% 利用率、其他卡 30%
□ 专家 offload 阈值设太低 → 高频专家被挪到 CPU → 延迟崩
□ batch 拉大后通信爆炸 → all-to-all 拖垮整体吞吐
□ 冷专家加载无预热 → 首次路由到冷专家时卡顿数秒
□ 用稠密模型的压测方法测 MoE → 负载模型完全不对

验证手段:
□ 每专家路由次数直方图(负载均衡的第一指标)
□ 每卡利用率(EP 是否真的均匀)
□ all-to-all 通信量与耗时(通信占比)
□ 端到端吞吐与 P99(稀疏优势是否兑现)
生产配置示意(vLLM / SGLang 类引擎):
--model mistralai/Mixtral-8x7B-Instruct
--tensor-parallel-size 8      # attention TP
--expert-parallel-size 8      # 专家 EP(节点内)
--max-model-len 32768
--kv-cache-dtype fp8

工程要点:MoE 生产的成败取决于「路由统计与负载管理」——先画每专家路由直方图和每卡利用率,再决定冷热分层与 offload 阈值。批量压测必须用 MoE 专属负载模型(路由分布、跨卡通信),不能用稠密模型的套路。

10. 速查表与一句话记忆

问题一句话答案
MoE 核心特征总参数大、每个 token 只算 Top-K 专家(稀疏激活)
路由怎么工作router 打分 + Top-K 选择 + 加权求和
最大风险路由不均 → 热点专家满载、冷门专家闲置
怎么并行Expert Parallel:专家分散多卡,token 走 all-to-all
负载不均怎么办训练辅助损失 + 推理专家复制/调度
显存为什么大全部专家权重常驻,激活专家只是少算
激活内存问题随 batch × 专家数增长,用序列专家缓解
显存怎么省冷专家 offload、低精度量化、投机专家
多机怎么做TP + EP + DP 组合,跨机通信压到最少
值不值计算省 5x、显存不变,适合大并发质量敏感场景

一句话记忆:MoE = 稀疏激活(Top-K 选专家,大质量小计算)+ Expert Parallel(专家分散多卡、all-to-all 通信)+ 负载均衡(辅助损失 + 专家复制)+ 显存策略(冷专家 offload/量化)——计算省 5x、显存不省,路由直方图与每卡利用率是生产第一指标。

延伸阅读

  • /ai-distributed-inference-gpu-cluster/ — 分布式推理与并行范式
  • /ai-llm-inference-architecture/ — 推理服务架构与 TP/PP/EP
  • /ai-kernel-fusion-optimization/ — 专家内核与算子融合
  • /ai-llm-quantization/ — 专家与 KV 量化压缩
  • /ai-fp8-inference/ — FP8 精度推理
  • 高性能计算专题 — 多卡通信与内核优化

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「ai」更多文章

  1. AI 推理安全:内容安全、提示注入与模型防护
  2. LLM 服务可观测性:吞吐、时延、token 与成本监控
  3. FlashAttention 与高效注意力内核:IO 感知与分块计算