Kimi K3架构深度解析:896专家与混合注意力背后的技术权衡

1 阅读

从异常激活到专家拥堵:Kimi K3 的架构设计哲学

Kimi K3 的发布引发了业界对超大模型架构设计的广泛讨论。作为 RoPE 的提出者,苏剑林在技术博客中详细阐述了 K3 在 MoE 和注意力机制上的关键决策。这些决策并非简单的技术堆砌,而是围绕一个核心目标:在模型容量持续扩张的同时,严格控制单次计算成本。

K3 拥有 2.8 万亿总参数,配置了 896 个路由专家,但每个 Token 仅激活其中 16 个。这种稀疏激活模式并非新鲜事物,但 K3 的独特之处在于其配套的 LatentMoE 架构和混合注意力设计。这些技术共同构建了一套精密的资源调度系统,使得模型能够以可控的计算开销处理海量参数和超长上下文。

LatentMoE:重新定义专家计算与通信的平衡

传统 MoE 模型通过 Router 选择少量专家参与计算,从而在保持大参数量的同时控制计算量。然而,当专家分布在多 GPU 集群时,Token 的隐藏状态需要被传输到专家所在的设备。隐藏维度越宽,激活专家越多,通信开销就越大。在大规模 MoE 训练中,通信往往比矩阵计算更早成为瓶颈。

LatentMoE 的核心创新在于改变了 Token 进入专家的方式。K3 不会直接将完整的隐藏状态(维度为 7168)发送给路由专家,而是先将其压缩到 3584 维的潜在空间。专家在这个低维空间中完成计算后,再将结果恢复到原始维度。这种降维操作不仅减少了单个专家的计算量,还同步降低了专家权重读取、激活处理和跨设备数据传输的开销。

K3 将节省的预算用于扩大专家池:原本可以采用 448 个专家中选择 8 个的方案,引入 LatentMoE 后,最终扩展为从 896 个专家中选择 16 个。两种配置的激活比例相同,但后者提供了更多可组合的专家。模型可以让多个较窄的专家协同处理一个 Token,而非依赖少数宽专家完成所有变换,从而实现了更细致的能力分工。

然而,潜在空间也是一道信息瓶颈。如果维度过窄,部分信息可能在进入专家前就已损失。为此,K3 保留了 2 个始终参与计算的共享专家,负责处理语言结构、基础语义和常见推理模式。路由专家则专注于学习细分能力,避免数百个专家重复承担相同的通用计算。这种设计重新组织了通用能力、专业能力与通信成本之间的关系,使得 LatentMoE 不仅是简单的降维,而是一种更高效的资源分配策略。

Stable LatentMoE:数值稳定性与负载均衡的双重保障

LatentMoE 增加了降维、专家计算、结果聚合和升维等步骤,计算路径比普通 MoE 更长,数值波动也更容易被后续矩阵放大。K3 通过引入 RMSNorm、SiTU-GLU 和 Quantile Balancing,将其改造为 Stable LatentMoE,以应对这些挑战。

RMSNorm 被放置在专家结果聚合之后、升维之前。由于不同 Token 会进入不同的专家组合,Router 分配的权重也不相同,聚合结果的尺度可能存在较大差异。如果直接将结果升维并送回主干,这些波动可能继续扩散。RMSNorm 会先校准专家分支的整体尺度,再由升维矩阵恢复完整表示,相当于在路由分支与主干网络之间设置了一套统一的数值接口。

不过,整体尺度稳定并不意味着局部没有异常。SwiGLU 激活函数会生成两个分支,再将它们逐位置相乘。如果两个分支在同一位置同时产生较大数值,输出就会被乘法迅速放大。这类离群值对 BF16、FP8 等低精度训练尤其危险,因为少量极端数值会占用较大的动态范围,使大量正常数值只能被压缩到更窄的精度区间。

SiTU-GLU 通过 Soft Cap 限制这种增长。激活较小时,它尽量保留原有函数的计算行为;数值进入危险区域后,增长速度逐渐降低并趋于饱和。与直接 Clamp 相比,这种处理更加平滑,也不会把所有超过阈值的数值简单压成同一个结果。

RMSNorm 和 SiTU-GLU 解决的是数值问题,Quantile Balancing 则处理专家负载。MoE Router 容易形成正反馈:某个专家早期获得更多 Token,就会得到更多梯度;能力提升后,它又更容易被继续选择。长此以往,少数专家可能持续过载,其他专家则缺少训练机会。

K2 已经采用无辅助损失的负载均衡方法,通过调整专家的选择偏置控制流量,而不是额外加入均衡损失干扰 Router 的语义学习。然而,K2 的偏置更新类似 SignSGD,只会按照固定步长提高或降低专家被选中的概率。当专家数量增加到 896 个后,固定步长很难兼顾调整速度和稳定性。

Quantile Balancing 不再逐步试探,而是直接观察 Router 分数与 Top-K 门槛之间的分布,估计每个专家的选择门槛应该移动到什么位置,才能接收到目标数量的 Token。这种变化让负载均衡从经验性的反馈调节,转向更直接的分布求解。RMSNorm、SiTU-GLU 与 QB 分别控制整体尺度、局部极值和专家流量,共同构成了 Stable LatentMoE 的稳定机制。

KDA 与 NoPE MLA:长上下文中的记忆与检索分工

K3 的注意力结构由 KDA 和 Gated MLA 共同组成,大致每经过 3 层 KDA,就插入 1 层 MLA。两者的区别不仅在于计算成本,也在于它们保存历史信息的方式。

MLA 保留了对完整历史的全局访问能力。虽然它会将 KV Cache 压缩到潜在空间,但当前 Token 仍然可以根据 Query 回查历史中的具体内容。它承担的是全局检索任务。

KDA 则不会保存所有历史 Token 的完整表示,而是把过去的信息持续写入固定大小的状态,并通过更新、遗忘和覆盖维持这份状态。它能够以较低成本处理长序列,但固定容量意味着部分历史细节会被压缩。

K3 没有要求其中一种机制独立承担所有任务。KDA 负责高频地维持连续状态,MLA 则周期性访问完整历史,补充固定状态可能遗漏的重要信息。这种分工也解释了 K3 为什么能够在 MLA 中移除 RoPE。

纯 MLA 模型需要显式建模 Token 之间的位置关系,因此 K2 仍然依赖 RoPE。K3 中的 KDA 会按照 Token 顺序递归更新状态。较早的信息需要经历更多次传播、衰减和覆盖,较近的信息则通过更短的路径影响当前位置。顺序与距离已经部分包含在状态演化过程中。因此,MLA 不再需要独立承担全部位置建模任务,可以将更多能力用于全局内容匹配。所谓“广义 RoPE”,并不是说 KDA 与 RoPE 完全等价,而是强调位置信息也可以由具有顺序性的状态更新机制表达。

K3 还在 MLA 输出后增加了 Gate。MLA 负责从历史中找到相关内容,Gate 再根据当前输入判断哪些通道值得写回主干。这样,模型不仅能够控制检索对象,也能够控制检索结果的使用强度。KDA、MLA 与 Gate 因此形成了明确分工:KDA 维持连续状态,MLA 执行全局回查,Gate 筛选回查结果。

64 维分支与 Per-Head Muon:工程约束下的设计取舍

K3 的 NoPE MLA 仍然保留了原本用于 RoPE 的额外 64 维分支。既然模型已经不再对这部分施加 RoPE,从理论形式看,这段结构似乎可以删除。但删除分支会改变 Query 和 Key 的张量形状,并可能影响 KV Cache 布局、Attention Kernel、通信逻辑和推理框架。对于已经建立完整训练与部署链路的 2.8 万亿参数模型,底层形状变化意味着大量组件需要重新开发和验证。

K3 保留原有结构,反映的是一种最小改动原则。它未必是数学上最简洁的形式,却可以继续复用成熟的 MLA 基础设施,降低训练和部署风险。

Per-Head Muon 处理的则是优化器与注意力结构之间的关系。K3 继续使用 Muon 优化器,但会按照不同 Attention Head 分开处理相关参数。多个 Head 往往学习不同的信息模式,如果优化器将它们作为一个整体统一归一化,梯度较大的 Head 可能影响其他 Head 的更新尺度。Per-Head Muon 不一定直接带来显著的指标提升,但它让优化方式与模型内部的结构边界保持一致,减少了不同 Head 之间不必要的耦合。

从这些细节可以看到,K3 的最终架构并不是只由理论效果决定。通信成本、低精度数值、Kernel 复用、框架兼容和工程风险都会参与设计取舍。

结语:规模扩张的调度艺术

K3 仍然存在尚未完全回答的问题。低维潜在空间可能损失信息,KDA 的固定状态仍会遗忘细节,更多专家也不必然形成同等数量的清晰能力。模型的效率还依赖专家通信、低精度训练和专用 Kernel,单独复制架构未必能够获得相同收益。

但 K3 展示了一条较为明确的路线:当模型进入万亿参数和百万上下文阶段,Scaling 的重点已经不只是扩大容量,而是建立更有效的参数、记忆与计算调度机制。这种调度艺术,或许正是下一代大模型突破的关键所在。