KDA 到底省了什么:我把 Kimi K3 官方报告和 SemiAnalysis 那篇对着读了两天
对照 Kimi K3 官方技术报告与 SemiAnalysis 分析,拆解 KDA、Stable LatentMoE、训练推理基建、成本测算及部署取舍。

上周想给一个长上下文的 Agent 服务选底座模型,绕不开 Kimi K3。
于是我把两份材料摊开对着读:一份是 Moonshot AI 7 月 27 日挂上 arXiv 的官方技术报告1,一份是 SemiAnalysis 8 月 3 日发的分析文章《Kimi K3, The Manos, The Mythos, The Legendos》2。
读完两天,我的一分钟结论是这样的:
K3 是目前首批公开权重的 3T 级 MoE 模型之一。它最值得看的,不只是参数规模,而是把 KDA(Kimi Delta Attention)、LatentMoE、MuonClip、量化训练和大规模 Agentic RL 放进了同一套训练与推理系统——93 层里 69 层是 KDA,另外 24 层是全局 attention。
KDA 的技术脉络可以追溯到 Kimi Linear,但不能因此说整套 K3 架构都是从 Kimi Linear「严格推导」出来的。K3 还混合了 MLA、MoE、MTP/EAGLE-3 等组件,工程实现也不是一篇 Kimi Linear 论文可以概括的东西。
我的判断是:两份材料的主线结论能够对应,真正的分歧只有一处,其余都是口径差异。
- 真分歧:MLA 该不该留。官方给的理由是 NoPE + KDA 隐式位置让 1M 外推免手术;SemiAnalysis 认为吸收技巧不适配 prefill 主导的 Agentic 负载,并据此推测 K4 会换掉 MLA。
- 口径差异(常被误读成分歧):前缀缓存的”512”与”32K”,一个是哈希匹配粒度、一个是状态快照保留间隔,两边的最终结论其实一致——KDA 在真实服务里不消耗恒定 KV 内存。
- 纯计算瑕疵:SemiAnalysis 那篇的长上下文容量倍数(把”新增/基础”写成了”总/基础”)和 B300 小时单价(正文 $2.60、图表 $3.00)。这两处我按计算器重算了,见 3.5。
下面按「官方说了什么 → 第三方算了什么 → 对照 → 你现在能不能用」的顺序拆做拆解。
1. 先把两份材料的身份交代清楚
时间线先摆出来。前三行是技术脉络的铺垫,真正密集的是最后三行——从官方博客到 SemiAnalysis下场,前后只有 18 天:
| 时间 | 事件 |
|---|---|
| 2025 年 7 月 | Kimi K2 技术报告(arXiv:2507.20534),1.04T MoE,MLA 注意力 |
| 2025 年 10 月 | Kimi Linear 论文(arXiv:2510.26692),KDA 首次亮相,概念验证模型 |
| 2026 年 2 月 | Kimi K2.5(arXiv:2602.02276),Agent Swarm 并行协作 |
| 2026 年 7 月 16 日 | Kimi K3 官方博客发布 |
| 2026 年 7 月 27 日 | K3 技术报告上 arXiv(arXiv:2607.24653v1),权重上 Hugging Face(moonshotai/Kimi-K3) |
| 2026 年 8 月 3 日 | SemiAnalysis 分析文章发布 |
两份材料的分工得先说清,不然后面对照会错位。
官方报告是「设计说明书」。它讲的是 Moonshot 自家训练栈和自家推理栈里发生了什么,正文 8 章,架构、预训练、后训练、基建、评测各占一块。
SemiAnalysis 那篇是「外部复算 + 实测」。它做两件事:一是把 KDA 从线性注意力的数学谱系一路推导出来,顺手核算 FlashKDA 内核的算术强度;二是拿自己的 InferenceX 平台,用录制的真实 Agent 流量回放,测量吞吐与缓存行为,再估算 K3 在 B200/B300 上的输入侧基础设施成本。
它不是转述官方叙事,是带着自己的测量工具进场。这是我认真读它的原因。
2. 官方报告拆解:先自己算,再听它讲
我的读法是:先把能验算的数验一遍,能对上再往下读机制。 这个习惯救过我好几次。
2.1. 三个可以立刻验算的数
拿计算器,跟我一起对三个数。
第一,层数。 报告 Table 1 写 93 层,注意力构成是 69 KDA + 24 MLA。3 KDA + 1 MLA 一个 block,主干末尾额外补一层 Gated MLA 保证最后一层是全局注意力。所以:23 个 block × 4 = 92 层,加末尾 1 层 MLA = 93 层,KDA = 23 × 3 = 69,MLA = 23 + 1 = 24。对上了。
第二,稀疏度。 896 个路由专家,每 token 激活 16 个。896 ÷ 16 = 56,报告写的就是 sparsity 56。对上了。
第三,LatentMoE 的通信账。 K2 是 8 个激活专家、专家输入维度 7168;K3 的 latent 维度是 3584,正好是 7168 的一半。先看路由激活的数值载荷:
8 × 7168 = 16 × 3584
维度砍半、专家数翻倍,主要激活载荷没有增加。但不能把它简单理解成整条通信链路零增量。 实际系统还要处理 token 到 expert 的映射、元数据、调度、负载不均衡以及集合通信的固定开销。更准确的说法是:LatentMoE 用「更多专家」交换「更窄通道」,让主要激活载荷没有随 Top-K 翻倍,但不代表通信成本一分钱没涨。
下面是完整的代际对比(官方 Table 1 摘录):
| 配置项 | Kimi K2 | Kimi K3 | 变化 |
|---|---|---|---|
| 总参数 | 1.04T | 2.78T | ↑167% |
| 激活参数 | 32.6B | 104.2B | ↑220% |
| 层数 | 61 | 93 | ↑52% |
| 隐层维度 | 7,168 | 7,168 | = |
| Latent MoE 维度 | — | 3,584(0.5×) | 新增 |
| 每专家 MoE 隐维度 | 2,048 | 3,072 | ↑50% |
| 路由专家数 | 384 | 896 | ↑133% |
| 每 token 激活专家 | 8 | 16 | ↑100% |
| 共享专家 | 1 | 2 | ↑100% |
| 注意力头数 | 64 | 96 | ↑50% |
| 注意力机制 | MLA | Hybrid KDA–MLA | 结构性变化 |
| 激活函数 | SwiGLU | SiTU-GLU | 替换 |
| 训练上下文 | 128K | 1M | 8× |
| ViT | — | 401M / 27 层 | 新增 |
官方口径是:这些改动加上数据与训练配方更新,在留出的 OOD 验证集上,整体 scaling 效率相对 K2 提升约 2.5 倍。
这个 2.5× 是官方内部验证损失的 scaling law 拟合结果,第三方复现不了。 SemiAnalysis 全文没对它置评。你引用的时候记得挂「官方口径」这个标签。
2.2. KDA:一个 gmin = -5 救回了 Tensor Core
KDA 的状态更新长这样(官方 Eq. 1):
S_t = (I − β_t · k_t · k_t^T) · Diag(α_t) · S_{t−1} + β_t · k_t · v_t^T
õ_t = S_t^T · q_t
说人话:S 是一块固定大小的关联记忆矩阵。每来一个 token,先按通道衰减旧记忆(Diag(α_t),α 是逐通道的保留因子),再用 delta rule 精准擦掉跟当前 key 冲突的旧关联、写入新关联。
和标准 attention 的区别就一句:它不保存全部历史 K/V,代价是记忆容量被矩阵尺寸卡死。
相对 Kimi Linear,K3 版 KDA 改了两处,第一处特别值得讲。
改动一:下界化衰减(lower-bounded decay)。
分块并行计算 KDA 时,要用累积衰减的倒数 1/Γ 去重缩放 key。Kimi Linear 的衰减参数化是无下界的负 Softplus,g = −e^A · Softplus(z) ∈ (−∞, 0),倒数能涨到没边,有限精度下直接溢出。Kimi Linear 的解法是让 diagonal tile 走一条”逐位置对”的特殊路径绕过去,代价是这条路径用不了 Tensor Core,成为 chunk 内主要瓶颈。
K3 的解法是给对数衰减加地板:
g = g_min · Sigmoid(e^A · z) ∈ (g_min, 0), g_min = −5(固定)
α = exp(g) ∈ (e^−5, 1)
这里要把两个尺度分清楚,否则这个论证不成立:
C(chunk):分块并行的外层块,3.1 节 FLOPs 公式里的那个 C; T_d(diagonal tile):块内做稠密矩阵乘的最小单元,报告取 16。 溢出发生在 tile 内的累积重缩放上。T_d = 16 时,累积对数衰减落在 (−80, 0),倒数上界 e^80 ≈ 5.5×10³⁴。BF16 的最大可表示值约 3.39×10³⁸ ≈ e^88.7,所以有大约 8.7 个自然对数单位、约 5000 倍的余量。
这个余量比看上去紧。反推一下:在 g_min = −5 下,tile 最多只能取到 ⌊88.7 / 5⌋ = 17 个 token 就会触到 BF16 上限。也就是说 g_min = −5 和 T_d = 16 是一对绑定的设计选择,不是两个独立常数。你要把这招搬到自己的 kernel 上,必须同时确认三件事:tile 宽度、重缩放的累计方式、以及中间量到底跑在 BF16 还是 FP32。
g_min=-5 和 16-token tile 是经过联合验证的配置,不能只抄一个常数。换 tile 宽度以后,动态范围和 kernel 数值路径必须重新验证。
这是典型的「为了硬件改数学」。一个常数换掉一整条 kernel 分支,我读到这里的时候是真心佩服的。
改动二:全秩输出门。 KDA 的输出门从 Kimi Linear 的低秩投影改成输入依赖的全秩投影:y = W_o [Sigmoid(W_g x) ⊙ RMSNorm(õ)]。按 官方公式和开源实现,这里是无 bias 的完整投影。SemiAnalysis 对照表里的「linear transformation with bias」并不准确。带不带 bias 是明确的架构事实,不能当装饰项略过去。
顺带记一下 KDA 的输入侧处理(SemiAnalysis 描述得比官方更细一点):q/k/v 都过一遍线性变换加短卷积,短卷积用左 padding 保证不破坏因果性;q 和 k 额外做 L2 Norm 稳定转移矩阵与输出矩阵的特征向量;α 是低秩投影,β 是降维投影;输出按头做 RMSNorm,最后一层线性层混合各头信息。
简单说,g_min 现在就能试,而且是这批组件里最容易搬的一个。 它只动一个门的参数化,不动状态形状、不动 kernel 接口。任何已经在跑 Gated DeltaNet 系线性注意力的项目都可以试。KDA 本体也已经能部署,但要把长上下文、高并发和跨设备效率都做好,还得看第五节那些配套条件。
2.3. 3:1 混合 + NoPE:为什么还留着 24 层 MLA
每个 block 3 层 KDA 加 1 层 Gated MLA,3:1 这个比例沿用 Kimi Linear 的消融结论。
真正有意思的是位置编码:所有 MLA 层用 NoPE,一点显式位置编码都不加。 位置信息全靠 KDA 的门控衰减机制隐式承载。
官方给的直接收益是长上下文外推。上下文从 8K 一路扩到 1M,不需要重调 RoPE 频率基、不需要 YaRN 插值这类位置编码手术。分工是清楚的:KDA 层负责位置敏感和近期性,MLA 层负责无限制的全局内容交互。
MLA 本身也加了输入依赖的逐通道全秩输出门。还有个细节我很喜欢:训练时把 attention 输出保持在 FP32,用来修正 flash attention 的有偏舍入误差。代价是 output tile 的片上占用翻倍,官方的处理是重新设计训练 kernel,让它和 KV staging buffer 重叠而不是和 query tile 重叠,腾出共享内存做更深的 KV 流水。
NoPE + 混合线性注意力能用,但得从架构设计阶段就定下来。 如果你本来就在做混合架构,NoPE 能省掉整套上下文扩展的位置编码工程;已经用 RoPE 训练好的模型,就别想着中途硬改了。
2.4. Attention Residuals:把注意力用到深度维上
标准残差连接把之前所有层的信息压进单一残差流。官方报告直接类比为「深度方向上的 RNN 瓶颈」——这个比喻我觉得非常准。
AttnRes 的做法:每层学一个与输入无关的伪查询向量 w_l,对前面所有层的输出表征做 softmax 注意力,选择性地取用早层信息。key 做 RMSNorm,防止输出幅度大的层霸占注意力权重。
完整版的开销是 O(L²d) 计算——层数不到 100,这个还能接受;真正贵的是 O(Ld) 内存和流水线并行下的跨级通信。
所以 K3 用 Block AttnRes:93 层切成 8 个 12 层的块(算上 embedding 一共 9 个块级表征,最后一块不满),块内表征求和聚合,块间做注意力。开销从 O(Ld) 降到 O(Nd)。官方结论是 N ≈ 8 就能拿回绝大部分收益。
这里有个官方没给、SemiAnalysis 给了的数: 块级残差相对标准残差约有 1.25× 的计算效率增益;配合跨级缓存与激活检查点,流水线并行下的额外开销被压到约 4%。
推理侧 AttnRes 分两阶段:批量的块间注意力(类比 prefill)+ 顺序的块内注意力(类比 decode,用 online softmax 合并)。官方在 kernel 层面还做了两手:prefill 用序列并行,让每个 token 的块表征只在一个 rank 上物化;decode 把块间 kernel 放到 side stream 去和主流重叠。
AttnRes 能不能上,得看你的部署形态。 单机小模型直接用完整版问题不大,O(L²d) 不痛。但那个「4% 额外开销」是建立在跨级缓存 + 激活检查点都做了的前提上的——你要是裸接一个 Block AttnRes 到现成的流水线并行训练框架里,跨级通信会把你吃掉,别指望 4%。
2.5. Stable LatentMoE:896 个专家的两个失效模式
LatentMoE 原始论文是由 NVIDIA 的 Elango 等人在《LatentMoE: Toward Optimal Accuracy per FLOP and Parameter in Mixture of Experts》(arXiv:2601.18089)中首次提出。Moonshot 做的是把它稳定到 2.8T 规模,叫 Stable LatentMoE。
其思路是:路由专家放进宽度减半的隐空间(3,584 维)跑,共享专家保留全宽度。前面算过了,这是激活专家能翻倍的原因。
官方很坦率地列出了裸用这个设计在 2.8T 规模下的两个失效模式:
- 路由分支把降维投影
W↓、门控多分支专家 FFN、升维投影W↑连成了近四次连续矩阵乘。这个结构病态条件数高,配上 2.8T 的规模,路由分支内部激活直接爆掉。 - 给接近 1000 个专家做负载均衡,超出了现有 aux-loss-free 偏置更新法能好好工作的范围。
对应三个组件:
(1)Normalized LatentMoE:在升维投影 W↑ 之前插一个 RMSNorm,切断路由分支的尺度漂移。官方说除了稳定训练,它还稳定改善验证损失和下游 benchmark。
(2)SiTU-GLU:SwiGLU 的两个乘性因子都无界,两个大值撞上就产生激活离群点,低精度算术下溢出风险高。SiTU-GLU 给门支的线性因子和 up 支各套一个软帽 softcap(x, β) = β·tanh(x/β):
SiTU-GLU(x) = β₁·tanh(W_g x / β₁) ⊙ Sigmoid(W_g x) ⊙ β₂·tanh(W_u x / β₂)
β₁ = 4(门支),β₂ = 25(up 支)
再验算一下:输出上界 |f(x)| ≤ β₁·β₂ = 4 × 25 = 100。对上官方 Fig. 4 标的 100。 tanh 在原点附近近似线性,所以它在小值区间的行为和 SwiGLU 基本一致,只在大值处被掐住。
(3)Quantile Balancing(QB):无超参、无辅助损失的负载均衡,出自苏剑林 2026 年 2 月的博客(官方引 [111],SemiAnalysis 也点名了同一出处,两边一致)。
QB 的逻辑值得完整讲一遍,因为它是这批组件里最容易被独立移植的。
原来的 aux-loss-free 方法用固定步长更新专家偏置:b ← b + γ·sign(平均负载 − 本专家负载)。γ 大了震荡,小了跟不上。专家池涨到 896,这个矛盾就压不住了。
QB 不猜步长,直接从路由分数的分位数解出下一步的偏置。一个 batch 有 m 个 token、n 个专家,每 token 选 k 个。路由时多取一名,第 (k+1) 个分数就是这个 token 的截断阈值 α_i。
对每个专家 j,先计算所有 token 上的 margin s_ij − α_i,然后取对应分位数的负值,最后再做零均值校正:
b̃_j = −quantile_(1−k/n)(s_:,j − α)
b_j = b̃_j − mean(b̃)
前面那个负号很关键。直觉上,它是在寻找一个阈值偏移,让每个 expert 被选中的频率向目标负载靠近。最后减去均值,则是为了消掉对所有 expert 同时平移的冗余自由度。
规模化实现靠直方图:每个 expert 汇总一份由数百个 bin 组成的直方图,再 all-reduce 各 rank 的桶计数。它仍然比汇总逐 token 分数便宜得多,但通信规模会随 expert 数量增长,不能说整套系统只通信几百个数。
QB 现在就能试,而且我认为它是这批组件里迁移成本最低的一个。 无辅助损失,也不用手调固定更新步长,但规模化实现仍要认真处理每专家直方图的通信。SiTU-GLU 则是另一回事——公式里只多两个常数,但换激活函数意味着重训,不是微调能改的。
2.6. 训练与推理基建:三块决定性的内容
第 5 章信息密度太高,我只挑对结论有决定性影响的讲。
MoonEP(专家并行)。 传统 EP 下 token 负载不均,算力浪费加内存碎片。MoonEP 用动态冗余专家做到完美负载均衡,并且证明了每 rank 至多 E/R 个冗余专家就一定存在可行方案,且这个界基本是紧的(E 是专家数,R 是 EP size)。
这个证明是有工程意义的,不是炫技:预留 E/R 个槽位就保证规划永远有解,训练永远不会因为「找不到可行方案」而停。对比 ECHO、UltraEP 这类预设冗余专家数或者设 per-rank token 上限的做法——上限内无解就得停训,而且上限本身还得手调。
完美均衡还带来两个副产品:通信 buffer 从 DeepEP 最坏情况的 S×K×R 降到固定 S×K;计算形状全静态,消掉了每层 MoE 的主机-设备同步。
KDA Context Parallelism(KCP)。 普通线性注意力做上下文并行很简单:每个 rank 从 S = 0 算出本地状态,前面所有 rank 的本地状态求和就是入段状态。
KDA 不行。因为 delta rule 会把一个 token 相关的矩阵 M_t = (I − β_t k_t k_t^T)Diag(α_t) 作用在入段状态上再加写入,所以本地段的效果依赖入段状态,光靠 S = 0 算出来的东西合不出来。
KCP 的解法是把每段的效果拆成两个都能本地算的量:一个是作用于入段状态的累积转移 M^{t←1},一个是从零起算的本地状态 S̃。这两个量在拿到前一个 rank 的状态之前就能算完,一次固定大小的 all-gather 交换完,各 rank 按序重放前面的片段就能精确恢复自己的入段状态。计算量线性扩展。
KDA-aware 前缀缓存。 这块是后面交叉对照的关键,得讲细一点。
混合架构把前缀缓存搞复杂了:MLA KV 随序列长度增长、按 token 分页;KDA 状态固定大小、每请求一份。一个缓存前缀只有在两者都能在同一个边界恢复时才可复用。
官方先把 KDA 状态打包进和 MLA KV 同一个分页块池,页大小统一,共用一套分配、引用计数、淘汰逻辑。页内各头字节流自包含,PD 分离时两侧 TP 度不同也能在传输路径上直接 re-layout,GPU 侧零重排。
然后是关键的粒度解耦。传统 block-hash 前缀缓存要求所有层共用一个块大小。KDA 状态快照很大,只能在稀疏边界存,所以共享块大小被迫拉到 1024–6144 token。这么粗的粒度下缓存几乎没用——比一个块还短的请求永远复用不了,chunked prefill 在跨过整块边界之前导不出任何可缓存前缀。
官方的做法:前缀哈希跑在细粒度 hash block(比如 512 token)上,物理块继续做粗粒度分配单元;KDA 检查点只存在 MLA hash 端点的一个稀疏子集上——反正查找也只可能引用这些位置。会话轮次边界上的检查点保留下来做跨请求复用,中间被超越的检查点回收。
查找分两阶段:MLA 阶段按链式哈希匹配整物理块,第一个缺块处回落到块内的 hash 端点;KDA 阶段要求候选边界在每个 KDA cache group 里都有检查点。命中点取两阶段都满足的最长边界。
报告 Fig. 12 举的例子很直观:6144-token 物理块里有 12 个 512-token hash block,一个前 2800 token 匹配的请求命中在 B = 2560 = 5 × 512——深在物理块内部,然后从 token 2560 续跑 prefill,[0, 2560) 零重算。
官方的结论句我原样记下来:任意共享前缀可在任意 512-token 边界复用,与请求长度、分块方式、调度交错无关。
1M Agentic RL 基建。 co-located RL 加 partial rollout(一个 iteration 里 λ 比例的轨迹完成就暂停生成,避免长尾拖累)。前缀 KV 从 GPU 驻留中解耦:活跃解码块留在 GPU,可复用的空闲前缀在被逐出时才写回 CPU DRAM 的外部 KV 池,下次复用前预取回来。KDA 状态和对应的 MLA KV 块同生命周期管理。 为了给外部池腾 DRAM,训练态(权重和优化器状态)在一轮训练结束后卸到 NVMe。
沙箱侧是 AgentENV,基于 Firecracker microVM,已开源。增量检查点只存脏页,检查点/恢复延迟低到 133ms / 49ms。三个高阶操作:Pause/Resume(暂停的沙箱不占内存和 CPU——而沙箱生命周期里有多达 98% 是在等模型推理结果)、Fork(从原沙箱精确状态复制一份,原沙箱继续跑,用来做无副作用的奖励判定)、Snapshot(定期快照做错误恢复)。内存 overcommit 比率实际负载下能到 6.5×。
然后是那个我读到会停下来的数字:整个 K3 训练与评测周期,一共创建了 51,219,741 个沙箱,跨 1,505,678 个镜像。
五千万个沙箱。Agentic RL 的军备竞赛主战场已经不只是 GPU 了。
这一节不适合照搬,更适合拿来做系统设计参考。 MoonEP 和 AgentENV 都开源了(前者在 MoonshotAI/MoonEP,后者在 kvcache-ai/AgentENV),但都是重基建,接入成本按季度算。能立刻拿走的是结论:Agentic RL 的沙箱层要按「毫秒级可暂停、可 fork」来设计,不是按「容器够快就行」来设计。
2.7. 评测:官方自己怎么摆位置
官方摆位相当克制,我原文照抄意思:整体落后于最强的两个专有模型 Claude Fable 5 和 GPT-5.6 Sol,稳定领先其余所有参评模型(含 Claude Opus 4.8、GPT-5.5、GLM-5.2)。
分域看。先提醒一句:reasoning effort = max、temperature = 1.0 是 Kimi K3 自身的配置,不是所有对比模型的统一配置。 部分闭源模型采用供应商自己的推理档位,例如 GPT-5.5 使用 xhigh;部分结果来自第三方榜单或官方报告,缺失项还可能采用不同的回退来源。所以这张表适合判断大致能力区间,不适合当成严格同配置、同预算的横向实验。
| 能力域 | 代表结果 | 位置 |
|---|---|---|
| 推理与知识 | GPQA Diamond 93.5 | 接近 GPT-5.6 Sol 的 94.1 |
| 研究级推理 | CritPt 23.4、HLE-Full 43.5 / 56.0(无工具/有工具) | 明显落后 Fable 5(28.6、53.3 / 63.0),官方明说是改进方向 |
| 编码 | ProgramBench 77.8(第一)、SWE-Marathon 42.0、FrontierSWE 81.2(第二) | Terminal-Bench 2.1 88.3 对 88.8,接近打平 |
| Agentic 检索 | BrowseComp 91.2(第一)、DeepSearchQA 95.0 F1、MCPMark-Verified 94.5 | 领先所有参评模型 |
| 视觉 | OmniDocBench 91.1、Video-MME 90.0(均第一) | 部分项落后 Fable 5 |
| 计算机使用 | OSWorld 2.0 58.3 | 落后 Fable 5 的 66.1,明确弱项 |
第三方口径(报告转引,截至 2026 年 7 月 23 日):Artificial Analysis 智能指数 v4.1 得 57.1,580 个模型中第 4;Vals Index 74.7%,39 个模型中第 2;LMArena WebDev Arena 1,678 Elo 排第 1(99 个模型),报告称这是首个登顶该榜的开放模型;Text Arena 1,486 排第 8。
安全评测这里混了两套完全独立的实验,必须拆开看,而且不能把两套数字并列成一张表。
- Tier 1(漏洞挖掘):模型在几十个广泛部署的系统里报了数百个候选漏洞,人工复核的确认率约 70%,包括六个项目中 16 个此前未知的漏洞、其中两个在 Linux 内核。这是能力证据,但属于官方自评。
- Tier 2(端到端利用):这是一套固定的 36 题自建套件——16 道用户态真实 CVE、20 道内核提权题,每题都验证过人类专家可解,官方估计做完全套要 540 个专家小时。K3 解出 14/36(其中 10 道来自用户态),GLM-5.2 是 8/36。套件不公开,第三方无法复现。
(AISI 对照表补一行脚注:32% / 24%、17 步、0/41 来自官方报告转述;76.2%、20/41、28.5 步与”10 次完成 1 次”按 AISI 博客原文标注。官方报告还给了 GLM-5.2 在同一模拟网络上的 11 步,可一并对照。)
所以正确的一句话总结是:在 AISI/CAISI 这组有限测试里,K3 的网络攻击能力明显落后头部美国闭源模型,但高于 GLM-5.2;与此同时,默认安全措施没有可靠阻止它尝试漏洞开发和攻击性操作。
这张表适合做选型初筛,不适合拿来下最终排名。 真要选型,按你自己的 harness 和任务分布重跑。
3. SemiAnalysis 视角:它算了什么
3.1. 方法:推导 + 内核算术强度
架构部分它走的是「推导」而不是「转述」:
去掉 softmax 的线性注意力(状态矩阵解释为在线学习的关联记忆)→ DeltaNet(把损失换成 value 检索的 L2 范数,S 的增长被正则住,得到 delta rule)→ Gated DeltaNet(加 LSTM 式标量遗忘门控制记忆寿命)→ KDA(把标量遗忘门扩展成对角矩阵,得到逐通道衰减和位置感知)。
这条链和官方报告的公式完全对得上。这也是它最有价值的一点:K3 的架构不是黑箱,是一步步推出来的。
内核层面,它对 Moonshot 开源的 FlashKDA 做了复杂度核算,这部分是可以自己复算的硬分析:
- decode:关键路径每注意力头约
7D²FLOPs;内存流量约8D²字节,FP32 循环状态的读写占主导; - prefill:K1 准备 chunk 级张量(
L、INV、M_qk),K2 做 chunk 级递推,合起来12C³ + 8C²D + 6CD²FLOPs;序列长度T >> C时总量是T/C × O(CD²) = O(T·D²); - 内存流量:kernel 级
T/C × (8C² + 22CD) + 8D² ~ O(TC + TD + D²)。
结论是硬的:KDA 的 prefill 计算与内存都随序列长度线性,decode 都是常数。
官方配置已经公开了这些参数:head_dim = 128、num_heads = 96、v_head_dim = 128,KDA 层数为 69。
按 FP32 粗算,每个 KDA 层、每条活跃序列的矩阵状态约为:
96 × 128 × 128 × 4 = 6 MiB
69 层合计约 414 MiB。这个数字还没有算 ShortConv 状态,也没有考虑张量并行切分、状态存储精度和后端压缩。换句话说,KDA 状态大小不是不可知,只是不能拿理论值直接替代具体部署中的显存占用。
3.2. KV throughput:为什么不能只看空间复杂度
这是我认为最有价值的部分。
SemiAnalysis 的第一层论点:不能只根据 KV Cache 空间复杂度推断 KV Cache 效率。
理由有三条:没有开放权重模型是带静态 KV Cache 压缩技术发布的;模型架构的推理效率本身影响 KV Cache 效率;KV Cache 大小的影响还取决于部署实例的总内存容量——宽专家并行部署和张量并行部署留给 KV Cache 的余量完全不同。
所以它提出一个指标:KV throughput = KV Cache 大小 ÷ prefill 时间(TTFT),在给定序列长度下。
物理含义是:PD 分离部署下可靠服务这个模型所需的最小传输带宽。。用来粗估 PD 分离时,KV 传输要达到什么量级,才不至于比 prefill 更慢。 prefill 时间把架构效率也包进去了,序列变长时还能反映从内存受限到算力受限的切换。它的结论是:混合线性注意力的优势随序列长度增长越来越明显。
KV throughput 这个指标现在就能用。 它不需要任何新工具——KV Cache 大小你算得出来,TTFT 你压测得到,两个一除就是。做 PD 分离容量规划的话,这个数比「KV Cache 占了多少 GB」有用得多。
3.3. KDA 的 Prefix Cache 到底难在哪里
普通 Transformer 可以按 token block 保存 KV Cache。KDA 保存的则是递归状态。要复用某段前缀,就必须在某个边界留下对应的状态快照。
最朴素的办法当然是每个 token 都存一份,但这不代表工程上只有这一条路。真实系统可以采用固定间隔保留、prompt 末尾保留、命中后再保留,以及按热度选择性保留等策略。
这里最容易混淆的是两个不同概念:
- 512 token:Moonshot 公开方案中的哈希或候选匹配粒度;
- 32K token:vLLM 示例中的状态保留间隔,不是 prefix 只能按 32K 粒度命中。
vLLM 还会保留 prompt 末尾检查点,并支持 selective caching 和 cache-on-second-hit。它做的事情,是把「状态快照很大」和「前缀匹配必须很粗」这两个问题拆开。
所以,「开源引擎只能按 32K token 复用,而官方可以按 512 token 复用」这个结论不成立。vLLM 在 K3 权重开放当天就已经提供了混合 Prefix Cache 支持,细节可以看它的 K3 Day-0 支持说明。
另外还要区分运行时状态和缓存池:
- 单条活跃序列的 KDA 递归状态,对序列长度仍然是
O(1); - 为跨请求复用而保存的历史快照,会随保留检查点数量增长;
- K3 还有 24 层 MLA,所以整套模型的缓存并不是纯粹的常数空间。
真正难的不是「能不能缓存」,而是如何在命中率、显存、DRAM 带宽、状态拷贝和调度开销之间找到平衡。
它还顺手梳理了 KV 驻留的内存层级:HBM → 服务器 DRAM → SSD,类比寄存器 → 缓存 → 主存 → 磁盘。分布式 KV 缓存框架 Mooncake Store 支持 write-through 和 write-back,DRAM 与下层分布式池之间做 write-through 有三个好处:跨节点共享前缀缓存、避免 TP 化 MLA 的 KV 重复、节点宕机时有冗余。
3.4. 对 MLA 的质疑
SemiAnalysis 指出,在它选取的这组最新前沿模型里,K3 仍然保留 MLA,而它点名的一串新一代注意力机制都构建在 GQA 基础上:GLM 5.2 的 DeepSeek Sparse Attention、DeepSeek V4 的 Compressed Sparse Attention、MiniMax M3 的 MiniMax Sparse Attention、MiMo V3 的 HySparse。
但这不能扩大成「K3 是开放权重阵营里唯一采用 MLA 的模型」。Kimi K2/K2.5,以及 DeepSeek V2、V3、R1 等模型都使用了 MLA。更准确的说法是:K3 是这组最新对比对象里,同时大规模组合 KDA 和 MLA、并把它们带进 3T 级 MoE 架构的代表案例。
它的论据:MLA 的吸收技巧(absorption trick) 用 prefill 阶段的额外计算换 decode 阶段的计算削减。对 decode 主导的推理型负载,这笔交易划算;但 Agentic 负载是 prefill 主导的(见 3.5 的流量画像),额外计算成本高、收益小。
据此它给出一个明确标注为推测的判断:Moonshot 后续模型比如 Kimi K4 会换掉 MLA。
给下一代模型剧透,准确率如何一年后见分晓 :)
顺带一个它算得很漂亮的账:MoE 的通信/计算时间比 = (P·F) / (6·m·B) × (1 − 1/E)(P 是每激活元素的聚合通信字节,F 是每 GPU 的有效 FFN 算力,B 是每 GPU 有效单向带宽,m 是专家中间维度,E 是 EP 域 rank 数)。
关键在于:m 是唯一影响这个比值的模型配置项。 m 越大,比值越小,理论上能被计算隐藏的通信比例越高。所以它认为这解释了为什么专家中间维度普遍在涨——K2 到 K3 从 2048 到 3072,以及 DeepSeek V4 Pro、MiniMax M3、MiMo V2.5 Pro、Inkling 都在涨。硬件算力在提升、专家权重精度在降低,把 m 加大是压低这个比值的一条路。
这个公式可以直接拿来粗算架构。 你手上的 F 和 B 是已知的,P 看你的 dispatch/combine 精度,代进去就知道你的 MoE 通信能不能被算力盖住。
3.5. 推理经济账:从流量画像到毛利
这套测算的结论强度完全取决于它的方法,所以我把方法完整记下来。
第一步,负载来源。 它在 InferenceX 上直接用录制的内部 claude code 真实流量做 benchmark,回放一小时达到稳态的流量。中位数:每轮输入 142k token,每轮输出 444 token,每会话 65 轮。
每轮输出这么短是 Agentic harness 的典型特征——Agent 频繁调工具,连编辑文件都是工具调用。它自己评价这个 benchmark 比之前的 8k1k / 1k1k 是一大步,因为能反映真实的 KV Cache 行为,包括前缀缓存和 DRAM 卸载。
这是一个 prefill 极度主导、前缀高复用的画像。 142k 输入对 444 输出,比例约 320:1。
第二步,硬件结论。
- B200:一台 8 卡节点放不下整套模型,但这不等于 B200 一律不能用。vLLM 已支持 16×B200。SemiAnalysis 测试中 PP 与 DSpark 的限制,只能代表那套具体配置。
- B300:8×B300 是更省事的单节点方案。在这组 142K 输入、444 输出、65 轮、目标 P90 交互性的流量里,扣掉权重后,GPU HBM 只放得下约 3.25M token 的 KV;并发超过 8 后出现缓存抖动。
- 加上每 rank 219.91 GB 的 CPU DRAM 卸载后,额外获得 15.76M token 的 KV 容量。这里我原来把倍数抄错了:
15.76 / 3.25 ≈ 4.85是新增容量相对基础容量;总容量是3.25 + 15.76 = 19.01M token,约为基础容量的 5.85 倍。
第三步,成本与毛利。 它自己的 claude code 和 codex 用量里,cache read 占了支出的大部分

这里我得重新按计算器。SemiAnalysis 图表采用的是 B300 $3.00/GPU·hr,输入吞吐为 4,844.1 tok/s/GPU:
$3 / (4844.1 × 3600) × 1,000,000 ≈ $0.172/M token
如果采用正文里的 $2.60,结果应该是约 $0.149/M,不是 $0.1712/M。原文把两套输入混在了一起。
API 价格也不能只拿 $3 的缓存未命中输入价来比较。K3 的输入价格分为缓存命中 $0.30/M、缓存未命中 $3/M,输出为 $15/M。假设输入缓存命中率为 95%,有效输入价格是:
0.95 × $0.30 + 0.05 × $3 = $0.435/M token
它约为 $0.1712/M 的 2.54 倍。Kimi API 定价和 OpenRouter 模型页面都区分了缓存命中与未命中。
更重要的是,$0.1712/M 只是特定硬件价格、吞吐量和利用率假设下的基础设施成本估算。它没有包含研发、调度冗余、网络、存储、低利用率、运维和服务利润,不能直接叫作「真实服务成本」。
另一组对照用的是它的 AgentX 数据集(ISL:OSL = 315:1):Moonshot 自家平台上 K3 的混合价约 $0.74/M token @ 22 tok/s/user;InferenceX 在 B300 上用 vLLM 跑,估算为 $0.171/M token。验算 (0.74 − 0.171) / 0.74 = 76.9%,数值能对上,但它只是特定配置下的估算,不是经过财务审计的毛利率。
真要自己部署,我的建议是: 一台 8 卡 B200 放不下模型,但 16×B200 已有支持;8×B300 是更省事的单节点方案。DRAM offload 在上述长上下文、高复用、高并发轨迹下非常重要,但不是所有 B300 部署的无条件必选项。成本测算可以参考方向,每个数字都得挂上流量分布、硬件配置、租赁价格和交互性目标。这是分析,不是审计。
4. 交叉对照:分歧在哪
先说一个总体观察:两份材料的主线大体能够对上,但数字和实现口径并不是处处一致。 容量倍数、B300 小时单价、前缀缓存粒度和投机解码方案,都得拆开核对,不能用「只是观察角度不同」一把抹平。
| 议题 | 官方口径 | SemiAnalysis 口径 | 个人判断 |
|---|---|---|---|
| KDA 的 KV Cache 收益 | 512-token 是哈希或候选匹配粒度,KDA 检查点稀疏保存(§5.4.1) | 32K 是 vLLM 示例中的状态保留间隔,不是 prefix 匹配粒度;vLLM 还保留 prompt-end 检查点并支持选择性缓存 | 不能把 512 和 32K 横着比。 vLLM 已在 Day 0 支持 KDA/MLA 混合 Prefix Cache。真正要比较的是状态保留策略、命中率和内存成本 |
| MLA 去留 | 保留 Gated MLA,理由是 NoPE + KDA 隐式位置让 1M 外推免手术,末层全局注意力兜底 | MLA 吸收技巧不适配 prefill 主导的 Agentic 负载;推测 K4 换掉 MLA | 分歧比表面小。 K3 已经把全局注意力稀释到 24/93 层,方向和 SemiAnalysis 一致;争的只是剩下这四分之一用 MLA 还是 GQA 系。一个合理的推演是:下一代的全局层会换成对 prefill 更友好的稀疏注意力,而 NoPE 设计正好降低了更换成本 |
| 性能摆位 | 明示整体落后 Claude Fable 5 与 GPT-5.6 Sol,领先其余参评模型 | 开篇即「横扫榜单、确立 open frontier model 地位」 | 不矛盾,说的是两个坐标系。 官方说的是绝对第一梯队内的名次,SemiAnalysis 说的是开放权重内的地位。官方报告的自我摆位诚实度高于行业平均 |
| 成本叙事 | 按任务成本讲性价比:BrowseComp 最高分且 $2.03/任务,约为 GPT-5.6 Sol 一半 | 按特定 B300 配置估算输入侧基础设施成本 | 两者不可直接换算。 API 还有缓存命中、未命中和输出三档价格,$0.171/M 也不等于供应商完整服务成本 |
| 2.5× scaling 效率 | 内部 OOD 验证集的 scaling law 拟合结论 | 未置评 | 依赖官方数据与拟合方法,第三方不可复现。采信时保留「官方口径」标签 |
| 投机解码方案 | MTP 层微调为 EAGLE-3 式草稿模型,直接优化接受率的 LK 损失 | DSpark 是 Inferact 为 K3 训练和发布的半自回归/块扩散方案 | 确实是两套东西。 目标都是加速解码,但训练方法和生成算法不能混为一谈 |
| AttnRes 的量化收益 | 报告正文给机制与 N ≈ 8 的结论,未给 1.25× / 4% | 给出 1.25× 计算效率、PP 下 4% 额外开销(转引 AttnRes preprint) | 这两个数来源是 AttnRes 那篇 preprint,不是 K3 报告。引用时别混 |
关于第一行,我想再展开一句,因为它是全文最容易被误读的地方。
官方说的 512 token,是细粒度 hash block 或候选命中边界;vLLM 示例里的 32K,是状态快照的保留间隔。vLLM 还会保存 prompt 末尾状态,并允许 selective caching、cache-on-second-hit。一个讲怎么匹配,一个讲保留多少快照,不是两套互斥精度。
所以你看到「KDA 省 KV Cache」时,正确的追问不只是「在哪套 runtime 上省」,还要问:活跃状态多大、历史快照保留多少、命中率多少、快照放 HBM 还是 DRAM? 这些参数一起决定真实容量。
5. 坑点与兼容性清单
这是我最想留给你的一张表。想抄 K3 的组件、或者想自己部署 K3,先看这个。
组件移植:
| 组件 | 现在能不能用 | 前提 / 坑 |
|---|---|---|
| Quantile Balancing(QB) | 能用,迁移成本最低 | 无超参、无辅助损失;规模化要实现直方图 all-reduce(每专家几百桶) |
g_min = -5 下界化衰减 | 能用 | 只改门的参数化;能吃到收益的前提是你的 kernel 里本来就有 diagonal tile 旁路 |
| SiTU-GLU | 能用,但要重训 | 换激活函数不是微调能改的;β₁=4、β₂=25 是 K3 的取值,未必是你的最优 |
| Per-Head Muon | 能用 | 按头分块做 Newton–Schulz;顺带还便宜一点(tall 块比全矩阵便宜) |
| MXFP4 权重 + MXFP8 激活 QAT | 条件性 | 低精度范围主要是 routed MoE expert:专家权重采用 MXFP4,输入激活采用 MXFP8;非 expert 模块保留更高精度。官方从 SFT 阶段起做 QAT,半路加 QAT 拿不到同样效果 |
| Block AttnRes | 条件性 | 那个 4% 开销建立在跨级缓存 + 激活检查点都做了的前提上;裸接进 PP 框架会被通信吃掉 |
| Stable LatentMoE | 条件性 | RMSNorm 位置(升维投影之前)是关键;不加它在大规模下路由分支激活会爆 |
| KDA 本体 | 能运行,生产效率有条件 | FlashKDA 提高算子效率;Prefix Cache 用于跨请求复用;KCP 用于跨设备 Context Parallel。三者服务于不同场景,不是缺一不可 |
| MoonEP / AgentENV | 能用但是重基建 | 都开源了,接入成本按季度算,不是按周 |
部署 K3(按优先级重排):
第 0 步,先看官方建议的形态。 官方博客明确推荐 64 卡以上的超节点配置,理由是推理效率同样受益于更大的高带宽通信域。所有 8 卡、16 卡方案都是在这个建议之下的妥协方案,不是等价选项。做正式容量规划时,请把 64 卡当默认,把单机当 PoC。
第 1 步,算权重放不放得下。 MXFP4 checkpoint 约 1.56 TB。
| 配置 | 总 HBM | 权重放得下? | 已知边界 |
|---|---|---|---|
| 8×B200 | ~1.5 TB | 放不下 | 需 16×B200;vLLM 已支持。SemiAnalysis 测到的 PP 与 DSpark 限制只代表那套具体配置 |
| 8×B300 | ~2.3 TB | 放得下 | 扣权重后 KV 余量很小;在 142K 输入 / 444 输出 / 65 轮那组轨迹下,HBM 只装得下约 3.25M token 的 KV,并发超 8 出现缓存抖动;加 219.91 GB/rank 的 CPU DRAM 卸载后总容量约 19.01M token(≈5.85× 基础容量) |
| 8×MI355X | ~2.3 TB | 放得下 | 首日验证可加载并以 16K 上下文运行,但未公布生成速度、TTFT 与并发上限;截至发布后一周,没有公开案例证明它能在更长上下文或高并发下稳定运行 |
| ≥64 卡超节点 | — | — | 官方推荐形态,也是 WideEP 能被 scale-up 带宽吃住的前提 |
第 2 步,再谈 DRAM offload 与前缀缓存。 在长上下文、高复用、高并发的 Agentic 轨迹下,DRAM offload 已经是容量规划的一等公民;但它不是所有部署的无条件必选项,要按你的上下文长度、并发和延迟目标重新压测。前缀缓存这边,别把 32K 保留间隔当成匹配粒度;要调的是检查点保留策略、命中率、HBM/DRAM 搬运成本这三件事。
第 3 步,Day 0 生态。 镜像、草稿模型与权重同时发布,Nvidia 和 AMD 都有 vLLM Day 0 配方,官方也向 vLLM 贡献了 KDA 前缀缓存实现。这是 K3 部署体验好于同期模型的主要原因。
6. 产业影响与推演
以下除注明外均为我的个人推演,不是两份材料的结论。
推演一:开放权重的发布门槛被抬高了。
K3 的发布包不只是权重:MXFP4 量化权重(训练期 QAT 保证精度)、草稿模型、容器镜像、vLLM Day 0 支持同步就位。SemiAnalysis 的实测佐证了效果——Day 0 部署 K3 比部署 DeepSeek V4 顺利,理由是文档更好、权重发布前有准备。
一个合理的推演是:「权重 + 推理配方 + 草稿模型」的全家桶式发布会成为头部玩家的门槛动作。只发权重的项目,会越来越难拿到部署侧的早期动能。
推演二:推理系统的竞争焦点从算力转到内存层级。
SemiAnalysis 的成本结构(cache read 占支出大部分)和 K3 的架构选择(KDA 压 KV、外部 KV 池、KDA-aware 前缀缓存)指向同一件事:在长输入、高前缀复用的 Agent 流量里,只盯峰值 FLOPS 已经做不出完整容量规划。HBM、DRAM、跨节点带宽、命中率和 prefill 吞吐必须一起算。
B300 那个案例把这件事说透了:在 142K 输入、444 输出、65 轮、目标 P90 交互性的特定轨迹下,开不开 DRAM offload,会直接改变并发容量。但这不是所有 B300 部署的通用结论。更准确地说,DRAM offload 已经从边角优化变成容量规划的一等公民,是否必选仍取决于上下文、并发、命中率和延迟目标。
我的判断是,KV throughput 这类「带宽即成本」的指标会被更多机构采用,PD 分离的容量规划会围绕它展开。
推演三:被验证过的组件会被快速吸收,KDA 本体会慢。
QB、per-head Muon、SiTU-GLU、MXFP4 QAT 都是可独立移植的,而且官方报告给了失效模式和消融证据——这对想抄的人来说比给个 SOTA 分数有用得多。 参照 MLA 和 MuonClip 此前在社区的扩散速度,一个合理的推演是这批组件会在两个季度内出现在其他开放权重的技术报告里。
KDA 本体会慢很多。它真正抬高的是生产级部署门槛:FlashKDA 负责算子效率,Prefix Cache 负责跨请求复用,KCP 负责多设备长上下文扩展。具体部署未必同时需要三者,但要把长上下文、高并发和低延迟都做好,系统团队迟早会碰到这些问题。
推演四:训练开始主动降低对单一 harness 的过拟合。
K3 会在训练中动态组合 Kimi Code、Claude Code、Codex 等 harness,这能减少模型只适应某套工具 schema 的风险。 但评测还远没有与 harness 解绑。提示词、工具环境、推理预算和评分器照样能改结果。真正发生的变化不是“harness 不重要了”,而是模型训练开始把 harness 多样性当成一个显式变量。
顺带说,5,100 万个沙箱的消耗说明另一件事:Agentic RL 的基础设施竞争已经扩展到「廉价、高密度、可快照的执行环境」。AgentENV 里那个「沙箱 98% 的生命周期在等模型推理」的观察,是这类系统设计的第一性约束。
推演五:价格竞争会先从 cache read 打响。
K3 的定价更值得看的,不是 $3 输入和 $15 输出之间有什么「默契」,而是缓存命中价与未命中价相差 10 倍。
一个合理的推演是:降价会先发生在 cache read 计费上。对 Agent 产品来说,真正决定账单的是前缀复用率、输入输出比例和任务长度。开源引擎的竞争点也已经不是「谁先支持 KDA Prefix Cache」——vLLM 在 K3 权重发布当天就做了 Day-0 支持。下一阶段要比的是:谁能用更少的状态快照拿到更高命中率,谁能把 HBM、DRAM 和跨节点带宽调度得更稳。
推演六(我觉得最有意思的一条):模型开始优化自己的 kernel 了。
官方案例研究里有一段:他们拿四个 kernel(AttnRes、DSA、KDA、MLA)测模型的 GPU kernel 优化能力,每任务 24 小时预算。K3 把 AttnRes 延迟从 283.6ms 降到 114.4ms,DSA 和 KDA 运行时分别砍掉 55.1% 和 73.6%。
然后是这句:「一个早期 K3 checkpoint 在开发后期已经在承担我们大部分的 kernel 优化工作。」
它还从零写了个叫 MiniTriton 的 Triton-like 编译器,带自定义 tile 级 Python 前端、warp 级 MLIR 优化层和 PTX 代码生成,在 L20 上几何平均超过 PyTorch eager 和 torch.compile。
这个闭环——模型优化自己架构的 kernel,优化后的 kernel 用来训下一代模型——才是我读完两份材料后觉得最需要跟踪的信号。 它比任何 benchmark 分数都更能说明「AI Infra 的迭代速度」这件事会怎么变。
7. 局限与开放问题
7.1. K3 和 KDA 还没回答的
- KDA 的记忆容量边界。 固定大小的循环状态在 1M 上下文里到底能保真多少信息?报告没给针对性的长程召回压力测试(比如逐位置的 needle 曲线)。BrowseComp 91.2 是任务级证据,不是机制级证据。
- KDA 的实际状态占用缺少统一测量。 官方配置已经公开
head_dim = 128、num_heads = 96、v_head_dim = 128和 69 个 KDA 层,理论状态可以计算。真正缺少的是不同并行策略、状态精度和后端实现下,单请求实际占用的统一测量结果。 - NoPE + KDA 隐式位置的泛化边界。 1M 外推免手术是结论,但训练分布之外更长的上下文(4M?)行为未知。
- 2.5× scaling 效率不可复现。 依赖官方内部验证集和拟合方法。
- MOPD 蒸馏的能力损耗。 9 个专家模型合成一个之后,各域相对单专家的保留率是多少,报告没披露。
7.2. 两份材料各自的盲区
官方报告的盲区:vLLM 和 SGLang 在 Day 0 已经提供 KDA/MLA 混合缓存支持,真正缺的是第三方、跨引擎、同硬件条件下的命中率、状态内存、吞吐量和成本对比。
SemiAnalysis 的盲区:成本测算的负载画像来自它自己的 claude code 编码流量(142k / 444 / 65 轮中位数),对聊天、长文生成这类 decode 偏重的负载不具代表性。它对 MLA 的批评基于当前硬件与负载假设,没评估 Moonshot 内部可能存在的其他约束(比如与既有推理栈、QAT 方案的耦合)。
8. 碎碎念
写到这儿差不多了。
我最大的收获不是记住了 KDA 的公式,是那个 g_min = -5——为了让 diagonal tile 能走 Tensor Core,把一个数学上无界的门函数硬加了个地板。 这种「为了硬件改数学」的味道,比任何 benchmark 数字都更能说明现在的模型架构是怎么长出来的。
第二个收获,是一定要把「活跃状态」和「前缀快照池」拆开算。单条活跃序列的 KDA 状态对长度是常数,但为了跨请求复用而保存的快照会随检查点数量增长,K3 的 24 层 MLA 缓存也仍随长度增长。架构复杂度和线上真实占用,中间隔着一整套 runtime。
9. 术语表
按正文首次出现顺序排列。
- KDA(Kimi Delta Attention):Moonshot 的线性注意力机制,delta rule 加逐通道门控衰减,用固定大小的循环状态矩阵替代随序列增长的 KV Cache。K3 里 93 层中占 69 层。
- MoE(Mixture-of-Experts):混合专家架构。每 token 只激活少数专家子网络,用总参数换容量、用稀疏激活控算力。
- MLA(Multi-head Latent Attention):DeepSeek-V2 引入的注意力变体,把 K/V 压缩到低维 latent 向量缓存、计算时升维重建,缩小 KV Cache。K3 在周期性全局注意力层保留了它。
- KV Cache:自回归推理中缓存的历史 Key/Value 张量。标准 attention 下随序列长度线性增长,是长上下文推理的主要内存开销。
- 线性注意力(Linear Attention):去掉 softmax 后可重排计算顺序的注意力,复杂度从序列长度的平方降为线性,历史信息压缩进固定大小状态。
- DeltaNet / Delta Rule:把线性注意力的状态更新改为最小化 value 检索 L2 误差的在线学习规则,可定向擦除与当前 key 冲突的旧关联,同时正则住状态矩阵的增长。
- Gated DeltaNet(GDN):在 DeltaNet 上加 LSTM 式标量遗忘门控制记忆寿命。KDA 把这个标量门扩展为对角矩阵,得到逐通道衰减与位置感知。
- Lower-bounded decay(下界化衰减):K3 把每步对数衰减用缩放 Sigmoid 约束到下界
g_min = −5,使重缩放因子不超出 BF16 动态范围,从而让 diagonal tile 也能走 Tensor Core 稠密矩阵乘。 - ShortConv(短卷积):KDA 在 q/k/v 投影后施加的短程卷积,用左 padding 保证不破坏因果性,用于捕捉局部 token 依赖。
- FlashKDA:Moonshot 开源的 KDA 专用 CUTLASS 内核,chunk 内并行与跨 chunk 状态传播重叠,已作为 flash-linear-attention 的后端自动分发。
- NoPE(No Positional Encoding):不加显式位置编码。K3 的所有 MLA 层采用,位置信息由 KDA 的门控衰减隐式承载。
- RoPE / YaRN:旋转位置编码及其上下文外推方法。长上下文扩展时通常要换频率基或插值,K3 借 NoPE 绕开了这一步。
- GQA(Grouped Query Attention):多组 query 头共享 K/V 头的注意力变体,是当前多数开放权重模型全局注意力的基础。
- Absorption trick(吸收技巧):MLA 的一种计算重排,用 prefill 阶段的额外计算换 decode 阶段的计算削减。SemiAnalysis 认为它不适配 prefill 主导的 Agentic 负载。
- Attention Residuals(AttnRes):把注意力从序列维推广到深度维——每层用可学习的伪查询对前置各层输出做 softmax 加权聚合,替代单一残差流。Block AttnRes 是其分块降开销版本(K3 用 8 块 × 12 层)。
- LatentMoE / Stable LatentMoE:在降维隐空间运行路由专家的 MoE 变体(原始工作 arXiv:2601.18089)。K3 的 Stable 版本加了升维投影前的 RMSNorm、SiTU-GLU 与 QB,使其在 2.8T 规模下稳定。
- SwiGLU / SiTU-GLU:门控线性单元激活函数。SwiGLU 两个乘性因子都无界;SiTU-GLU 用
β·tanh(x/β)软帽约束两个因子(β₁=4、β₂=25,输出上界 100),抑制低精度下的激活外溢。 - Quantile Balancing(QB):无辅助损失、无超参的 MoE 负载均衡方法。先取路由分数相对截断阈值的 margin 分位数负值,再做零均值校正,得到专家偏置。出自苏剑林 2026 年 2 月的博客。
- Aux-loss-free 路由:不用辅助损失、而是给路由分数加专家偏置来做负载均衡的方案。偏置不进入混合权重,所以不干扰路由的梯度优化。
- Muon / Per-Head Muon:基于 Newton–Schulz 正交化的矩阵参数优化器。per-head 变体按注意力头分块正交化,均衡各头更新尺度。MuonClip 是 K2 使用的带权重裁剪变体。
- MoonViT-V2:K3 的视觉编码器,27 层约 0.4B 参数,从零用 next-token prediction 训练(不从 SigLIP 类对比预训练模型初始化),理由是联合优化的稳定性。
- MoonEP:K3 的专家并行训练方案。动态冗余专家实现完美负载均衡,证明每 rank 至多
E/R个冗余专家即可保证有解,配合零拷贝通信与全静态计算形状。 - KCP(KDA Context Parallelism):针对 KDA 循环状态的上下文并行方法。把每段效果拆成「累积转移」加「从零起算的本地状态」两个可本地计算量,一次固定大小 all-gather 完成跨设备同步。
- EP / TP / PP / CP / VP:专家并行、张量并行、流水线并行、上下文并行、虚拟流水线级。分别按专家、矩阵分片、层段、序列段切分计算。
- PD 分离(Prefill/Decode Disaggregation):把 prefill 与 decode 放到不同节点池的推理部署形态,KV Cache 需跨节点传输。
- KV throughput:SemiAnalysis 提出的指标——KV Cache 大小除以 prefill 时间(TTFT),代表 PD 分离下可靠服务一个模型所需的最小传输带宽。
- 前缀缓存(Prefix Caching):复用请求间相同前缀的 KV Cache 以跳过重复 prefill。对 KDA 需在边界保存状态快照,匹配粒度、快照保留策略和内存预算共同影响命中率。
- TTFT(Time To First Token):首 token 延迟,prefill 阶段耗时的直接体现。
- 缓存抖动(Cache Thrashing):KV Cache 容量不足导致条目反复换入换出,命中率崩塌。SemiAnalysis 在它测试的 B300 长上下文 Agentic 负载中,观测到理论 95% 命中率实测跌破 10%。
- DRAM 卸载:把超出 HBM 容量的 KV Cache 溢出到主机内存。Agentic 负载下的关键吞吐手段。层级顺序是 HBM → 服务器 DRAM → SSD。
- Mooncake Store / Transfer Engine:分布式 KV 缓存池与传输引擎,支持 write-through / write-back,可跨节点共享前缀缓存。K3 训练里也用它做跨 PP rank 的激活远程卸载。
- SFT / RL / GRM:监督微调、强化学习、生成式奖励模型(用打分模型给不可自动验证的任务产出评分,K3 用锦标赛式二元比较)。
- MOPD(Multi-Teacher On-Policy Distillation):多教师在线策略蒸馏。K3 用它把「3 个领域 × 3 档推理力度 = 9 个专家模型」合并进一个学生模型。
- Reasoning effort(推理力度):low / high / max 三档,通过 per-problem token 预算控制在 RL 阶段训出来。
- Partial rollout:RL 生成阶段只等 λ 比例的轨迹完成就暂停,未完成的排队到下一轮恢复,用来削长尾延迟。代价是数据陈旧,靠 per-token 正则化容忍。
- MTP(Multi-Token Prediction):预训练时并行预测多个未来 token 的辅助结构。K3 把它微调成投机解码草稿模型。
- 投机解码(Speculative Decoding)/ EAGLE-3 / LK 损失:小草稿模型先行生成、大模型批量验证的解码加速技术。K3 官方把 MTP 转换为 EAGLE-3 风格 draft model,并用 LK 损失直接优化接受率的负对数,而不是最小化 KL 这个替代目标。
- DSpark:Inferact 为 K3 训练和发布的半自回归、块扩散式解码方案。它和 EAGLE-3 的目标都包含解码加速,但不是同一种算法,也不是 SemiAnalysis 给 EAGLE-3 起的别名。参见 DSpark 论文。
- QAT(Quantization-Aware Training):训练阶段即模拟量化误差,使模型适应低精度部署。K3 的低精度范围主要是 routed MoE expert,其中权重采用 MXFP4、输入激活采用 MXFP8;非 expert 模块保留更高精度。RL 阶段 rollout 与训练共用同一量化方案。
- MXFP4 / MXFP8:微缩放块浮点格式,按小块共享缩放因子的 4 位 / 8 位浮点。
- AgentENV:K3 训练使用的 microVM 沙箱系统(基于 Firecracker,已开源),支持增量检查点(133ms / 49ms)、Pause/Resume、Fork、Snapshot。
- AET(Autonomous Execution Tasks):K3 的一类 RL 环境范式。只给目标、约束和验证接口,不给参考轨迹,奖励基于独立验证器对最终环境状态的评估。
- Agent harness / 白盒 RL 环境:Agent 的脚手架(工具接口、系统提示、上下文管理、skills、memories、subagents 等)。K3 把它抽象成可组合模块,训练时动态实例化 Kimi Code、Claude Code、Codex、OpenClaw、Hermes 等配置,避免过拟合到单一 harness。
- WSD(Warmup-Stable-Decay):三段式学习率调度。K3 在各自独立调优超参的公平对比下,发现 cosine 衰减的最终损失稳定优于 WSD。
- Scaling Law:模型损失随算力/参数/数据规模变化的幂律关系。K3 的 2.5× 效率提升即此口径(官方内部 OOD 验证集)。
- GPQA / HLE / CritPt / BrowseComp / SWE-Marathon / FrontierSWE / Terminal-Bench / OSWorld:正文出现的主要评测集,分别覆盖研究生级问答、综合难题、研究级物理推理、Agentic 网页检索、长程 GPU kernel 软件工程、长程软件工程、终端任务与计算机操作。
- Artificial Analysis / Vals AI / LMArena / OpenRouter / InferenceX:第三方评测指数、行业基准套件、人类偏好竞技场、模型 API 聚合平台,以及 SemiAnalysis 自家的推理性能测量平台。
10. 参考资料
其他被两份材料引用、本文提及的公开来源:Kimi Linear(arXiv:2510.26692)、Kimi K2(arXiv:2507.20534)、Kimi K2.5(arXiv:2602.02276)、LatentMoE(arXiv:2601.18089)、DSpark(https://arxiv.org/abs/2607.05147 )、苏剑林《MoE 环游记》系列第 6 篇(https://spaces.ac.cn/archives/11619 ,2026-02)、UK AISI 与 NIST CAISI 联合评估(https://www.aisi.gov.uk/blog/preliminary-assessment-of-kimi-k3s-cyber-capabilities ,2026-07)、K3 模型配置(https://huggingface.co/moonshotai/Kimi-K3/raw/main/config.json )、K3 KDA 实现(https://huggingface.co/moonshotai/Kimi-K3/raw/main/modeling_kimi_linear.py )、vLLM K3 Day-0 支持说明(https://github.com/vllm-project/vllm-project.github.io/blob/main/_posts/2026-07-27-k3.md )、Kimi API 定价(https://www.kimi.com/help/kimi-api/api-pricing )、OpenRouter K3 页面(https://openrouter.ai/moonshotai/kimi-k3-20260715 )、FlashKDA(https://github.com/MoonshotAI/FlashKDA )、MoonEP(https://github.com/MoonshotAI/MoonEP )、AgentENV(https://github.com/kvcache-ai/AgentENV )。
Footnotes
-
Kimi Team. Kimi K3: Open Frontier Intelligence(Technical Report of Kimi K3). arXiv:2607.24653v1 [cs.CL], 2026-07-27. 权重发布于 https://huggingface.co/moonshotai/Kimi-K3 ,官方博客 https://www.kimi.com/blog/kimi-k3 (2026-07-16)。本文中标注「官方报告」「官方口径」及带 § 章节号的内容均出自此。访问口径:截至 2026 年 8 月。 ↩
-
SemiAnalysis. Kimi K3, The Manos, The Mythos, The Legendos. 2026-08-03. https://newsletter.semianalysis.com/p/kimi-k3-the-manos-the-mythos-the 。本文中标注「SemiAnalysis」的内容均出自此。其中架构对照表、KV throughput 对比表与 TCO 成本构成图在原文中为图片;本文引用关键图表数字时按 PDF 标注重新验算。访问口径:截至 2026 年 8 月。 ↩