Kimi K3 的引言把话说得很直白:过去两年开源生态在 test-time scaling 这条轴上追得很快(RL、长 CoT、agent 并行),但在预训练这条轴上几乎停滞——最近的开源模型大多还挤在 1T 参数量级附近。当越来越精巧的 RL 方法被反复施加到规模相近的预训练底座上,开源的进步会收敛,而与最强闭源系统的差距会继续拉大。K3 的回答是两条轴一起推:把底座做到 2.8T 总参数 / 104B 激活参数,同时在 1M 上下文下做长程 agentic RL[1]。
这是一篇 47 页的系统报告,密度很高,而且大部分内容是 LLM/agent 语境的。我读它想弄清的是一件很具体的事:里面哪些工程结论对量产 VLA 和端到端驾驶是真有效的,哪些只是数据中心的奢侈品。所以这篇文章分两半——前半按报告本身的逻辑把架构和后训练拆开,后半是我认为能落到车端 / VLA 训练流程上的部分,以及明确落不下来的部分。
报告里的数字我尽量做了 code-side 校验:K3 权重已经放出(moonshotai/Kimi-K3),config.json 和 modeling_kimi_linear.py 能对上正文的绝大部分声明,KDA 的关键改动甚至能在 flash-linear-attention 的 kernel 文档里逐字找到。校验结果穿插在各节里,对不上的地方我会单独指出来。

一、架构:把信息流在三个方向上分别做宽
报告自己给的组织线索是「token / channel / layer 三种混合」,对应序列长度、模型宽度、网络深度三个方向。这个分类法比按模块罗列清楚得多,因为每个方向上的改动都在解决一个具体的瓶颈。
1.1 序列方向:KDA 与 Gated MLA 的 3:1 混合
K3 每个 block 是三层 Kimi Delta Attention(KDA)加一层 Gated MLA,backbone 末尾再补一层 MLA,保证最后一层一定是全局注意力。config.json 里 kda_layers 长度 69、full_attn_layers 长度 24、num_hidden_layers 为 93,且全局层落在第 4、8、12、16…层上,与正文的 3:1 完全一致。
KDA 本身来自 Kimi Linear[2],是带通道级遗忘门的 delta rule 递推:
其中 是每个 key 通道各自的单步保留率, 控制 delta rule 的写入强度。q、k 走 ShortConv 加 Swish 再做 L2Norm,v 只走 ShortConv 加 Swish。
K3 相对 Kimi Linear 改了两处,两处都很实用。
第一处是把 log-decay 从下方无界改成有界。Kimi Linear 沿用 GDN / Mamba-2 的 ,值域是 ;K3 换成缩放 sigmoid:
固定为 , 是可学习的 per-head log-scale,初始化为 0。

这个改动的动机不在建模,而在 kernel。KDA 的 chunkwise 形式需要用累积衰减的倒数 给 key 做 rescale,而 是一串 内的数的乘积,倒数会无界增长、在有限精度下溢出。Kimi Linear 的做法是在 log 空间算相对衰减、再把 chunk 切成 16-token 的二级 tile,非对角 tile 能上 Tensor Core,但对角 tile 仍需显式的 position-pair 计算,成为 intra-chunk 的主要瓶颈。 之后,每个保留率都满足 ,16-token tile 上的累积 log-decay 落在 ,倒数小于 ,稳稳待在 BF16 动态范围内——于是对角 tile 也能用密集矩乘,position-pair 那条路径整个删掉。
这段是我 code-verify 得最干净的一处。flash-linear-attention 里 fla/ops/kda/chunk.py 的参数文档写的是:
lower_bound: Lower bound for the forget gate (in log space). When set together withsafe_gate=True, changes the gate activation from-exp(A_log) * softplus(g + dt_bias)tolower_bound * sigmoid(exp(A_log) * (g + dt_bias)), which naturally clamps the output to[lower_bound, 0). Recommended value:-5.
safe_gate: Whether to clamp the gate to[lower_bound, 0)and enable M=16 TensorCore acceleration for higher throughput.
公式、 这个推荐值、16-token tile 上 Tensor Core 的因果关系,三者在库文档里是一句话讲完的。K3 的 config.json 里 linear_attn_config.gate_lower_bound 正好是 -5.0,modeling_kimi_linear.py 把它作为 lower_bound 传给 chunk_kda,并且只在 chunk 路径上开 safe_gate——decode 的 fused_recurrent_kda 没有 chunk,也就不需要这个开关。这种细节对得上,说明报告不是事后补写的。
第二处是输出门从低秩换成全秩:。modeling 代码里两条分支都还在,use_full_rank_gate 为真时走单个 g_proj,为假时走 Kimi Linear 的 g_a_proj / g_b_proj 低秩组合;config 里这个开关是 True。门控本身借的是 Gated Attention 那篇[3]的结论。
Gated MLA 这一侧的改动更值得注意:K3 给所有 MLA 层上了 NoPE,不加任何显式位置编码,位置信息完全由中间那些 KDA 层的门控和衰减隐式提供。config.json 里 mla_use_nope: true。这个选择的直接好处是扩上下文时不用碰位置编码——不需要重调 RoPE base,也不需要 YaRN 插值,模型直接外推到 1M。报告 §3.4 明确把 1M 免改位置编码归因于这一点。(有意思的是 qk_rope_head_dim: 64 这个字段还留在 config 里,NoPE 下应该是不用的残留。)
另外 §2.1.2 末尾藏了一条很实在的低精度经验:为了修 flash attention 里有偏的 rounding error,训练时把 attention 输出保持在 FP32[4];这会让 output tile 的片上占用翻倍,所以他们重新设计了 kernel,让它和 KV staging buffer 而不是 query tile 重叠,腾出的 shared memory 换成更深的 KV pipeline。
1.2 深度方向:Attention Residuals
这是 K3 架构里最新、也是最难核实的一块。标准残差把所有历史信息压进单个状态 沿深度传递,报告把这个瓶颈类比成 RNN 沿时间的瓶颈——既然序列方向上 Transformer 用注意力换掉了递推,深度方向上也可以照做。AttnRes 给每一层配一个可学习的 pseudo-query ,keys 和 values 取 token embedding 与所有前序层的输出,用 softmax 核 算权重:
keys 上那个 RMSNorm 是为了防止输出量级大的层主导权重。深度 , 的算力可以接受,真正的代价是 的显存——所有层输出都得活着,在 pipeline 并行下还要跨 stage 传。
Block AttnRes 是省这笔钱的办法:把 层切成 个 block,block 内的层输出直接求和成一个表示 ,跨 block 才做完整注意力,显存和通信从 降到 。K3 切成 12 层一个 block(config.json 里 attn_res_block_size: 12),算上 embedding 一共 9 个源。
这里有个术语坑值得提醒:报告里 “block” 用了两个意思。注意力模式的 block 是 3 KDA + 1 MLA 共 4 层,AttnRes 的 block 是 12 层。后者刚好是前者的三倍,但它们是两套独立的切分。
这一节也是我认为报告最薄的一环。 AttnRes 的引用 [58] 是「Kimi Team. Attention Residuals. Preprint. 2026.」——没有 arXiv 编号,没有 URL,拿不到。而 §2.2 里那句关键的经验结论「 在各个模型规模上都能拿回大部分收益」正是引这篇拿不到的预印本。K3 把 2.5× 的 scaling 效率提升归给「架构 + 数据 + 训练配方」的合力,全篇没有逐组件消融,所以 AttnRes 到底贡献了多少、它在什么规模上开始生效,读者无从判断。想把这个模块单独移植到别的架构上的人,手里没有可用的证据。
1.3 宽度方向:Stable LatentMoE
常规 MoE 里每个被选中的专家都要吃完整的 维表示,通信量和专家权重流量随路由重数线性增长。LatentMoE[5] 的做法是把模型全宽和路由专家宽度解耦:shared expert 保留全宽通路处理共性变换,routed expert 在一个宽度为 的紧凑隐空间里工作。K3 借此把路由专家池推到 896 个、每 token 激活 16 个,稀疏度 56。
modeling_kimi_linear.py 里这条通路是 routed_expert_down_proj(7168 → 3584)、专家计算、routed_expert_norm、routed_expert_up_proj(3584 → 7168),和公式逐项对应;routed_expert_hidden_size 在 config 里是 3584,正是 Table 1 的「Latent MoE Dimension 3584 (0.5×)」。两个 shared expert 在实现上被融成一个 intermediate 加倍(3072 × 2 = 6144)的宽 MLP。
极端稀疏放大了两个失效模式,对应三个补丁。
RMSNorm 前置。原始 LatentMoE 直接把 作用在聚合结果 上,而 的量级随选中的专家和路由权重变化。K3 在聚合和上投影之间插 RMSNorm,降低 routed 分支对量级波动的敏感度。报告说这一项除了稳训练,还稳定地改善验证 loss 和下游指标。
SiTU-GLU。SwiGLU 的两个乘性因子都无界,同时出现大坐标就会产生激活离群点,在低精度下溢出风险高;原始 GLU 的 sigmoid 门不会无界增长,但丢掉了 Swish 在正半轴近似线性的响应。SiTU-GLU 用 分别给门分支和上投影分支加平滑上限:
(门分支)、(上分支),于是输出被硬性夹在 。原点附近 ,一阶上与 SwiGLU 一致, 时逐点回到 SwiGLU。附录 B 补了一句我觉得关键的话:相比硬 clamp,平滑上限在饱和边界外保留非零梯度,训练行为更好。

config 里 hidden_act: "situ"、activation_situ_beta: 4.0、activation_situ_linear_beta: 25.0,代码里 SituAndMul.forward 就是 beta*tanh(gate/beta)*sigmoid(gate) * linear_beta*tanh(up/linear_beta),还额外在 fp32 里算完再 cast 回去——这一步论文没写。
Quantile Balancing。K3 走的是 auxiliary-loss-free 路由,靠给 router score 加专家偏置 来调度:,而 里不含 ,所以偏置只影响分发、不改变混合权重和 router 的梯度优化。原方法用固定步长 更新, 在「适应慢」和「负载震荡」之间权衡。专家池到 896 之后这个比例控制器不够用了。
QB 的想法是直接解出偏置该在哪:把 Top- 换成 Top-,第 项就是该 token 的准入阈值 ;要让专家 恰好拿到目标负载 ,偏置就应该取 margin 的分位数:

真实训练里 margin 有数百万个、分散在各 rank 和梯度累积步上,精确分位数取不到。附录 D 的解法是每个专家维护一个直方图:前向时各 rank scatter-add 本地计数,步末一次 all-reduce 把计数加总,从池化后的计数里插值恢复分位数。因为计数是可加的,直方图对 token 如何分片完全不变,估的是全局 batch 的分位数而不是各 rank 分位数的平均。 个 bin 时误差不超过几个 ,通信量只有每层每步 个整数。
这里有个对本站读者特别有意思的出处:QB 的引用 [6] 是苏剑林 2026 年 2 月的博客《MoE 环游记:6、混合专家的负载均衡最优分配视角》。一篇中文博客里的推导,半年后成了一个 2.8T 前沿模型的路由组件;而苏剑林本人就在 K3 的贡献者名单里。本站数学系列一直在做的事情,某种程度上就是把这条线索接上。
1.4 原生视觉:MoonViT-V2 从头训
K3 是原生多模态:文本、图像、视频在同一个 context 里被同一个 backbone 处理,没有事后的模态对齐阶段。视觉塔 MoonViT-V2 是 27 层、约 0.4B 参数的 ViT,用 RMSNorm、去掉所有线性层和注意力投影的 bias,图像和视频完全共享参数,注意力分解成帧内空间和帧间时间两趟,时间维再做池化,投影前用 2×2 的 pixel-shuffle 把视觉 token 数降到四分之一。config 的 vision_config 里这些都能对上:vt_num_hidden_layers: 27、vt_num_attention_heads: 12、patch_size: 14、merge_kernel_size: [2,2]、norm_type: "rmsnorm"、attn_bias: false、linear_bias: false。
真正的转向是:MoonViT-V2 完全从头用 next-token prediction 训,不再从 SigLIP 之类对比预训练模型初始化——包括 Kimi K2.5 在内的此前做法都是后者。理由报告给了两条。一条是训练稳定性:把预训练编码器接到 LLM 上做联合优化时,SigLIP 初始化的 MoonViT-3D 梯度范数持续更高、尖峰频繁,而从头训的 MoonViT-V2 全程平稳。

另一条是目标函数对齐:用 next-token prediction 训,编码器的表示直接被语言建模目标塑形,而不是被一个偏好全局语义、牺牲细粒度文字和结构线索的对比损失塑形。结论是 MoonViT-V2 在各项视觉评测上追平了 SigLIP 初始化的 baseline,说明在这个规模上对比预训练作为多模态语言模型的初始化并不必要。
1.5 参数账:我自己复算了一遍
Table 1 给了 K2 与 K3 的逐项对照。

为了确认这些数字自洽,我按 config 的维度把参数量算了一遍。路由专家每个是三个 的矩阵,约 33.0M 参数;896 个专家是 29.6B/层;first_k_dense_replace: 1 说明第 0 层是 dense、其余 92 层是 MoE,于是路由专家总量约 2.72T,占 2.78T 的 98%。激活侧,16 个专家 × 92 层约 48.6B,只占 104.2B 的不到一半——余下的加起来(KDA 层约 30.6B、shared expert 约 12.2B、MLA 层约 5.6B、latent 投影约 4.7B、embedding 与 lm_head 约 2.35B、dense 层约 0.73B)落在 104.8B,与官方的 104.2B 差 0.6%。
这个复算顺手带出一个报告没点明的结构性事实:K3 的总参数几乎全是路由专家,但激活参数里稀疏部分和稠密部分大致对半。换句话说,稀疏度 56 买到的是显存容量上的杠杆,不是激活算力上的杠杆——每 token 的实际计算里,注意力和 shared expert 仍占一半。
顺带一处对不上的地方:正文说 K3 预训练带一个 MTP 层,Table 1 也写 Number of MTP Layers: 1 layer,但放出来的 config 里 num_nextn_predict_layers: 0。MTP 层被 fine-tune 成了 EAGLE-3 风格的 draft model(§4.1.4),大概是没随主权重一起放。这意味着报告里投机解码那部分的加速,拿开源权重按现状复现不出来。
1.6 Per-Head Muon
K3 的矩阵参数继续用 Muon[7],但对注意力投影改成 per-head:不对完整的 Q、K、V 矩阵做 Newton–Schulz 正交化,而是把动量矩阵沿 head 维切开、逐 head 正交化。理由是整矩阵正交化把所有 head 当成一个耦合块,梯度或动量量级大的 head 会主导共享的更新方向,小量级的 head 得到的归一化不充分。附带好处是高瘦的 per-head 块上做 Newton–Schulz 比整个投影矩阵便宜。
二、预训练与那条 2.5× 曲线
数据侧是四个文本域(Web、Code、Math、Knowledge)加大规模视觉语料,视觉部分覆盖 caption、图文交错文档、OCR、感知、视频和 visual coding。两处做法值得记:坐标监督同时用绝对和归一化 两种格式,让定位既精确又对分辨率鲁棒;程序化多模态数据被大幅扩量,把代码片段和它渲染出的视觉结果配对,覆盖 SVG、3D 资产、网页、游戏、CAD 图纸。
架构变了,最优训练区间也跟着变,所以他们重做了 scaling law,重调 batch size、学习率、tokens-per-parameter 和模型形状。这里有一条方法论上很干净的观察:他们发现 cosine decay 稳定优于 WSD,但前提是两个 schedule 各自独立搜过超参——同样的模型规模和 token 预算下,两者的最优峰值学习率和 batch size 差别很大,用一套共享超参去比,赢的那个可能只是因为这套超参更适合它。这条批评对任何做架构 A/B 的团队都成立。

这张图是报告的头号数字,也是我最想打折的一张。 纵轴 Validation Loss 没有刻度值,横轴只有 和 两个标注,评测用的是「held-out OOD validation data」但没说构成。一个 2.5× 的计算效率结论,建立在一条无刻度、验证集未披露的曲线上,而且如前所述没有逐组件消融。全篇也没有任何地方给出预训练的总 token 数——TPP 只作为「被重调的超参之一」出现过一次。对一个以 scaling 效率为核心卖点的报告,这个省略挺显眼。
长上下文这边有一条我认为是全篇最可迁移的数据结论。自然来源的长文档和长视频含大量低质内容,他们做了去重(视频还加帧级感知哈希)、质量过滤和结构校验;真正长而连贯的文档相对短文本很稀缺,所以要上采样。但接下来这句是重点:
Length alone, however, does not confer long-range capability.
所以他们额外合成长上下文数据——精心地排列和拼接多模态文档与子任务,让内嵌的任务只有靠注意散落在整个 1M 上下文里的信息才能解出来,以此在目标尺度上真正训练注意力,防止它退化成局部模式。上下文窗口按四阶段课程推进:预训练期 8K 到 64K,cooldown 期 256K 到 1M,把昂贵的长序列计算压在总预算的一小部分里。
三、后训练:三阶段,以及 effort 作为一等公民
后训练是 SFT 冷启动、RL 训领域专家、多教师 on-policy 蒸馏合并三步。
flowchart TB
SFT["SFT 冷启动
XTML 模板 · MXFP4 QAT 从此开启"]
G["general
推理 / 知识 / 视觉 / faithfulness"]
A["general agents
长程助手 / deep research / 写作"]
C["coding agents
SWE / kernel / webdev"]
MOPD["MOPD 多教师 on-policy 蒸馏
per-token clipped log-ratio 稠密 reward"]
K3["单一 Kimi K3
推理时按 effort 条件化"]
SFT --> G
SFT --> A
SFT --> C
G -->|"low / high / max"| MOPD
A -->|"low / high / max"| MOPD
C -->|"low / high / max"| MOPD
MOPD --> K3三个领域各配三档 reasoning effort,交叉出九个专家模型,最后合并成一个。
3.1 Reasoning Effort RL:把 token 预算变成 reward 项
机制很朴素,正因为朴素才好搬。每个问题 关联一个由冷启动模型估出的初始 token 预算 ;凡是总预算 超过阈值 的轨迹,任务 reward 直接覆写成 。一般任务里 数的是 thinking token,agentic 任务里数的是累计输出 token(含 reasoning trace 和 tool-call 参数)。训练按 做 stage-wise 课程:先用较大的 训 max-budget 变体(同时仍设上限压制过度思考),再把 退火到更小的值得到 high 和 low 档,每个领域的 调整由人在环里定。
同样的预算思路被复用到 reward model 上防 verbosity hacking:非可验证任务用 agentic 生成式 reward model(GRM)做锦标赛式二元比较,评判者必须遵守「读产出 → 生成 rubric → 逐候选打分 → 记入 scorepad」的强制协议;给定冷启动模型估出的初始长度 和乘子 ,输出超过 的候选自动判负。
3.2 RL 算法:partial rollout 与对 staleness 的容忍
长程任务里 rollout 的长尾延迟很致命。K3 的做法是每轮对 个 prompt 各采 条,维持 条活跃轨迹,但不等全部结束:只要有 比例的轨迹完成就暂停生成,让策略优化先走;暂停的轨迹入队,下一轮优先恢复,靠 sandbox 基建保住状态。
flowchart LR
P["N prompts × K completions"] --> R["Rollout"]
R -->|"λ·NK 条完成即暂停"| O["策略优化"]
R -->|"未完成轨迹入队
sandbox 状态 checkpoint"| Q["下一轮优先恢复"]
Q --> R
O --> R代价是单条长程轨迹会横跨多轮,引入数据 staleness。报告说他们的策略优化算法通过 per-token 正则天然容忍这种极端 off-policy 情形——把更新约束在局部邻域内,从而能稳健处理高度 stale 的数据。这里写得比较含糊,具体形式指向 K2.5。
3.3 MOPD:先专家化,再合并
九个专家怎么变回一个模型。给定领域 和采样到的 effort 档 ,用对应的教师 指导,per-token reward 是被裁剪的 log-ratio:
是 stop-gradient, 裁掉极端 advantage。关键工程性质是这是个稠密信号,能无缝接进既有 RL 框架,因此 partial rollout 那类基建优化对它同样适用。报告还说试过更细粒度的 top-k 蒸馏目标,收敛速度和最终性能都没看出优势。
3.4 面向部署的后训练:QAT 全程开着
这一节是我认为整篇报告对量产团队价值最高的地方。MoE 专家权重占了参数显存的绝大部分,K3 把它量化到 MXFP4[8]、激活用 MXFP8,注意力投影、latent MoE 投影、shared expert、router 都留在更高精度。QAT 覆盖整个后训练阶段,SFT 和 RL 都在里面;RL 期间 rollout 和训练共用同一套量化方案,训练与推理的 mismatch 直接消掉。
放出来的权重印证了这件事。config.json 的 quantization_config 是 mxfp4-pack-quantized、num_bits: 4、group_size: 32,而 ignore 列表逐条对应正文说的高精度部分:
| |
draft model 那边也有一条通用的方法论。投机解码的加速由 per-token 接受率 决定,而对容量受限的 draft model,最小化常规的 KL 代理并不保证最大化这个接受率。所以他们直接优化接受率的负对数[9]:
、 都在温度 1 下取,不加辅助的 ground-truth 交叉熵项。EAGLE-3[10] 的 draft 输入融合 target 模型第 1、4 和最后一个 AttnRes block 的低中高层特征,融合矩阵初始化成 ——初始时刻融合表示恰好等于 MTP 层原本预训练时用的高层特征,再逐步学会吸收低中层信息。这个「用恒等初始化让新能力从旧行为平滑长出来」的技巧,比它出现的场合通用得多。
3.5 环境与任务合成才是主体
§4.2 有七个小节,全在讲环境工程,算法只占 §4.1 一节。这个比例本身是个信号。
统一白盒 RL 环境。用固定 harness 训会让模型过拟合某一套 tool schema、system prompt、上下文管理机制或交互协议。他们把 agent harness 抽象成一组可配置、可组合的模块(工具接口、system prompt、上下文管理策略、skills、memories、subagents),靠配置就能实例化 Kimi Code、Claude Code、Codex、OpenClaw、Hermes 这些主流 harness,也能造全新的;训练时对不同任务组动态构造不同配置。
知识图谱引导的任务合成。任务质量和多样性主要由源材料决定。他们让 agent 通过 web 规模探索递归扩展一个层次化知识图谱(有向无环图,从粗粒度种子节点开始,每个节点派一个 agent 去搜、加新节点前先探索已有图以复用节点减少重复,边总是从粗指向细,agent 判定概念足够原子时停止分支),然后按目标分布采样不同粒度的节点、组合祖先上下文构造 web query、把检索回的真实材料交给合成 agent 产出任务。

Kernel 优化任务里的反 hacking 系统。任务从单算子到 fused mega-kernel,覆盖 CUDA、Triton、CuTe DSL、Gluon、ThunderKittens、TileLang 和 BF16/FP8/FP4。reward 同时看正确性和性能:数值误差超阈值给零分,性能对标专家实现,追平给 0.5,逼近硬件 roofline 趋向 1。关键是这句——他们做了一套 hacking 检测系统,惩罚 CUDA graph replay、输入缓存、降精度这些取巧策略,并且随着开发过程中观察到新的 hacking 手法持续扩充它。
Autonomous Execution Tasks(AET)。每个任务给定初始状态、受约束的目标、基于工具的动作空间、执行预算和一个独立 verifier。agent 只看得到目标、上下文、约束和验证接口,没有参考轨迹也没有预定流程,必须自己做任务分解、工具选择、规划、错误恢复和终止判断。reward 锚在 verifier 对最终环境状态的评估上,而不是 agent 自报的完成度。 防 hacking 靠三招:让 agent 与 verifier 隔离;把提供诊断反馈的 public verifier 与评估留出场景的 hidden verifier 配对;在有限提交预算下用惩罚型 reward。

Personal assistant 任务是我没想到的一块:他们做了 Gmail、Notion、Slack、Canvas 的高保真 mock 实现,保留核心语义但不依赖外部 API 和限流,在上面设计跨多个模拟日、几十个跨应用互相依赖事件的复杂任务。单次 rollout 可能涉及数千次工具调用和数百万 context token,每个事件有自己的评判标准。初始工作区由 agent 自主搜网、把材料转成连贯环境构造出来,RL 框架也扩展到支持这种「活的环境」和它诱导的世界状态转移。
RL FLOPs 一路加上去,能力和工具调用步数是同步涨的。

「长程能力随 RL 算力涌现」这个结论我觉得可信度不错(八个子图趋势一致),但这张图同样没有任何数值刻度,纵横轴都只有标签。当定性趋势看没问题,当定量证据用不行。
四、基建:几个可以单独拿走的点子
基建部分(§5)有 20 多页,这里只挑三个我认为跨领域可迁移的。
KDA Context Parallelism。softmax 注意力做 CP 要交换随序列长度增长的 KV 块,线性注意力只需传固定大小的递推状态。但朴素线性注意力可以「各 rank 从 算本地状态再求和」,KDA 不行——delta rule 会把 token 相关的矩阵 作用在入状态上再叠加写入,本地段的效应依赖进入该段的状态。KCP 的解法是把每段的效应拆成两个本地可算的量:作用在入状态上的累积转移 ,和从零起算的本地状态 。这两个量在 时都只用本地 token 就能算出,rank 级更新满足结合律,于是入状态可以用一次前缀扫描恢复,通信只需一次固定大小的 all-gather。这条实现在 FLA 的 PR #691([CP] Add cp for gdn and kda,2026-01 已合并),PR 描述里报的数据是 32K / CP=4 下比 all-to-all CP 方案更快,且 CP 切分数不受 head 数限制。
MoonEP 的完美负载均衡。常规 EP 里 token 负载在 rank 间不均,既拖吞吐,又因为 routed-expert 激活形状动态变化造成显存碎片。MoonEP 要求每个 rank 收到恰好 个 token,靠动态冗余专家做到;核心理论问题是「要多少冗余专家才保证这种均衡一定存在」,附录 E 证明每 rank 至多 个冗余专家就够,且这个界本质上是紧的(构造出需要 的路由输出)。于是预留 个槽位就保证规划总有可行解,训练永不中断——对比之下 ECHO、UltraEP 那类预设冗余数或设 per-rank token 上限的方案,一旦上限内无可行解就得停训。
完美均衡还顺带买到两件事:通信 buffer 从最坏情况的 降到固定的 ;以及每层的计算形状变成静态已知,per-layer 的 host-device 同步整个消掉。开源的 MoonEP 仓库 README 补了论文没细说的对比:在 H20、EP=8 上扫路由不均衡度 maxvio,DeepEP v2 的迭代时间随不均衡稳步上升、且动态激活形状造成显存碎片以致高不均衡时 OOM,MoonEP 则全程平坦、静态形状不碎片、不 OOM。
AgentENV 的 fork。为 agentic RL 做的 microVM sandbox(Firecracker),支持增量 checkpoint(只保存上次以来脏掉的内存页)。三个高层操作里,pause/resume 的动机很直白——sandbox 在等模型推理结果的时间可以占到其生命周期的 98%,暂停后不耗内存和 CPU。但真正有想象力的是 fork:从原 sandbox 的精确状态创建一个新的,同时保持原状态继续运行,报告的用途是「做 reward 评判而无副作用」。整个 K3 训练和评测期间一共创建了 51,219,741 个 sandbox、跨 1,505,678 个镜像。
仓库确实存在(kvcache-ai/AgentENV,README 明说「powering agentic RL training for Kimi K3」),但延迟数字和论文有出入:论文说 checkpoint / resume 低至 133 ms / 49 ms,README 说 boot 或 resume 在 50 ms 内、pause 在 100 ms 内、快照在 100 ms 内完成。resume 那个数对得上,checkpoint 那个是不同的度量口径。6.5× 的内存超分只在论文里有,README 只笼统说「high overcommit」。
另外两张值得一看但偏工程细节的图


XTML 那张图里有个部署上的巧思:把 request 选项翻译成上下文里的 option message,按作用域决定位置。全局选项(工具声明、reasoning effort)放在所有输入消息之前,因为它们统管整个会话、很少变,改了本来就会失效 KV cache;one-shot 选项(tool_choice、response_format)追加在输入消息之后,这样 per-request 的变化不会动到历史 KV cache。会话中途动态加载的工具,则通过插在输入消息之间的 input option message 宣告,模型的可用工具集扩张而不必重建前面的上下文。
五、评测与成本

整体位置是:总体落后最强的两个闭源系统(Claude Fable 5 和 GPT-5.6 Sol),但在评测集上稳定领先 Claude Opus 4.8、GPT-5.5 和 GLM-5.2。分项看,GPQA Diamond 93.5% 已经贴着前沿,但研究级任务上差距明显——HLE-Full 无工具 43.5% / 有工具 56.0%,CritPt 23.4% 落后三个对手。coding 侧 ProgramBench 77.8% 拿到最好,SWE-Marathon 42.0% 领先 Claude Fable 5 七个点,FrontierSWE 81.2% 第二。agentic 侧 BrowseComp 91.2%、DeepSearchQA 95.0 F1、MCPMark-Verified 94.5%、Harvey Lab-AA 94.6% 都是 SOTA,但两个 Elo 制的知识工作套件(GDPval-AA v2、AA-Briefcase)都由 Claude Fable 5 领跑。
内部评测把强弱分得比公开榜更清楚:Swarm Bench(76.3)和 Deep Research Bench(90.0)明显领先,说明分解复杂目标、协调并行工作、产出满足 rubric 的交付物这条线很强;Kimi Webdev Bench 上盲审专家相对 Opus 4.8 的净胜率 +31.0%,3D/WebGL/Shader 类高达 +59.1%。弱项集中在 Agent Behavior Bench、MIRA Bench、24/7 ClawBench 2.0、Agentic Vision Bench 和 KWV Bench。

第三方结果里最硬的一条是 WebDev Arena 1,678 Elo 排第一(99 个模型),首个登顶该榜的开源模型。Artificial Analysis Intelligence Index v4.1 是 57.1,580 个模型里第四。
成本效率是这份报告最没有争议的部分。

Kimi Code Bench 2.0 上落后 Claude Fable 5 四个点,成本是它的 38%,而 high effort 档已经追平 Opus 4.8 的 max effort 分数、成本约三分之一。BrowseComp 上以每任务 $2.03 拿到最高分,是 GPT-5.6 Sol 的一半、Claude 系 max effort 的十分之一量级。
case study 部分是最抓人也最需要打折的。GPU kernel 优化上,四个 kernel(AttnRes、DSA、KDA、MLA)里 AttnRes 延迟从 283.6 ms 降到 114.4 ms,DSA 和 KDA 分别减 55.1% 和 73.6%。

更极端的两个:K3 写了 MiniTriton(一个带 tile-level Python 前端、warp-level MLIR 优化层和 PTX codegen 的 Triton 式编译器),以及在一次 48 小时自主运行里用开源 EDA 工具设计并验证了一颗 nano 模型的推理芯片原型(4 mm² 面积预算内 100 MHz 收敛时序,RTL 仿真 decode 吞吐超 8,700 tokens/s,1.46M 标准单元)。
两个仓库都真实存在,但它们自己的 README 比论文谨慎得多。minitriton 写的是「designed, implemented, measured and written by Moonshot AI’s K3 model, with engineering direction and review by the maintainer」,还标了「teaching-grade」「not for production use」和一节 Limitations;论文正文只说「Kimi K3 developed MiniTriton」,人在环里的工程指导和 review 这层没提。nano-kpu 的 README 首句是「designed and implemented fully by Kimi-K3」,但紧跟一句「This is a demonstration of Kimi K3, not an official project by Moonshot AI」,且那颗芯片跑的是 top-2 路由加一个 shared expert 的 nano 模型,不是 K3 本身(论文这点写清楚了)。
六、我不太买账的几处
前面已经点出的:AttnRes 引的是拿不到的预印本,而它是最大的架构新意;Figure 7 和 Figure 8 都没有数值刻度;全篇没有预训练 token 数;全篇只有两处 “ablation”(视觉塔梯度范数、小模型上的数据配比),没有任何架构组件的逐项消融;MTP 层没随权重放出。补几条别的。
baseline 的可比性打了折,而且是他们自己标出来的。 Claude Fable 5 的结果「with potential fallbacks」——SWE-Marathon 上 35% 的任务命中了 fallback;GPT-5.6 Sol 的结果「include potential cyberguards」;SWE-Marathon 用的是按 H20 重新校准的分支而非官方 v1.1;PostTrainBench 在 H20 而非官方的 H100 上跑。这些披露很诚实,但意味着表 2 的头对头数字不是严格同条件。
头条数字挑了对自己有利的配置。 BrowseComp 的 91.2% 用的是 300K 触发的上下文压缩策略;用完整 1M 上下文、不做上下文管理时是 90.4%。差距不大且如实写在 §6.1.3 里,但摘要和 Figure 1 用的是前者。
cyber 评测的对照只剩一个。 因为 Anthropic 和 OpenAI 的前沿模型拒答 cyber 类任务,他们把这些模型排除,Tier 2 只对 GLM-5.2。所以「meaningful exploit-development capability」(36 题解 14 对 GLM-5.2 的 8)是相对单一 baseline 的结论。这部分他们的自我评价倒是克制——UK AISI 与 NIST CAISI 的联合评估里,K3 在 41 个任务上实现任意代码执行的次数是 0。
七、对 VLA 和端到端驾驶的启发
下面这部分是我读这份报告的真正目的。我按「能直接用 / 需要改造 / 用不上」分层写,尽量给出可操作的形式。
7.1 固定大小状态:车端流式推理的结构性匹配,但有一个门槛
驾驶是无穷流,KV cache 不是。当前主流做法是滑动窗口——保留最近 N 帧的历史,N 由显存和延迟预算倒推出来。KDA 提供的是另一种东西:一个固定大小的递推状态,显存占用与已处理帧数无关。3:1 混合的意思是不必二选一,留几层全局注意力做内容寻址式的回看,让线性层承担 recency。NoPE 又额外解决一个实际痛点——把时序窗口从 4 帧扩到 40 帧时,不需要重调位置编码。
但这里有个门槛,报告没算,我按 K3 真实配置算了一下。MLA 每 token 每层缓存 kv_lora_rank = 512 个值,BF16 下是 1 KiB;K3 只有 24 层 MLA,所以 24 KiB/token。KDA 状态是每 head 一个 矩阵, 个元素、BF16 下每层 3 MiB,69 层共 207 MiB,恒定。
这张图上有两个门槛。约 8,800 token 处,69 层 KDA 的递推状态和 24 层 MLA 的 KV cache 正好相等——低于它,递推状态才是显存里的大头,这解释了黄线前半段为什么是平的。更有决策意义的是另一个:约 3,072 token 处,K3 这套混合的总占用与假设的 93 层全 MLA 相等,低于这个长度混合架构反而更耗显存(1,000 token 时是 230 MiB 对 91 MiB)。越过之后差距迅速拉开,1M token 时 K3 约 24.2 GiB,全 MLA 需要 92.9 GiB,省下 74%——正好复现 Kimi Linear 报的「KV cache 最多减 75%」。
对 VLA 的结论因此是有条件的:几千个 token 是分界线。如果你的时序窗口只有 4 到 8 帧,换线性注意力是净亏,而且亏在最宝贵的车端显存上。这套架构的收益要求你先承诺长时序——只有当你真的想让模型记住 30 秒甚至几分钟前的东西,固定状态才开始赚钱。换句话说,这是一个和「要不要做长时程记忆」绑死的架构决策,「顺手换个注意力模块」的思路在这里不成立。本站之前写过的时序记忆机制和 HiF-VLA 用 codec motion vector 当时间记忆,都是在滑动窗口这一侧做优化;K3 展示的是另一侧的完整代价与收益。
另外 §5.4.1 那套 KDA prefix cache 有个直接的工程用途。
![细粒度 prefix caching:6144 token 的物理块含 12 个 512 token 的 hash 块,KDA 在稀疏的 hash 边界存 checkpoint,命中后从 B 恢复、不重算 0,B)
把「递推状态在稀疏边界上存 checkpoint、命中后从该边界恢复」换到驾驶语境,就是在帧边界上 checkpoint 状态,于是回归测试可以从一段 30 秒 clip 的第 20 秒直接续跑,不必从头重放。做 clip 级回归和 case 复现的人会知道这省多少时间。
7.2 量化是训练期决策,不是部署期决策
这是我认为整份报告对量产团队最有价值的一条。
车端一定是量化部署的。常见流程是 FP 训练、PTQ、量完发现掉点、再回去救。K3 的做法把顺序反过来:MXFP4 QAT 从 SFT 一直开到 RL 结束,而且 RL 期间 rollout 用的就是量化后的策略。
这条对做 RL post-training 的人是有具体后果的。如果最终要在车端跑 INT8,而你的 GRPO rollout 跑在 FP16 策略上,那么你采样的轨迹、算出的 advantage、优化的策略,都属于一个不会被部署的模型。量化引入的扰动在 RL 里不是「掉点」这么简单——它改变行为分布,而行为分布是你 reward 的输入。把量化放进 rollout 回路,等于把这部分扰动变成策略需要适应的环境属性,而不是事后的一次性冲击。
K3 放出的 ignore 列表也值得照着抄一遍思路:留在高精度的是注意力投影、shared expert、router、lm_head、视觉塔和 projector。这几类的共性是参数量小但敏感度高,或者处在感知通路上。映射到 VLA:量化 LLM 的 FFN 主体,把动作头 / 轨迹解码器 / 视觉塔留在更高精度。
再往前一步,SiTU-GLU 是一个专门为低精度做的架构选择。它把激活硬性夹在 以内,而激活离群点正是毁掉 INT8 scale 的元凶。这是个几乎零成本的改动(换个激活函数),有明确的理论动机(两个乘性因子都有界),还有平滑上限保留梯度这一条实证补充。已经在跟激活离群点搏斗的团队,这条比大部分量化后处理技巧都直接。
7.3 Reasoning effort 作为训练目标:驾驶的自适应算力
VLA 的硬约束是帧时间。今天的选择大致是短 CoT(快但笨)或长 CoT(聪明但错过控制截止时间)。K3 给了第三条路:把「在给定 token 预算下做好」当成显式训练目标,训出多个档位,再合并成一个可在推理时选档的模型。
机制简单到可以直接接在现有 GRPO 管线上:用冷启动模型对每个场景估一个初始预算 ,超过 的轨迹 reward 覆写为 , 从大到小退火,每档存一个 checkpoint。驾驶语境下的映射也自然——高速巡航走 low effort,无保护左转、施工绕行、加塞博弈走 high effort,档位由场景难度打分器选。
MOPD 那一半单独有价值。领域专家共训会互相干扰,这在驾驶上表现为城区 / 高速 / 泊车三套需求彼此拉扯,而分开训又没法部署 N 个模型。MOPD 给的是「先专家化、再用 on-policy 蒸馏合并」的具体配方,reward 是 per-token 的裁剪 log-ratio。这个 reward 是稠密的,这一点在驾驶 RL 里格外重要——碰撞 / 不碰撞是极稀疏的终局信号,而教师策略的逐 token log-ratio 给出的是密集的方向指引。本站之前那篇端到端驾驶的 RL 策略优化里讨论的稀疏 reward 困境,MOPD 算是一条新的绕法。
需要打折的地方:MOPD 要求你能同时持有并推理 9 个教师。对一个中等规模的规划器可行,对一个大 VLA 就要重新算账,可能得砍档位数或砍领域数。
7.4 环境和 verifier 才是主体
K3 后训练七个小节讲环境、一个小节讲算法。这个配比对做驾驶 RL 的人应该很熟悉——真正的工作量在闭环环境和评价函数,不在 PPO 变体。有四条具体做法我认为能直接搬。
public / hidden verifier 分离。 AET 的 reward 锚在独立 verifier 对最终环境状态的评估上,不看 agent 自报;提供诊断反馈的 public verifier 与评估留出场景的 hidden verifier 配对,且 agent 与 verifier 隔离。对已经有半闭环 GT-free 指标的团队,这一条的含义很明确:你用来训练的那套指标和你用来判断是否变好的那套指标必须分开,否则策略会去优化指标而不是驾驶。把场景池切成 public 和 hidden 两半,只让前者进 reward,是几乎零成本的改动。
反 hacking 当成一个会长大的组件。 kernel 任务里他们列名惩罚 CUDA graph replay、输入缓存、降精度,并且明说随开发过程持续扩充。驾驶里的同类行为是可枚举的:一律低速通过、贴车道中心线刷舒适度、遇到不确定就刹停、利用仿真物理的不真实之处、在评测场景里记住答案。这条的启发是组织层面的——给 hack 检测器排一个长期维护的位置,而不是每次发现新 hack 就当成一次性 bug 修掉。
harness 多样化的理由是实证的。 他们观察到用固定 harness 训会过拟合它的 tool schema、prompt 和上下文管理方式,所以把 harness 抽象成可组合模块、训练时动态换配置。驾驶版本就是不要只对着一套仿真配置做 RL:随机化传感器外参、延迟剖面、执行机构响应、控制器版本、车辆参数。这本质是 domain randomization,但 K3 提供的是「不这么做会具体坏在哪里」的经验证据,而不是又一次泛泛的正则化论证。
fork 用来做反事实。 partial rollout 解决的是长尾——一条撞车轨迹 2 秒结束、一条正常行驶跑 30 秒,同步 RL 被最慢的拖住,这个痛点驾驶闭环 RL 完全一样, 比例完成即暂停加可恢复状态是现成的解法。但 AgentENV 的 fork 更有意思:从完全相同的状态分叉出多条轨迹。驾驶里这正是 advantage 估计最想要的东西——同一时刻、同一场景状态,一支刹车一支不刹车,两条轨迹的差就是这个动作的价值,不掺任何初始条件差异。要求仿真器支持精确状态 fork 而不只是 reset-to-seed,这是个明确的基建需求,我认为是这份报告里对驾驶 RL 最被低估的一条。
7.5 长上下文能力不是喂长数据喂出来的
「Length alone does not confer long-range capability」这句配上他们的解法(合成只有跨全上下文取证才能解的任务),是一条直接打在数据工程上的结论。
大规模驾驶 clip 库的分布是重尾的:绝大多数片段是平淡的高速跟车,长时序依赖在里面根本不存在。把 clip 从 5 秒延到 60 秒,模型学到的很可能只是更长的局部模式。要真的训出时序推理,需要构造那种正确动作依赖于几十秒前观测的片段——被遮挡后重新出现的行人、早已驶过的施工封路标志、交警手势、几个路口前就该开始的变道决策。这类片段在自然数据里稀少,得靠挑选加拼接来放大,判据是「遮住早期那段,任务就解不出来」。这和 K3 对长文档的处理是同一个思路。
7.6 从头训视觉塔:一条可低成本验证的假设
K3 放弃 SigLIP 初始化、从头用 NTP 训视觉塔,给了两条理由和一个结论(追平 baseline)。这条不能照搬——K3 是 2.8T 参数配巨量多模态语料,「at scale」这四个字在那个结论里承担了很多重量;而且 DINOv2 是自蒸馏而非图文对比,「对比损失偏好全局语义」这个论证对它并不直接成立。
但稳定性那半是可以低成本验证的。如果你解冻视觉塔做联合优化,看到的是持续偏高的梯度范数和频繁尖峰,那就是 Figure 6 里同一个失效模式,说明预训练编码器与语言建模目标之间的不匹配是真实的,而不是学习率没调好。这是个明确的诊断信号,跑一次实验就能看出来。
顺带两个便宜的改动:MoonViT-V2 用 RMSNorm 并去掉所有线性层和注意力投影的 bias,报告说这进一步稳定了从头训的优化。要试从头训或者要试解冻,这两条几乎不花钱。
7.7 明确用不上的部分
把这些列清楚,比假装一切都能迁移有用。
| K3 的做法 | 为什么落不到车端 |
|---|---|
| 2.8T 总参数 MoE | 稀疏度买的是数据中心里显存带宽受限时的服务收益。Orin / Thor 上受限的是参数显存总量,MoE 的总大小本身就是问题,激活量小救不了 |
| 51M sandbox、单次 RL 实验数百 GPU | 不是量产团队的预算量级;AET 那套 verify-in-the-loop 的思想可以借,规模不能借 |
| agentic 多轮工具调用 | 对应的是离线数据生成和评测流程,不是 10 Hz 控制回路。把它当数据引擎看,不要当推理范式看 |
| 1M 上下文 | 驾驶需要的是长时序而非长文本;真正对应的是几分钟的视觉记忆,token 预算完全不同 |
| MOPD 九教师 | 教师数量直接乘在训练成本上,大 VLA 上需要重新算账 |
References
| # | 引用 | 链接 |
|---|---|---|
| 1 | Kimi Team (2026). Kimi K3: Open Frontier Intelligence — Technical Report of Kimi K3. | Weights |
| 2 | Kimi Team (2025). Kimi Linear: An Expressive, Efficient Attention Architecture. | arXiv:2510.26692 |
| 3 | Qiu, Z. et al. (2025). Gated Attention for Large Language Models: Non-linearity, Sparsity, and Attention-Sink-Free. | arXiv:2505.06708 |
| 4 | Qiu, H., Yao, Q. (2026). Why Low-Precision Transformer Training Fails: An Analysis on Flash Attention. ICLR 2026. | arXiv:2510.04212 |
| 5 | Elango, V., Bhatia, N., Waleffe, R., Shafipour, R., Asida, T. (2026). LatentMoE: Toward Optimal Accuracy per FLOP and Parameter in Mixture of Experts. | arXiv:2601.18089 |
| 6 | 苏剑林 (2026). MoE 环游记:6、混合专家的负载均衡最优分配视角. | 科学空间 |
| 7 | Jordan, K. et al. (2024). Muon: An Optimizer for Hidden Layers in Neural Networks. | Blog |
| 8 | Rouhani, B. D. et al. (2023). Microscaling Data Formats for Deep Learning. | arXiv:2310.10537 |
| 9 | Samarin, A. et al. (2026). LK Losses: Direct Acceptance Rate Optimization for Speculative Decoding. | arXiv:2602.23881 |
| 10 | Li, Y. et al. (2025). EAGLE-3: Scaling up Inference Acceleration of LLMs via Training-Time Test. | arXiv:2503.01840 |
| 11 | Yang, S., Kautz, J., Hatamizadeh, A. (2025). Gated Delta Networks: Improving Mamba2 with Delta Rule. ICLR 2025. | OpenReview |
| 12 | Yang, S., Zhang, Y. FLA: A Triton-Based Library for Hardware-Efficient Implementations of Linear Attention. | GitHub · PR #691 (KDA CP) |
| 13 | Moonshot AI. MoonEP: A Perfectly Balanced Expert Parallelism Library via Dynamic Redundant Experts. | GitHub |
| 14 | kvcache-ai. AgentENV: Running agent environments at scale. | GitHub |
| 15 | Moonshot AI. MiniTriton / nano-kpu — K3 case-study artifacts. | minitriton · nano-kpu |
| 16 | Dao AI Lab (2026). ReplaySSM: Cache SSM Inputs, Not State. | Blog |
| 17 | UK AI Security Institute, NIST CAISI (2026). Preliminary Assessment of Kimi K3’s Cyber Capabilities. | AISI |
同主题强相关阅读
- Multi-Head Latent Attention — K3 里 Gated MLA 的底座;对照看 K3 加的 NoPE 和全秩输出门改了什么。
- Qwen3.5 vs Qwen3 架构对照 — 混合注意力与高稀疏 MoE 的另一条演化路线,和 K3 的 3:1 KDA–MLA、稀疏度 56 正好可以横向比。
- 训练大模型的工程学:从 Chinchilla 到 2026 — scaling law 方法论与 post-training 演化全景;K3 那条「两个 schedule 必须各自独立搜超参」的批评是这条线的补丁。
- 端到端驾驶的 RL 策略优化 — §7.3、§7.4 的落点;MOPD 的稠密 per-token reward 与 fork 反事实是两条新绕法。
- VLM 时序记忆机制 — 滑动窗口一侧的优化;对照 §7.1 里固定状态的完整代价与收益曲线。
- 量产 VLA 的工程权衡 — §7.2 的量化结论和 §7.7 的「用不上」清单直接接在这篇的约束条件上。