LLM WIKI · 课程精读

LEARNING UNIT · 07

MoE 路由与负载均衡

理解专家选择、门控归一化、无辅助损失均衡以及 prefill 阶段的并行负载。

已整理章节
6 节
单元来源
5 条视频
总时长
13:26
状态
已发布
学习位置
7 / 20
01

主题讲解 · 01:54

Top-k 与 Softmax 交换顺序为何仍能得到同一门控权重

学习目标

  • 能写出 MoE router 从 logits 到 Top-k 门控权重的两条路径。
  • 能解释 softmax 为什么不改变 logits 的排序。
  • 能用公共分母约去证明两条路径的选中权重相同。
  • 能说明“先全局 softmax”以后为什么仍需在选中集合上重归一化。
  • 能列出温度、mask、并列和数值误差等结论边界。

前置与衔接

MoE 的 router 会为一个 token 产生每个专家的分数。

稀疏路由只激活其中 kk 个专家,因此需要同时回答两个问题:

  1. 选哪几个专家;
  2. 被选专家各占多大权重。

视频比较了两种看起来不同的实现顺序。

本课只讨论确定性 Top-k 与标准 softmax,不涉及 noisy routing、capacity limit 或 token dropping。

核心讲解

1. 两条路径先摆在一起

设 router logits 为

z=[1,2,3,5],z=[1,2,3,5],

并令 k=2k=2

路径 A 是

zTopKzSsoftmaxwS.z\xrightarrow{\operatorname{TopK}}z_S \xrightarrow{\operatorname{softmax}}w_S.

路径 B 是

zsoftmaxpTopKpSrenormp~S.z\xrightarrow{\operatorname{softmax}}p \xrightarrow{\operatorname{TopK}}p_S \xrightarrow{\text{renorm}}\widetilde p_S.
图 1

同一组 router logits 可以先取 Top-k 再做 softmax,也可以先做全局 softmax、取 Top-k 后再在线性尺度上重归一化。

原视频 · 00:00 ↗

待证明的是

wS=p~S.w_S=\widetilde p_S.

2. Top-k 选中的集合为何不变

对任意实数 a>ba>b,指数函数严格单调:

ea>eb.e^a>e^b.

softmax 的所有分量还共享同一个正分母:

pi=ezijezj.p_i=\frac{e^{z_i}}{\sum_j e^{z_j}}.

所以

zi>zjpi>pj.z_i>z_j \Longleftrightarrow p_i>p_j.

在没有并列和额外 mask 的条件下,logits 的 Top-k 索引与 softmax 概率的 Top-k 索引完全相同。

本例选中的是分数 3355,对应集合

S={3,4}.S=\{3,4\}.
图 2

示例 logits 为 [1,2,3,5],Top-2 选择分数 3 与 5;softmax 的严格单调性保证排序不变。

原视频 · 00:20 ↗

这里的 SS 表示专家索引集合,不是 softmax 概率之和。

3. 先 Top-k 再 softmax

路径 A 先留下

zS=[3,5].z_S=[3,5].

只在这两个分数上做 softmax:

w3=e3e3+e5,w4=e5e3+e5.w_3=\frac{e^3}{e^3+e^5}, \qquad w_4=\frac{e^5}{e^3+e^5}.

因此

w3+w4=1.w_3+w_4=1.

这就是最终用于混合两个专家输出的门控权重。

4. 先全局 softmax 再 Top-k

路径 B 先对四个 logits 全部归一化。

Z=e1+e2+e3+e5.Z=e^1+e^2+e^3+e^5.

p=[e1Z,e2Z,e3Z,e5Z].p=\left[ \frac{e^1}{Z}, \frac{e^2}{Z}, \frac{e^3}{Z}, \frac{e^5}{Z} \right].

Top-k 后留下

pS=[e3Z,e5Z].p_S=\left[\frac{e^3}{Z},\frac{e^5}{Z}\right].

注意这两个数的和小于 11,因为专家 1、2 仍占据了一部分全局概率质量。

5. 公共分母为何会消失

路径 B 必须把选中概率在线性尺度上重归一化:

p~3=e3/Ze3/Z+e5/Z.\widetilde p_3 = \frac{e^3/Z}{e^3/Z+e^5/Z}.

分子分母同时乘 ZZ

p~3=e3e3+e5=w3.\widetilde p_3 = \frac{e^3}{e^3+e^5} =w_3.

同理,

p~4=e5/Ze3/Z+e5/Z=e5e3+e5=w4.\widetilde p_4 = \frac{e^5/Z}{e^3/Z+e^5/Z} = \frac{e^5}{e^3+e^5} =w_4.
图 3

先全局 softmax 后,选中概率共享同一个全局分母;在选中集合内再归一化时,该公共因子会约去。

原视频 · 01:20 ↗

真正起作用的是一个一般恒等式。

pi=xijxj,xi>0,p_i=\frac{x_i}{\sum_jx_j}, \qquad x_i>0,

那么对任意选中集合 SS

pirSpr=xirSxr,iS.\frac{p_i}{\sum_{r\in S}p_r} = \frac{x_i}{\sum_{r\in S}x_r}, \qquad i\in S.

6. “相同”到底指什么

相同的是最终被选专家及其归一化门控权重。

若专家输出为 E3(x)E_3(x)E4(x)E_4(x),两条路径都会得到

y=w3E3(x)+w4E4(x).y=w_3E_3(x)+w_4E_4(x).
图 4

两种顺序的最终权重相同,关键是第二条路径必须对选中概率做线性重归一化,而不能直接使用被截断的全局概率。

原视频 · 01:40 ↗

它不表示中间张量相同:路径 B 曾经计算并保存全部专家的概率,路径 A 没有。

7. 结论成立的边界

需要同时满足:

  • 两条路径使用同一组 logits;
  • 使用相同温度和相同 mask;
  • Top-k 依据数值排序,且两边采用一致的并列规则;
  • 路径 B 对选中概率重新归一化;
  • 归一化在线性概率尺度完成,而不是再次对概率做 softmax。

浮点数溢出、量化或极接近的并列值可能让实现中的索引出现差别。

若加入随机噪声、专家偏置或其他只在一条路径出现的变换,也不能直接套用本证明。

跟练与练习

跟练:换一组 logits

z=[0,1,4],k=2.z=[0,1,4],\qquad k=2.

先取 Top-2 得到 [1,4][1,4],对应权重

[ee+e4,e4e+e4].\left[ \frac{e}{e+e^4}, \frac{e^4}{e+e^4} \right].

再从全局 softmax 出发重算一次,应得到同一结果。

编者练习

如果路径 B 在 Top-k 后不重归一化,而直接用 e3/Ze^3/Ze5/Ze^5/Z 混合专家,结果与路径 A 有什么关系?

查看参考答案

两项都比路径 A 多乘同一个系数
c=e3+e5Z<1.c=\frac{e^3+e^5}{Z}<1.
因此输出变成 cc 倍的路径 A 输出,门控权重之和也只有 cc,不再是同一门控混合。

常见误区

  • 误区:softmax 会改变排序。标准 softmax 对有限 logits 严格保序。
  • 误区:Top-k 后直接保留全局概率就已经等价。还缺少选中集合重归一化。
  • 误区:对选中概率再做一次 softmax。正确步骤是除以它们的和。
  • 误区:任何 router 都能交换顺序。额外噪声、偏置、mask 与并列规则都要逐项核对。
  • 误区:中间计算量也相同。路径 B 仍可能先计算全量概率。

本课小结

softmax 保留 logits 的排序,所以两条路径选中同一 Top-k 集合。

先全局 softmax 产生的选中概率共享公共分母;在选中集合内重归一化时,公共分母被约去。

因此两条路径得到相同的最终门控权重,但前提是变换、mask、并列规则一致,并且不能省略重归一化。

02

主题讲解 · 02:16

从 Transformer 子层到稀疏专家的 MoE 可视化

学习目标

  • 能指出 MoE 在简化 Transformer block 中替换的子层。
  • 能解释 token 表示如何经 router 得到专家 logits。
  • 能从 Top-2 logits 算出两个门控权重。
  • 能描述被选专家各自完成扩维与降维的 FFN 计算。
  • 能说明专家输出为何必须回到同一隐藏维度后再加权。
  • 能区分教学可视化与实际系统中的容量、通信、残差等细节。

前置与衔接

Dense Transformer 中,每个 token 都经过同一组 FFN 参数。

Sparse MoE 的核心改变是:准备多组专家 FFN,但每个 token 只激活少数专家。

视频用一个 token O1O_1、四个专家与 Top-2 路由画出完整数据流。

画面为了讲清主线,省略了 LayerNorm、残差连接、dropout、bias 与具体激活函数。

核心讲解

1. MoE 替换的是哪一段

简化的 Transformer 子层顺序可写为

XattentionOFFNY.X\xrightarrow{\text{attention}}O \xrightarrow{\text{FFN}}Y.

MoE 通常替换其中的 dense FFN:

Orouter + expertsYMoE.O\xrightarrow{\text{router + experts}}Y_{\mathrm{MoE}}.
图 1

在简化 Transformer 图中,MoE 替换的是 dense FFN 子层:attention 先产生 token 表示,随后进入路由与专家计算。

原视频 · 00:00 ↗

attention 与 MoE 承担不同角色:

  • attention 在 token 之间聚合上下文;
  • MoE 在每个 token 上选择参数子网络。

2. attention 先产生 token 表示

对某一注意力头,视频把过程概括为

A=softmax(QK),A=\operatorname{softmax}(QK^\top),
O=AV.O=AV.

更完整的缩放点积形式通常包含

QKdk\frac{QK^\top}{\sqrt{d_k}}

以及 causal mask;这些细节在画面中被省略。

图 2

QK^T 形成注意力权重,再对 V 加权得到 token 表示 O_i;该表示是 router 与专家 FFN 的共同输入。

原视频 · 00:20 ↗

取其中一个 token 向量

o1Rdmodel.o_1\in\mathbb R^{d_{\mathrm{model}}}.

它既是 router 的输入,也是被选专家 FFN 的输入。

3. router 把 token 投影成专家分数

设共有 E=4E=4 个专家。

router 权重可记为

WrRdmodel×E.W_r\in\mathbb R^{d_{\mathrm{model}}\times E}.

单 token logits 为

z=o1WrRE.z=o_1W_r\in\mathbb R^E.

ee 个分量等价于 o1o_1 与第 ee 个专家路由向量的内积。

图 3

router 用 O_i 与各专家的路由向量做内积,得到每个专家的 affinity logits。

原视频 · 00:40 ↗

视频例子取

z=[1,2,3,5].z=[1,2,3,5].

这些是 softmax 前的 logits,不是已经归一化的概率。

4. Top-2 选择与门控权重

k=2k=2,分数最大的两个位置是专家 3、4:

S={3,4}.S=\{3,4\}.

只在选中 logits 上做 softmax:

g3=e3e3+e50.12,g_3=\frac{e^3}{e^3+e^5}\approx0.12,
g4=e5e3+e50.88.g_4=\frac{e^5}{e^3+e^5}\approx0.88.
图 4

示例对 [1,2,3,5] 取 Top-2,保留专家 3、4,再在两个分数上 softmax 得到约 0.12 与 0.88。

原视频 · 01:00 ↗

满足

g3+g4=1.g_3+g_4=1.

未被选中的专家 1、2 对该 token 不执行主体 FFN。

5. 每个专家是一套独立 FFN

对专家 ee,可抽象为

Ee(o)=Wdown(e)ϕ ⁣(Wup(e)o).E_e(o) =W^{(e)}_{\mathrm{down}} \phi\!\left(W^{(e)}_{\mathrm{up}}o\right).

若采用行向量约定,也可把矩阵乘法顺序写在右侧;核心 shape 是

dmodeldffdmodel.d_{\mathrm{model}} \rightarrow d_{\mathrm{ff}} \rightarrow d_{\mathrm{model}}.

不同专家拥有不同参数,因此一般有

E3(o1)E4(o1).E_3(o_1)\ne E_4(o_1).
图 5

同一个 token 只送入被选专家;每个专家分别完成扩维、非线性与降维,输出都回到 d_model。

原视频 · 01:40 ↗

“先变长再变短”只描述 FFN 的宽度变化,不代表中间没有激活函数或门控分支。

6. 专家结果在输出端混合

该 token 的 MoE 输出为

y1=g3E3(o1)+g4E4(o1).y_1 =g_3E_3(o_1)+g_4E_4(o_1).

因为两个专家输出都属于

Rdmodel,\mathbb R^{d_{\mathrm{model}}},

加权求和后仍是同一 shape。

图 6

被选专家的 d_model 输出按门控权重求和,形成与 dense FFN 输出 shape 对齐的 MoE 结果。

原视频 · 02:00 ↗

这让 MoE 子层可以接回原有 Transformer 数据流。

7. 为什么不能提前平均中间激活

一般情况下,

g3E3(o)+g4E4(o)g_3E_3(o)+g_4E_4(o)

不能改写成把两组专家参数或扩维激活先平均一次再过非线性。

原因是专家拥有不同参数,且

ϕ(g3a+g4b)g3ϕ(a)+g4ϕ(b)\phi(g_3a+g_4b) \ne g_3\phi(a)+g_4\phi(b)

通常成立。

因此可视化中的汇合点位于完整专家输出之后。

8. 从一张图读出四个 shape

单 token 情形可记为:

o1:[dmodel],o_1:[d_{\mathrm{model}}],
z:[E],z:[E],
gS:[k],g_S:[k],
y1:[dmodel].y_1:[d_{\mathrm{model}}].

这四个 shape 是后续理解多 token dispatch 和 expert parallel 的基础。

跟练与练习

跟练:复算权重

用计算器验证

e3e3+e50.1192,e5e3+e50.8808.\frac{e^3}{e^3+e^5}\approx0.1192, \qquad \frac{e^5}{e^3+e^5}\approx0.8808.

两者只由差值 53=25-3=2 决定;同时给两个 logits 加同一常数不会改变结果。

编者练习

E3(o1)=[2,0]E_3(o_1)=[2,0]E4(o1)=[0,4]E_4(o_1)=[0,4],门控权重为 0.120.120.880.88,MoE 输出是什么?

查看参考答案

逐分量加权:
y1=0.12[2,0]+0.88[0,4]=[0.24,3.52].y_1 =0.12[2,0]+0.88[0,4] =[0.24,3.52].
输出仍是二维向量,与两个专家输出 shape 相同。

常见误区

  • 误区:MoE 替换 attention。常见 sparse MoE block 替换的是 FFN 子层。
  • 误区:一个 batch 只选一组专家。路由通常按 token 发生。
  • 误区:router logits 就是概率。还需 Top-k 与归一化。
  • 误区:选中专家共享同一套 FFN 参数。专家之所以不同,正因为参数独立。
  • 误区:可以在非线性前任意平均专家。一般不满足线性可交换。
  • 误区:这张图已经覆盖完整 MoE 系统。容量、负载均衡、dispatch 与跨设备通信尚未展开。

本课小结

attention 产生 token 表示,router 将它投影成每个专家的 logits。

Top-k 只保留少数专家,并在选中集合上得到门控权重;各专家独立完成 FFN,再在共同的 dmodeld_{\mathrm{model}} 空间加权求和。

这条“路由—专家—混合”主线解释了 MoE 的语义,实际系统还需解决批处理、容量和通信问题。

03

主题讲解 · 03:43

DeepSeek-V3 如何用路由偏置形成专家负载负反馈

学习目标

  • 能区分 routed expert 与 shared expert 的计算路径。
  • 能说明视频所述 DeepSeek-V3 router 使用 sigmoid affinity。
  • 能写出“原始 affinity”和“加偏置的选择分数”两个量。
  • 能解释偏置只影响 Top-k 选择、不直接进入门控权重的设计。
  • 能用欠载增偏置、过载减偏置描述负反馈回路。
  • 能准确限定“auxiliary-loss-free”与“完全没有任何辅助项”的差别。

前置与衔接

普通 sparse MoE 常把负载均衡目标加入训练 loss,借梯度鼓励专家利用率接近。

视频讲解 DeepSeek-V3 的另一条路径:为每个 routed expert 维护一个选择偏置,根据近期负载直接调节它。

这样,平衡信号作用于“谁更容易被 Top-k 选中”,而不是把专家平衡目标直接混进主任务梯度。

本课严格限定为视频所述 DeepSeek-V3 路由机制。

标题中的“不用辅助损失”应理解为专家负载均衡的 auxiliary-loss-free strategy,不能外推成训练中不存在任何其他辅助正则或损失项。

核心讲解

1. 先看完整数据流

设 attention 输出的某个 token 表示为

oiRdmodel.o_i\in\mathbb R^{d_{\mathrm{model}}}.

教学图包含四条信息:

  1. router 产生 routed expert affinity;
  2. Top-k 选择少数 routed experts;
  3. shared experts 始终参与;
  4. 专家混合结果再与残差路径汇合。
图 1

视频用一张总图串起 DeepSeek-V3 的 sigmoid affinity、每专家路由偏置、routed/shared experts 与残差输出。

原视频 · 00:00 ↗

画面中的符号是简化示意,不给出专家数、每 token 激活数或所有实现常数。

2. routed experts 只处理被选 token

若 token oio_i 选中专家集合 SiS_i,routed 部分可写为

yirouted=eSigi,eEe(oi).y_i^{\mathrm{routed}} = \sum_{e\in S_i}g_{i,e}E_e(o_i).

其中

eSigi,e=1.\sum_{e\in S_i}g_{i,e}=1.

未在 SiS_i 中的 routed expert 不处理这个 token。

图 2

routed experts 只处理被选 token,返回同维输出后再按门控权重加权求和。

原视频 · 01:00 ↗

稀疏性来自每个 token 只执行全部 routed experts 的一个子集。

3. shared experts 是另一条始终开启的路径

shared expert 不参与 routed Top-k 竞争。

若 shared expert 集合为 HH,可抽象为

yishared=hHEhshared(oi).y_i^{\mathrm{shared}} = \sum_{h\in H}E_h^{\mathrm{shared}}(o_i).

最终专家结果包含

yiexperts=yirouted+yishared.y_i^{\mathrm{experts}} =y_i^{\mathrm{routed}}+y_i^{\mathrm{shared}}.
图 3

shared experts 不经过 Top-k 稀疏选择,其输出直接加入 routed expert 混合结果。

原视频 · 01:20 ↗

ASR 多次把“共享专家”识别成“共产专家”,本文依据板书与上下文统一纠正为 shared expert。

4. 所有专家输出必须回到同一宽度

专家 FFN 的主 shape 是

dmodeldffdmodel.d_{\mathrm{model}} \rightarrow d_{\mathrm{ff}} \rightarrow d_{\mathrm{model}}.

可写成

Ee(o)=Wdown(e)ϕ ⁣(Wup(e)o).E_e(o) =W_{\mathrm{down}}^{(e)} \phi\!\left(W_{\mathrm{up}}^{(e)}o\right).
图 4

每个专家都是独立 FFN:先扩维、经过非线性,再降回 token 隐藏维,之后才能相加。

原视频 · 01:40 ↗

只有回到相同 dmodeld_{\mathrm{model}},routed mixture、shared outputs 与残差输入才能相加。

5. 从 logits 到 sigmoid affinity

设 router 产生 logits

zi,e.z_{i,e}.

视频强调,这里用 sigmoid 得到 affinity:

si,e=σ(zi,e)=11+ezi,e.s_{i,e}=\sigma(z_{i,e}) =\frac{1}{1+e^{-z_{i,e}}}.

与跨专家 softmax 不同,sigmoid 对每个专家分数逐元素作用,因此原始 si,es_{i,e} 不要求跨专家求和为 11

6. 选择分数与门控 affinity 必须分开

为每个 routed expert 维护偏置

be.b_e.

用于 Top-k 选择的分数是

ri,e=si,e+be.r_{i,e}=s_{i,e}+b_e.

选中集合写为

Si=TopKe(ri,e,k).S_i=\operatorname{TopK}_e(r_{i,e},k).
图 5

DeepSeek-V3 教学图先对 router logits 做 sigmoid 得到 affinity,再给每个专家加选择偏置以决定 Top-k。

原视频 · 02:00 ↗

关键边界是:beb_e 用来改变选择排序,但门控权重仍由被选专家的原始 affinity 归一化。

gi,e=si,erSisi,r,eSi.g_{i,e} = \frac{s_{i,e}} {\sum_{r\in S_i}s_{i,r}}, \qquad e\in S_i.

而不是

si,e+berSi(si,r+br).\frac{s_{i,e}+b_e} {\sum_{r\in S_i}(s_{i,r}+b_r)}.

因此偏置改变“谁入选”,不直接扭曲入选后的专家混合比例。

7. 欠载与过载形成负反馈

设一个统计窗口内专家 ee 的实际负载为 LeL_e,目标负载为 LL^*

视频给出的方向是:

  • Le<LL_e<L^*,说明欠载,提高 beb_e
  • Le>LL_e>L^*,说明过载,降低 beb_e

可用方向性控制律表示为

bebe+ηbsign(LLe),b_e\leftarrow b_e+\eta_b\,\operatorname{sign}(L^*-L_e),

但这只是编者用于表达方向的示意式,不是视频给出的精确实现公式。

图 6

欠载专家提高选择偏置、过载专家降低选择偏置;偏置改变入选机会,但不进入已选专家的门控权重归一化。

原视频 · 03:20 ↗

欠载专家的 beb_e 增大后,ri,er_{i,e} 更容易进入 Top-k;它收到更多 token,负载上升。

过载专家则相反。

这构成一个围绕目标负载的负反馈控制环。

8. 为什么它能避免平衡损失干扰主梯度

传统辅助损失把负载平衡目标写进

L=Ltask+λLbalance.\mathcal L =\mathcal L_{\mathrm{task}} +\lambda\mathcal L_{\mathrm{balance}}.

于是共享参数和 router 参数会同时接收任务梯度与平衡梯度。

视频所述策略通过负载统计更新 beb_e,专家选择被校正,但门控 affinity 的主学习仍由任务目标驱动。

这里的“不干扰”是机制动机,不代表系统不需调偏置步长、统计窗口或稳定性超参数。

9. 一个数值例子

假设两个专家的原始 affinity 是

s1=0.90,s2=0.86.s_1=0.90, \qquad s_2=0.86.

专家 2 欠载,偏置为

b1=0,b2=0.08.b_1=0, \qquad b_2=0.08.

选择分数变成

r1=0.90,r2=0.94.r_1=0.90, \qquad r_2=0.94.

专家 2 可以因偏置进入 Top-k。

但若两者都入选,门控比例仍由 0.900.900.860.86 归一化,而不是由 0.900.900.940.94 归一化。

跟练与练习

跟练:标出两条数值流

对任意一个 token,分别写出:

zs=σ(z)s+bTopK,z\rightarrow s=\sigma(z)\rightarrow s+b\rightarrow\operatorname{TopK},

以及

sSsSsSgS.s_S\rightarrow\frac{s_S}{\sum s_S}\rightarrow g_S.

第一条决定索引,第二条决定混合权重。

编者练习

某专家持续过载。若控制器降低它的 beb_e,会直接降低它在已经入选 token 上的门控权重吗?

查看参考答案

不会直接降低。beb_e 只参与 Top-k 选择分数 si,e+bes_{i,e}+b_e
它会让该专家未来更少入选;一旦仍然入选,门控权重用原始 si,es_{i,e} 在选中集合中归一化。

常见误区

  • 误区:auxiliary-loss-free 表示训练没有任何辅助项。这里只限定专家负载均衡策略。
  • 误区:sigmoid affinity 跨专家和为 11。逐元素 sigmoid 没有这一约束。
  • 误区:选择偏置也进入门控加权。视频明确把选择与权重计算分开。
  • 误区:shared expert 也要参加 Top-k。shared 路径是始终开启的。
  • 误区:偏置通过主任务 loss 梯度学习。视频描述的是依据负载状态调节。
  • 误区:有负反馈就自动稳定。步长、统计噪声与更新频率仍影响控制效果。

本课小结

DeepSeek-V3 的教学机制把 routed expert 的选择与混合拆成两个数值流:s+bs+b 决定 Top-k,原始 sigmoid affinity ss 决定门控权重。

系统根据专家欠载或过载上调、下调每专家偏置,从而形成选择概率的负反馈,不必把主要专家平衡压力直接写成辅助 loss。

结论应限定到视频所述的 auxiliary-loss-free 负载均衡策略,不能扩张为模型训练没有任何其他辅助目标。

04

主题讲解 · 01:48

为什么相同 Token 数不等于相同 Attention 负载

学习目标

  • 能区分 batch token 总数与 attention 计算负载。
  • 能写出 packed documents 的主代价近似 rr2\sum_r\ell_r^2
  • 能用因果注意力三角面积解释平方复杂度。
  • 能比较相同 token 数下长文档与短文档组合的代价。
  • 能说明 WLB-LLM 教学图为何允许短文档 batch 放入更多 token。
  • 能列出 kernel、padding、通信等使真实耗时偏离简化公式的因素。

前置与衔接

训练系统常把一个 batch 的 token 数设为近似相同,以控制显存并简化调度。

但 token 数只度量序列元素个数,不直接度量所有算子的 FLOPs。

视频以 WLB-LLM 为例,解释 packed documents 中 attention 的计算量还取决于文档长度分布。

视频将其描述为 OSDI 2025 的大模型预训练 4D 并行负载均衡工作;本课只整理视频展示的“变长文档打包”直觉,不扩写论文未在视频中展开的系统细节。

核心讲解

1. 问题不在 token 总数,而在 token 如何分组

设一个 batch 打包 mm 篇文档,第 rr 篇长度为

r.\ell_r.

总 token 数为

N=r=1mr.N=\sum_{r=1}^{m}\ell_r.

两个 batch 可以拥有相同的 NN,却拥有完全不同的长度向量

(1,,m).(\ell_1,\ldots,\ell_m).
图 1

WLB-LLM 的教学图把负载指标从总 token 数推进到文档长度分布所决定的 attention 计算量。

原视频 · 00:00 ↗

例如一个 batch 可能主要是一篇长文档,另一个由许多短文档构成。

2. 单篇文档的 attention 近似平方代价

对长度为 \ell 的 full attention,分数矩阵 shape 是

×.\ell\times\ell.

忽略常数、head 数与隐藏维后,主计算复杂度写为

O(2).O(\ell^2).

因果 attention 只保留下三角,实际有效位置数约为

(+1)2.\frac{\ell(\ell+1)}{2}.

量级仍是

O(2).O(\ell^2).

3. packed documents 形成块对角区域

多篇文档拼进一个序列时,通常不允许不同文档互相 attention。

因此有效注意力区域不是完整的 N×NN\times N 三角,而是多个文档内三角块。

图 2

每个文档只在自身 causal 三角块内计算位置 i、j 的注意力分数;文档之间的块被屏蔽。

原视频 · 01:00 ↗

主代价近似为

Cr=1mr(r+1)2.C \propto \sum_{r=1}^{m}\frac{\ell_r(\ell_r+1)}{2}.

忽略线性项与共同的 1/21/2,可以用

Cr=1mr2C\approx\sum_{r=1}^{m}\ell_r^2

比较 batch 负载。

4. 相同 token 数的两个 batch

把总长度归一化为 11

方案 A 含一篇占 3/43/4 的长文档和一篇占 1/41/4 的短文档:

CA(34)2+(14)2=1016.C_A \propto \left(\frac34\right)^2 +\left(\frac14\right)^2 =\frac{10}{16}.

方案 B 含四篇等长短文档:

CB4(14)2=416.C_B \propto 4\left(\frac14\right)^2 =\frac4{16}.

所以

CA>CB.C_A>C_B.
图 3

两个 batch 的 token 总数相同,但一个由少数长文档组成、另一个由许多短文档组成,attention 工作量可以不同。

原视频 · 00:20 ↗

这里不是说长文档 token 单个更“贵”,而是文档内 token 对的数量随长度平方增长。

5. 为什么平方和偏爱均匀长度

视频中的数值比较写成

(34)2+(14)2>4(14)2.\left(\frac34\right)^2 +\left(\frac14\right)^2 > 4\left(\frac14\right)^2.
图 4

在文档间 attention 被屏蔽的打包序列中,主计算量近似与各文档长度平方和 sum l_r^2 成正比。

原视频 · 00:40 ↗

更一般地,在文档数 mm 与总长度 NN 固定时,平方和

rr2\sum_r\ell_r^2

在长度尽量均匀时较小。

这是凸函数 x2x^2 的直接结果。

如果一部分长度从短文档转移到已经更长的文档,平方和会继续增大。

6. 三角面积就是计算对数量

因果 attention 中,每个 query 位置 ii 只看不晚于自己的 key 位置 jj

一篇长度为 \ell 的文档对应约

1+2++=(+1)21+2+\cdots+\ell =\frac{\ell(\ell+1)}2

个有效 (i,j)(i,j) 对。

因此图上的大三角面积代表大量 attention score 计算。

图 5

在总 token 数固定时,一个大三角加一个小三角的面积大于四个均匀小三角,长文档会主导 attention 负载。

原视频 · 01:20 ↗

把图形换成矩阵语言,就是块对角 causal mask 中非屏蔽元素的数量。

7. WLB-LLM 直觉:按预计工作量装 batch

若当前文档都很短,单个 batch 即使放入更多 token,

rr2\sum_r\ell_r^2

也可能与 token 更少但含长文档的 batch 接近。

因此调度器可按预计 attention 工作量而不是固定 token 数分配 batch。

目标是让不同数据并行 worker 的处理时间更接近,减少快 worker 等待慢 worker 的空闲。

8. 简化公式没有覆盖哪些真实成本

rr2\sum_r\ell_r^2 是解释 attention 主负载的教学指标,不等于端到端耗时的完整模型。

真实训练还会受到:

  • FFN 的近线性 token 代价;
  • padding 与实际 kernel 是否跳过 mask 区域;
  • FlashAttention 的分块与形状效率;
  • tensor/pipeline/data/expert parallel 通信;
  • micro-batch 数量和流水线气泡;
  • 内存带宽、缓存命中与算子启动开销。

所以“平方和相同”意味着主要 attention 工作量接近,不保证墙钟时间严格相同。

跟练与练习

跟练:比较两组长度

总 token 数均为 88

方案 A:

[6,2],[6,2],

平方和为

62+22=40.6^2+2^2=40.

方案 B:

[2,2,2,2],[2,2,2,2],

平方和为

4×22=16.4\times2^2=16.

两者 token 数相同,教学近似下 attention 负载相差 2.52.5 倍。

编者练习

若一个 batch 的文档长度为 [4,4][4,4],另一个为 [5,3][5,3],哪一个 attention 主负载更大?

查看参考答案

第一个平方和为
42+42=32.4^2+4^2=32.
第二个平方和为
52+32=34.5^2+3^2=34.
所以 [5,3][5,3] 略大。总 token 数同为 88,不均匀长度分布使平方和上升。

常见误区

  • 误区:token 数相同就必然同负载。attention 还依赖文档长度平方和。
  • 误区:packed sequence 内所有文档互相 attention。通常会用 document mask 隔开。
  • 误区:因果 mask 把复杂度降为线性。三角元素数仍是平方量级。
  • 误区:短文档越多一定越慢。固定总长度时,均匀短文档反而降低平方和。
  • 误区:平方和能精确预测端到端时间。它没有覆盖 kernel、通信与其他子层。

本课小结

相同 token 数只固定 rr\sum_r\ell_r,而 packed causal attention 的主工作量近似由 rr2\sum_r\ell_r^2 决定。

少数长文档形成更大的 causal 三角块,因此可能让同 token 数 batch 明显更重。

WLB-LLM 教学图的核心是按预计工作量做变长文档打包:短文档 batch 可以容纳更多 token,以换取 worker 之间更接近的计算负载。

05

主题讲解 · 03:45

Prefill 中 MoE 如何把逐 Token 路由变成批量专家计算

学习目标

  • 能把单 token router 推广为 token-expert 分数矩阵。
  • 能说明 Top-k 与 softmax 为什么沿专家轴逐行执行。
  • 能描述 dispatch 如何按专家重新分组 token。
  • 能解释专家内批量 FFN 为何适合 GPU 矩阵乘法。
  • 能说明 combine 如何按原 token 索引取回并加权结果。
  • 能区分单设备教学流程与跨 GPU expert parallel 的通信问题。

前置与衔接

单 token MoE 很直观:算专家分数、选 Top-k、执行几个专家、加权求和。

prefill 或训练阶段同时存在许多 token。如果真的对每个 token 逐个调用小 FFN,会产生大量串行与 kernel launch 开销。

视频的解决思路是两次改变视角:

  1. 路由时把 token 堆成矩阵;
  2. 执行时按专家重新分组 token。

本课沿用视频边界,先不考虑跨 GPU 负载均衡、expert parallel、capacity limit 与 all-to-all。

核心讲解

1. 单 token 路由作为基线

设 token 表示为

o1Rd,o_1\in\mathbb R^d,

共有 E=4E=4 个专家。

router 权重为

WrRd×E.W_r\in\mathbb R^{d\times E}.

单 token logits 是

z1=o1WrRE.z_1=o_1W_r\in\mathbb R^E.

视频例子取

z1=[1,2,3,5].z_1=[1,2,3,5].

Top-2 选中专家 3、4,并在选中分数上 softmax:

g1,30.12,g1,40.88.g_{1,3}\approx0.12, \qquad g_{1,4}\approx0.88.
图 1

单 token 路径先计算各专家 logits,再取 Top-2 并对选中分数 softmax,得到专家门控权重。

原视频 · 00:40 ↗

单 token 输出为

y1=0.12E3(o1)+0.88E4(o1).y_1 =0.12E_3(o_1)+0.88E_4(o_1).

2. 多 token 一次完成 router 矩阵乘

prefill 中有 TT 个 token,把它们按行堆成

O=[o1o2oT]RT×d.O= \begin{bmatrix} o_1\\ o_2\\ \vdots\\ o_T \end{bmatrix} \in\mathbb R^{T\times d}.

一次 GEMM 得到

Z=OWrRT×E.Z=OW_r \in\mathbb R^{T\times E}.

其中

Zi,eZ_{i,e}

表示 token ii 对专家 ee 的 router logit。

图 2

多个 token 堆成矩阵后一次乘 router 权重,结果的第 i 行、第 j 列表示 token i 对专家 j 的分数;Top-k 按行执行。

原视频 · 02:00 ↗

这一步已经把 TT 次小向量乘法合成一次矩阵乘法。

3. Top-k 必须逐行做

每一行对应一个 token,每一列对应一个专家。

因此选择沿专家轴执行:

Si=TopKe(Zi,e,k).S_i=\operatorname{TopK}_e(Z_{i,e},k).

视频示意:

  • o1o_1 选择专家 3、4;
  • o2o_2 选择专家 1、3;
  • o3o_3 选择专家 2、4。

不同 token 可以选择不同专家。

若把整张 T×ET\times E 矩阵一起 Top-k,就会错误地让 token 互相竞争专家名额。

4. 门控 softmax 也逐行独立

对每个 token 的选中 logits 单独归一化:

gi,e=expZi,erSiexpZi,r,eSi.g_{i,e} = \frac{\exp Z_{i,e}} {\sum_{r\in S_i}\exp Z_{i,r}}, \qquad e\in S_i.
图 3

每个 token 的选中 logits 在该行内部单独 softmax,因此不同 token 可以选不同专家并保留各自权重。

原视频 · 02:20 ↗

于是对每个 ii 都有

eSigi,e=1.\sum_{e\in S_i}g_{i,e}=1.

这里不存在“跨 token softmax”。

5. 关键转折:从 token 视角改成专家视角

路由结果最初按 token 组织:

iSi.i\mapsto S_i.

执行专家时,需要倒排为

eIe,e\mapsto I_e,

其中

Ie={ieSi}I_e=\{i\mid e\in S_i\}

是所有选择专家 ee 的 token 索引。

例如 o1o_1o2o_2 都选择专家 3,则

I3={1,2}.I_3=\{1,2\}.
图 4

路由结果确定后,系统按专家重排 token;例如 O1、O2 都选中专家 3,就把两行聚合成一个专家 batch。

原视频 · 02:40 ↗

这一重排通常称为 dispatch。

实现还要保留原 token 索引和对应门控权重,供最后 combine 使用。

6. 每个专家处理自己的 token batch

对专家 ee,把索引 IeI_e 对应的行聚合成

Oe=O[Ie,:]RIe×d.O_e=O[I_e,:] \in\mathbb R^{|I_e|\times d}.

专家 FFN 一次处理整个矩阵:

He=ϕ(OeWup(e)),H_e=\phi(O_eW_{\mathrm{up}}^{(e)}),
Re=HeWdown(e).R_e=H_eW_{\mathrm{down}}^{(e)}.

shape 为

[Ie,d][Ie,dff][Ie,d].[|I_e|,d] \rightarrow [|I_e|,d_{\mathrm{ff}}] \rightarrow [|I_e|,d].
图 5

每个专家对聚合后的 token 矩阵执行批量 FFN,从而把许多小调用变成更适合 GPU 的矩阵乘法。

原视频 · 03:00 ↗

相较为每个 token 单独启动专家网络,大矩阵乘法更能利用 GPU 吞吐。

7. combine:按 token 取回并加权

专家输出 ReR_e 仍按专家分组。

需要根据保存的索引映射,把属于 token ii 的结果取回:

yi=eSigi,eRe[pos(i,e),:].y_i = \sum_{e\in S_i}g_{i,e}R_e[\operatorname{pos}(i,e),:].

这里 pos(i,e)\operatorname{pos}(i,e) 表示 token ii 在专家 ee 的批次中的行号。

图 6

专家计算后按原 token 索引取回所需结果,再用各 token 的门控权重加权,恢复与 dense FFN 相同的 [tokens,d_model] 输出布局。

原视频 · 03:20 ↗

最终堆叠为

Y=[y1yT]RT×d.Y= \begin{bmatrix} y_1\\ \vdots\\ y_T \end{bmatrix} \in\mathbb R^{T\times d}.

它与 dense FFN 输出拥有相同 shape 和 token 顺序。

8. 一条完整并行流水线

整个过程可以压缩为:

Orouter GEMMZrow-wise Top-k(S,G)O \xrightarrow{\text{router GEMM}} Z \xrightarrow{\text{row-wise Top-k}} (S,G)
dispatch by expert{Oe}batched expert FFN{Re}combine by tokenY.\xrightarrow{\text{dispatch by expert}} \{O_e\} \xrightarrow{\text{batched expert FFN}} \{R_e\} \xrightarrow{\text{combine by token}} Y.

路由并行、专家内并行与最终 gather 是三个不同阶段。

9. Prefill 与 decode 的边界

prefill 天然同时处理一段 prompt 的许多 token,所以 TT 通常较大。

单请求 decode 每一步只新增一个 token,但服务端常通过 continuous batching 同时处理多个请求,因此仍可能形成多个 token 的专家 batch。

视频用“decode 单 token”建立直觉,不应理解成所有真实 decode kernel 永远只有一行。

10. 跨 GPU 时还多了什么

如果专家分布在不同 GPU,dispatch 不再只是本地行重排。

还需要把 token 表示发送到专家所在设备,再把结果送回,常涉及 all-to-all 通信。

专家负载不均可能导致:

  • 某些 GPU 的专家 batch 很大;
  • 某些 GPU 提前完成并等待;
  • 容量不足时发生丢弃或重路由,具体取决于实现。

这些都不在视频这张单设备教学图的证明范围内。

跟练与练习

跟练:建立倒排索引

给定

S1={3,4},S2={1,3},S3={2,4},S_1=\{3,4\}, \quad S_2=\{1,3\}, \quad S_3=\{2,4\},

可得

I1={2},I2={3},I3={1,2},I4={1,3}.I_1=\{2\}, \quad I_2=\{3\}, \quad I_3=\{1,2\}, \quad I_4=\{1,3\}.

检查 token-expert 分配总数:

eIe=Tk=3×2=6.\sum_e|I_e|=Tk=3\times2=6.
编者练习

T=8T=8 个 token、每 token 选择 k=2k=2 个专家。dispatch 后所有专家 batch 的总行数是多少?为什么不一定每个专家都是 4 行?

查看参考答案

总行数为
Tk=8×2=16,Tk=8\times2=16,
因为每个 token 被复制/发送到两个被选专家。
但 Top-k 选择可能不均匀,16 行不必平均分到 EE 个专家;某些专家可能被许多 token 同时选择。

常见误区

  • 误区:多个 token 共用一次 Top-k。Top-k 沿专家轴逐行执行。
  • 误区:softmax 在所有 token 与专家上一起做。门控归一化对每个 token 独立。
  • 误区:按专家分组会丢失原序列。实现保存索引映射,combine 后恢复顺序。
  • 误区:并行等于所有专家得到同样数量 token。路由可能显著不均衡。
  • 误区:单 token decode 说明服务端无法批量。多请求 batching 仍能聚合 decode token。
  • 误区:本地图已经解释跨 GPU expert parallel。设备间 dispatch 还包含通信与容量问题。

本课小结

prefill 中,多个 token 先通过一次 router GEMM 得到 T×ET\times E 分数矩阵,Top-k 与门控 softmax 对每行独立执行。

随后系统按专家重排 token,让每个专家用大矩阵批量执行 FFN;最后再按原 token 索引取回结果并加权,恢复 [T,d][T,d] 输出。

这套 dispatch—expert batch—combine 是逐 token 路由与 GPU 并行之间的桥梁;跨设备场景还需另外处理 all-to-all、容量与负载均衡。

06

单元综合

从逐 Token 路由到专家批处理:MoE 的概率、负载与系统链路

单元能力目标

完成本单元后,应能沿着以下链路解释 MoE:

tokenrouter logitsTopkgatedispatchexpert batchcombine.token \rightarrow router\ logits \rightarrow Top-k \rightarrow gate \rightarrow dispatch \rightarrow expert\ batch \rightarrow combine.

具体需要做到:

  • 证明 Top-k 与 softmax 的交换条件;
  • 写出 router、专家输入与混合输出的 shape;
  • 区分专家选择分数与专家混合权重;
  • 解释路由偏置如何形成负载负反馈;
  • 说明相同 token 总数为何不保证相同 attention 工作量;
  • 把逐 token 路由转成 GPU 可执行的专家批处理;
  • 识别容量、通信、负载与数值等实现边界。

概念连接

1. MoE 把稠密 FFN 换成条件计算

标准 Transformer block 中,attention 后每个 token 都经过同一 FFN。

MoE 层准备 EE 个专家:

f1,f2,,fE.f_1,f_2,\ldots,f_E.

router 根据 token 表示

xtRdx_t\in\mathbb R^d

产生专家 logits:

zt=xtWrRE.z_t=x_tW_r \in\mathbb R^E.

每个 token 只选择少量专家,而不是执行全部 EE 个专家。

这让模型参数容量增大,但每 token 激活计算仍受 Top-k 控制。

2. Top-k 决定支持集,softmax 决定权重

设选中专家集合为

St=TopK(zt,k).S_t=TopK(z_t,k).

在选中集合上归一化:

gt,e=ezt,ejStezt,j,eSt.g_{t,e} = \frac{e^{z_{t,e}}} {\sum_{j\in S_t}e^{z_{t,j}}}, \qquad e\in S_t.

未选专家门控权重为 0。

token 输出为

yt=eStgt,efe(xt).y_t = \sum_{e\in S_t} g_{t,e}f_e(x_t).

所有专家输出必须回到同一 dd 维空间,才能加权求和。

3. 为什么 softmax 不改变 Top-k 排序

对固定温度、相同 mask 的 softmax:

softmax(z)i=ezijezj.softmax(z)_i = \frac{e^{z_i}}{\sum_je^{z_j}}.

指数函数严格单调,公共分母对所有元素相同,所以

zi>zj    softmax(z)i>softmax(z)j.z_i>z_j \iff softmax(z)_i>softmax(z)_j.

因此对无并列 logits,先 softmax 再 Top-k 与先 Top-k 选择同一集合。

4. 选中后重归一化会约掉全局分母

先全局 softmax 得到

pi=eziZ.p_i=\frac{e^{z_i}}{Z}.

在选中集合 SS 内重新归一化:

p^i=pijSpj=ezi/ZjSezj/Z=ezijSezj.\hat p_i = \frac{p_i}{\sum_{j\in S}p_j} = \frac{e^{z_i}/Z} {\sum_{j\in S}e^{z_j}/Z} = \frac{e^{z_i}} {\sum_{j\in S}e^{z_j}}.

这与先 Top-k、再对选中 logits 做 softmax 相同。

若省略重归一化,权重和小于 1,两条路径就不等价。

5. 等价性有明确前提

需要保持一致:

  • logits 与温度;
  • mask;
  • Top-k 并列处理;
  • NaN/inf 规则;
  • 选中集合上的重新归一化;
  • 其他 warper 或 bias 的施加顺序。

工程实现中改变任一项,都需重新检查等价性。

6. router—expert—mix 的 shape 账本

TT 个 prefill token:

XRT×d.X\in\mathbb R^{T\times d}.

router 一次 GEMM 得到

Z=XWrRT×E.Z=XW_r \in\mathbb R^{T\times E}.

Top-k 为每一行输出 kk 个专家索引与权重。

逻辑上每个 token 独立路由,但系统不会真的为每个 token 单独启动一个 FFN kernel。

7. dispatch 把 token 按专家重排

根据 Top-k 索引,系统为每个 token—专家 pair 生成记录:

(token_id,expert_id,gate).(token\_id,expert\_id,gate).

随后按 expert_id 分组,把发往同一专家的 token 收集成矩阵:

XeRTe×d.X_e\in\mathbb R^{T_e\times d}.

专家 ee 用批量 GEMM 执行 FFN:

He=fe(Xe).H_e=f_e(X_e).

这样把许多逻辑上的逐 token 小运算转成少数大矩阵计算。

8. combine 恢复 token 顺序并混合

专家输出仍携带原 token_id 和 gate。

系统 scatter 回原位置,并对同一 token 的 kk 个专家结果求加权和:

Yt=eStgt,eHt,e.Y_t = \sum_{e\in S_t} g_{t,e}H_{t,e}.

最终

YRT×d.Y\in\mathbb R^{T\times d}.

dispatch 改变执行顺序,combine 恢复语义顺序;token 身份不能在重排中丢失。

9. 负载不均来自选择计数,而非只看权重

专家负载可按被选 token 数定义:

ne=t1(eSt).n_e = \sum_t \mathbf1(e\in S_t).

若少数专家被频繁选中:

  • 它们的 token batch 更大;
  • 其他专家空闲;
  • 跨设备时出现 all-to-all 热点;
  • 容量溢出可能导致 token 丢弃或重路由。

因此 router 还需处理负载均衡,而不只追求单 token 的最大 affinity。

10. 路由偏置形成专家选择负反馈

课程中的 auxiliary-loss-free 教学机制区分:

  • 原始 affinity st,es_{t,e}:用于最终 gate;
  • 带专家偏置的选择分数 st,e+bes_{t,e}+b_e:用于 Top-k。

若专家 ee 欠载,增大 beb_e,使其更容易进入 Top-k。

若专家过载,减小 beb_e,降低被选概率。

这形成闭环:

loadebe updateselectioneloade.load_e \rightarrow b_e\ update \rightarrow selection_e \rightarrow load_e.

11. 选择偏置不直接成为混合权重

偏置只影响专家入选集合。

选中后仍使用原始 affinity 计算 gate,可避免为了均衡而直接扭曲专家输出权重。

“无需辅助 loss”应限定为视频所述的 routed-expert 负载均衡策略,不代表训练中绝对没有其他辅助目标。

具体偏置更新、统计窗口和稳定性依实现而定。

12. token 总数不能完整描述 attention 负载

对一个 packed batch,文档长度为

1,2,,R.\ell_1,\ell_2,\ldots,\ell_R.

总 token 数为

T=rr.T=\sum_r\ell_r.

但因果 attention 主计算近似与

rr2\sum_r\ell_r^2

成正比,而不是只与 TT 成正比。

少数长文档产生大的三角 attention 块,可能比许多短文档更重。

13. 相同 token 数的极端对比

总计 TT 个 token:

  • 一个长文档:工作量约 T2T^2
  • RR 个等长文档:工作量约
R(T/R)2=T2/R.R(T/R)^2=T^2/R.

同样 token 数,主 attention 工作量可相差约 RR 倍。

真实 kernel 使用 causal 三角、padding、FlashAttention 与固定开销,端到端耗时不严格等于该简式,但平方和是重要调度信号。

14. 工作量均衡与专家均衡是两种负载

需要分别处理:

  • 序列负载:不同 worker 的 r2\sum\ell_r^2
  • 专家负载:不同 expert 的 routed token 数 nen_e

前者主要影响 attention 阶段,后者主要影响 MoE FFN 与通信。

一个 batch 在 token 数上均衡,不保证这两种负载都均衡。

15. 单设备与跨设备 MoE 的边界

单设备可在本地完成 dispatch—expert batch—combine。

跨 GPU expert parallel 还需:

  • 把 token 发送到专家所在设备的 all-to-all;
  • 容量因子与溢出策略;
  • 发送/接收 buffer;
  • expert batch 排序;
  • 结果反向 all-to-all;
  • 与计算重叠和拓扑感知调度。

课程的单设备图解释核心语义,但不能代替分布式系统账本。

对比与决策

1. 路由正确性检查

  1. Top-k 作用于哪组 logits?
  2. gate 是否在选中集合重归一化?
  3. 选择 bias 是否错误地进入 gate?
  4. 每个 token 的输出是否恢复原顺序?
  5. dropped/rerouted token 怎样处理?

2. 性能检查

  1. 每专家 token 数分布;
  2. 专家 batch 是否足够大;
  3. dispatch/combine 排序和 scatter 成本;
  4. all-to-all 字节与热点;
  5. attention 的 r2\sum\ell_r^2
  6. 容量溢出与 padding 浪费。

3. 负载均衡策略的权衡

  • 辅助 loss:直接把均衡目标写入训练损失,但可能与主任务产生权衡。
  • 动态选择偏置:通过负反馈改变入选概率,但需稳定的统计与更新规则。
  • batch 调度:在不改模型的情况下平衡文档长度与专家工作量,但受样本组合约束。

综合训练

编者练习

logits 为 (3,2,1,0)(3,2,1,0),取 Top-2。分别计算“先全局 softmax 再选中重归一化”与“先 Top-2 再 softmax”的最终两个 gate,并说明为什么相等。

查看参考答案

两条路径都选中前两个专家。先全局 softmax 得到 e3/Z,e2/Ze^3/Z,e^2/Z,选中后重归一化为 e3/(e3+e2),e2/(e3+e2)e^3/(e^3+e^2),e^2/(e^3+e^2);先 Top-2 再 softmax 直接得到同一结果。公共分母 ZZ 被约去。若不做选中集合重归一化,两者不相等。

编者练习 2

两个 packed batch 都有 1024 token。A 含一个 1024 长文档;B 含 16 个 64 长文档。用长度平方和比较主 attention 工作量。

查看参考答案

A 的平方和为 10242=1,048,5761024^2=1,048,576。B 为 16×642=65,53616\times64^2=65,536。简化模型下 A 是 B 的 16 倍。实际端到端差异还受三角 causal、kernel、固定开销和硬件影响,但 token 数相同显然不足以做负载估计。

编者练习 3

prefill 有 T=128T=128E=8E=8、Top-2、hidden size d=4096d=4096。写出 router 输出 shape、token—expert pair 数上界和 combine 输出 shape。

查看参考答案

router 输出为 128×8128\times8。若每个 token 恰选两个专家,共有 128×2=256128\times2=256 个 token—expert pair;它们按专家分组后形成 8 个不同高度的 Te×4096T_e\times4096 批次,且 eTe=256\sum_eT_e=256。combine 按原 token 索引和 gate 加权,恢复 128×4096128\times4096 输出。

进入下一单元前

  • 已能证明 Top-k 与 softmax 交换的条件与重归一化要求。
  • 已能画出 router—dispatch—expert batch—combine 的 shape 链。
  • 已能区分选择分数与门控权重。
  • 已能解释专家偏置负反馈,并限定 auxiliary-loss-free 的含义。
  • 已能用 r2\sum\ell_r^2 而非 token 总数估计 packed attention 主负载。
  • 已能区分序列负载与专家负载。
  • 若仍把逻辑逐 token 路由理解为逐 token kernel,回看 P128。
  • 若仍认为 token 数相同就耗时相同,回看 P102。
  • 若跨设备部署,需在本课语义链上继续补 all-to-all 与容量账本。