把 MoE 通信延迟从 103μs 压到 18μs:Cursor 开源 GPU 内核 MoK
NVIDIA 公布 GB300 NVL72 训练成绩不到两周,Cursor 开源了 MoK(Mixture-of-Kittens)。它重写了一层 MoE 的执行方式,把 token 调度、跨 GPU 通信与专家计算合并进同一个 GPU 内核。多节点微基准中,signaling 延迟从约 103μs 降到 18μs;512 卡端到端训练吞吐提升约 41%。
NVIDIA 公布 GB300 NVL72 训练成绩不到两周,Cursor 开源了 MoK(Mixture-of-Kittens)。它重写了一层 MoE 的执行方式,把 token 调度、跨 GPU 通信与专家计算合并进同一个 GPU 内核。多节点微基准中,signaling 延迟从约 103μs 降到 18μs;512 卡端到端训练吞吐提升约 41%。
7 月 21 日,NVIDIA 公布 GB300 NVL72 训练 DeepSeek-V3 的最新成绩:256 张 GPU 上,单卡性能达到 1,648 TFLOPS。
不到两周,Cursor 开源了 MoK。它没有继续折腾更快的矩阵乘法,而是直接重写了一层 MoE 的执行方式。
这件事,有点反直觉。
NVL72 把 72 张 GPU 放进同一个 NVLink Domain,整机架 NVLink 总带宽达到 130 TB/s。按这个规格,GPU 之间传数据应该早已不是瓶颈。但在大规模 MoE 训练里,通信依然会拖住专家计算。
问题出在 MoE 的数据流。
硬件堆料已经足够猛:130 TB/s 机架带宽、1,648 TFLOPS 单卡,跨卡传输不该是瓶颈。
MoE 通信高度碎片化:Router 每步重新决定 token 去向,token 跨卡搬运、等待、重排,执行细节开始直接决定训练速度。
如何阅读:左侧是「硬件够快」的直觉,右侧是 MoE 实际运行时的瓶颈。两者之间的落差,正是 MoK 要补的窟窿。
要理解 MoK 的设计为什么有效,得先看清一层 MoE 到底在什么地方交了「通信税」。
普通稠密 FFN 里,token 经过哪些权重基本固定。MoE 加入 Router 后,每个 token 临时选择几个专家;当采用 Expert Parallel 时,专家又被拆到很多 GPU 上。
于是,一次前向传播至少发生两轮跨卡通信:
训练还有反向传播,对应再执行两轮反方向通信。麻烦在于,Router 每一步给出的数据分布都不同——某个专家这一步可能收到很多 token,下一步又很少。系统要先数清每个专家有多少 token、决定放在目标 GPU 的什么位置、把同一专家的数据尽量排在一起。
如何阅读:「通信」不是一次单纯搬运,而是数据搬运、布局生成、完成同步、负载均衡的叠加。130 TB/s 是峰值,不代表每次动态、零碎的 MoE 通信都能跑满链路。
通信结束也不能立刻开算——目标 GPU 要确认远端写入全部完成;专家负载不均时,部分 GPU 早早结束,还得等最忙的专家收尾。
DeepEP 已经让数据搬运很快了。但一层 MoE 仍要在 Dispatch、Grouped GEMM、Combine 之间不断交接,这里出现一个很实际的矛盾:
等 token 到齐再算,矩阵大,Tensor Core 舒服,但启动晚;token 到一点算一点,重叠更早,但矩阵小,喂不饱 SM。怎么办?
MoK 后面的设计,基本都在处理这个「节奏」问题。它没有只用一种技巧,而是把三件事组合到了一起。
Cursor 的基准测的是完整 MoE 层——Schedule、Dispatch、Expert FFN、Combine、最后的加权合并全部在内。对比对象包括 NCCL + PyTorch、DeepEP、TransformerEngine 以及 HybridEP + Megatron。
如何阅读:以 2.37× 为满宽基准,其余倍数按比例缩放。注意这是「相对每种场景最快的公开基线」的提升幅度,并非统一基线下的直接对比。
更关键的是端到端训练。Cursor 此前的生产方案已经用上了 DeepEP——在 512 张 GB300 GPU 上换成 MoK 后:
如何阅读:单卡吞吐对比。512 张 GB300 GPU,同一生产方案,仅替换 MoE 执行内核。
这组结果很有说服力,但也要看清边界。Cursor 没有公开完整的逐项消融——无法精确说 2.37 倍里有多少来自 Pull、多少来自 Megakernel、多少来自 Ring Buffer。可以单独确认的是 Pull 对 NVLink 利用率和 signaling 延迟的改善,其余收益来自整套机制组合后的效果。
MoK 对硬件的依赖也很强。它面向 Blackwell 和 NVL72 这样的高速 NVLink Domain——Pull 的远端读取、通信与计算的细粒度交错,都建立在 GPU 之间能够低延迟访问彼此显存的基础上。
模型一变,参数就要重调。Hidden Size、Top-k、专家规模不同,合适的 minibatch 和通信 SM 数量也会跟着变。
换句话说:这不是一个开箱即用的通用内核,而是一套需要调参的精密流水线。
但恰恰是这一点,让 MoK 有了样本意义。
一个拥有 130 TB/s NVLink 带宽的机架,最后仍然需要为 MoE 重写 GPU 内核——原因很简单:链路已经很快,接下来要省的是 GPU 等数据的时间。Cursor 把重写内核从「可选优化」变成了「必须掌握的底层能力」。当应用层公司开始定义算子,AI 竞争进入「全栈主权」阶段:决定一家 AI 公司估值的,不再是它拥有多少 token,而是它的代码离显存与寄存器到底有多近。
MoK 已随技术博客全文开源,包含设计细节、微基准方法与端到端数据。
cursor.com/blog/mixture-of-kittens → 阅读 MoK 技术详解