MoE 的两个上游创新:Routing-Free 与 OmniMoE
前一篇拆的七项工作,有一个共同前提:
Router 已经给出 token → Expert 的分配,我们优化后面的 dispatch / GEMM / A2A。
这两篇动的是这个前提本身。
| 工作 | 改的是哪一层 |
|---|---|
| Routing-Free MoE | 谁决定专家激活 |
| OmniMoE | 专家本身有多细(外加执行层) |
| FasterMoE / Tutel | 专家怎么分布到 GPU |
| MegaBlocks | 不规则专家 GEMM 怎么块化 |
| ScatterMoE | 怎么避免 routing 重排的 materialization |
| SonicMoE | routing/token 数怎么适配 GEMM tile |
| Mega MoE | 分布式 MoE 整条链怎么 block-streaming 化 |
一、Routing-Free MoE
Section titled “一、Routing-Free MoE”Yilun Liu*, Jinru Han*, Sikuan Yan, Volker Tresp, Yunpu Ma(LMU Munich / UCLA / MCML)
arXiv:2604.00801,2026-04-01。代码 liuyilun2000/RoutingFreeMoE
1.1 把「Router 替所有专家决策」拆掉
Section titled “1.1 把「Router 替所有专家决策」拆掉”标准 MoE 是自上而下的竞争式路由:
RFMoE 反过来问:为什么要一个中央模块替所有专家做决定?让每个专家自己判断这个 token 想不想接。
每个专家内部有自己的低秩投影:
其中 ()是专家私有的投影矩阵, 是可学的逐专家偏置(初始化 做 warm-up)。激活是个硬指示:
于是消失的是:外部 router、softmax、固定 Top-K。每个 token 激活几个专家自然可变, 控制整体稀疏度,而且调 不需要重训。
它真正消灭的是「中心化的竞争式路由」,不是「系统里不再有 routing 这件事」——你依然得知道哪些专家最终激活了才能 dispatch。
1.2 去掉 router 之后,负载均衡成了新问题
Section titled “1.2 去掉 router 之后,负载均衡成了新问题”这是最容易被漏掉、但对系统影响最大的一节。传统 MoE 的负载均衡损失作用在 router 的概率上;router 没了,出现两种正交的失败模式:
| 只用哪种损失 | 后果 |
|---|---|
| 仅 token-balancing() | token 被规范到激活目标数量的专家,但专家侧不受约束——少数热门专家垄断,其余饿死 |
| 仅 expert-balancing() | 每个专家在 batch 内被均匀使用,但每 token 的计算量剧烈波动,对域漂移过敏 |
解法是联合辅助损失:
用阈值前的 作可微代理 。实测 困惑度最低、吞吐最高。权重还有动态调度:
当前密度 超过目标就加压,否则放松。
还有一个值得记的发现:把逐层密度约束放松成全局密度,让首尾层多激活、中间层保持稀疏,Scale S 的验证困惑度从 39.44 降到 28.74。
1.3 执行策略与吞吐拐点
Section titled “1.3 执行策略与吞吐拐点”RFMoE 把标准的「Router 矩乘 → Softmax → Top-K → 阻塞式 All-to-All」换成:
- 非阻塞 all-gather 把 token 广播到全部 张卡
- 每卡流水地为本地 个专家打分
- 对激活的 (token, expert) 对算 FFN,复用打分阶段算出的
- 异步点对点回传,无 barrier
推理时把有效密度 从 100% 降到 4.3%(激活数降 20×,FLOP 降 31%),下游 benchmark 掉不到 2 个百分点。
1.4 规模限定
Section titled “1.4 规模限定”这让它的开放问题变得尖锐:门控成本是
而中央线性 router 是 ——RFMoE 的每专家门控比中央 router 还贵一个秩 的因子。它在 24 个专家上证明了架构可行,但代价函数在 增大时是往坏方向走的。论文把这列为已知局限。
二、OmniMoE
Section titled “二、OmniMoE”Jingze Shi, Zhangyang Peng, Yizhang Zhu, Yifan Wu, Guang Liu, Yuyu Luo(HKUST 广州 / BAAI)
arXiv:2602.05711,ICML 2026。代码 flash-algo/omni-moe
2.1 把专家粒度推到一个向量
Section titled “2.1 把专家粒度推到一个向量”普通专家是一整个 FFN:。OmniMoE 继续拆,拆到一个 atomic expert 只剩两条向量 :
本质是一个 rank-1 的 FFN 分量。 实例化为 SwiGLU。大量 atomic expert 堆成 ——官方实现里就是两张 的 embedding 表 up_embed / down_embed。
和 MegaBlocks 的「细粒度」完全不是一回事:
MegaBlocks: 一个 Expert 仍是一个 FFN,只是执行时切 blockOmniMoE: 模型语义上 Expert 本身就细到 vector2.2 Cartesian Product Router
Section titled “2.2 Cartesian Product Router”时最朴素的 router ()成本 ,光 router 就撑不住。
OmniMoE 把专家 ID 拆成二维 ,,。分别投影:
隐式分数由 后相加得到:。投影复杂度:
2.3 Expert-Centric Scheduling
Section titled “2.3 Expert-Centric Scheduling”Router 照常给出 token → experts。执行时把 个 (token, expert) 任务摊平、按 (Expert Group ID, Token ID) 排序、分组批量执行,输出用 scatter-add 写回:
token0 -> E17 E853 E10028 E17: token0 token1 token2token1 -> E392 E17 E771 ⟹ E853: token0 token2token2 -> E853 E17 E6 E392: token1即把计算 DAG 从 for token: visit experts 转置成 for expert: process tokens。
为什么值得转置:atomic expert 只有两条 -向量,token-centric 遍历意味着 次分散的小向量查表,严重访存受限,根本没有足够大的 GEMM 去摊薄访存延迟。按专家重聚合之后,每个活跃专家的参数从 HBM 载入 SRAM 一次,被所有需要它的 token 共用,参数复用率
于是「随机查表」重新变回「grouped GEMM」。
三、三个必须澄清的混淆
Section titled “三、三个必须澄清的混淆”3.1 Expert-Centric Scheduling ≠ Expert-Choice Routing
Section titled “3.1 Expert-Centric Scheduling ≠ Expert-Choice Routing”这是最容易搞混的一处。
| Expert-Choice Routing(Zhou et al. 2022) | OmniMoE 的 Expert-Centric Scheduling | |
|---|---|---|
| 层次 | 模型语义 | 执行顺序 |
| 内容 | 专家自己选 Top-K token, | token 照常选 Top-K 专家 |
| 影响 | 改变归纳偏置和 token 容量 | 路由语义完全不变 |
OmniMoE 是标准的 token-choice 路由,只是把执行顺序转置了。
3.2 它不是从 ScatterMoE「倒退」回显式排序
Section titled “3.2 它不是从 ScatterMoE「倒退」回显式排序”看完 ScatterMoE 的「别 reorder token、让 routing index 直接驱动 GEMM」,再看 OmniMoE 说「按专家重排任务」,容易觉得是退步。
真正的道理是:最优 layout 策略取决于专家粒度。
| ScatterMoE | OmniMoE | |
|---|---|---|
| 一个专家是 | 大 FFN | 两条 -向量 |
| 找到专家后 | 后面有足够大的 GEMM 摊薄 | 几乎全是随机读权重 |
| 于是 | 值得接受 indexed load,少一次 copy | 值得先重组任务,换回参数复用 |
3.3 CSR ↔ CSC 的类比成立
Section titled “3.3 CSR ↔ CSC 的类比成立”token-expert 分配是一张二部图。token-centric 是按行遍历(CSR),expert-centric 是按列遍历(CSC)——同一张图,只是遍历序不同。这正是论文的结构:按列分组成大小 的块,块内按行(token)索引排序以获得访存合并。
四、消融数据:粒度决定 layout 不是观点,是 24.8 倍
Section titled “四、消融数据:粒度决定 layout 不是观点,是 24.8 倍”OmniMoE 的组件消融(论文 Table 2):
| 替换 | 延迟 | 峰值显存 | 其他 |
|---|---|---|---|
| Expert-centric → token-centric | 24.8× | 417.7× | 分散 HBM 查表、访存不合并 |
| Cartesian router → dense router | 30.6× | 337.5× | 专家利用率塌到 4%,不均度 0.24 → 0.77 |
| 去掉共享稠密 MLP | — | — | 知识 −9%,推理 −21% |
最后一行值得单说:纯 atomic expert 撑不起通用语法和推理,必须配一个稠密基底。 这和 DeepSpeed-MoE 的 Residual-MoE(固定稠密 MLP + Top-1 稀疏专家作误差修正)是同一个直觉,隔了四年又被验证一次。
- 基线:Dense、GShard(NVIDIA CuTile kernel)、DeepSeekMoE(CuTile kernel)、PKM(Triton)、PEER(Triton)
- 相对 PEER 10.9×、相对 DeepSeekMoE 15.2×(4096 token、200M FFN 层:73ms / 102ms → 6.7ms)
- 端到端 8×A100 约 14.2k tok/s(PEER 11.6k,PKM 7.9k)
- 6.4B-A1.7B 零样本平均 50.9%(DeepSeekMoE 50.2%,PEER 48.9%,Dense 45.9%)
五、两篇都没有和 MegaBlocks / ScatterMoE 做实证对比
Section titled “五、两篇都没有和 MegaBlocks / ScatterMoE 做实证对比”| 被引用的工作 | RFMoE | OmniMoE | 有实证对比吗 |
|---|---|---|---|
| MegaBlocks | 引用 | 引用 | 都没有 |
| ScatterMoE | 未引用 | 第 4 节引用 | 都没有 |
| DeepSpeed-MoE | 引用 | 引用 | 都没有 |
| Tutel / FasterMoE | — | 在 bib 里 | 没有 |
| DeepSeekMoE | 引用 | 引用 | OmniMoE 有(用 CuTile kernel 实现的架构对比) |
| vLLM / Megatron | 未引用 | 未引用 | — |
需要注意 OmniMoE 对 DeepSeekMoE 的对比是架构层面的(用 NVIDIA CuTile kernel 重实现),不是和 DeepSeek 自己那套手写 PTX/CUDA 融合 kernel 比。