Expert Parallel

专家并行

核心解释

Expert Parallel 把不同专家放到不同 GPU。Router 为每个 token 选择专家,系统把 token 发往专家所在的设备,再把计算结果送回并合并。[1]

对输入 token xx,设选中的专家集合为 T(x)\mathcal{T}(x),路由权重为 ae(x)a_e(x),专家函数为 EeE_e。一次 MoE 计算可以写成:

y(x)=∑e∈T(x)ae(x)Ee(x)y(x)=\sum_{e\in\mathcal{T}(x)}a_e(x)E_e(x)

EP 改变专家放在哪里,以及 token 怎样到达它们。常见路径是 dispatch、专家计算、combine。每个专家收到的 token 数随输入变化,计算形状和通信负载也随之变化。[2]

专家内部还可以使用 TP,让多张卡共同计算一个专家。Attention 与专家层也可以使用不同的并行布局。组合时要同时检查专家矩阵大小、每个专家的 token 数与设备间通信。[3]

训练更容易用较大的 token 批次摊薄通信。Decode 每步的 token 少,常常更关心通信启动、碎片化计算和最慢 rank 的等待。因此,EP 的吞吐方案与低延迟方案会有不同的实现重点。[4]

资料

QA

EP 与专家内部 TP,分别把什么分开?

EP 把不同专家放到不同设备。专家内部 TP 则让多张卡共同计算同一个专家的矩阵。两者可以组合,但会改变每次 GEMM 的形状和通信路径。

当专家的 token 很少时,再切小矩阵可能降低计算效率。EP 可以把多个来源的 token 聚到同一个专家,也引入 dispatch、combine 和动态负载。Attention 与专家层因此常需要不同的并行布局。

为什么 token 发给专家之后,还要再通信一次?

Dispatch 把 token 送到持有所选专家的设备。专家算完后,输出仍在专家所在设备,需要回到 token 原来的位置。Combine 再按路由权重合并各专家的贡献。

同一个 token 选了多个专家时,可能对应多份专家输出。通信实现可以融合重排、去重或加权,但逻辑上仍要完成分发和结果归并。

Top-k 翻倍,EP 的跨节点通信量也会翻倍吗?

在每个 token-expert 分配都单独发送、没有 padding 和压缩的模型里,专家输入载荷与 kk 成正比。跨节点字节数还取决于这些专家位于哪些设备和节点。

多个专家位于同一目的设备时,分发可以复用同一份 token。节点内转发、节点受限路由、数据精度和通信协议也会改变网卡上的实际流量。因此要分别统计 token-expert 分配数、目的设备数和跨节点传输。

怎样先估算 dispatch 和 combine 的数据量?

设整个 EP 组一轮共有 TT 个 token,每个 token 选择 kk 个专家,隐藏维为 HH。先假设每份分配都独立携带完整向量,输入和输出各元素均占 bb 字节,且都需要远程传输。一次前向 dispatch 加 combine 的载荷为 2TkHb2TkHb。

例如 T=4096,k=2,H=4096T=4096,k=2,H=4096、BF16,整个组的逻辑载荷为 128 MiB。这个数把每份发送只算一次,没有再加接收。

实际远程流量应扣除本地专家,按目的地复用、量化和 padding 调整,并单独计入路由元数据。训练反向还会增加对应的梯度交换。

Vlogical,forward=TkH(bin+bout)V_{\mathrm{logical,forward}}=TkH(b_{\mathrm{in}}+b_{\mathrm{out}})

专家拿到的 token 数差不多,就算负载均衡了吗?

计算负载要看每个 rank 的总工作量及最慢专家。网络负载还要看 token 从哪里来、跨过哪些链路、集中发往哪些节点。专家计数接近,并不保证链路流量接近。

训练中的负载均衡策略会影响学习到的路由。推理还可以通过专家副本和放置策略调整服务负载,需要同时观察尾延迟与路由分布。

Dropless 消除了丢 token,为什么还会有性能波动?

Dropless 保留所有被路由的 token,但各专家收到的 token 数仍然会变化。计算形状、缓冲区需求和各 rank 完成时间也会随之变化。

MegaBlocks 用块稀疏计算处理不均匀的专家输入,减少为固定容量填充或丢弃 token 的需要。它解决了这部分计算组织问题,仍需要配合路由和通信上的负载管理。

训练和 decode,对 EP 的要求有什么不同?

训练通常有更多 token,也要传递反向梯度。吞吐、激活显存和通信重叠会共同影响每步时间。Decode 的单步 token 数较少,专家 GEMM 更碎,通信启动和最慢 rank 的等待更容易影响每个输出 token 的延迟。

同一模型在 prefill、decode 和训练中可以使用不同的专家布局。比较时应固定工作负载,并分别看 token 分布、通信时间和端到端指标。

热点专家复制到多张卡后,怎样分流才不会制造新的热点?

待解

需要把路由频率、源节点分布、专家副本和网络拓扑一起考虑。副本更新与重新放置的开销应怎样计入收益?