Kimi K3: Open Frontier Intelligence (Technical Report of Kimi K3)

model kimi-k3
MoElinear-attentionlong-contextmultimodalagentic-RLload-balancing

Kimi K3: Open Frontier Intelligence — L2 #

TL;DR #

2.8T 参数 / 104B 激活的原生多模态 MoE,1M 上下文。三根支柱:3:1 的 KDA–Gated MLA 混合注意力(序列维)、Attention Residuals(深度维)、16-of-896 的 Stable LatentMoE(宽度维)。宣称对 Kimi K2 有 ~2.5× scaling 效率增益。多处架构改动的直接动机是解锁 kernel 路径而非模型质量。


Q1 / Q2 / Q3 #

Q1 — 痛点 #

作者给出的问题不是"模型不够好",而是开源生态在两条 scaling 轴上的投入失衡。测试时计算这条轴(RL、reasoning effort、长程交互)开源社区跟得很紧,但预训练规模这条轴停在 1T 参数量级不动。作者的判断是:如果越来越精巧的 agentic RL 方法都施加在规模相近的预训练底座上,开源之间会互相收敛,而与最强闭源系统的差距会拉大。

由此推出的工程问题是三个同时出现的系统约束:混合 KDA 注意力、3T 级稀疏多模态训练/推理、百万 token 的 agentic 轨迹。报告反复强调这三件事单独都有人做过,同时出现在一个模型里是新的

Figure 1: Kimi K3 主结果,12 个 benchmark 面板

论文 Figure 1(caption: "Kimi K3 main results.")。 这张图定义了论文自己设定的成功标准:不是"赢",而是"只输给 Claude Fable 5 和 GPT-5.6 Sol,赢过其余所有被评测的开源与闭源模型"。值得注意的是各面板胜负分布很分散——K3 在 SWE-Marathon、BrowseComp、ProgramBench、AutomationBench 上第一,在 DeepSWE、GDPval、FrontierSWE 上落后。作者选择用面板并列而非单一综合分呈现,这与 §6.4 把坐标轴换成成本后位置改善的叙事是配套的。

Q2 — 方法 #

按"信息流的三个维度"组织,每个维度一个机制,每个机制都配一处稳定性/数值补丁:

维度机制相对前代的具体改动配套补丁
序列长度Hybrid Attention:3× KDA + 1× Gated MLAKDA 的 log-decay 从 negative-Softplus 改为下界化 scaled sigmoid;输出门从低秩改全秩$g_{\min} = -5$ 把倒数缩放因子压进 BF16 动态范围
网络深度Attention Residuals:每层对所有前层做 softmax 加权检索分块(8 块 × 12 层),块内求和、块间全注意力开销从 $O(Ld)$ 降到 $O(Nd)$;online softmax 合并
模型宽度Stable LatentMoE:16-of-896 路由,latent 宽度 $\ell = 3584$专家池 384→896,激活 8→16,共享专家 1→2聚合后 RMSNorm + SiTU-GLU(有界激活)+ Quantile Balancing
视觉MoonViT-V2,27 层 / 401M,从零用 next-token prediction 训练放弃 SigLIP 对比学习初始化RMSNorm、去掉全部 bias、pixel-shuffle 2×2 降 token
优化器Per-Head MuonNewton–Schulz 正交化按 head 分块而非整矩阵均衡各 head 的 update scale

后训练是三段式:SFT 冷启动 → 3 个域 × 3 个 effort 级别 = 9 个专家模型的 RL → Multi-Teacher On-Policy Distillation 合并回一个模型。MXFP4 权重 / MXFP8 激活的 QAT 从 SFT 阶段就打开,且 RL 的 rollout 与 training 共用同一量化方案,消除训推不一致。

核心技术壁垒:真正难复制的不是任何单一机制,而是"为了让某条 kernel 路径可用而反过来改模型数学"这条闭环,且它必须在 2.8T 训练开跑之前一次性决定完。三个实例:(1) 把 log-decay 下界化到 $g_{\min}=-5$,唯一目的是让倒数缩放因子留在 BF16 范围内,从而消掉 chunkwise KDA 对角 tile 的 position-pair 路径,让全部因果 tile 走 Tensor Core;(2) 保留 KDA 状态转移的仿射结构 $S \leftarrow M S + \tilde{S}$,使每个 CP rank 的贡献成为可结合的二元组,跨设备只需一次定长 all-gather;(3) MoonEP 用 $E/R$ 冗余专家上界把负载均衡从"尽力而为"变成"可行性有证明",进而拿到静态计算形状、免 host 同步、零拷贝通信。这三条都写在论文里、都可读懂,但它们改的是模型本身,属于训练前不做就永远补不上的那类决策——这才是壁垒所在,而不是信息保密。

Q3 — 结果 #


架构 / 方法图 #

总体结构 #

Figure 2: Kimi K3 架构总览

论文 Figure 2(caption 节选: "The Kimi K3 architecture, organized around token, channel, and layer mixing, with a native vision pathway at the input.")。 读这张图要抓三件事:主干列是 KDA → Stable LatentMoE → Gated MLA → Stable LatentMoE 的 3:1 交错——注意 MoE 层是跟着每个 attention 层走的,不是跟着 block 走的,所以 MoE 层数等于 attention 层数;左侧 AttnRes 的边从 EmbeddingBlock n−2Block n−1 汇入,用 learned pseudo-query $w$ 产生权重 $\alpha$,即 embedding 本身是深度注意力的第 0 号 source;右下角 MoonViT-V2 直接接进同一 token 流,没有独立的对齐阶段。

层数账目可以完全对上(论文没有明写,但三处数字自洽):$69$ 个 KDA 层 $\div\ 3 = 23$ 个混合 block,每 block 配 1 个 MLA 得 23 个 MLA,再加主干末尾那个额外的 Gated MLA,得 $69 + 24 = 93$ 层。AttnRes 的 8 块划分是 $7 \times 12 + 1 \times 9 = 93$,而 $12 = 3 \times 4$,所以每个 AttnRes 块恰好跨 3 个完整的混合 block,末块 9 层 = 2 个混合 block + 那个终端 MLA。两套分块是对齐的。

flowchart TB subgraph IN["输入"] T["text tokens"] V["image / video → MoonViT-V2 (27L, 401M) → MLP projector"] end T --> E["Embedding (160K × 7168)"] V --> E E --> B1 subgraph B1["混合 Block × 23"] direction TB K1["KDA + Stable LatentMoE"] --> K2["KDA + Stable LatentMoE"] --> K3["KDA + Stable LatentMoE"] --> M1["Gated MLA (NoPE) + Stable LatentMoE"] end B1 --> TM["终端 Gated MLA + Stable LatentMoE"] TM --> N["Norm"] --> H["lm_head"] --> L["logits"] TM -.-> MTP["MTP layer → EAGLE-3 draft"] E -. "AttnRes source 0" .-> AR B1 -. "block repr b_1..b_7" .-> AR AR["AttnRes: 8 blocks (7×12 + 1×9), softmax over block reprs"] -.-> B1

机制一:KDA 的下界化衰减 #

Figure 3: 下界化 log-decay 及其对 chunkwise KDA 的影响

论文 Figure 3(caption 节选: "(a) Kimi Linear uses an unbounded negative-Softplus mapping, whereas Kimi K3 bounds the log-decay with a scaled sigmoid ... (b) ... the bounded range in Kimi K3 allows all causal tiles to use dense Tensor Core matrix multiplications.")。 这是全文最能说明"算法服从 kernel"的一张图。(a) 是参数化改动本身——一行公式;(b) 是它的全部理由——tile 网格从"对角 position-pair + 非对角 Tensor Core"变成"全部 Tensor Core"。论文没有给这两种参数化的 loss 对比,也就是说这个改动只用计算收益论证,没有用质量收益论证

机制二:有界激活 SiTU-GLU #

Figure 4: GLU / SwiGLU / SiTU-GLU 的 gate 与 up 分支及标量响应

论文 Figure 4。 关键细节是 softcap 只加在 Swish 的线性因子上,sigmoid 因子原样保留——所以负半轴仍然衰减到零(保住 SwiGLU 的形状),正半轴从线性增长变成饱和到 $\beta_1\beta_2 = 100$。红线在原点附近几乎与 SwiGLU 重合、远端才分离,这正是 §B 里 $\beta\tanh(z/\beta) = z + O(z^3/\beta^2)$ 的图形版本。

机制三:Quantile Balancing #

Figure 5: Quantile Balancing 图示(m=8 tokens, n=4 experts, k=1)

论文 Figure 5。 (a) 负载 $(4,3,1,0)$ 含一个"死专家";(b) 每列的红虚线放在第 $(q{+}1)$ 大的 margin 处,使恰好 $q=2$ 个 margin 越过它;(c) 结果是 $(2,2,2,2)$。要看懂的是:红虚线的位置是解出来的(第 $q{+}1$ 顺序统计量),不是按误差方向挪出来的。这就是 QB 与 DeepSeek 式 sign-step 的全部区别——同一个对偶目标,一个跳到精确坐标极小点,一个走 SignSGD。

机制四:视觉从零训练 #

Figure 6: 预训练消融中的 vision tower 梯度范数

论文 Figure 6。 论证"对比预训练作为初始化在大规模下是不必要的",靠的是这张梯度范数曲线:SigLIP 初始化的 MoonViT-3D 持续更高且尖峰频繁,从零训练的 MoonViT-V2 平稳。注意这是稳定性证据,不是质量证据——"matches the SigLIP-initialized baseline across vision evaluations" 这句没有配任何逐 benchmark 对比表。

系统侧:训练调度与推理缓存 #

Figure 11: 不同 PP 阶段中计算、通信与 offload 的重叠

论文 Figure 11。 图例里的五类 stream(Computation / EP Comm / NCCL Comm / Local Activation Offload / Remote Activation Offload)说明这套 schedule 要同时藏三种东西:EP 的 all-to-all、DP 的梯度规约、以及跨 PP rank 的远程 activation offload。EP-DR(dispatch recompute)那一格是 §5.2.2 的关键点——group GEMM 反向时不存输入而重算 dispatch,重算引入的通信恰好藏在 group-GEMM 反向计算里。

Figure 12: 物理 cache block 内的细粒度前缀缓存

论文 Figure 12。 混合架构给前缀缓存造成的具体伤害在这张图里最清楚:KDA 状态只能在稀疏边界快照,如果 hash 粒度绑定物理块,块大小被迫拉到 1024–6144 token,短请求永远无法复用。解法是把两个粒度解耦——hash 走 512 token 的细块,物理块仍是粗分配单位,命中点 $B = 2560$ 落在 6144 token 物理块的内部。三个并发一致性机制(跨组 pin、当步分配块排除匹配、checkpoint 跨 KDA 组原子失效)是让这个解法在真实调度下不出错的代价。


作者证明 #

记号表 #

符号含义出处
$S_t \in \mathbb{R}^{d_k \times d_v}$KDA 递归状态(固定大小,与序列长度无关)Eq. 1
$\alpha_t \in (0,1)^{d_k}$逐通道单步保留因子;$\beta_t \in (0,1)$ delta-rule 写入强度Eq. 1
$g^h_t = g_{\min}\mathrm{Sigmoid}(e^{A^h} z^h_t)$下界化 log-decay,$g_{\min} = -5$ 固定,$A^h$ 可学Eq. 5
$\Gamma^{1\to C}_{[t]}$chunk 内累积衰减矩阵;Eq. 4 用其倒数重标定 keyEq. 3–4
$M_t = (I - \beta_t k_t k_t^\top)\mathrm{Diag}(\alpha_t)$每 token 状态转移矩阵§5.1.2
$\alpha_{i\to l}$AttnRes 中源层 $i$ 到消费层 $l$ 的深度注意力权重Eq. 9
$b_n$ / $b^{i}_n$AttnRes 块级表示 / 块内前 $i$ 层偏和;$b_0 = h_1$(token embedding)Eq. 10
$\ell = 3584$LatentMoE 路由专家工作宽度($= 0.5 d$)Table 1
$T_k(x)$, $p_i$Top-k 选中专家集合与混合权重(不含 bias)Eq. 11, 13
$b_j$ / $\alpha^{(t)}_i$专家偏置 / 每 token 的 Top-$(k{+}1)$ 截断值Eq. 13–14
$q = mk/n$每专家目标负载§2.3.3
$E$, $R$, $S$, $K$专家数、EP size、序列长度、每 token 专家数§E

六项复现核对 #

核对 1 — 参数量分解能否复原 2.78T。 单个路由专家在 latent 空间做 SiTU-GLU,含 $W_g, W_u, W_{\text{down}}$ 三个矩阵:$3 \times \ell \times h_e = 3 \times 3584 \times 3072 = 33.03\,\text{M}$。全部路由专家 $= 33.03\text{M} \times 896 \times 92 \ \text{层} = 2.7227\,\text{T}$(93 层减去 1 个 dense 层)。激活的路由部分 $= \tfrac{16}{896} \times 2.7227\text{T} = 48.62\,\text{B}$,于是非路由的常激活部分 $= 104.2 - 48.62 = 55.58\,\text{B}$。合计 $2.7227\text{T} + 55.58\text{B} = 2.7783\,\text{T}$,与报告的 2.78T 相差 0.06%。通过。 这也反推出一条论文没写的结构事实:K3 的总参数量几乎全部是路由专家权重(98%),非专家部分只占 2%。

核对 2 — 非路由部分能否逐项对齐。 可确定项:$W^\downarrow + W^\uparrow = 2 \times 7168 \times 3584 \times 92 = 4.73\,\text{B}$;embedding + lm_head $= 2 \times 160\text{K} \times 7168 = 2.29\,\text{B}$;ViT $= 0.40\,\text{B}$。若共享专家沿用 $h_e = 3072$,则 $2 \times 3 \times 7168 \times 3072 \times 92 = 12.16\,\text{B}$。四项合计 19.58B,余下 36.0B 分给 93 个 attention 层 + MTP 层,约 387 M/层。按 $d = 7168$ 估算,KDA 层(q/k/v/β/α 投影 + 全秩门 $W_g$ + $W_o$)约 257 M、Gated MLA 层约 240 M,两者都低于 387 M。部分通过:缺口约 13B,最可能的来源是共享专家的隐藏宽度大于 3072(Table 1 的 "MoE Hidden Dimension per Expert" 只对路由专家成立)。共享专家宽度、MLA latent rank $d_c$、KDA 的 $d_k/d_v$ 与头数均 [论文未披露],无法闭合。

核对 3 — 稀疏度与 KV/state 预算。 稀疏度 $896/16 = 56$,与 §2.3 的"sparsity of 56"一致。通过。 KV 预算:只有 24/93 层缓存 MLA KV,即同深度全 MLA 模型的 25.8%。以 $d_c$ 参数化,$\text{KV bytes/token} = 24 \times d_c \times 2$(BF16);若取 DeepSeek-V3 的 $d_c = 512$(K3 用 NoPE,没有 rope 尾巴),则 24.6 KB/token,1M 上下文 24.6 GB,而同深度全 MLA 需 95.2 GB。KDA 侧 69 层各持一份与序列长度无关的定长状态——正是这个"每请求单份、体积大、不随长度增长"的性质,同时解释了 §5.1.2 的定长 all-gather 成本模型(优点)和 §5.4.1 里 checkpoint 只能在稀疏边界落盘(缺点)。$d_k, d_v$ [论文未披露]

核对 4 — Eq. 5 的数值范围论证是否成立。 $g_{\min} = -5$,16-token tile 的累积 log-decay $\in (-80, 0)$,倒数缩放因子 $< e^{80} \approx 5.54\times10^{34}$,BF16 上限 $3.39\times10^{38}$,余量约 $6.1\times10^{3}$ 倍。通过。 但要注意这个界只对 16-token 二级 tile 成立,不对整个 chunk 成立:若 chunk size $C = 64$,$e^{5 \times 64} = e^{320} \approx 10^{139}$,连 FP32 都溢出。所以 Kimi Linear 的二级 tiling 在 K3 里仍然必需,下界化消掉的是对角 tile 的 position-pair 路径,不是 tiling 本身。另一侧的代价论文没有讨论:$g \in (g_{\min}, 0)$ 意味着单步保留因子 $\alpha > e^{-5} \approx 6.7\times10^{-3}$,通道不再能一步清空状态;约束是单边的(慢衰减通道不受影响),但快遗忘能力确实被砍掉了,且无消融。

核对 5 — QB 是否真的是对偶目标的精确坐标极小点。 对 $\mathcal{L}(\alpha,\beta) = \sum_{i,j}\max(0, s_{i,j}-\alpha_i-\beta_j) + k\sum_i\alpha_i + \tfrac{mk}{n}\sum_j\beta_j$ 求 $\beta_j$ 的次梯度,得 $\partial\mathcal{L}/\partial\beta_j = \tfrac{mk}{n} - \sum_i \chi(s_{i,j}-\alpha_i-\beta_j>0)$,即"目标负载减去实测负载",与 Eq. 27 一致。通过。 令其为零即要求实测负载等于 $q$,而 Eq. 26 的 $(1-k/n)$ 分位数正是这个零点;sign-step 规则只保留该次梯度的符号,因此是同一目标上的 SignSGD。这条等价关系同时解释了两件事:QB 没有 learning-rate 类超参(因为它不是迭代下降),以及为什么 $\sim10^3$ 个专家也能在几步内平衡。

核对 6 — 直方图估计的误差界覆盖了什么、没覆盖什么。 $B = 1000$ 个 bin 铺在 $[b_{\min}-1, b_{\max}+1]$ 上,若 bias 跨度约 0.5,则 $w = 2.5/1000 = 2.5\times10^{-3}$,与论文"at most a few $10^{-3}$"一致。通过(就 bias 误差而言)。 但论文界的是偏置本身的误差,而训练关心的是它诱导的负载误差,后者约为 $m \cdot w \cdot \rho$($\rho$ 为分位点处的 margin 密度)。以 $m$ 达数百万计,这个量并不显然可忽略;论文以"we observe no measurable residual load imbalance"作断言,并额外提出跨步 EMA 平滑"can improve load balance still further"——后一句反过来说明单步估计存在批间噪声。诱导负载误差未被量化。

核对 7 — MoonEP 的 $E/R$ 上界与紧性。 Theorem 1 的构造逻辑成立:每次"填满一个欠载 rank"使该 rank 此后不变,故至多 $R-1$ 次填充,且每个 rank 至多被填一次 ⇒ 远程 token 只来自单一 donor ⇒ 至多涉及该 donor 的 $E/R$ 个本地专家。Theorem 2 的下界 $\lceil E(R-1)/R^2 \rceil = \lceil (E/R)(1-1/R) \rceil$。代入 K3 的 $E = 896$、若 $R = 32$:上界 $E/R = 28$,紧性下界 $\lceil 896\times31/1024\rceil = \lceil 27.125\rceil = 28$,两者恰好相等——在这个配置下上界不只是"essentially tight",而是精确可达。通过。

核对 8 — scaling law 的拟合区间与外推跨度。 Fig. 7 的横轴刻度只标了 $10^{20}$ 与 $10^{21}$ FLOPs,2.5× 是等 loss 下的 FLOPs 轴水平位移(compute multiplier),不是指数的改变;两条曲线若平行,则该增益在拟合区间内与规模无关。按 $C \approx 6ND$、$N = 104.2$B 激活参数换算,$10^{21}$ FLOPs 只对应约 1.6B 训练 token——即 Fig. 7 用的是远小于 K3 的代理模型。K3 自身的 token 预算 [论文未披露],但 3T 级模型的实际训练 compute 显然在 $10^{24}$ 量级,因此 2.5× 是一个跨约 3–4 个数量级的外推。论文未给拟合函数形式、指数、残差或置信区间。未通过(无法复现拟合)。

论文自证的边界 #

真正带形式化证明的只有两处:§C(QB 从平衡指派 LP 的对偶导出,含 Alg. 1 交替求解器)与 §E(MoonEP 的 $E/R$ 上界 + 紧性构造)。主干的架构主张——2.5× scaling 效率、AttnRes 的 $N \approx 8$、Normalized LatentMoE "consistently improves validation loss"、Per-Head Muon "improves training stability"、MoonViT-V2 "matches the SigLIP-initialized baseline"——全部为实证断言或外部引用,无本文消融表。其中 AttnRes 的 $N \approx 8$ 直接取自预印本 [57],未在 2.8T 规模上复验。


实验与数据 #

训练配方分解 #

Table 1: Kimi K2 与 Kimi K3 的架构对比

论文 Table 1。 这张表是 2.5× 主张的"变更清单",但它只列了改了什么、没列每项贡献多少。最陡的三个增幅是激活参数 ↑220%、专家池 ↑133%、每 token 激活专家数 ↑100%——即增益的大头押在宽度维的稀疏扩张上,而 hidden dimension 保持 7168 不变。上下文从 128K 到 1M 的 8× 是靠 NoPE + KDA 实现的,没有动位置编码参数。

阶段目标数据LR schedule上下文技术
预训练 stage 1底座Web / Code / Math / Knowledge 四域 + 视觉语料(caption、交错图文、OCR、感知、视频、visual coding),规则+分类器过滤+去重,域采样率由小模型消融定;知识与数学域按 K2 recipe 改写cosine,1% linear warmup,weight decay 0.18KPer-Head Muon + weight clipping;QB 负载均衡;原生多模态联合训练(视觉与文本 token 交错在同一 NTP 目标下)
预训练 stage 2上下文延展同上同上(cosine 延续)8K → 64K同上
Cooldown长上下文长文档/视频经精确+模糊去重、视频帧感知哈希、启发式+分类器质检、结构校验;长样本上采样;合成长上下文——排列拼接多模态文档与子任务,使嵌入任务只有跨全 1M 上下文取信息才可解[论文未披露]256K → 1M四阶段渐进课程;KCP 做序列维切分
SFTagentic 冷启动用前代 Kimi 域专家模型合成轨迹 + 多阶段校验 + human-in-the-loop 标注;全部用 XTML chat template 序列化[论文未披露][论文未披露]QAT 从此阶段起全程开启:MoE 专家权重 MXFP4 / 激活 MXFP8,非专家模块保持高精度
RL3 域 × 3 effort = 9 个专家统一白盒环境(可组合 harness:Kimi Code / Claude Code / Codex / OpenClaw / Hermes);知识图谱引导的任务合成;可验证 agentic 问题、kernel 优化、个人助理、自主执行(AET)、Web 开发[论文未披露]1Mpartial rollout($\lambda$ 比例完成即暂停);per-token 正则容忍极端 off-policy;per-problem token budget $\tau\cdot b_0(x)$ 逐级退火得 max→high→low;非可验证任务用 Agentic GRM + verbosity 预算
MOPD合并 9 个专家on-policy rollout[论文未披露]1M逐 token OPD reward $=\mathrm{clip}(\mathrm{sg}(\log \pi_{\text{teacher}}/\pi_\theta), -R_{\max}, R_{\max})$,作为 dense reward 喂进 RL 框架而非 KL loss 项——这样才能沿用 partial rollout
Draft 微调投机解码[论文未披露][论文未披露][论文未披露]预训练 MTP 层 → EAGLE-3 draft;融合第 1/4/最后 AttnRes 块的特征,$W_{E3}$ 初始化为 $[\,0\ \ 0\ \ I\,]$;训练时展开 7 步;直接优化 LK loss $\mathcal{L}_{LK} = -\log\sum_{x\in V}\min(p(x), q(x))$
量化部署权重 MXFP4 / 激活 MXFP8,仅 MoE 专家;attention 投影、latent MoE 投影、共享专家、router 保持高精度;RL 的 rollout 与 training 共用同一量化方案

单项最难复制的训练技巧:不是配方里的任何一条,而是 §3.2 那句"我们对 cosine decay 和 WSD 各自独立做了一遍 scaling-law 搜索"。作者明确指出两种 schedule 的最优 peak LR 和 batch size 差异很大,用共享超参比较会不公平地偏袒其中一方——这等于承认公开配方里那些"标准做法"的对比结论可能都是超参错配的产物。但搜索出来的最优超参(batch size、peak LR、TPP、model shape)一个都没公开,Table 1 只给了 model shape 的最终值。知道要建什么,不知道要怎么训。

主结果 #

Figure 7: Kimi K2 与 Kimi K3 的拟合 scaling law 曲线

论文 Figure 7(caption: "Fitted scaling-law curves for Kimi K2 and Kimi K3. Kimi K3 achieves 2.5× gain in scaling efficiency over Kimi K2.")。 全文最核心的单一图,也是信息量最稀薄的一张:两条曲线、一个标注 2.5× 的水平位移、横轴只有两个刻度。核对 8 已说明这个区间对应的代理模型远小于 K3 本身。

Table 2: Kimi K3 与闭源/开源基线的性能对比

论文 Table 2。 42 行 benchmark 的完整对照。读法上有两个陷阱:其一,Claude Fable 5 一列标注 "w/ fallback",SWE-Marathon 上有 35% 的任务触发 fallback,Table 3 的脚注还记了多处 refusal——即最强基线的分数是在部分任务上走了退化路径拿到的;其二,多个分数引自 Artificial Analysis 与 Vals AI,各自的评测设置不同。K3 的赢面集中在 agentic 搜索与执行(BrowseComp 91.2、MCPMark-Verified 94.5、Harvey Lab-AA 94.6、$\tau^3$-Banking 33.4),输面集中在研究级推理(CritPt、HLE-Full)与 GUI/长程 SWE(OSWorld 2.0 58.3 vs 66.1、FrontierSWE 81.2 vs 86.6)。

Table 3: 内部自建 benchmark 结果

论文 Table 3。 作者自己说这套内部套件"比公开榜更锐利地分开了强项与弱项",确实如此:强项是编排与研究型 agency(Swarm Bench 76.3、Deep Research Bench 90.0 明显领先),弱项是 Agent Behavior Bench 65.0(vs GPT-5.6 Sol 76.4)——后者评的不是任务对错而是过程质量(工具使用行为、效率、纪律性)。这是全表最大的单点差距,且方向与 Table 2 的"agentic 任务领先"相反:K3 更会把任务做完,但做的过程不如对手规整。表中多个单元格为 -("scores not yet included"),部分对照结构性缺失。

成本与能力演示 #

Figure 13: 四个套件上的分数-单任务成本对比

论文 Figure 13。 换成本坐标后 K3 的位置系统性改善:BrowseComp 上以约一半价格拿到高于 GPT-5.6 Sol 的分;Kimi Code Bench 2.0 上 high effort 就已在约 1/3 成本下追平 Claude Opus 4.8 的 max effort。子图 (a) 里 low / high / max 三点连成的曲线是本文 reasoning-effort RL 的直接产物——能在同一模型上给出一条成本-分数曲线而不是一个点,本身就是 9 专家 + MOPD 那套流程的交付物

Figure 14: AttnRes kernel 优化案例

论文 Figure 14。 24 小时预算内四个模型对 AttnRes kernel 的优化轨迹,K3 +59.7% 对 Claude Fable 5 +57.1%。这个案例的特别之处是它闭环了:被优化的 kernel(AttnRes、KDA、DSA、MLA)正是本模型自己的架构组件,而报告说"an early Kimi K3 checkpoint was already handling most of our kernel optimization work during late-stage development"——模型参与了自己基础设施的开发。


论证链 #

#步骤论文内依据强度
1开源模型停在 1T 参数量级,而测试时计算这条轴已被追平;继续只在后者投入会导致开源互相收敛、与闭源差距扩大§1,引 [145, 29, 135, 120]弱:仅引用列举,无量化
2因此同时推进两条轴:把预训练底座推到 3T 级,同时把 RL / reasoning effort / 长程交互推到 1M 上下文§1 贡献列表设定,非论证
33T 级底座需要沿三个信息流维度扩张:序列(Hybrid KDA–MLA)、深度(AttnRes)、宽度(16-of-896 LatentMoE)§2 开篇的组织原则,Fig. 2中:分类清晰,但三者互补性未单独验证
4每个维度的扩张都撞上一个数值/稳定性失效,各配一个补丁:KDA 的倒数衰减溢出 → 下界化 log-decay;LatentMoE 四连乘的激活爆炸 → 聚合后 RMSNorm + SiTU-GLU;$\sim10^3$ 专家超出 sign-step 均衡的适用域 → Quantile Balancing§2.1.1(Fig. 3)、§2.3.1–2.3.2(Fig. 4)、§2.3.3(Fig. 5)、§B、§C、§D强(数学部分):QB 有完整对偶推导,SiTU-GLU 有 $\\cdot\_\infty \le \beta_1\beta_2$ 界;弱(质量部分):三个补丁均无 loss 消融
5这些补丁不只是"修 bug",它们同时解锁了 kernel 路径:下界化让全部因果 tile 走 Tensor Core(FlashKDA);KDA 转移的仿射结构让跨设备状态可用一次定长 all-gather 组合(KCP)§2.1.1 的 $e^{80}$ / BF16 论证 + Fig. 3(b);§5.1.1;§5.1.2 Eq. 17强:Eq. 17 的分解是可验证的代数恒等式
6同理在系统侧:MoonEP 证明 $E/R$ 冗余专家上界总可行(且紧),由此拿到静态计算形状 → 免除逐层 host 同步 → 定长通信 buffer($S\times K$ 而非 $S\times K\times R$)→ 零拷贝 permute/unpermute§5.2.1;§E Theorem 1–2(Eq. 28)强:唯一给出可行性保证而非启发式的负载均衡方案
7上述架构+数据+配方的联合改动,经独立 scaling-law 重调超参后,在留出 OOD 验证集上给出 ~2.5× 整体 scaling 效率增益§3.2,Fig. 7,Table 1弱:单一位移标注,无分解、无拟合形式、跨 3–4 个数量级外推
8后训练把能力扩到长程:3 域 × 3 effort 共 9 个 RL 专家,再由 MOPD 用逐 token log-ratio 作为 dense reward 合并回一个模型§4.1.2(Fig. 8)、§4.1.3 Eq. 15中:Fig. 8 显示 RL FLOPs ↑ 时工具调用步数与分数同步上升,但 MOPD 相对单教师/无蒸馏无对照
91M 长程 agentic RL 的可行性依赖环境侧:可恢复 microVM 沙箱(checkpoint 133 ms / resume 49 ms、pause 期零资源、fork 用于无副作用判分)支撑 partial rollout 的跨迭代续跑§5.3.2;共创建 51,219,741 个沙箱 / 1,505,678 个镜像中:绝对运营数字罕见且具体,但无与容器方案的端到端吞吐对照
10生产服务把上述效率兑现为可预测性:KDA-aware 前缀缓存(hash 512 token 解耦物理块)+ 专用 kernel + cache 亲和路由 + 分级 admission control§5.4.1(Fig. 12)、§5.4.2、§5.4.3弱:机制描述极详尽(含三个并发失效模式),但全节无一个命中率/延迟/吞吐测量
11结论:在公开榜、第三方榜与成本轴上,K3 只落后 Claude Fable 5 与 GPT-5.6 Sol,领先其余全部被评模型,成本上处于或接近前沿Fig. 1、Table 2–5、Fig. 13、§6.3中:结论与数据一致,但最强基线带 fallback/refusal 注脚,且部分分数引自第三方各自的评测设置

链条的形状值得单独指出:第 4→5→6 步是全文最硬的部分(数值约束 → kernel 形状 → 系统保证,每一环都有代数或定理支撑),而第 7 步这个最响亮的主张反而是最软的一环。整篇报告的证据密度与主张显著性成反比。


实现 cross-reference #

已公开的构件 #

构件位置覆盖内容
模型权重huggingface.co/moonshotai/Kimi-K3(脚注 1)完整权重发布
MoonEPgithub.com/MoonshotAI/MoonEP(脚注 3)完美负载均衡的 EP 方案、在线冗余专家规划与迁移、融合 permute/unpermute
AgentENVgithub.com/kvcache-ai/AgentENV(脚注 4)Firecracker microVM 沙箱、增量 checkpoint/resume、pause/fork/snapshot、OverlayBD + ublk 镜像
FlashKDAflash-linear-attention 的自动派发后端,见 [14, 139](§5.1.1)CUTLASS chunkwise kernel,intra-chunk 计算与 cross-chunk 状态传播重叠
KCPFLA PR #691(脚注 2)KDA 上下文并行的参考实现
MiniTritongithub.com/MoonshotAI/minitriton(脚注 5)case study 产物:tile 级 Python 前端、warp 级 MLIR 层、PTX codegen
nano-KPUgithub.com/MoonshotAI/nano-kpu(脚注 6)case study 产物:nano 模型推理芯片 RTL
报告本体github.com/MoonshotAI/Kimi-K3k3_tech_report.pdf

[实现未公开]:预训练框架本体(PP+VP / EP / ZeRO-1 DP / Pipeline ZeRO-2 / CP 的组合实现)、unified activation manager、P2P Muon 正交化、RL 训练栈、外部 KV cache pool 与 auto-throttling scheduler、KDA-aware 前缀缓存与三级 fleet 调度、以及全部数据管线。上述模块在报告中只有机制描述,无代码入口,且报告未给任何 file:line 级锚点。核对 2 中缺失的三个维度(共享专家隐藏宽度、MLA latent rank $d_c$、KDA 的 $d_k/d_v$ 与头数)需要从发布的权重 config 中读取才能闭合,报告正文与 Table 1 均未给出。

核心技术壁垒——为什么它落在训练之前 #

前面(Q2)把壁垒定位为"为解锁 kernel 路径而反改模型数学"的闭环。这里补上它为什么无法事后补救。

下界化衰减(Eq. 5)不是一个推理期开关:$g_{\min} = -5$ 改变的是每个通道能学到的保留因子取值域,模型的全部权重都是在这个受限域里收敛的。事后把 $g_{\min}$ 放开等于换掉激活函数,需要重训。同理,KDA 转移矩阵的仿射结构 $S \leftarrow M S + \tilde{S}$ 是 KCP 分解(Eq. 17)成立的前提——如果 delta-rule 里混进任何对状态的非仿射依赖,跨 rank 的贡献就不再是可结合的二元组,定长 all-gather 的成本模型立刻失效,1M 训练也就不可行。MoonEP 的 $E/R$ 保证同样绑死在"每 rank 恰好 $S\times K$ token"这个不变式上,而这个不变式又依赖 QB 把负载真正压到目标值;QB 若退回 sign-step 的残余不均衡,静态形状与零拷贝路径全部退化。

三条约束互为前提,且都必须在 2.8T 训练启动前一次性拍板。壁垒不在于信息不公开(全都公开了),而在于验证成本:任何一条选错,代价是一次 3T 级重训。竞争者拿到的是答案,拿不到的是"这些答案在什么规模上被验证过、边界在哪"。这也解释了论文一个反常之处——多处架构改动只用 kernel 收益论证而不给 loss 消融:在这个规模上,做消融本身就是不可承受的。

关键实现细节 #

细节一:AttnRes 的第 0 号 source 是 token embedding,不是第一层输出。 Eq. 8 明确 $k_0 = v_0 = h_1$(token embedding),Block 版本里 $b_0 = h_1$。这意味着第 93 层可以直接以 softmax 权重读取原始输入表示,绕过全部 92 层的信息瓶颈。很容易被读成"每层读前面所有层"而漏掉这个入口——但它恰恰是 AttnRes 相对标准残差最本质的差别(标准残差里 embedding 的贡献被 92 次加法稀释,这里它是一个可被显式竞标的 source)。同一处还藏着 EAGLE-3 draft 的接口:draft 融合第 1、4、最后三个 AttnRes 块的输出,$W_{E3}$ 初始化为 $[\,0\ \ 0\ \ I\,]$,使初始时刻融合表示恰好等于 MTP 层预训练时见过的高层特征,低/中层特征的权重从零学起。

细节二:QB 的两个阈值向量只有一个进入部署。 §C 的对偶里 token 侧阈值 $\alpha \in \mathbb{R}^m$ 与专家侧阈值 $\beta \in \mathbb{R}^n$ 是对称的,但 $\alpha$ 绑定动态训练批、推理时不存在,因此被丢弃;路由只需要 $\beta$(等价于 Eq. 13 的 $b = -\beta$),且推理时 bias 冻结。这个不对称正是训推一致性的来源——部署时路由退化为固定 bias 的 Top-k,不需要任何分位数计算。与之配套的另一个易漏点在 Eq. 13:bias 只进 $\arg\text{topk}$、不进混合权重 $p_{i,j}$,所以负载均衡从不污染 router 的梯度。

细节三:$E/R$ 冗余槽必须是逐层轮转的 prefetch buffer,不能是静态分配。 以 $E = 896$、$R = 32$ 计,每 rank 预留 28 个冗余专家槽——恰好等于它本地持有的专家数,即每层的专家权重驻留量翻倍。按每专家 33.03M 参数、BF16 计算,单层就是 1.85 GB;92 层全部静态预留显然不可行。这解释了为什么 §5.2.1 描述的是"从当前 micro-batch 与层的 router 输出在线规划、在路由专家计算前 prefetch",而非静态放置:$E/R$ 是同一时刻的槽位上界,不是常驻分配。反向时冗余专家的梯度先落到本地 reduce buffer,计算完再归约回 home rank。

细节四:Gated MLA 的门前没有 RMSNorm,KDA 的有。 对比 Eq. 6($y_t = W_o[\mathrm{Sigmoid}(W_g x_t)\odot\mathrm{RMSNorm}(\tilde{o}_t)]$)与 Eq. 7($y_t = W_o[\mathrm{Sigmoid}(W_g x_t)\odot\tilde{o}_t]$):两者共享全秩门的参数化,但只有 KDA 侧对递归输出做了归一化。论文未解释这个不对称——一个合理读法是 softmax 注意力的输出已经是凸组合、尺度天然有界,而 KDA 的递归读出 $S_t^\top q_t$ 没有这种保证。


Appendix: 模型架构图 #

维度取自 Table 1 与正文;Table 1 未给出的维度标 [论文未披露]。这些图刻画的是报告描述的结构,未与发布权重的 config 交叉校验。

A1 — Top-Level #

flowchart TB TOK["text tokens"] --> EMB IMG["image / video
≤ 3584 × 3584 px"] --> VIT["MoonViT-V2
27 层 / 401M / patch 14 / 12 heads
空间-时间分解注意力 + 时间池化"] VIT --> PS["pixel-shuffle 2×2
token 数 ÷ 4"] --> PROJ["MLP projector → d=7168"] --> EMB EMB["Embedding
160K × 7168"] --> DENSE["dense layer × 1"] DENSE --> BLK["混合 Block × 23
(3 × KDA + 1 × Gated MLA)"] BLK --> TERM["终端 Gated MLA
保证最后一层做全局注意力"] TERM --> NRM["Norm"] --> LMH["lm_head 160K"] --> OUT["logits"] TERM -.-> MTPL["MTP × 1
结构镜像一个 backbone block"] MTPL -.-> DRAFT["EAGLE-3 draft
融合 AttnRes 块 1 / 4 / 末
W_E3 初始化为 (0, 0, I)"] EMB -. "source 0" .-> ARS BLK -. "block reprs b_1..b_7" .-> ARS ARS["AttnRes 池
8 块 = 7×12 + 1×9 层
+ embedding = 9 sources"] -.-> BLK ARS -.-> TERM

A2 — Block #

flowchart TB IN["h_l 由 AttnRes 组装:
h_l = Σ α(i→l) · v_i, i = 0..l−1"] IN --> A1["KDA layer"] --> F1["Stable LatentMoE"] F1 --> A2["KDA layer"] --> F2["Stable LatentMoE"] F2 --> A3["KDA layer"] --> F3["Stable LatentMoE"] F3 --> A4["Gated MLA layer (NoPE)"] --> F4["Stable LatentMoE"] F1 -.-> ACC["块内偏和 b^i_n = Σ over j ≤ i of f_j(h_j)"] F2 -.-> ACC F3 -.-> ACC F4 -.-> ACC ACC -.-> BR["块级表示 b_n
(跨块做全注意力,块内走求和)"]

残差机制不是标准加法:进入每层的 $h_l$ 是对前面所有块表示(含 embedding)的 softmax 加权和,权重由该层自己的可学 pseudo-query $w_l$ 与 $\phi(q,k)=\exp(q^\top\mathrm{RMSNorm}(k))$ 决定。

A3 — 主 Attention 变体:KDA #

flowchart TB X["x_t ∈ R^7168"] --> NRM["Norm"] NRM --> WQ["W_q → ShortConv → Swish → L2Norm"] --> Q["q_t 维度 d_k
d_k 论文未披露"] NRM --> WK["W_k → ShortConv → Swish → L2Norm"] --> K["k_t 维度 d_k"] NRM --> WV["W_v → ShortConv → Swish"] --> V["v_t 维度 d_v"] NRM --> WB["W_β → Sigmoid"] --> BE["β_t ∈ (0,1)
delta-rule 写入强度"] NRM --> WA["W_α↓ → W_α↑ + b^h_α (低秩)"] --> Z["z_t → g = g_min·Sigmoid(e^A z)
g_min = −5 ⇒ α_t 逐通道落在 (0.0067, 1)"] Q --> REC K --> REC V --> REC BE --> REC Z --> REC REC["递归 / chunkwise:
S_t = (I − β_t k_t k_tᵀ)·Diag(α_t)·S_prev + β_t k_t v_tᵀ
õ_t = S_tᵀ q_t
状态定长 d_k × d_v,与序列长度无关"] REC --> RN["head-wise RMSNorm"] X --> WG["W_g → Sigmoid (全秩,K3 改动)"] RN --> GATE(("⊙")) WG --> GATE GATE --> WO["W_o"] --> Y["y_t"]

关键实现事实:状态是每请求单份、定长,因此推理期可整体传输/复用(这是 KCP 与前缀缓存的基础),但也因为体积大而只能在稀疏边界做 checkpoint(§5.4.1)。chunkwise 形式下 key 要除以累积衰减 $\Gamma^{1\to C}$,$g_{\min}$ 的作用就是把这个倒数压进 BF16 范围。

A4 — 辅 Attention 变体:Gated MLA #

flowchart TB X2["x_t ∈ R^7168"] --> WC["W_c → 低秩 latent c_t
latent rank d_c 论文未披露"] WC --> CACHE[("KV cache: 仅缓存 c_t
逐 token 分页
仅存在于 24/93 层")] CACHE --> UPK["up-proj → content keys"] CACHE --> UPV["up-proj → values"] X2 --> WQ2["W_q → queries
96 heads(全模型口径)"] WQ2 --> ATT UPK --> ATT UPV --> ATT ATT["softmax attention
NoPE:q/k 上不加任何位置编码
训练时 attention 输出保持 FP32"] ATT --> OT["õ_t"] X2 --> WG2["W_g → Sigmoid (全秩)"] OT --> G2(("⊙")) WG2 --> G2 G2 --> WO2["W_o"] --> Y2["y_t"] note["注意:此处无 RMSNorm,
与 KDA 的 Eq. 6 不对称"] OT -.- note

位置信息完全由 KDA 的门控与衰减承载,MLA 层不带任何位置编码——这是 1M 外推不需要 RoPE rescaling / YaRN 的直接原因。训练 kernel 因 FP32 输出 tile 占满片上空间,被重设计为与 KV staging buffer 重叠而非与 query tile 重叠。

A5 — 选择机制:Stable LatentMoE 路由与 Quantile Balancing #

flowchart TB XI["x ∈ R^7168"] --> SH["Shared Expert × 2(全宽 d=7168)"] XI --> WD["W↓: 7168 → ℓ=3584"] --> ZL["z = W↓x ∈ R^3584"] XI --> RT["Router: s = Sigmoid(W_r x) ∈ (0,1)^896"] RT --> TK["T = argtopk(s + b), k=16
b 只影响选择,不进混合权重 p"] TK --> DISP["all-to-all dispatch(latent 宽度,流量随 ℓ 而非 d)"] ZL --> DISP DISP --> EXP["Routed Expert × 16 (of 896)
SiTU-GLU, hidden 3072
每专家 3 × 3584 × 3072 = 33.03M"] EXP --> AGG["u = Σ over i ∈ T of p_i · E_i(z),维度 3584"] AGG --> RMS["RMSNorm (K3 新增)"] --> WU["W↑: 3584 → 7168"] WU --> ADD(("+")) SH --> ADD ADD --> YO["y"] RT -.-> QB QB["Quantile Balancing(训练时):
Top-(k+1) 取每 token 截断 α_i
margin r = α_i − s_ij 打进每专家直方图(B≈1000 bin)
一次整型 all-reduce 汇总 → 读 (k/n) 分位数
b ← b̂ − mean(b̂),下一步生效;推理时冻结"]

稀疏度 $896/16 = 56$。路由专家只看 $\ell = 3584$ 维 latent,所以 all-to-all 流量与专家权重体积都按 $\ell$ 而非 $d$ 缩放——这是 16-of-896 在 2.8T 规模下可负担的根本原因。

A6 — 残差/连接机制:Block Attention Residuals #

flowchart LR E0["b_0 = h_1
token embedding"] --> POOL B1R["b_1"] --> POOL B2R["b_2"] --> POOL BDOT["···"] --> POOL B7R["b_(n−1)"] --> POOL PART["b^(i−1)_n
当前块内偏和"] --> POOL POOL["V = 前 n−1 个块表示 加 当前块内偏和,按行堆叠"] --> PHI WL["层专属可学 pseudo-query q_l = w_l ∈ R^7168"] --> PHI PHI["φ(q,k) = exp(qᵀ·RMSNorm(k))
α(i→l) = φ(q_l,k_i) / Σ_j φ(q_l,k_j)"] --> HL["h_l = Σ_i α(i→l) · v_i"] HL --> LAYER["layer l"] LAYER --> PART

两级结构(块间全注意力、块内求和)把内存与跨 stage 通信从 $O(Ld)$ 降到 $O(Nd)$,同时把推理期状态限定为 $N$ 个块表示,使块间并行结果可以与块内串行偏和通过 online softmax 合并。RMSNorm 加在 key 上,防止输出幅度大的层靠幅度而非相关性抢占权重。

结构对照表 #

报告构件对应图关键实现细节
Hybrid Attention 3:1(§2.1)A1, A269 KDA + 24 MLA = 93 层;23 个完整 block + 1 个终端 MLA;MoE 层跟随每个 attention 层,共 92 个(1 个 dense 层除外)
KDA(§2.1.1, Eq. 1–6)A3$g_{\min} = -5$ 下界化仅对 16-token 二级 tile 保证 BF16 安全,chunk 级仍需 tiling;输出门在 K3 中由低秩改为全秩
Gated MLA(§2.1.2, Eq. 7)A4NoPE;训练期 attention 输出保持 FP32;门前无 RMSNorm,与 KDA 不对称
Stable LatentMoE(§2.3, Eq. 11)A5路由专家工作在 $\ell = 3584$;RMSNorm 位于聚合与上投影之间;共享专家 $N_s = 2$ 走全宽旁路
Quantile Balancing(§2.3.3, §C, §D)A5直方图分位数估计,通信量 $nB$ 与 token 数 $m$ 无关;推理期 bias 冻结,token 侧阈值 $\alpha$ 丢弃
Block AttnRes(§2.2, Eq. 8–10)A6source #0 是 token embedding;8 块划分 $= 7\times12 + 1\times9$,恰好对齐混合 block 边界
MTP → EAGLE-3 draft(§4.1.4)A1融合第 1/4/末 AttnRes 块特征,$W_{E3}$ 初始化 $[\,0\ \ 0\ \ I\,]$;训练展开 7 步;直接优化 LK loss
未披露维度A3, A4, A5KDA 的 $d_k, d_v$ 与头数、MLA latent rank $d_c$、共享专家隐藏宽度、ShortConv 核宽——Table 1 与正文均未给出

部署侧推算 #

MoE 专家权重占总参数的 98%(核对 1),量化为 MXFP4(E2M1 + 每 32 元素一个 E8M0 scale ≈ 4.25 bit/param)后约 $2.7227\text{T} \times 4.25/8 = 1.45\,\text{TB}$;非专家部分 55.6B 保持高精度,BF16 下约 111 GB。权重总计约 1.56 TB。据此,仅装下权重就需要约 17 张 96 GB 卡或约 12 张 141 GB 卡,实际部署还要为 24 层 MLA 分页 KV、69 层 KDA 定长状态、activation 与前缀缓存留出余量,量级上落在 32 张 96 GB 卡或 16 张 141 GB 卡。这个数字报告未直接给出,但它解释了 §5.4 为何把前缀缓存命中率、cache 亲和路由与分级 admission control 提到与 kernel 同等的地位——在这个权重体积下,一次 cache miss 的重算成本远高于调度复杂度的代价。