Top-k 路由(Top-k Routing)
3 秒看懂
一句话:在稀疏混合专家(MoE)模型中,每个 token 只激活 k 个专家而非全部,由一个可学习的门控网络决定“谁负责谁”——这就是 Top-k 路由。
类比:医院分诊台——病人(token)到了,护士(门控网络)看一眼症状,把病人分配给最对症的 k 位专家医生,而不是让所有科室同时会诊。
3 分钟产业解释
为什么需要 Top-k 路由?
大模型的核心矛盾是:参数越多能力越强,但推理/训练成本线性甚至超线性增长。MoE 架构的核心承诺是——把模型总参数做大,但每次推理只用其中一小部分。Top-k 路由正是实现“稀疏激活”的调度机制。
产业位置
[模型架构层]
└── Transformer Block
├── Attention
└── FFN / MoE Layer
├── Gate (门控网络) ← Top-k 路由发生在这里
├── Expert_0
├── Expert_1
├── ...
└── Expert_N
关键产品/模型中的使用情况(据公开论文/技术报告):
| 模型 | 路由策略 | k 值 | 专家总数 | 备注 |
|---|---|---|---|---|
| GShard (Google, 2020) | Top-k | 2 | 2048 | 早期大规模 MoE |
| Switch Transformer (Google, 2021) | Top-k | 1 | 128–数千 | 简化为 Top-1 |
| Mixtral 8×7B (Mistral, 2024) | Top-k | 2 | 8 | 小专家数 + Top-2 |
| DeepSeek-V2/V3 (DeepSeek, 2024) | Top-k | V2: Top-6 + 2 共享;V3: Top-8 + 1 共享 | 256–数百 | 路由专家 + 共享专家混合设计 |
| Qwen-MoE 系列 | Top-k 变体 | 公开论文中可见 | 可变 | 具体以官方论文为准 |
⚠️ 上表中 DeepSeek-V3 的具体专家数/激活专家数以官方技术报告为准,此处为定性描述其“共享专家 + 路由专家”的混合架构特征。
15 分钟专家深入
核心问题:为什么不是“全部专家都看一遍”?
在稠密 Transformer(Dense Transformer)中,每个 token 经过同一个 FFN。MoE 的思想是把 FFN 复制 N 份,每份成为一个“专家”,然后让门控网络(Router/Gate)为每个 token 挑选最相关的 k 个。
这带来两个核心收益:
- 计算稀疏性:前向 FLOPs ≈ k/N × 全量计算(k ≪ N 时显著节省)
- 容量可扩展:总参数量 = N × 单专家参数,可以做得很大
Top-k 路由的完整生命周期
输入 token x ∈ R^d
│
▼
┌──────────────────────────┐
│ Gate Network: │
│ logits = W_g · x │ ← W_g ∈ R^{N×d}, N=专家数
│ scores = softmax(logits)│
│ top_k_indices = argtopk │ ← 选得分最高的 k 个专家
│ top_k_scores = ... │ ← 对选中专家的得分做归一化
└──────────────────────────┘
│
▼
┌──────────────────────────────────────────┐
│ Dispatch: │
│ 将 token 发送给 top_k_indices 指定的专家 │
│ (跨设备时需 All-to-All 通信) │
└──────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────┐
│ Expert Compute: │
│ y_i = Expert_i(x) (标准 FFN/MLP) │
└──────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────┐
│ Combine: │
│ output = Σ (gate_score_i × y_i) │
│ for i in top_k_indices │
└──────────────────────────────────────────┘
门控函数的数学形式
设输入 token 表征为 \mathbf{x} \in \mathbb{R}^d,专家数量为 $N$:
Step 1 — 计算原始分数(logits):
s = W_g \cdot \mathbf{x}, \quad W_g \in \mathbb{R}^{N \times d}
Step 2 — 归一化(通常对选中专家的子集做 softmax):
g_i = \frac{e^{s_i}}{\sum_{j \in \text{Top-}k} e^{s_j}}, \quad i \in \text{Top-}k(\mathbf{s})
注意:这里有两种常见做法——(a) 先 softmax 再 top-k;(b) 先 top-k 再在 k 个专家上 softmax。不同论文实现略有差异。Switch Transformer 采用 (a) 先 softmax 再 top-1,直接使用 softmax 值作为门控权重,未在选中专家子集上再执行 softmax。
Step 3 — 加权求和:
\text{output} = \sum_{i \in \text{Top-}k} g_i \cdot E_i(\mathbf{x})
其中 E_i 是第 $i$ 个专家的前馈网络。
负载均衡:Top-k 路由的“阿喀琉斯之踵”
Top-k 路由面临一个严重问题:专家崩塌(Expert Collapse)。如果训练早期某些专家略微领先,梯度会强化这种优势,最终几乎所有 token 涌向少数专家,其余专家“饿死”。
解决方案——辅助负载均衡损失(Auxiliary Load Balancing Loss):
\mathcal{L}_{\text{balance}} = \alpha \cdot N \cdot \sum_{i=1}^{N} f_i \cdot P_i
其中:
f_i= 被路由到专家 $i$ 的 token 占比(真实负载)P_i= 门控网络对专家 $i$ 的平均路由概率\alpha= 平衡系数(通常较小,如10^{-2}量级)- 两者相乘的含义:当
f_i和P_i都高时(某个专家垄断),损失增大
这个损失由 Switch Transformer 系统化提出,已成为 MoE 训练的标准组件。
Token-Choice vs Expert-Choice
| 维度 | Token-Choice (主流) | Expert-Choice |
|---|---|---|
| 决策方 | 每个 token 选 k 个专家 | 每个专家选 top-C 个 token |
| 负载均衡 | 需辅助损失保证 | 天然均衡(每专家固定容量) |
| 延迟确定性 | 有负载不均风险 | 更确定 |
| 代表 | Switch, Mixtral, DeepSeek | Google Expert-Choice (2022) |
容量因子(Capacity Factor)
为防止个别专家过载,通常设定每个专家的缓冲容量:
\text{Expert Buffer} = \text{CF} \times \frac{\text{tokens per batch}}{N} \times k
CF > 1 提供冗余,但浪费内存;CF 过小会导致 token 被丢弃(overflow)。实践中 CF 通常设在 1.0–1.5 之间。
技术原理(最深)
门控网络的梯度流
门控网络 W_g 的可微性是一个关键设计点。Top-k 的 argmax/argtopk 操作不可微,但实践中通过以下方式绕过:
- Straight-Through Estimator (STE):前向做离散选择,反向时梯度直通(假设选择不变)
- Soft Top-k:使用 softmax 温度退火或 Gumbel-Softmax 近似离散采样
- 实际主流做法:对选中的 k 个专家的 gate score 做 softmax 归一化,梯度自然流过这些 score;未被选中的专家梯度为零——这本身就是一种稀疏梯度传播
前向: scores = softmax(W_g · x) → top_k_mask → masked_softmax
反向: ∂L/∂W_g = Σ_{i∈Top-k} (∂L/∂g_i · ∂g_i/∂s_i · ∂s_i/∂W_g)
未选中专家: ∂g_j/∂s_j = 0 (被 mask 截断)
通信拓扑:All-to-All
当专家分布在不同 GPU/NPU 上时,Top-k 路由需要 All-to-All 通信:
GPU 0 (有 token A, B) GPU 1 (有 token C, D)
│ │
│ token A → Expert_2 │
│ token B → Expert_5 │ ← All-to-All
│ ← Expert_3(token C) │
│ ← Expert_7(token D) │
▼ ▼
Expert_0,1,2,3 Expert_4,5,6,7
⚠️ 注意区分:MoE 的 Token Dispatch/Combine 使用 All-to-All;而张量并行(Tensor Parallelism)中 Transformer 层内通信使用 AllReduce/ReduceScatter。两者不可混淆。
All-to-All 通信量:
\text{Volume} \approx 2 \times k \times \frac{B \cdot S}{1} \times d \times \text{sizeof(dtype)}
(前向一次 dispatch + 一次 combine,B \cdot S 为总 token 数,$d$ 为隐层维度)
Top-k 与 Soft MoE 的对比
Google 2023 年提出的 Soft MoE 完全绕过了离散路由:将 token 通过与一组可学习的 slot 权重做 soft attention 组合,再分发给专家。这消除了负载均衡问题,但改变了 MoE 的稀疏计算本质——每个专家实际上看到所有 token 的加权组合,不再是严格的 Top-k 稀疏。
技术演进史
2017 Shazeer et al. "Outrageously Large Neural Networks"
└── 提出 Sparsely-Gated MoE, Top-k (k=2-4) + 噪声扰动
首次在 LSTM 语言模型上应用
2020 GShard (Google)
└── 扩展到 600B 参数, Top-2 路由
└── 引入容量因子 (Capacity Factor) 概念
2021 Switch Transformer (Google)
└── 简化为 Top-1 (只选1个专家)
└── 系统化负载均衡辅助损失
└── 证明 k=1 也能取得优异性能
2021 Hash Routing
└── 探索确定性/无学习路由的替代方案
2022 Expert Choice Routing
└── 专家选择 token 的路由方式
2022 ST-MoE (Google)
└── 稳定训练技巧: router z-loss (抑制路由 logits 过大)
2023 Mixtral 8×7B (Mistral AI)
└── Top-2, 8 experts, 证明 MoE 在开源社区的可行性
2024 DeepSeek-MoE / DeepSeek-V2 / DeepSeek-V3
└── "共享专家 + 路由专家"混合设计
└── Top-6~8 路由(激活) + 全局共享专家
└── 更细粒度的专家划分策略
2024 Qwen-MoE, DBRX (Databricks), Grok-1 (xAI)
└── Top-k 路由成为主流 MoE 模型的标准组件
技术路线对比
| 维度 | Top-k 路由 (学习型) | Hash Routing | Expert-Choice | Soft MoE | Dense FFN |
|---|---|---|---|---|---|
| 是否学习路由 | ✅ 是 (W_g 可训练) | ❌ 否 (哈希函数) | ✅ 是 | ✅ 是 (隐式) | N/A |
| 稀疏性 | ✅ 严格稀疏 | ✅ 严格稀疏 | ✅ 严格稀疏 | ❌ 软稀疏 | ❌ 不稀疏 |
| 负载均衡挑战 | ⚠️ 高 (需辅助损失) | ✅ 天然均衡 | ✅ 天然均衡 | ✅ 低 | N/A |
| 通信模式 | All-to-All | All-to-All | All-to-All | All-to-All (soft) | AllReduce (TP) |
| 训练稳定性 | ⚠️ 需要技巧 | ✅ 稳定 | ✅ 较稳定 | ✅ 稳定 | ✅ 最稳定 |
| 表达能力 | ✅ 高 (可学到复杂模式) | ⚠️ 有限 | ✅ 高 | ✅ 高 | 全参数参与 |
| 代表模型 | Switch, Mixtral, DeepSeek | Hash Layer (2021) | Expert Choice (2022) | Soft MoE (2023) | GPT, LLaMA |
上下游
上游依赖
[算力硬件层]
├── GPU/NPU (NVIDIA H100/H200, 华为 Ascend 910B 等)
├── 高带宽互联 (NVLink/NVSwitch, InfiniBand, HCCS)
│ └── All-to-All 通信对互联带宽极其敏感
└── 大显存 (存放多份专家参数, 如 HBM3/HBM3e)
[框架层]
├── Megablocks (Databricks) — 专门为 MoE 优化的 CUDA kernel
├── Tutel (Microsoft) — MoE 调度与通信优化
├── FasterMoE / DeepSpeed-MoE — 微软 MoE 训练框架
├── GShard / Switch Transformer 框架 (Google/JAX)
└── vLLM / TensorRT-LLM — MoE 推理优化
下游影响
[MoE 模型架构]
├── 训练:决定哪些专家被更新、梯度如何分配
├── 推理:决定推理 FLOPs 和延迟
└── 系统:决定显存占用、通信量、专家并行策略
[系统优化]
├── Expert Parallelism (EP) — 专家放在不同设备
├── Expert Offloading — 不活跃专家卸载到 CPU/SSD
└── Dynamic Batching — 按路由结果优化 batch 组织
关键指标
| 指标 | 含义 | 典型范围/影响 |
|---|---|---|
| k (激活专家数) | 每 token 选几个专家 | 1–8(常见 1 或 2) |
| N (专家总数) | MoE 层专家个数 | 8–数千 |
| 激活比 (k/N) | 稀疏程度 | 通常 < 5% |
| Load Balance Loss | 负载均衡程度 | 0 = 完美均衡;越大越不均衡 |
| Router z-loss | 路由 logits 的量级控制 | 防止训练不稳定 |
| Expert Utilization | 各专家被激活的均匀程度 | 理想 = 1/N 每个专家 |
| Capacity Factor (CF) | 每专家缓冲大小系数 | 1.0–1.5(过小丢 token,过大浪费显存) |
| All-to-All 通信量 | 路由引起的通信开销 | 与 k × 隐层维度 × token 数成正比 |
| 路由准确率 (Routing Accuracy) | 训练后期路由决策的稳定性 | 随训练趋于稳定 |
供需与市场数据
为什么 Top-k 路由成为产业焦点?
-
MoE 已成为主流大模型架构选择:Mixtral、DeepSeek-V2/V3、Qwen-MoE 等验证了 MoE 在“性价比”上的优势——同等推理 FLOPs 下,MoE 总参数更大、能力更强。
-
对算力基础设施的影响:
- MoE 模型虽然推理 FLOPs 低,但显存需求大(需要加载全部专家参数)
- 通信需求高:All-to-All 对 GPU 互联带宽要求极高,推动 NVLink/NVSwitch/InfiniBand 需求
- 推理侧催生 Expert Offloading 和 Expert Parallelism 方案
-
市场数据(定性趋势):
- 据公开报道,DeepSeek-V3 等 MoE 模型在同等能力水平下,训练成本显著低于同参数量稠密模型
- 路由机制的效率直接影响 GPU 利用率——不均衡路由导致部分 GPU 空转
⚠️ 具体市场规模/GPU 出货量数据需参考各厂商财报及行业报告(如 TrendForce、Semianalysis 等),此处不编造数字。
代表公司与资本映射
| 公司/机构 | 在 Top-k 路由/MoE 中的角色 | 代表工作 |
|---|---|---|
| Google DeepMind | 学术奠基 | GShard, Switch Transformer, ST-MoE, Expert Choice, Soft MoE |
| Mistral AI | 开源 MoE 产品化标杆 | Mixtral 8×7B / 8×22B |
| DeepSeek (幻方量化) | 中国 MoE 旗帜 | DeepSeek-MoE, DeepSeek-V2, V3 (共享+路由专家设计) |
| Microsoft | 训练框架与系统优化 | DeepSpeed-MoE, Tutel |
| Databricks | 推理优化 + 开源 | Megablocks (MoE CUDA kernel), DBRX |
| xAI | 超大规模 MoE | Grok-1 (314B, MoE 架构) |
| Alibaba (通义) | 国内 MoE 探索 | Qwen-MoE 系列 |
| NVIDIA | 硬件 + 通信基础 | NVLink All-to-All, Transformer Engine 对 MoE 的支持 |
A 股/港股映射思路
| 产业链环节 | 相关性 | 逻辑 |
|---|---|---|
| 算力芯片 | 高 | MoE 模型显存需求大 → 推动 HBM 及大显存 GPU 需求 |
| 高速互联 | 极高 | All-to-All 通信是 MoE 瓶颈 → 光模块、交换机、NVLink 需求 |
| 存储/HBM | 高 | 全部专家参数需驻留显存 |
| AI 服务器 | 高 | 8 卡/N 卡互联拓扑优化需求 |
| 推理芯片 | 中 | MoE 稀疏计算对推理芯片的调度能力提出新要求 |
投资逻辑
核心论点
-
MoE 是“降本增效”的架构范式:Top-k 路由使 MoE 成为可能,而 MoE 已被证明能在更低推理成本下实现更强模型能力。这意味着 MoE 路线大概率持续扩大份额。
-
通信成为新瓶颈 → 利好高速互联:Top-k 路由产生的 All-to-All 通信量与专家并行度、隐层维度正相关。随着模型规模扩大,GPU 互联带宽成为核心瓶颈,利好光模块、高速交换、NVLink 等产业链。
-
显存需求不降反升:虽然 MoE 稀疏激活节省 FLOPs,但所有专家参数仍需加载到显存中,推动 HBM 容量和带宽 需求持续增长。
-
路由算法本身的演进方向:
- 更精细的路由(如 DeepSeek 的细粒度专家 + 共享专家)
- 路由与硬件协同设计
- 推理阶段的专家 offloading/缓存策略
风险点
- 若行业转向 Soft MoE 或其他非离散路由方案,对 All-to-All 通信带宽的需求可能降低
- 稠密模型持续优化(如 LLaMA 系列)可能削弱 MoE 的性价比优势
- 路由不均衡导致的训练不稳定仍是工程难题
常见误读纠偏
❌ 误读 1:“Top-k 路由就是简单的 argmax”
纠偏:Top-k 路由远不只是取前 k 大值。完整的路由包含:
- 可学习的线性门控网络(不是固定规则)
- 选中专家的 gate score 归一化(决定加权融合比例)
- 辅助负载均衡损失(防止专家崩塌)
- 容量因子控制(防止内存溢出)
- 可选的噪声注入(训练时增加探索性)
只看到 argmax 就认为“很简单”是严重低估了工程复杂度。
❌ 误读 2:“k 越大模型越强,应该选更多专家”
纠偏:
- k 增大 → 每 token 计算量增大 → 推理延迟上升 → 稀疏收益减少
- k=1 (Switch Transformer) 已经展现出强大性能;k=2 是多数模型的选择
- DeepSeek 虽然路由 k 值较大(6–8),但其单个专家被设计得更小、更细粒度,总激活参数并不比 k=2 + 大专家的方案多
- 关键是激活参数总量,不是 k 的绝对值
❌ 误读 3:“MoE 的 All-to-All 通信和张量并行的 AllReduce 是一回事”
纠偏:
- All-to-All:每个 GPU 向每个其他 GPU 发送不同的 token 子集,通信模式是 全对全 的点对点交换——用于 MoE 的 token dispatch/combine
- AllReduce/ReduceScatter:所有 GPU 参与规约操作,结果广播——用于张量并行中 Attention/FFN 的部分和合并
- 两者的通信模式、带宽利用方式、对网络拓扑的要求都不同。MoE 模型的通信开销通常叠加了这两部分。
❌ 误读 4:“负载均衡损失解决了路由不均问题”
纠偏:辅助损失只是软约束,不能完全消除不均衡。实践中仍然需要:
- 合适的损失系数 α(太小无效,太大影响主损失)
- 容量因子 CF 兜底(硬限制每专家最大 token 数)
- Router z-loss 控制 logits 量级
- 甚至需要在推理时做 routing 持久化(routing caching)等工程手段
学习路径
Level 0: 概念入门
├── 了解 Transformer FFN 层的作用
├── 理解“参数量 ≠ 计算量”的基本概念
└── 阅读: Lilian Weng "Mixture of Experts" 博客
Level 1: 原始论文
├── Shazeer et al. (2017) "Outrageously Large Neural Networks" ← 起源
├── Fedus et al. (2021) "Switch Transformers" ← Top-1 路由 + 负载均衡
└── Lepikhin et al. (2020) "GShard" ← Top-2 + 大规模扩展
Level 2: 工程与系统
├── Megablocks 论文/代码 ← 高效 MoE CUDA kernel
├── DeepSpeed-MoE 文档 ← 训练框架层面理解
└── 亲自跑一个 Mixtral 模型推理,观察路由 pattern
Level 3: 前沿演进
├── DeepSeek-V2 技术报告 ← 共享 + 路由专家
├── Zhou et al. (2022) "Mixture-of-Experts with Expert Choice Routing"
├── Puigcerver et al. (2023) "From Sparse to Soft Mixtures of Experts"
└── 关注 NeurIPS/ICML MoE 相关 workshop
Level 4: 系统协同设计
├── 理解 Expert Parallelism 在 Megatron-LM 中的实现
├── 研究 NVLink/InfiniBand 拓扑对 All-to-All 性能的影响
└── 阅读 Semianalysis 等分析师对 MoE 推理成本的拆解
一句话总结
Top-k 路由是 MoE 模型的“交通调度员”:通过可学习的门控网络为每个 token 精准分配最相关的 k 个专家,实现“总参数大、单次计算少”的稀疏激活范式——它是理解当前主流大模型(Mixtral、DeepSeek-V2/V3 等)如何在推理效率与模型能力之间取得平衡的核心钥匙。
延伸阅读与来源
| 来源 | 说明 |
|---|---|
| Shazeer et al., 2017 | MoE + Top-k 路由的起源论文 |
| Fedus, Zoph & Shazeer, 2021, “Switch Transformers” | Top-1 路由 + 负载均衡损失的系统化 |
| Lepikhin et al., 2020, “GShard” | Top-2 路由的大规模实践 |
| DeepSeek-V2 Technical Report (2024) | 共享专家 + 路由专家的混合设计 |
| DeepSeek-V3 Technical Report (2024) | 最新 MoE 路由工程实践 |
| Puigcerver et al., 2023, “From Sparse to Soft MoE” | Soft MoE 替代方案 |
| Zhou et al., 2022, “Mixture-of-Experts with Expert Choice” | Expert-Choice 路由 |
| Megablocks (https://github.com/databricks/megablocks) | 开源 MoE 高效实现 |
| Lilian Weng Blog, “Mixture of Experts” | 优秀的综述性入门博客 |
| Hugging Face Blog on MoE | 面向实践者的 MoE 介绍 |
⚠️ 免责声明:本文中涉及的具体模型参数(专家数、k 值等)以各模型官方技术报告/论文为准。搜索受限导致部分数据无法实时验证,标注 [估算] 或 [定性] 处请以原始文献为准。本文不构成投资建议。