围绕月之暗面 Kimi K3 技术报告,解读 KDA、AttnRes、MoonEP 三大核心机制背后的 Infra 优化…
近日,月之暗面正式公布了 Kimi K3 的技术报告,不仅详细描述了模型架构,还罕见地披露了多个关键的 Infra 层面设计细节。
Infra,即 AI 基础设施层,是连接硬件与上层 AI 应用之间的「操作系统」。如果没有良好的 Infra 设计,再强的硬件也无法发挥真正效能。行业普遍认为,国产开源大模型未来商业化的一个重要支撑点在于:模型厂商自部署的成本可以比第三方低好几倍,这一差距正来自 Infra 技术和工程经验的积累。OpenAI 核心工程师翁家翌此前也曾指出,大模型训练的核心差距在于 Infra,工程师的主要工作正是给 Infra 修 bug。
当模型架构逐渐趋同,公开数据与蒸馏技术降低了部分能力复现门槛后,Infra 工程能力将成为拉开训练成本、部署效率和运行稳定性的关键因素。本文将围绕 Kimi K3 技术报告中提出的三项核心机制——KDA、AttnRes、MoonEP,解读其背后的 Infra 优化原则。
在大模型团队的日常语境中,Infra bug 既包括导致结果错误、训练不稳定的传统 bug,也包括那些虽不影响数学正确性,却会造成 GPU 等待、内存浪费、通信阻塞和吞吐下降的系统性问题。具体而言,是看 GPU 是被充分利用还是有大量闲置算力;就算 GPU 被充分利用,还要看是否存在大量不必要的重复计算、GPU 上计算负载是否均衡等。要满足这些要求,还需要大量通信在 GPU 之间做负载协调,通信又可能引发新的瓶颈。
这些 bug 最终影响的是集群吞吐量,并反映训练效率。模型浮点运算利用率(MFU)是评估训练效率的标准指标,它是观测吞吐量与理论最大吞吐量的比值。
从行业整体来看,大模型训练效率仍有较大提升空间。在目前公开可验证的万卡、千亿参数、完整 LLM 预训练案例中,字节跳动的 MegaScale 以 55.2% MFU 仍是最具代表性的最高纪录之一。今年 4 月还出现了一个极端反面案例:据 The Information 报道,马斯克旗下 xAI 坐拥约 55 万张英伟达 GPU,但内部备忘录显示其 MFU 仅 11%,远低于业界 35%-45% 的正常水准,也不及 Meta(43%)、谷歌(46%)等竞争对手。
更高的训练效率直接转化为更短的训练周期、更低的训练成本、更多可尝试的实验、更大的数据量或模型规模。下面来看 Kimi K3 在三项核心机制上的 Infra 优化原则。
KDA 全称 Kimi Delta Attention,是一种线性注意力机制。要理解其「线性」特点,需要从标准注意力机制说起。
标准注意力的核心在于 Q、K、V 三个向量的计算。借用搜索引擎的比喻,Q 是搜索查询词,K 是网页索引库,V 是网页内容。标准做法是将 Q 和 K 先做配对,再去匹配 V。这种方式能精确匹配所有潜在关系,但计算量随输入长度平方增长,也是制约当前大模型 Scaling Law 的核心因素之一。
KDA 的改进在于让 K 和 V 先相乘(相当于对可检索内容先做总结),再用 Q 去匹配。这种方式下,K 和 V 相乘后的矩阵长宽是固定的,与输入长度无关,这就是 KDA 计算效率高的核心机制。在更精细的结构中,KDA 继承自 Gated DeltaNet,引入了遗忘门结构,能在推进推理的过程中合理地忘记部分旧信息、记住新内容。
KDA 绕开了标准注意力机制的完整记忆矩阵,但代价是引入了串行依赖:后一个 token 的状态必须等前一个 token 计算完成。GPU 天然偏好大规模、高带宽的并行计算,这种串行更新容易导致算力利用率不足。
月之暗面提出了 FlashKDA 优化方案:将 token 分块(chunk)计算,chunk 内部并行,chunk 之间递归传递状态。在不同 GPU 之间,则采用 KDA 上下文并行(KCP)方法。对于标准的线性注意力记忆递归计算,每个输入序列分段的状态转移可以独立求值,再精确合成递归链条。但对 KDA 而言,由于状态转移函数具有记忆遗忘机制,数学上存在额外困难。KCP 的做法是将状态转移中可独立计算的部分尽可能拆分出来,再分配到不同 GPU 进程中并行计算。
标准残差连接是指神经网络每一层只学习需要修改或补充的部分,再加回原输入,类似在原稿上做增量修改。这让原始信息和梯度能沿网络直接传递,使深层模型更容易训练,也减少信息在多层处理中被破坏或遗忘。但随着网络深度增加,靠前层的贡献会被逐渐稀释。
注意力残差 AttnRes 正是为克服这一问题提出,使对原输入的继承更加建立在基于语义理解的筛选上。然而,额外引入的注意力机制在大参数模型中会带来新的内存负担。为此月之暗面进一步提出 Block AttnRes:将神经网络层分为多个块,块内使用标准残差连接,块间使用注意力机制。研究表明,在约 8 个块的情况下,Block AttnRes 能达到 AttnRes 的大部分性能优势。
但 Block AttnRes 本身的内存开销仍不可忽视。Kimi K3 的优化策略包括:
通过以上手段,Block AttnRes 实现了「内存占用理论下限」。
在 MoE 架构大模型中,每个输入 token 可能激活不同专家,反过来,输入到每个专家的 token 数量也可能各不相同,造成激活形状的动态变化。
传统专家并行中,每个专家固定放在某个 GPU 上,路由器不保证 token 被平均分配。于是部分 GPU 要处理大量 token,部分 GPU 早早做完等待。由于整个训练步骤必须等待最忙的 GPU 完成,整体吞吐量被最慢的 GPU「拖后腿」。同时,路由专家每轮收到的 token 数不断变化,使中间张量时大时小,GPU 需要频繁申请和释放不同大小的显存块,留下许多难以复用的不连续空洞,造成显存碎片化和分配开销。
Kimi K3 提出的 MoonEP 方法,核心是给每个 GPU 分配相同的任务量:接收 S×K 个 token(S 为序列长度,K 为每个 token 选择的专家数量)。但一个 GPU 里不同的专家仍可能分配到不同任务量,因此需要在 GPU 内配置冗余专家,以应对随时增加的计算负载。冗余专家本身是高负载专家的复制,作用是为高负载专家分摊计算任务,从而缩短最忙碌 GPU 的等待时间,缩小整体训练步的尾延迟。
从 KDA 的 FlashKDA 与 KCP、AttnRes 的块化内存优化,到 MoonEP 的专家负载均衡,可以看到 Kimi K3 在 Infra 设计上的核心思路:在保持计算正确性的前提下,通过拆分可独立的部分并行计算、用计算换显存、按需传递与缓存等手段,把 GPU 算力、通信带宽和显存三类资源尽可能用在刀刃上。这些原则不仅适用于 Kimi K3,对其他 MoE 架构的大模型训练同样具有借鉴意义。当然,技术报告披露的更多是设计原则与思路,具体实现细节和参数调优仍需各团队在工程实践中自行探索。