ARCHITECTURE / 06 MIXTURE OF EXPERTS

2.8T 参数,
不等于每个 Token 跑 2.8T

MoE 的核心不是“凭空省掉参数”,而是让不同 Token 只激活不同的专家子集。 它把容量与计算解绑,也把代价转移到路由、负载、显存带宽与跨设备 All‑to‑All。

LEDGERS
6 张独立账单
CORE PAPERS
19 篇一手来源
LINEAGE
1991 → 2026
LAB
8 架构 · 4 均衡模式
ENDPOINT
DeepSeek ↔ Kimi K3

00 SIX LEDGERS

“更大但更便宜”只有拆成六笔账才成立

稠密模型里,增加 FFN 宽度会同时增加参数、每 Token FLOPs 和权重读取。 MoE 用条件路由拆开三者,却不是免费午餐:模型越稀疏,越需要为不均匀的动态执行付账。

L1 / CAPACITY总参数模型存了多少权重?

决定知识容量、存储、加载和分片压力;不会因为某个 Token 没激活它就消失。

L2 / COMPUTE激活参数这次前向用了多少?

Top-k 只执行少数 routed experts,但 attention、共享专家和投影仍是稠密路径。

L3 / ROUTING专家选择谁去哪里?

Router 的 score、top-k、共享路径和限域约束共同决定每个 Token 的计算图。

L4 / LOAD容量与均衡会不会有人排爆?

热门专家过载会让设备等待、形状波动,早期实现还会直接跳过溢出的专家计算。

L5 / NETWORKDispatch / CombineToken 搬多远?

专家分布到不同设备后,前后两次 All-to-All 可能把理论省下的计算时间吃回去。

L6 / STABILITY硬切换与数值训练会不会崩?

Router logits、辅助损失、潜空间连续矩阵乘与极端稀疏都可能制造独立故障。

图书馆比喻:书库很大,不代表每位读者搬走全部书

稠密 FFN 像每个问题都由同一支超大团队完整处理;MoE 像先由调度台判断领域,再叫少数专家组接单。 团队名册可以很大,但每单只付少数人的计算工资。新的麻烦是:热门专家会排队,不同楼层之间要搬材料, 调度台也可能永远只叫同一批人。

01 CAPACITY ≠ ACTIVE COMPUTE

先看懂稠密 FFN,才知道 MoE 替换了什么

Decoder-only Transformer 的每层通常有 attention 和 FFN。Attention 在 Token 之间混合信息; FFN 则对每个位置独立做通道变换。模型的大部分参数往往在 FFN 中,因此现代 MoE 通常不替换整个 Transformer, 而是把若干层的一个 FFN 换成许多份专家 FFN。

DENSE FFN
t₁t₂t₃t₄
同一组巨大权重

每个 Token 读取、计算同一套 FFN。

SPARSE MOE
t₁t₂t₃t₄
Router → 少数专家
E1E2E3E4E5E6E7E8E9E10E11E12

专家都存着,但每个 Token 只读取 top-k。

DENSEy = FFN(x)

唯一计算路径;容量增加通常同步增加每 Token FLOPs。

SPARSE MOEy = Σi∈TopK(x) pᵢ(x) · Eᵢ(x)

Router 决定集合,门控权重 pᵢ 合并已选专家输出。

三个经常被混用的数字

TOTAL PARAMS2.8T

K3 存储的全部模型权重口径。

ACTIVATED PARAMS104.2B

K3 报告的每 Token 激活参数口径;包含的不只 16 个 routed experts。

ROUTED EXPERT RATIO16 / 896

只有 1.79%,但不能直接拿它乘 2.8T 推导 activated params。

为什么 2.8T × 16/896 不是 104B 的算法

总参数里还包含 attention、embedding、latent 上下投影、两个 full-width shared experts 等稠密或固定路径; routed experts 的参数形状也与这些模块不同。跨模型比较时必须沿用报告给出的 active parameter 口径。

02 FIVE WAVES

MoE 的历史,是每解决一笔算力账就暴露一笔系统账

1991 年的 Adaptive Mixtures of Local Experts已经有专家和 gate,但今天 LLM 里的 MoE 还需要稀疏 top-k、静态 batch 形状、设备切分和高性能通信。 因此“概念发明”和“可扩展 Transformer MoE”之间隔了二十多年。

01

让局部专家分工

Adaptive MoE · Hierarchical MoE

门控网络学习输入空间划分,多个专家竞争解释样本。

留下的墙:规模小、软混合,尚未解决大网络的每样本计算。
02

只激活 top-k

Sparsely-Gated MoE

Noisy Top-k 把巨大专家池变成条件计算,容量第一次可远快于激活算力增长。

留下的墙:路由塌缩、专家不均和分布式执行变成新问题。
03

进入 Transformer 与集群

GShard · Switch · GLaM · ST-MoE

FFN 专家、自动切分、top-1/2、capacity 与专家并行形成现代栈。

留下的墙:Token drop、All-to-All、训练稳定和迁移质量互相牵制。
04

重写谁选谁

BASE · Expert Choice · Soft MoE · MoD

均衡分配、专家选 Token、连续 slots 与按深度跳层探索不同条件计算。

留下的墙:因果语言模型、解码、静态形状与主流内核限制部分路线。
05

算法与系统共同设计

DeepSeekMoE · Loss-Free · LatentMoE · K3

切细专家、共享共性、限域路由、潜空间载荷、分位数均衡与冗余专家规划汇流。

留下的墙:理论 FLOPs 已不是唯一尺度,权重带宽、网络、稳定和服务部署同样决定成本。

2017 的关键改变:从“加权所有专家”到“只执行 top-k”

Sparsely-Gated MoE 用 Noisy Top-k Gating 在巨大专家池中只保留少数非零 gate。稀疏执行让参数容量增长快于计算增长,同时用噪声与负载目标鼓励探索。 这篇论文把条件计算从一个好想法推进成现代大模型可继承的模块,但也正式引入路由塌缩:如果 gate 总偏爱少数专家, 其他专家得不到训练,热门设备又成为整步瓶颈。

03 ONE FORWARD PASS

一次 MoE 前向不是一个算子,而是一条物流链

在单卡伪代码里,MoE 看起来只是 top-k 加几次矩阵乘。进入 Expert Parallelism 后, 专家被分散到不同 GPU;Token 起初在数据所属设备上,必须先按路由重排,再把结果运回原位置。

01 / SCORERouter

为每个 Token 计算专家 affinity。

02 / SELECTTop-k
E₂E₇E₉

只保留少数专家;共享专家可绕过 router 固定执行。

03 / DISPATCHAll-to-All

Token 搬到专家所在设备并按 expert 分组。

04 / EXPERTGrouped GEMM

不同专家处理长度不同的小批 Token。

05 / COMBINEReturn + Weight
Σ

第二次通信,恢复原 Token 顺序并按 gate 合并。

理论专家 FLOPs≈ T · k · expert_size

k 小时远低于执行全部 N 个专家。

专家权重读取取决于 batch / expert

小 batch 下每专家 Token 少,常被 HBM 带宽限制。

通信载荷≈ 2 · T · k · routed_width

两次通信;协议、对齐和梯度会继续加成本。

04 CAPACITY · DROP · STABILITY

Router 选得很聪明,也可能让硬件跑得很笨

早期 TPU/SPMD 实现要求专家 batch 形状在编译时确定。假设一批有 T 个 Token、N 个专家、每 Token 激活 k 个专家, 理想平均负载约为 Tk/N。Capacity factor(CF)给这个平均数加缓冲:

expert capacity ≈ ⌈CF × T × k / N⌉Switch 原式是 top-1 的 T/N × CF;这里写成常用 top-k 教学推广。具体实现的 group 与取整口径不同。
HAND CALCULATION

512 Token · 16 专家 · top-2

平均每专家 512×2/16 = 64 条 route。

CF = 1.00
每专家容量 64
CF = 1.25
每专家容量 80
CF = 2.00
每专家容量 128
E₁热门 · overflow
E₂轻微溢出
E₃空槽浪费
E₄接近闲置

Switch 对溢出 Token 跳过专家计算,让表示沿残差进入下一层;论文主要实验报告 dropped tokens 通常低于 1%, 但这不是 MoE 的自然定律。把 CF 拉高可减少 overflow,却线性增加 padding、激活内存、einsum 和 All-to-All 成本。 ST-MoE 进一步表明最优 CF 依赖硬件:它的 32B 模型从 1.25 拉到 2.0,step time 增加 14%,质量增益却较小。

三个不同问题,不能都叫“负载均衡”

A / AUX BALANCE谁被用了多少

用额外 loss 让实际路由比例与平均 gate 概率都接近均匀;过强会把干扰梯度加进主训练。

B / ROUTER Z-LOSSlogits 会不会爆大

ST-MoE 惩罚 router log-partition 的平方,减少指数函数前的大数与舍入风险;它不直接分配容量。

C / SYSTEM BALANCE每张卡何时完成

即使专家平均负载相等,专家到 rank 的映射、组内长尾和通信路径仍可能让设备 makespan 不同。

05 ROUTING BRANCHES

Top-k 不是唯一答案,但因果 LM 与硬件会筛掉很多漂亮方案

BASE / 2021

把路由做成均衡分配

直接求 Token–expert 的 balanced assignment,减少靠辅助损失慢慢“劝”均衡。

代价:分配求解与主流在线 top-k 栈不同。
EXPERT CHOICE / 2022

反过来让专家选 Token

每个专家拿固定 bucket,专家侧天然满载;不同 Token 可被 0、1 或多个专家处理。

因果风险:同一 chunk 的未来 Token 可影响前面 Token 是否被专家选中。
SOFT MOE / 2023

不用硬 top-k

先把 Token 连续混成固定 slots,让专家处理 slots,再连续 combine 回 Token。

代价:信息路径和传统稀疏 EP 不同,硬专业化直觉也改变。
MIXTURE OF DEPTHS / 2024

条件计算不只在宽度

固定每层可处理的 Token 容量,让重要 Token 进块、不重要 Token 跳过。

它改变“走多深”,可与专家宽度 MoE 组合,但调度更复杂。
Expert Choice 为什么对自回归语言模型尤其敏感

如果专家在一个包含多个时间位置的 bucket 中挑最高分 Token,后面的 Token 会改变前面 Token 是否入选, 等于通过路由图泄露未来信息。Loss-Free 论文因此强调:训练因果 LM 时,均衡算法本身也必须遵守因果约束。

06 DEEPSEEK SPOTLIGHT · SPECIALIZATION

DeepSeekMoE 的关键不是“专家多”,而是同预算下切得更细

DeepSeekMoE 把传统粗专家的失败描述成两类:一个专家接收过多类型知识,形成knowledge hybridity;不同专家都要重复学习常识,形成knowledge redundancy。它用 fine-grained expert segmentation 与 shared expert isolation 分别回应这两个问题。

CONVENTIONAL

16 个粗专家 · 选 2

E1E2E3E4E5E6E7E8E9E10E11E12E13E14E15E16
C(16,2) = 120

每个专家很宽,单个专家更容易混入多种知识。

保持总专家参数与激活计算
FINE-GRAINED

64 个小专家 · 选 8

C(64,8) = 4,426,165,368

组合更灵活;组合数只是表达空间上限,不是已学会技能数。

Shared expert isolation:先把共性工作拿出来

ALWAYS ON共享专家

所有 Token 都经过,集中承载基础与共性变换。

TOP-K路由专家池

减少重复负担,更专注差异知识。

2B 实验中,DeepSeekMoE 使用 1 个共享专家和 63 个 routed experts,每 Token 激活 1+7。 在保持计算相近时,禁用 shared expert 并多开一个 routed expert,Pile loss 从 1.808 升到 2.414。 这个实验支持共享路径确实学到难以被临时路由替代的共性知识;它不是所有规模上的固定幅度。

07 DEEPSEEK V2 → V3

专家切细以后,DeepSeek 必须接着解决自己制造的通信扇出

Device-limited routing

先挑少数目标设备,再在这些设备上的专家中完成 top-k,限制每 Token 的通信目的地。

同时保留 expert/device/communication 多类 auxiliary balance objectives。

Node-limited routing

每 Token 最多发到 4 个节点;每层 1 shared + 256 routed,激活 8 routed。

把通信限制提升到 NVLink 节点域,并用 DualPipe 重叠计算和 All-to-All。

Auxiliary-loss-free bias

用历史负载调 expert bias,让过热专家更难入选、冷门专家更容易入选。

报告称训练/推理 no token-dropping,但服务还使用冗余专家与周期性重排。

最关键的解耦:选谁,与选中后占多大权重

SELECTION LANEsᵢ + bᵢ → Top-k

Bias 只影响调度。过载专家下一步 bias 下降,欠载专家上升。

MIXTURE LANEpᵢ ∝ sᵢ

被选专家的实际输出权重仍来自原始 affinity,不把 bias 混进专家贡献。

传统 auxiliary loss 把“请均匀”写进训练目标,系数太小压不住塌缩,太大又和语言建模梯度争方向。 Loss-Free Balancing 用非梯度 bias 更新 dispatch,论文在最高 3B、200B Token 的实验中取得更低 perplexity 与更好负载。 DeepSeek-V3 将其扩到 671B-A37B,并在 14.8T Token 训练中使用。

“Auxiliary-loss-free”不是“V3 完全没有任何 balance loss”

V3 的主均衡来自 batch-wise expert bias,但报告还保留系数 0.0001 的 sequence-wise auxiliary loss, 只用于防止单条序列内部出现极端失衡。严谨表述应是:去掉主要的 expert-level auxiliary balancing 梯度, 不是删除所有与平衡有关的正则项。

08 LATENT MOE

当 FLOPs 已经稀疏,下一堵墙是权重带宽和 Token 载荷宽度

标准 routed expert 接收完整模型宽度 d。小 batch 时,每个专家只得到少量 Token,GPU 花更多时间从 HBM 读取不同专家权重;大吞吐 Expert Parallel 时,All-to-All 又要搬运 k 份 d 维 Token。LatentMoE 因此不先减少 k,而是减少 routed width。

STANDARD MOEx ∈ RᵈDISPATCH dExperts in dCOMBINE dy ∈ Rᵈ

每条路由搬完整模型宽度;专家权重也以 d 为输入/输出宽度。

LATENT MOEx ∈ RᵈW↓ : d → ℓRoute + Experts in ℓW↑ : ℓ → dy ∈ Rᵈ

共享专家仍可走全宽;routed path 的通信与权重流量约按 d/ℓ 压缩。

ℓ-MoEeff

把节省换成效率

压缩 d→ℓ,并按 α=d/ℓ 增加总专家 N;top-k 不变,主要降低 active params / cost。

ℓ-MoEacc

把节省换成更多组合

同时把 N 和 k 放大 α 倍,让通信和带宽近似不增,却提升专家组合与非线性预算。

论文在 16B/2B active 与 95B/8B active 模型上探索,主要后续实验使用 α=4; ℓ-MoEacc 在其 95B 对比中以相近 total/active 参数提高多个任务准确率。 论文的万亿参数 Kimi-K2 serving 图来自高保真模拟器与 effective-parameter construction, 因而本课程把它标成 projected result,不写成真实线上基准。

09 KIMI K3 · STABLE LATENTMOE

“Stable”不是修饰词:它对应极端稀疏下三种具体修复

K3 把模型宽度 7168 投到 3584 维 latent routed path,用 896 个 routed experts 取 16 个, 另有 2 个全宽 shared experts。更大的专家池与更高 k 扩张专业化空间,却把原 LatentMoE 推进了一个新故障区间。

TOTAL / ACTIVE2.78T / 104.2B
ROUTED EXPERTS896 → 16
SHARED EXPERTS2 · always on
MODEL → LATENT7168 → 3584
EXPERT HIDDEN3072
ROUTED SPARSITY56×
FIX 01 / SCALE

Normalized LatentMoE

多个 routed experts 聚合后的 latent u 尺度会随 gate 与专家变化;K3 在 W↑ 前加入 RMSNorm,再与共享路径相加。

FIX 02 / ACTIVATION

SiTU-GLU

W↓、多分支 gated expert、W↑ 形成近四连矩阵乘;有界 tanh soft-cap 控制 SwiGLU 两个乘法分支的极值。

报告配置 β₁=4、β₂=25,标量输出上界为 100。
FIX 03 / BALANCE

Quantile Balancing

固定步长 bias 在近 10³ 专家下会面临“反应慢 vs 振荡”;QB 直接从 score margin 的目标 quantile 算下一步 bias。

Quantile Balancing:从“每次推一点”变成“直接找负载阈值”

01Top-(k+1)

前 k 个是真路由,第 k+1 个给出每个 Token 的入选 cutoff αᵢ。

02Margin

对专家 j 计算所有 Token 的 raw score sᵢⱼ 减 cutoff αᵢ。

03Quantile

目标负载 q=mk/n,对 margin 取 1-k/n 分位数得到下一步 bias。

04Next step

Bias 下一批才生效;推理时冻结,遵守 causal LM 约束。

全局 batch 有数百万 margin,无法把它们全收集到一处精确排序。K3 用每专家直方图统计, 通过一次 all-reduce 合并 bin counts,再从累计直方图读 quantile。这里体现了很典型的算法—系统协同: 数学目标是分位数,工程实现则把全局排序改写成固定大小的可加统计。

10 INTERACTIVE LAB

亲手制造路由塌缩,再看每种方法到底改了哪张账

先从 Switch 开始,把路由偏斜拉高、capacity factor 降到 0.75;再依次切换 Aux proxy、Loss-Free 和 QB proxy。 最后比较 DeepSeek-V3 的 node limit、LatentMoE 的 4× payload 压缩与 K3 的 896 选 16。

INTERACTIVE / MOE ROUTING LAB

参数没有消失:只是每个 Token 选择不同路径

预设使用论文结构,负载与路由是确定性教学模拟。先切模型,再故意增加偏斜,观察“模型更稀疏”为何会把压力转移到均衡和通信。

01 / TOKEN → EXPERTSWITCH · 128 选 1
TOKENSt1t2t3t4t5t6t7t8t9t10t11t12
EXPERT GROUPSE10E20E30E40E50E60E70E80E90E100E110E120
被专家处理超过 capacity共享专家另行固定执行
128 选 1

Switch

每个 Token 只去得分最高的一个专家,用最小 top-k 降低专家计算和通信。

主要解决
把容量与激活计算解耦
仍然留下
容量溢出与辅助损失
FIXED DENSE PATH0 shared experts

Switch 没有固定共享专家;每个 Token 只走一个 routed expert。

02 / STRESS THE ROUTER

把路由推向过热,再换一种均衡方法

模拟 512 个 Token。偏斜越高,越多 Token 争抢热门专家;capacity factor 越大,缓冲越多,但 padding、显存和通信预算也越大。

BALANCE MODE
ROUTED SPARSITY1 / 128 · 0.78%不含 attention 与其他稠密路径
MAX / MEAN LOAD1.00× 才是完全均匀
OVERFLOW ROUTES每专家容量 5 个 Token
DISPATCH + COMBINE14.0 MiB7168 维 BF16 教学载荷
DEVICE FANOUT每 Token 平均触达设备数
COMBINATION SPACE10²·¹C(N,k) 上限,不代表已学会的技能数
03 / LOAD HISTOGRAM32 个专家分组 · 红线是 capacity
CAP
0102030405060708091011121314151617181920212223242526272829303132
04 / ALL-TO-ALL8 个 EP ranks
源设备 →颜色越深,dispatch 的 Token 路由越多
01ROUTE

Router 为 Token 与专家打分,选 top-k。

02DISPATCH

把 Token 搬到专家所在设备;第一次 All-to-All。

03EXPERT

每个专家只处理收到的小批 Token。

04COMBINE

结果搬回原设备,加权合并;第二次通信。

TEACHING SIMULATION, NOT A BENCHMARK

Aux、Loss-Free 与 QB 在这里用确定性近似展示负载方向,不复现论文训练过程;通信值只计算 512 个 Token 的 BF16 dispatch/combine payload,不含协议、对齐、共享专家、梯度、索引与 kernel 开销。K3 还依赖 MoonEP 的冗余专家规划。

11 MOONEP · EXECUTION

Router 均匀,不代表每张 GPU 同时下班

Quantile Balancing 主要在专家选择层面逼近目标负载;真正训练 3T 模型时,还要把专家映射到 EP ranks, 安排 redundant experts、通信 buffer、Grouped GEMM 与 shared expert stream。K3 的 MoonEP 用在线冗余专家规划把“平均均衡”推进到“每个 rank 完全等量执行”。

CONVENTIONAL EP
R1等待
R2空闲
R3等待
R4空闲
在线规划
冗余专家
MOONEP
R1S×K
R2S×K
R3S×K
R4S×K
BOUNDED REDUNDANCY

至多 E/R 槽

报告证明每 rank 预留这个上界即可保证存在可行平衡计划。

ZERO COPY

直接写入 expert-grouped buffer

Planning kernel 预先给出目的地,fused permute/unpermute 减少中间 copy。

STATIC SHAPES

每 rank 固定 S×K

消除每层读取动态 shape 的 host sync,也压低内存碎片。

OVERLAP

Shared / routed 分流

共享专家独立 stream;dispatch/combine 与其他计算阶段重叠。

12 EVIDENCE

怎样判断专家真的“专”,而不只是路由图看起来热闹

L1

训练与验证 loss

在相同 total params、active params、FLOPs 与训练 Token 下比较,避免“更多计算”冒充架构收益。

L2

负载指标

同时看全局、batch、sequence、rank 与 per-expert makespan;一个平均数会隐藏长尾。

L3

干预专家

禁用高分专家、共享专家或改变激活 k,看 loss 退化是否说明专家不可替代。

L4

领域路由

比较代码、数学、自然语言等域的 load pattern,但不要把相关性直接命名成可解释技能。

L5

系统测量

端到端 tokens/s、p50/p99、HBM traffic、All-to-All、空槽、掉 Token 与容错必须同看。

L6

部署口径

Prefill 与 decode 的 expert batch 不同;训练均衡方案不保证小 batch 在线服务同样均衡。

PAPER FACT

K3 报告公开 2.78T/104.2B、896→16、2 shared、QB 数学式和 MoonEP 设计。

REASONABLE INFERENCE

更大组合空间提供更细专业化机会,但 C(N,k) 不是能力数量,也不保证自动形成可解释专家。

STILL UNKNOWN

完整训练数据、线上请求分布、真实专家语义、长期失效模式与第三方 3T 复现仍不公开。

PRIMARY-SOURCE READING ORDER

按问题读 19 篇论文,而不是按模型名背配置