Kimi K3 模型结构(8):训练并行,一步训练里谁在等谁

Kimi K3 模型结构(8):训练并行,一步训练里谁在等谁

💡 原文中文,约10500字,阅读约需25分钟。
📝

内容提要

本文介绍Kimi K3模型预训练的并行系统设计,聚焦MoE层expert并行。核心是MoonEP方案:每个rank预留E/R个冗余expert槽位,确保任意router输出都能使各rank计算完全平衡,消除负载不均和动态shape问题。同时用感知负载的GEMM调度解决rank内偏斜,并将视觉编码器计算塞入流水线气泡,减少等待开销。

🔎

延伸解读

MoonEP 的代价:显存换稳定

MoonEP 通过预留冗余 expert 槽位实现完全平衡,但代价是每个 rank 需为最多 E/R 个冗余 expert 预留显存,相当于本地 expert 数量翻倍。论文明确这笔账是主动付的,换来的是规划永远有解,训练不会因找不到可行方案而中断。读者需注意,这种显存开销在 EP 规模较小时尤为显著,需权衡并行度与显存预算。

负载均衡的两个层面:路由与系统

文章区分了 Quantile Balancing(QB)与 MoonEP 的分工:QB 通过调整 router 偏置影响路由,使 expert 负载在统计上均衡,属于训练动力学层面;MoonEP 则接受 router 输出,通过冗余副本保证执行形状一致,属于系统层面。两者互补,QB 越好,MoonEP 所需冗余越少,但 QB 无法做到逐 micro-batch 精确,因此 MoonEP 仍有必要。

视觉编码器隐藏开销的两种手段

K3 将视觉编码器计算塞入流水线气泡,以减少等待,但前提是单个样本的编码时间不能过长。为此,配套使用动态上下文并行:大图沿 patch 维切分到多设备,通过 gather-KV 计算注意力,并按负载均衡分配子组。这两项措施分别压缩峰值和填充空隙,使视觉编码器不再成为关键路径瓶颈。

Q&A

Kimi K3 模型在预训练中采用了哪些并行策略?

Kimi K3 预训练采用了流水线并行(PP)带虚拟段(VP)、专家并行(EP)、ZeRO-1 数据并行(DP)、Pipeline ZeRO-2 梯度分片以及上下文并行(CP,即 KCP)。MoE 层的 shared expert 在每个 EP rank 上都有副本,dispatch 和 combine 的 all-to-all 与计算重叠,且没有使用张量并行。

MoonEP 是如何解决专家并行中的负载不均问题的?

MoonEP 通过在每个 rank 上预留 E/R 个冗余 expert 槽位(E 为 expert 总数,R 为 EP 大小),并在线规划冗余 expert 的放置,确保无论 router 输出如何,每个 rank 都能恰好收到 S×K 份 token,从而实现完全平衡,消除负载不均和动态 shape 问题。

为什么 MoonEP 能保证每个 rank 的冗余 expert 数量不超过 E/R?

定理 1 通过构造性证明:将 rank 分为欠载和过载两类,每次从过载 rank 搬 token 到欠载 rank,直到补满。每个 rank 最多被补一次,因此它接收的远端 token 全部来自同一个过载 rank,而该过载 rank 搬出的 token 都属于其本地 expert,数量不超过 E/R,所以冗余 expert 数不超过 E/R。

MoonEP 相比 DeepEP、ECHO 或 UltraEP 有什么优势?

MoonEP 通过预留固定数量的冗余槽位(E/R)并在线规划,保证任何 router 输出都能达到完全平衡,无需手调上限或担心无解。而 DeepEP 虽然通信快,但负载不均依然存在;ECHO/UltraEP 预设冗余数或上限,可能因无可行方案而停训,且存在残余不均衡。

MoonEP 如何减少通信缓冲和 host 同步开销?

完全平衡后,每个 rank 每层收到的 token 数固定为 S×K,因此通信缓冲大小固定为 S×K,相比最坏情况下的 S×K×R 减少了 R 倍。同时,由于 shape 静态已知,CPU 无需等待 GPU 计算实际 token 数即可启动 expert GEMM,消除了层间的 host 同步。

K3 如何处理 rank 内部 expert 之间的负载偏斜?

K3 使用感知负载的 GEMM 调度器:在 launch 前根据当前 token 分布选择调度参数,基于硬件指标的解析代价模型,由轻量启发式挑选,执行中不再改变。shared expert 的 GEMM 则放在另一个 stream 上,与 all-to-all 和 routed GEMM 重叠。

视觉编码器的计算是如何被隐藏到流水线气泡中的?

K3 利用 interleaved 1F1B 调度中头几个 micro-batch 的前向和末几个的反向集中在流水线两端的特点,将视觉编码器的前向和反向拆开,同步执行头几个,其余塞进气泡。同时配合动态上下文并行,将大图沿 patch 维切分到多个设备,避免单个设备计算过长,从而让视觉编码器开销基本消失。

MoonEP 与 Quantile Balancing (QB) 在负载均衡上是什么关系?

两者分工不同:QB 通过 router 偏置改变路由,使 expert 负载在统计上平衡,作用于训练动力学;MoonEP 不改路由,接受 router 输出,通过冗余副本保证每一步执行形状完全一致,作用于系统。QB 越好,MoonEP 所需冗余越少,但 QB 非逐 micro-batch 精确,所以 MoonEP 仍有必要。

🏷️

标签

➡️

继续阅读