MoE 训练卡在通信上,Cursor 开源解法提速 41%

训练一个混合专家模型(MoE),最贵的往往不是算力本身,而是显卡之间来回搬运数据的那段时间。8 月 4 日,AI 编程工具公司 Cursor 旗下的研究团队开源了一套名为 Mixture-of-Kittens(简称 MoK)的训练超级内核,把这段一直被当成“损耗”的通信开销,硬生生压了下去。

瓶颈不在算力,在搬运

Cursor 训练的是自家的智能体编程模型 Composer。团队在博客中写道,随着训练和推理规模不断放大,混合专家层始终是最主要的瓶颈——视工作负载和训练配置而定,这一层可以吃掉端到端训练时间的一半以上。

原因在于 MoE 的工作方式。这类模型不会让每个 token 都走完整个网络,而是由一个路由器为它挑选少数几个“专家”子网络。省算力的代价是,专家权重被切分存放在不同显卡上,token 必须先被分发(dispatch)到持有对应专家的卡上算完,再被收回(combine)原处加权求和。通信耗时可能和计算本身一样长,两者若串行执行,效率极低。

过去一年 Cursor 也写过自己的 MXFP8、NVFP4 训练算子和面向推理的“warp decode”方案,但那些工作只优化了计算部分,默认通信由别的库另行处理。到了生产环境,通信反而成了限制因素,于是团队决定从第一性原理出发,把整个 MoE 层连同通信一起重写。

一个内核吞下所有环节

MoK 的做法是把 MoE 的全部通信与计算融进单一内核,并且保证完全确定性——同样的输入必定得到逐位一致的输出。它专为英伟达 GB300 NVL72 机架设计:72 张显卡处在同一个 NVLink 域内,为细粒度的计算通信重叠创造了条件;但同一机架里集成的 Grace 中央处理器相对偏慢,显卡很容易空转等它,因此内核必须尽量抹掉主机侧的工作与同步。

团队的几项关键选择颇具反直觉色彩。业界惯例是用“推”(push)的方式散发 token,认为协议开销小、更能跑满链路;Cursor 的实测却发现,分发环节改用“拉”(pull)在专家负载不均时能把 NVLink 带宽利用率再提升最多 29%。更关键的是信令开销:推式分发要等最多 71 个对端的完成信号并刷新整个机架的内存,而拉式分发无需跨卡同步,微基准里两者延迟相差约 5.8 倍——103 微秒对 18 微秒。最终 MoK 选定了前向拉式分发、推式收回的组合。

此外,内核用环形 token 缓冲区复用固定内存,免去主机每步重新计算和分配缓冲区;并把流式多处理器拆开,一部分做矩阵乘法,一部分继续搬数据。在 Blackwell 架构上,凑够 256 个 token 就足以触发一条完整的张量核心矩阵乘指令,于是下一批还在路上时,这一批已经开算。

快了多少

在单个 MoE 层的对比测试中,MoK 的 MXFP8 前向吞吐最高达到最强公开基线的 2.37 倍。参与对比的是 NCCL 加 PyTorch、DeepEP 加 PyTorch、DeepEP 加 Transformer Engine,以及英伟达 HybridEP 加 Megatron 四套组合。

更有说服力的是生产数据。在横跨多个 NVL72 机架、共 512 张显卡的真实训练栈上,端到端每秒处理的 token 数从此前基于 DeepEP 方案的 760.9 提升到 1070.2,相当于 1.41 倍。Cursor 表示,MoK 目前已经支撑着数万张显卡规模的 Composer 训练。

谁会用得上

MoK 针对的是 DeepSeek-V3 式的 MoE 结构——一个共享专家加上数以百计的路由专家。Cursor 在文中直接点名,这一结构被 GLM、Qwen、Kimi(直到 K2.7)等开放权重模型广泛采用。换句话说,任何一家在 NVL72 机架上训练同类架构的团队,理论上都能直接受益。

代码已按 Apache 2.0 协议发布在 GitHub 的 cursor/mixture-of-kittens 仓库。署名作者为 Stuart H. Sul、Nash Brown、Henry Wildermuth、William Lin 和 Federico Cassano。

值得玩味的是发布者的身份:一家靠卖编程助手赚钱、不做芯片也不卖基础设施的应用层公司,公开了能从同一批硬件里多榨出四成吞吐的底层算子。这既说明模型训练成本对它已是实打实的支出项,也说明大规模训练的竞争,正越来越多地落在那些看不见的内核细节上。

来源:Cursor 官方博客