LEARNING UNIT · 07
MoE 路由与负载均衡
理解专家选择、门控归一化、无辅助损失均衡以及 prefill 阶段的并行负载。
- 已整理章节
- 6 节
- 单元来源
- 5 条视频
- 总时长
- 13:26
- 状态
- 已发布
- 学习位置
- 7 / 20
主题讲解 · 01:54
Top-k 与 Softmax 交换顺序为何仍能得到同一门控权重
学习目标
- 能写出 MoE router 从 logits 到 Top-k 门控权重的两条路径。
- 能解释 softmax 为什么不改变 logits 的排序。
- 能用公共分母约去证明两条路径的选中权重相同。
- 能说明“先全局 softmax”以后为什么仍需在选中集合上重归一化。
- 能列出温度、mask、并列和数值误差等结论边界。
前置与衔接
MoE 的 router 会为一个 token 产生每个专家的分数。
稀疏路由只激活其中 个专家,因此需要同时回答两个问题:
- 选哪几个专家;
- 被选专家各占多大权重。
视频比较了两种看起来不同的实现顺序。
本课只讨论确定性 Top-k 与标准 softmax,不涉及 noisy routing、capacity limit 或 token dropping。
核心讲解
1. 两条路径先摆在一起
设 router logits 为
并令 。
路径 A 是
路径 B 是
同一组 router logits 可以先取 Top-k 再做 softmax,也可以先做全局 softmax、取 Top-k 后再在线性尺度上重归一化。
原视频 · 00:00 ↗待证明的是
2. Top-k 选中的集合为何不变
对任意实数 ,指数函数严格单调:
softmax 的所有分量还共享同一个正分母:
所以
在没有并列和额外 mask 的条件下,logits 的 Top-k 索引与 softmax 概率的 Top-k 索引完全相同。
本例选中的是分数 与 ,对应集合
示例 logits 为 [1,2,3,5],Top-2 选择分数 3 与 5;softmax 的严格单调性保证排序不变。
原视频 · 00:20 ↗这里的 表示专家索引集合,不是 softmax 概率之和。
3. 先 Top-k 再 softmax
路径 A 先留下
只在这两个分数上做 softmax:
因此
这就是最终用于混合两个专家输出的门控权重。
4. 先全局 softmax 再 Top-k
路径 B 先对四个 logits 全部归一化。
记
则
Top-k 后留下
注意这两个数的和小于 ,因为专家 1、2 仍占据了一部分全局概率质量。
5. 公共分母为何会消失
路径 B 必须把选中概率在线性尺度上重归一化:
分子分母同时乘 :
同理,
先全局 softmax 后,选中概率共享同一个全局分母;在选中集合内再归一化时,该公共因子会约去。
原视频 · 01:20 ↗真正起作用的是一个一般恒等式。
若
那么对任意选中集合 ,
6. “相同”到底指什么
相同的是最终被选专家及其归一化门控权重。
若专家输出为 与 ,两条路径都会得到
两种顺序的最终权重相同,关键是第二条路径必须对选中概率做线性重归一化,而不能直接使用被截断的全局概率。
原视频 · 01:40 ↗它不表示中间张量相同:路径 B 曾经计算并保存全部专家的概率,路径 A 没有。
7. 结论成立的边界
需要同时满足:
- 两条路径使用同一组 logits;
- 使用相同温度和相同 mask;
- Top-k 依据数值排序,且两边采用一致的并列规则;
- 路径 B 对选中概率重新归一化;
- 归一化在线性概率尺度完成,而不是再次对概率做 softmax。
浮点数溢出、量化或极接近的并列值可能让实现中的索引出现差别。
若加入随机噪声、专家偏置或其他只在一条路径出现的变换,也不能直接套用本证明。
跟练与练习
跟练:换一组 logits
取
先取 Top-2 得到 ,对应权重
再从全局 softmax 出发重算一次,应得到同一结果。
编者练习
如果路径 B 在 Top-k 后不重归一化,而直接用 与 混合专家,结果与路径 A 有什么关系?
查看参考答案
两项都比路径 A 多乘同一个系数
因此输出变成 倍的路径 A 输出,门控权重之和也只有 ,不再是同一门控混合。
常见误区
- 误区:softmax 会改变排序。标准 softmax 对有限 logits 严格保序。
- 误区:Top-k 后直接保留全局概率就已经等价。还缺少选中集合重归一化。
- 误区:对选中概率再做一次 softmax。正确步骤是除以它们的和。
- 误区:任何 router 都能交换顺序。额外噪声、偏置、mask 与并列规则都要逐项核对。
- 误区:中间计算量也相同。路径 B 仍可能先计算全量概率。
本课小结
softmax 保留 logits 的排序,所以两条路径选中同一 Top-k 集合。
先全局 softmax 产生的选中概率共享公共分母;在选中集合内重归一化时,公共分母被约去。
因此两条路径得到相同的最终门控权重,但前提是变换、mask、并列规则一致,并且不能省略重归一化。
主题讲解 · 02:16
从 Transformer 子层到稀疏专家的 MoE 可视化
学习目标
- 能指出 MoE 在简化 Transformer block 中替换的子层。
- 能解释 token 表示如何经 router 得到专家 logits。
- 能从 Top-2 logits 算出两个门控权重。
- 能描述被选专家各自完成扩维与降维的 FFN 计算。
- 能说明专家输出为何必须回到同一隐藏维度后再加权。
- 能区分教学可视化与实际系统中的容量、通信、残差等细节。
前置与衔接
Dense Transformer 中,每个 token 都经过同一组 FFN 参数。
Sparse MoE 的核心改变是:准备多组专家 FFN,但每个 token 只激活少数专家。
视频用一个 token 、四个专家与 Top-2 路由画出完整数据流。
画面为了讲清主线,省略了 LayerNorm、残差连接、dropout、bias 与具体激活函数。
核心讲解
1. MoE 替换的是哪一段
简化的 Transformer 子层顺序可写为
MoE 通常替换其中的 dense FFN:
在简化 Transformer 图中,MoE 替换的是 dense FFN 子层:attention 先产生 token 表示,随后进入路由与专家计算。
原视频 · 00:00 ↗attention 与 MoE 承担不同角色:
- attention 在 token 之间聚合上下文;
- MoE 在每个 token 上选择参数子网络。
2. attention 先产生 token 表示
对某一注意力头,视频把过程概括为
更完整的缩放点积形式通常包含
以及 causal mask;这些细节在画面中被省略。
QK^T 形成注意力权重,再对 V 加权得到 token 表示 O_i;该表示是 router 与专家 FFN 的共同输入。
原视频 · 00:20 ↗取其中一个 token 向量
它既是 router 的输入,也是被选专家 FFN 的输入。
3. router 把 token 投影成专家分数
设共有 个专家。
router 权重可记为
单 token logits 为
第 个分量等价于 与第 个专家路由向量的内积。
router 用 O_i 与各专家的路由向量做内积,得到每个专家的 affinity logits。
原视频 · 00:40 ↗视频例子取
这些是 softmax 前的 logits,不是已经归一化的概率。
4. Top-2 选择与门控权重
令 ,分数最大的两个位置是专家 3、4:
只在选中 logits 上做 softmax:
示例对 [1,2,3,5] 取 Top-2,保留专家 3、4,再在两个分数上 softmax 得到约 0.12 与 0.88。
原视频 · 01:00 ↗满足
未被选中的专家 1、2 对该 token 不执行主体 FFN。
5. 每个专家是一套独立 FFN
对专家 ,可抽象为
若采用行向量约定,也可把矩阵乘法顺序写在右侧;核心 shape 是
不同专家拥有不同参数,因此一般有
同一个 token 只送入被选专家;每个专家分别完成扩维、非线性与降维,输出都回到 d_model。
原视频 · 01:40 ↗“先变长再变短”只描述 FFN 的宽度变化,不代表中间没有激活函数或门控分支。
6. 专家结果在输出端混合
该 token 的 MoE 输出为
因为两个专家输出都属于
加权求和后仍是同一 shape。
被选专家的 d_model 输出按门控权重求和,形成与 dense FFN 输出 shape 对齐的 MoE 结果。
原视频 · 02:00 ↗这让 MoE 子层可以接回原有 Transformer 数据流。
7. 为什么不能提前平均中间激活
一般情况下,
不能改写成把两组专家参数或扩维激活先平均一次再过非线性。
原因是专家拥有不同参数,且
通常成立。
因此可视化中的汇合点位于完整专家输出之后。
8. 从一张图读出四个 shape
单 token 情形可记为:
这四个 shape 是后续理解多 token dispatch 和 expert parallel 的基础。
跟练与练习
跟练:复算权重
用计算器验证
两者只由差值 决定;同时给两个 logits 加同一常数不会改变结果。
编者练习
若 、,门控权重为 与 ,MoE 输出是什么?
查看参考答案
逐分量加权:
输出仍是二维向量,与两个专家输出 shape 相同。
常见误区
- 误区:MoE 替换 attention。常见 sparse MoE block 替换的是 FFN 子层。
- 误区:一个 batch 只选一组专家。路由通常按 token 发生。
- 误区:router logits 就是概率。还需 Top-k 与归一化。
- 误区:选中专家共享同一套 FFN 参数。专家之所以不同,正因为参数独立。
- 误区:可以在非线性前任意平均专家。一般不满足线性可交换。
- 误区:这张图已经覆盖完整 MoE 系统。容量、负载均衡、dispatch 与跨设备通信尚未展开。
本课小结
attention 产生 token 表示,router 将它投影成每个专家的 logits。
Top-k 只保留少数专家,并在选中集合上得到门控权重;各专家独立完成 FFN,再在共同的 空间加权求和。
这条“路由—专家—混合”主线解释了 MoE 的语义,实际系统还需解决批处理、容量和通信问题。
主题讲解 · 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 表示为
教学图包含四条信息:
- router 产生 routed expert affinity;
- Top-k 选择少数 routed experts;
- shared experts 始终参与;
- 专家混合结果再与残差路径汇合。
视频用一张总图串起 DeepSeek-V3 的 sigmoid affinity、每专家路由偏置、routed/shared experts 与残差输出。
原视频 · 00:00 ↗画面中的符号是简化示意,不给出专家数、每 token 激活数或所有实现常数。
2. routed experts 只处理被选 token
若 token 选中专家集合 ,routed 部分可写为
其中
未在 中的 routed expert 不处理这个 token。
routed experts 只处理被选 token,返回同维输出后再按门控权重加权求和。
原视频 · 01:00 ↗稀疏性来自每个 token 只执行全部 routed experts 的一个子集。
3. shared experts 是另一条始终开启的路径
shared expert 不参与 routed Top-k 竞争。
若 shared expert 集合为 ,可抽象为
最终专家结果包含
shared experts 不经过 Top-k 稀疏选择,其输出直接加入 routed expert 混合结果。
原视频 · 01:20 ↗ASR 多次把“共享专家”识别成“共产专家”,本文依据板书与上下文统一纠正为 shared expert。
4. 所有专家输出必须回到同一宽度
专家 FFN 的主 shape 是
可写成
每个专家都是独立 FFN:先扩维、经过非线性,再降回 token 隐藏维,之后才能相加。
原视频 · 01:40 ↗只有回到相同 ,routed mixture、shared outputs 与残差输入才能相加。
5. 从 logits 到 sigmoid affinity
设 router 产生 logits
视频强调,这里用 sigmoid 得到 affinity:
与跨专家 softmax 不同,sigmoid 对每个专家分数逐元素作用,因此原始 不要求跨专家求和为 。
6. 选择分数与门控 affinity 必须分开
为每个 routed expert 维护偏置
用于 Top-k 选择的分数是
选中集合写为
DeepSeek-V3 教学图先对 router logits 做 sigmoid 得到 affinity,再给每个专家加选择偏置以决定 Top-k。
原视频 · 02:00 ↗关键边界是: 用来改变选择排序,但门控权重仍由被选专家的原始 affinity 归一化。
即
而不是
因此偏置改变“谁入选”,不直接扭曲入选后的专家混合比例。
7. 欠载与过载形成负反馈
设一个统计窗口内专家 的实际负载为 ,目标负载为 。
视频给出的方向是:
- 若 ,说明欠载,提高 ;
- 若 ,说明过载,降低 。
可用方向性控制律表示为
但这只是编者用于表达方向的示意式,不是视频给出的精确实现公式。
欠载专家提高选择偏置、过载专家降低选择偏置;偏置改变入选机会,但不进入已选专家的门控权重归一化。
原视频 · 03:20 ↗欠载专家的 增大后, 更容易进入 Top-k;它收到更多 token,负载上升。
过载专家则相反。
这构成一个围绕目标负载的负反馈控制环。
8. 为什么它能避免平衡损失干扰主梯度
传统辅助损失把负载平衡目标写进
于是共享参数和 router 参数会同时接收任务梯度与平衡梯度。
视频所述策略通过负载统计更新 ,专家选择被校正,但门控 affinity 的主学习仍由任务目标驱动。
这里的“不干扰”是机制动机,不代表系统不需调偏置步长、统计窗口或稳定性超参数。
9. 一个数值例子
假设两个专家的原始 affinity 是
专家 2 欠载,偏置为
选择分数变成
专家 2 可以因偏置进入 Top-k。
但若两者都入选,门控比例仍由 与 归一化,而不是由 与 归一化。
跟练与练习
跟练:标出两条数值流
对任意一个 token,分别写出:
以及
第一条决定索引,第二条决定混合权重。
编者练习
某专家持续过载。若控制器降低它的 ,会直接降低它在已经入选 token 上的门控权重吗?
查看参考答案
不会直接降低。 只参与 Top-k 选择分数 。
它会让该专家未来更少入选;一旦仍然入选,门控权重用原始 在选中集合中归一化。
常见误区
- 误区:auxiliary-loss-free 表示训练没有任何辅助项。这里只限定专家负载均衡策略。
- 误区:sigmoid affinity 跨专家和为 。逐元素 sigmoid 没有这一约束。
- 误区:选择偏置也进入门控加权。视频明确把选择与权重计算分开。
- 误区:shared expert 也要参加 Top-k。shared 路径是始终开启的。
- 误区:偏置通过主任务 loss 梯度学习。视频描述的是依据负载状态调节。
- 误区:有负反馈就自动稳定。步长、统计噪声与更新频率仍影响控制效果。
本课小结
DeepSeek-V3 的教学机制把 routed expert 的选择与混合拆成两个数值流: 决定 Top-k,原始 sigmoid affinity 决定门控权重。
系统根据专家欠载或过载上调、下调每专家偏置,从而形成选择概率的负反馈,不必把主要专家平衡压力直接写成辅助 loss。
结论应限定到视频所述的 auxiliary-loss-free 负载均衡策略,不能扩张为模型训练没有任何其他辅助目标。
主题讲解 · 01:48
为什么相同 Token 数不等于相同 Attention 负载
学习目标
- 能区分 batch token 总数与 attention 计算负载。
- 能写出 packed documents 的主代价近似 。
- 能用因果注意力三角面积解释平方复杂度。
- 能比较相同 token 数下长文档与短文档组合的代价。
- 能说明 WLB-LLM 教学图为何允许短文档 batch 放入更多 token。
- 能列出 kernel、padding、通信等使真实耗时偏离简化公式的因素。
前置与衔接
训练系统常把一个 batch 的 token 数设为近似相同,以控制显存并简化调度。
但 token 数只度量序列元素个数,不直接度量所有算子的 FLOPs。
视频以 WLB-LLM 为例,解释 packed documents 中 attention 的计算量还取决于文档长度分布。
视频将其描述为 OSDI 2025 的大模型预训练 4D 并行负载均衡工作;本课只整理视频展示的“变长文档打包”直觉,不扩写论文未在视频中展开的系统细节。
核心讲解
1. 问题不在 token 总数,而在 token 如何分组
设一个 batch 打包 篇文档,第 篇长度为
总 token 数为
两个 batch 可以拥有相同的 ,却拥有完全不同的长度向量
WLB-LLM 的教学图把负载指标从总 token 数推进到文档长度分布所决定的 attention 计算量。
原视频 · 00:00 ↗例如一个 batch 可能主要是一篇长文档,另一个由许多短文档构成。
2. 单篇文档的 attention 近似平方代价
对长度为 的 full attention,分数矩阵 shape 是
忽略常数、head 数与隐藏维后,主计算复杂度写为
因果 attention 只保留下三角,实际有效位置数约为
量级仍是
3. packed documents 形成块对角区域
多篇文档拼进一个序列时,通常不允许不同文档互相 attention。
因此有效注意力区域不是完整的 三角,而是多个文档内三角块。
每个文档只在自身 causal 三角块内计算位置 i、j 的注意力分数;文档之间的块被屏蔽。
原视频 · 01:00 ↗主代价近似为
忽略线性项与共同的 ,可以用
比较 batch 负载。
4. 相同 token 数的两个 batch
把总长度归一化为 。
方案 A 含一篇占 的长文档和一篇占 的短文档:
方案 B 含四篇等长短文档:
所以
两个 batch 的 token 总数相同,但一个由少数长文档组成、另一个由许多短文档组成,attention 工作量可以不同。
原视频 · 00:20 ↗这里不是说长文档 token 单个更“贵”,而是文档内 token 对的数量随长度平方增长。
5. 为什么平方和偏爱均匀长度
视频中的数值比较写成
在文档间 attention 被屏蔽的打包序列中,主计算量近似与各文档长度平方和 sum l_r^2 成正比。
原视频 · 00:40 ↗更一般地,在文档数 与总长度 固定时,平方和
在长度尽量均匀时较小。
这是凸函数 的直接结果。
如果一部分长度从短文档转移到已经更长的文档,平方和会继续增大。
6. 三角面积就是计算对数量
因果 attention 中,每个 query 位置 只看不晚于自己的 key 位置 。
一篇长度为 的文档对应约
个有效 对。
因此图上的大三角面积代表大量 attention score 计算。
在总 token 数固定时,一个大三角加一个小三角的面积大于四个均匀小三角,长文档会主导 attention 负载。
原视频 · 01:20 ↗把图形换成矩阵语言,就是块对角 causal mask 中非屏蔽元素的数量。
7. WLB-LLM 直觉:按预计工作量装 batch
若当前文档都很短,单个 batch 即使放入更多 token,
也可能与 token 更少但含长文档的 batch 接近。
因此调度器可按预计 attention 工作量而不是固定 token 数分配 batch。
目标是让不同数据并行 worker 的处理时间更接近,减少快 worker 等待慢 worker 的空闲。
8. 简化公式没有覆盖哪些真实成本
是解释 attention 主负载的教学指标,不等于端到端耗时的完整模型。
真实训练还会受到:
- FFN 的近线性 token 代价;
- padding 与实际 kernel 是否跳过 mask 区域;
- FlashAttention 的分块与形状效率;
- tensor/pipeline/data/expert parallel 通信;
- micro-batch 数量和流水线气泡;
- 内存带宽、缓存命中与算子启动开销。
所以“平方和相同”意味着主要 attention 工作量接近,不保证墙钟时间严格相同。
跟练与练习
跟练:比较两组长度
总 token 数均为 。
方案 A:
平方和为
方案 B:
平方和为
两者 token 数相同,教学近似下 attention 负载相差 倍。
编者练习
若一个 batch 的文档长度为 ,另一个为 ,哪一个 attention 主负载更大?
查看参考答案
第一个平方和为
第二个平方和为
所以 略大。总 token 数同为 ,不均匀长度分布使平方和上升。
常见误区
- 误区:token 数相同就必然同负载。attention 还依赖文档长度平方和。
- 误区:packed sequence 内所有文档互相 attention。通常会用 document mask 隔开。
- 误区:因果 mask 把复杂度降为线性。三角元素数仍是平方量级。
- 误区:短文档越多一定越慢。固定总长度时,均匀短文档反而降低平方和。
- 误区:平方和能精确预测端到端时间。它没有覆盖 kernel、通信与其他子层。
本课小结
相同 token 数只固定 ,而 packed causal attention 的主工作量近似由 决定。
少数长文档形成更大的 causal 三角块,因此可能让同 token 数 batch 明显更重。
WLB-LLM 教学图的核心是按预计工作量做变长文档打包:短文档 batch 可以容纳更多 token,以换取 worker 之间更接近的计算负载。
主题讲解 · 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 开销。
视频的解决思路是两次改变视角:
- 路由时把 token 堆成矩阵;
- 执行时按专家重新分组 token。
本课沿用视频边界,先不考虑跨 GPU 负载均衡、expert parallel、capacity limit 与 all-to-all。
核心讲解
1. 单 token 路由作为基线
设 token 表示为
共有 个专家。
router 权重为
单 token logits 是
视频例子取
Top-2 选中专家 3、4,并在选中分数上 softmax:
单 token 路径先计算各专家 logits,再取 Top-2 并对选中分数 softmax,得到专家门控权重。
原视频 · 00:40 ↗单 token 输出为
2. 多 token 一次完成 router 矩阵乘
prefill 中有 个 token,把它们按行堆成
一次 GEMM 得到
其中
表示 token 对专家 的 router logit。
多个 token 堆成矩阵后一次乘 router 权重,结果的第 i 行、第 j 列表示 token i 对专家 j 的分数;Top-k 按行执行。
原视频 · 02:00 ↗这一步已经把 次小向量乘法合成一次矩阵乘法。
3. Top-k 必须逐行做
每一行对应一个 token,每一列对应一个专家。
因此选择沿专家轴执行:
视频示意:
- 选择专家 3、4;
- 选择专家 1、3;
- 选择专家 2、4。
不同 token 可以选择不同专家。
若把整张 矩阵一起 Top-k,就会错误地让 token 互相竞争专家名额。
4. 门控 softmax 也逐行独立
对每个 token 的选中 logits 单独归一化:
每个 token 的选中 logits 在该行内部单独 softmax,因此不同 token 可以选不同专家并保留各自权重。
原视频 · 02:20 ↗于是对每个 都有
这里不存在“跨 token softmax”。
5. 关键转折:从 token 视角改成专家视角
路由结果最初按 token 组织:
执行专家时,需要倒排为
其中
是所有选择专家 的 token 索引。
例如 、 都选择专家 3,则
路由结果确定后,系统按专家重排 token;例如 O1、O2 都选中专家 3,就把两行聚合成一个专家 batch。
原视频 · 02:40 ↗这一重排通常称为 dispatch。
实现还要保留原 token 索引和对应门控权重,供最后 combine 使用。
6. 每个专家处理自己的 token batch
对专家 ,把索引 对应的行聚合成
专家 FFN 一次处理整个矩阵:
shape 为
每个专家对聚合后的 token 矩阵执行批量 FFN,从而把许多小调用变成更适合 GPU 的矩阵乘法。
原视频 · 03:00 ↗相较为每个 token 单独启动专家网络,大矩阵乘法更能利用 GPU 吞吐。
7. combine:按 token 取回并加权
专家输出 仍按专家分组。
需要根据保存的索引映射,把属于 token 的结果取回:
这里 表示 token 在专家 的批次中的行号。
专家计算后按原 token 索引取回所需结果,再用各 token 的门控权重加权,恢复与 dense FFN 相同的 [tokens,d_model] 输出布局。
原视频 · 03:20 ↗最终堆叠为
它与 dense FFN 输出拥有相同 shape 和 token 顺序。
8. 一条完整并行流水线
整个过程可以压缩为:
路由并行、专家内并行与最终 gather 是三个不同阶段。
9. Prefill 与 decode 的边界
prefill 天然同时处理一段 prompt 的许多 token,所以 通常较大。
单请求 decode 每一步只新增一个 token,但服务端常通过 continuous batching 同时处理多个请求,因此仍可能形成多个 token 的专家 batch。
视频用“decode 单 token”建立直觉,不应理解成所有真实 decode kernel 永远只有一行。
10. 跨 GPU 时还多了什么
如果专家分布在不同 GPU,dispatch 不再只是本地行重排。
还需要把 token 表示发送到专家所在设备,再把结果送回,常涉及 all-to-all 通信。
专家负载不均可能导致:
- 某些 GPU 的专家 batch 很大;
- 某些 GPU 提前完成并等待;
- 容量不足时发生丢弃或重路由,具体取决于实现。
这些都不在视频这张单设备教学图的证明范围内。
跟练与练习
跟练:建立倒排索引
给定
可得
检查 token-expert 分配总数:
编者练习
有 个 token、每 token 选择 个专家。dispatch 后所有专家 batch 的总行数是多少?为什么不一定每个专家都是 4 行?
查看参考答案
总行数为
因为每个 token 被复制/发送到两个被选专家。
但 Top-k 选择可能不均匀,16 行不必平均分到 个专家;某些专家可能被许多 token 同时选择。
常见误区
- 误区:多个 token 共用一次 Top-k。Top-k 沿专家轴逐行执行。
- 误区:softmax 在所有 token 与专家上一起做。门控归一化对每个 token 独立。
- 误区:按专家分组会丢失原序列。实现保存索引映射,combine 后恢复顺序。
- 误区:并行等于所有专家得到同样数量 token。路由可能显著不均衡。
- 误区:单 token decode 说明服务端无法批量。多请求 batching 仍能聚合 decode token。
- 误区:本地图已经解释跨 GPU expert parallel。设备间 dispatch 还包含通信与容量问题。
本课小结
prefill 中,多个 token 先通过一次 router GEMM 得到 分数矩阵,Top-k 与门控 softmax 对每行独立执行。
随后系统按专家重排 token,让每个专家用大矩阵批量执行 FFN;最后再按原 token 索引取回结果并加权,恢复 输出。
这套 dispatch—expert batch—combine 是逐 token 路由与 GPU 并行之间的桥梁;跨设备场景还需另外处理 all-to-all、容量与负载均衡。
单元综合
从逐 Token 路由到专家批处理:MoE 的概率、负载与系统链路
单元能力目标
完成本单元后,应能沿着以下链路解释 MoE:
具体需要做到:
- 证明 Top-k 与 softmax 的交换条件;
- 写出 router、专家输入与混合输出的 shape;
- 区分专家选择分数与专家混合权重;
- 解释路由偏置如何形成负载负反馈;
- 说明相同 token 总数为何不保证相同 attention 工作量;
- 把逐 token 路由转成 GPU 可执行的专家批处理;
- 识别容量、通信、负载与数值等实现边界。
概念连接
1. MoE 把稠密 FFN 换成条件计算
标准 Transformer block 中,attention 后每个 token 都经过同一 FFN。
MoE 层准备 个专家:
router 根据 token 表示
产生专家 logits:
每个 token 只选择少量专家,而不是执行全部 个专家。
这让模型参数容量增大,但每 token 激活计算仍受 Top-k 控制。
2. Top-k 决定支持集,softmax 决定权重
设选中专家集合为
在选中集合上归一化:
未选专家门控权重为 0。
token 输出为
所有专家输出必须回到同一 维空间,才能加权求和。
3. 为什么 softmax 不改变 Top-k 排序
对固定温度、相同 mask 的 softmax:
指数函数严格单调,公共分母对所有元素相同,所以
因此对无并列 logits,先 softmax 再 Top-k 与先 Top-k 选择同一集合。
4. 选中后重归一化会约掉全局分母
先全局 softmax 得到
在选中集合 内重新归一化:
这与先 Top-k、再对选中 logits 做 softmax 相同。
若省略重归一化,权重和小于 1,两条路径就不等价。
5. 等价性有明确前提
需要保持一致:
- logits 与温度;
- mask;
- Top-k 并列处理;
- NaN/inf 规则;
- 选中集合上的重新归一化;
- 其他 warper 或 bias 的施加顺序。
工程实现中改变任一项,都需重新检查等价性。
6. router—expert—mix 的 shape 账本
对 个 prefill token:
router 一次 GEMM 得到
Top-k 为每一行输出 个专家索引与权重。
逻辑上每个 token 独立路由,但系统不会真的为每个 token 单独启动一个 FFN kernel。
7. dispatch 把 token 按专家重排
根据 Top-k 索引,系统为每个 token—专家 pair 生成记录:
随后按 expert_id 分组,把发往同一专家的 token 收集成矩阵:
专家 用批量 GEMM 执行 FFN:
这样把许多逻辑上的逐 token 小运算转成少数大矩阵计算。
8. combine 恢复 token 顺序并混合
专家输出仍携带原 token_id 和 gate。
系统 scatter 回原位置,并对同一 token 的 个专家结果求加权和:
最终
dispatch 改变执行顺序,combine 恢复语义顺序;token 身份不能在重排中丢失。
9. 负载不均来自选择计数,而非只看权重
专家负载可按被选 token 数定义:
若少数专家被频繁选中:
- 它们的 token batch 更大;
- 其他专家空闲;
- 跨设备时出现 all-to-all 热点;
- 容量溢出可能导致 token 丢弃或重路由。
因此 router 还需处理负载均衡,而不只追求单 token 的最大 affinity。
10. 路由偏置形成专家选择负反馈
课程中的 auxiliary-loss-free 教学机制区分:
- 原始 affinity :用于最终 gate;
- 带专家偏置的选择分数 :用于 Top-k。
若专家 欠载,增大 ,使其更容易进入 Top-k。
若专家过载,减小 ,降低被选概率。
这形成闭环:
11. 选择偏置不直接成为混合权重
偏置只影响专家入选集合。
选中后仍使用原始 affinity 计算 gate,可避免为了均衡而直接扭曲专家输出权重。
“无需辅助 loss”应限定为视频所述的 routed-expert 负载均衡策略,不代表训练中绝对没有其他辅助目标。
具体偏置更新、统计窗口和稳定性依实现而定。
12. token 总数不能完整描述 attention 负载
对一个 packed batch,文档长度为
总 token 数为
但因果 attention 主计算近似与
成正比,而不是只与 成正比。
少数长文档产生大的三角 attention 块,可能比许多短文档更重。
13. 相同 token 数的极端对比
总计 个 token:
- 一个长文档:工作量约 ;
- 个等长文档:工作量约
同样 token 数,主 attention 工作量可相差约 倍。
真实 kernel 使用 causal 三角、padding、FlashAttention 与固定开销,端到端耗时不严格等于该简式,但平方和是重要调度信号。
14. 工作量均衡与专家均衡是两种负载
需要分别处理:
- 序列负载:不同 worker 的 ;
- 专家负载:不同 expert 的 routed token 数 。
前者主要影响 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. 路由正确性检查
- Top-k 作用于哪组 logits?
- gate 是否在选中集合重归一化?
- 选择 bias 是否错误地进入 gate?
- 每个 token 的输出是否恢复原顺序?
- dropped/rerouted token 怎样处理?
2. 性能检查
- 每专家 token 数分布;
- 专家 batch 是否足够大;
- dispatch/combine 排序和 scatter 成本;
- all-to-all 字节与热点;
- attention 的 ;
- 容量溢出与 padding 浪费。
3. 负载均衡策略的权衡
- 辅助 loss:直接把均衡目标写入训练损失,但可能与主任务产生权衡。
- 动态选择偏置:通过负反馈改变入选概率,但需稳定的统计与更新规则。
- batch 调度:在不改模型的情况下平衡文档长度与专家工作量,但受样本组合约束。
综合训练
编者练习
logits 为 ,取 Top-2。分别计算“先全局 softmax 再选中重归一化”与“先 Top-2 再 softmax”的最终两个 gate,并说明为什么相等。
查看参考答案
两条路径都选中前两个专家。先全局 softmax 得到 ,选中后重归一化为 ;先 Top-2 再 softmax 直接得到同一结果。公共分母 被约去。若不做选中集合重归一化,两者不相等。
编者练习 2
两个 packed batch 都有 1024 token。A 含一个 1024 长文档;B 含 16 个 64 长文档。用长度平方和比较主 attention 工作量。
查看参考答案
A 的平方和为 。B 为 。简化模型下 A 是 B 的 16 倍。实际端到端差异还受三角 causal、kernel、固定开销和硬件影响,但 token 数相同显然不足以做负载估计。
编者练习 3
prefill 有 、、Top-2、hidden size 。写出 router 输出 shape、token—expert pair 数上界和 combine 输出 shape。
查看参考答案
router 输出为 。若每个 token 恰选两个专家,共有 个 token—expert pair;它们按专家分组后形成 8 个不同高度的 批次,且 。combine 按原 token 索引和 gate 加权,恢复 输出。
进入下一单元前
- 已能证明 Top-k 与 softmax 交换的条件与重归一化要求。
- 已能画出 router—dispatch—expert batch—combine 的 shape 链。
- 已能区分选择分数与门控权重。
- 已能解释专家偏置负反馈,并限定 auxiliary-loss-free 的含义。
- 已能用 而非 token 总数估计 packed attention 主负载。
- 已能区分序列负载与专家负载。
- 若仍把逻辑逐 token 路由理解为逐 token kernel,回看 P128。
- 若仍认为 token 数相同就耗时相同,回看 P102。
- 若跨设备部署,需在本课语义链上继续补 all-to-all 与容量账本。