Kimi K3 的关键不是 2.8T:它重新设计了 Transformer 的扩展方式
看到 Kimi K3 的第一眼很多人会被两个数字吸引总参数约 2.8T每个 Token 激活约 104B 参数。于是一个很自然的判断出现了K3 的核心竞争力就是把 MoE 模型继续做大。但真正读完它的架构设计后我反而认为2.8T 是 K3 最不值得单独讨论的部分。因为参数规模只是结果。K3 真正解决的问题是当 Transformer 的上下文、层数和参数规模同时增长时如何避免计算成本、缓存成本和训练难度一起失控。传统 Transformer 的扩展通常有三个方向把上下文拉长让模型一次看到更多信息把网络堆深让模型完成更多层次的信息变换把参数做大让模型拥有更强的知识和能力容量。这三个方向看起来相互独立实际上都会遇到各自的扩展瓶颈。上下文变长后Attention 和 KV Cache 越来越昂贵。模型变深后早期信息会不断混入残差流深层网络未必还能准确取回需要的表示。参数变多后如果每个 Token 都调用全部参数单次推理成本将难以接受。K3 的特殊之处就在于它没有依赖某一个“万能创新”解决所有问题而是针对三个扩展方向分别设计了不同结构扩展方向传统瓶颈K3 的处理方式序列长度Attention 和 KV Cache 随上下文增长KDA 与 Gated MLA 混合网络深度历史层表示无差别累加AttnRes参数容量每个 Token 计算成本过高Stable LatentMoE 与稀疏激活数值精度训练精度与部署精度脱节MXFP4、MXFP8 与量化感知训练理解这张表才算真正进入 K3 的技术核心。一、长上下文真正难的不是“窗口开到一百万”很多模型发布时都会强调支持 128K、256K甚至一百万 Token 上下文。这很容易给人一种错觉长上下文只是把最大输入长度调大。实际上当上下文从 8K 增长到 1M 时模型面对的并不是一个配置问题而是计算和存储结构发生了数量级变化。1. Softmax Attention 为什么会越来越贵标准 Attention 的核心计算可以写成\text{Attention}(Q,K,V) \text{Softmax} \left( \frac{QK^T}{\sqrt{d}} \right)V假设序列长度为 (n)。在 Prefill 阶段模型需要计算大量 Token 之间的相关性。完整 Attention 矩阵的大小与 (n^2) 同阶。也就是说n10,000和n1,000,000并不是简单相差 100 倍。如果按照完整两两关系计算矩阵规模可能相差约一万倍。进入生成阶段后模型虽然不需要每次重新计算完整 Attention 矩阵但必须保存历史 Token 对应的 Key 和 Value也就是 KV Cache。KV Cache 的占用大致受以下因素影响\text{KV Cache} \propto \text{上下文长度} \times \text{层数} \times \text{KV 维度} \times \text{数据精度} \times \text{并发序列数}这里最容易被忽略的是最后一项并发序列数。单条一百万 Token 请求能够放进显存并不代表推理服务可以同时处理几十条同样长度的请求。所以真正的长上下文问题不是模型能不能读完一百万 Token而是模型读完一百万 Token 后还能不能保持合理的缓存占用、生成速度和并发能力二、KDA把无限增长的历史写进有限大小的状态K3 没有让全部 93 层都使用传统 Attention。它使用了69 层 KDA24 层 Gated MLA。整体上接近三层 KDA 配一层 Gated MLA 的混合结构。这不是随意组合而是在“历史压缩”和“精确检索”之间做出的结构性分工。1. KDA 改变了什么传统 Attention 会显式保存大量历史 Token 对应的 Key 和 Value。KDA 的思路不同。它不要求每一次查询都重新访问所有原始历史位置而是把历史信息不断写入一个可更新的状态。为了理解 Delta Rule可以使用一个不对应官方全部实现细节的简化表达。设当前记忆状态为 (S_{t-1})当前输入产生 Key (k_t) 和目标 Value (v_t)。模型先从旧状态中读取一个预测值\hat{v}*tS*{t-1}k_t然后计算预测结果和目标值之间的误差e_tv_t-\hat{v}_t最后根据误差更新记忆S_t G_t\odot S_{t-1} \eta_t e_tk_t^T其中(G_t) 控制旧记忆保留多少(\eta_t) 控制本次写入强度(e_t) 是需要修正的信息(e_tk_t^T) 决定将修正写入什么位置。这里最重要的不是公式本身而是更新逻辑KDA 不是把每条新信息无条件追加到历史中而是先检查现有记忆是否已经表达了这条信息再写入尚未表达正确的部分。假设模型先读到“项目将在 8 月 1 日上线。”后来又读到“由于测试延期项目上线时间调整为 8 月 15 日。”简单堆叠式记忆可能同时保留两个日期。Delta 更新则更倾向于根据“项目上线时间”读取旧状态发现当前记忆仍指向 8 月 1 日计算新旧值的差异修正相关记忆。这也是“Delta”这个名字的含义写入的重点不是完整新值而是当前状态需要被修正的部分。2. 为什么这种结构适合长上下文传统 KV Cache 会随着序列增长不断扩张。循环状态类结构的关键优势是可以把大量历史压缩到相对固定大小的状态中。这意味着在理想情况下历史从 10K 增长到 100K从 100K 增长到 1M核心记忆状态不必按照相同比例增长。这就是线性注意力在长上下文中的吸引力。Kimi Linear 的公开实验表明在特定百万上下文设置中其混合注意力架构相较全 MLA 基线最多可以减少约 75% 的 KV Cache并获得最高约 6 倍的解码吞吐提升。这里必须强调这是 Kimi Linear 实验模型在特定配置下的结果不能直接理解成完整 K3 在任何工作负载中都会获得 6 倍提升。真正值得关注的是方向KDA 试图把长上下文成本从“保存全部历史位置”转化为“持续维护有限状态”。三、为什么 K3 没有全部使用 KDA如果 KDA 能够显著降低长上下文成本为什么 K3 还要保留 24 层 Gated MLA答案在于压缩和精确检索之间存在天然矛盾。1. 压缩状态不等于原始记录假设模型需要处理一份超长合同。合同中有一句“第 873 页第 4.2 条规定逾期付款的违约金比例为 17.35%。”如果模型只需要回答“合同是否规定了逾期付款违约金”压缩状态很可能足够。因为模型只需要保留一个语义事实合同存在逾期付款违约金条款。但如果问题变成“违约金比例具体是多少”模型必须恢复一个精确数值17.35%。这类信息对压缩记忆更加困难。因为固定大小的状态需要同时容纳大量人物、数字、代码、日期和语义关系。随着输入不断增加不同记忆之间可能产生干扰。线性注意力最难处理的往往不是“理解大意”而是从极长历史中精确恢复某个低频细节。2. MLA 保留了一条显式历史检索路径MLA 的全称是 Multi-head Latent Attention。它不会像传统多头注意力那样完整保存所有 Key 和 Value而是先把它们压缩到更低维的 latent 表示。因此MLA 也能降低 KV Cache。但它与 KDA 的关键区别在于MLA 仍然保留了与历史 Token 位置相关的缓存查询时仍能对历史位置执行显式检索。可以把二者的分工理解为KDA 更擅长维护长期、压缩、不断更新的语义状态。Gated MLA 更擅长在必要时回到显式历史表示中恢复精确细节。所以K3 的混合注意力并不是“新旧技术拼在一起”而是一种职责划分大部分层负责低成本维护长期状态少部分层负责恢复全局精确检索能力。这比“彻底用线性注意力替换 Softmax Attention”更加保守却也更符合实际工程需求。因为长上下文模型同时需要两种能力对整篇文档形成稳定理解在需要时准确找到某个原始细节。纯压缩结构擅长第一种。显式历史检索更擅长第二种。K3 没有在两者中二选一而是把二者放进了同一个网络。四、AttnResTransformer 不只是序列太长网络本身也会太深KDA 解决的是序列方向的扩展问题。AttnRes 处理的是另一个较少被普通开发者关注的问题当 Transformer 层数越来越多时信息究竟如何穿过整个网络1. 传统残差连接并不是没有代价标准 PreNorm Transformer 的残差更新可以简化为x_lx_{l-1}F_l(x_{l-1})不断展开后可以近似理解成x_l x_0 F_1 F_2 \cdots F_l也就是说当前层看到的是原始输入和前面所有层更新的累计结果。残差连接解决了深层网络难以训练的问题。它为梯度和信息提供了一条直接通道使每一层只需要学习“在原有表示上增加什么”。但当模型变得非常深时这种累加方式也会产生新问题。所有历史更新都被放进同一条残差流中后面的层很难区分哪些信息来自输入 Embedding哪些是浅层提取的局部结构哪些是中层形成的语义关系哪些是深层推理结果哪些只是中间计算产生的噪声。传统残差连接的默认假设近似是之前所有层产生的更新都以固定方式继续传递。这在层数较少时非常有效。但当网络变成几十层甚至上百层时模型可能需要的不再只是“继续累加”而是“选择性取回”。2. AttnRes 把 Attention 引入网络深度普通 Attention 解决的问题是当前 Token 应该关注哪些历史 TokenAttnRes 解决的问题是当前层应该读取哪些历史层它将当前层的输入表示为多个历史层表示的加权组合h_l \sum_{i0}^{l-1} \alpha_{i\rightarrow l}v_i其中(v_i) 是第 (i) 层产生的表示(\alpha_{i\rightarrow l}) 是当前第 (l) 层对第 (i) 层的权重。传统残差更接近\alpha_{i\rightarrow l}1即历史更新持续累加。AttnRes 则允许这些权重根据当前输入动态变化。例如模型处理代码时不同阶段可能需要不同层次的信息。识别变量名、括号结构和局部语法时浅层表示可能更加重要。分析函数职责、跨文件依赖和系统架构时中高层表示可能更加有用。检查是否偏离用户原始任务时又可能需要重新读取早期输入表示。AttnRes 让深层模型不再只能被动接收一条不断混合的残差流而是可以在深度方向重新检索。这是 K3 中非常值得重视的一项设计。因为它说明Attention 的使用范围已经不再局限于 Token 之间。Attention 本质上是一种选择机制。只要系统中存在大量候选信息并且不同任务需要选择不同信息就有可能引入 Attention。在传统 Transformer 中候选信息是历史 Token。在 AttnRes 中候选信息变成了历史层。3. Block AttnRes 为什么必要如果每一层都保存并直接访问所有历史层输出代价同样会不断增长。假设模型有 93 层。第 93 层若要访问前面 92 层的完整表示就会引入额外的内存访问、状态保存和计算成本。因此AttnRes 又引入了 Block 化设计。它不要求后续层逐一查看所有历史层而是将若干层组织成一个 Block并形成 Block 级表示。例如第 1 至 12 层形成一个 Block第 13 至 24 层形成一个 Block第 25 至 36 层形成一个 Block。后续层主要在少量 Block 表示之间做选择而不是访问全部历史层。这和长文档检索的思想很相似。直接访问每一页精度最高但成本也最高。先形成章节级表示再根据任务选择相关章节成本更可控。Block AttnRes 本质上是在“细粒度访问能力”和“可扩展性”之间做折中。它解决的不是模型能否继续堆层而是网络堆深以后后面的层还能否高效地找到真正需要的历史表示五、2.8T 参数和 104B 激活参数分别意味着什么理解 K3 的 MoE 设计首先必须分清两个概念总参数激活参数。这是分析所有超大 MoE 模型的第一步。1. 总参数决定容量也决定存储下限K3 总参数约为 2.8T。这意味着模型中所有专家、共享层、注意力结构、Embedding 和其他模块加起来拥有约 2.8 万亿个参数。无论某个 Token 最后调用多少专家这些权重都必须存放在某个位置。因此总参数主要决定模型权重需要多少存储空间需要多少显存或主存权重如何切分到不同设备模型最少需要多大的硬件容量。“某次推理没有使用这个专家”并不意味着这个专家的权重可以不存在。2. 激活参数决定一次前向的大致计算规模K3 每个 Token 激活约 104B 参数。它拥有 896 个路由专家每个 Token 从中选择 16 个并额外经过共享专家。因此单个 Token 不需要让全部 2.8T 参数参与计算。这正是 MoE 的核心价值\text{超大总容量} \text{有限单次计算}但这里有一个常见误区104B 激活参数不等于 K3 就是一台 104B Dense 模型。原因是 MoE 还需要完成额外步骤Router 为 Token 计算专家分数选择 Top-K 专家将 Token 分发给目标专家各专家分别执行计算汇总专家输出处理专家容量和负载不均衡问题。所以激活参数只能近似反映矩阵计算规模不能完整代表真实推理成本。一个 104B Dense 模型和一个激活 104B 的 MoE 模型计算组织方式并不相同。Dense 模型更像一条连续的大型计算路径。MoE 则包含动态路由和大量稀疏分支。六、Stable LatentMoE先压缩表示再进入专家网络K3 的专家系统并不是直接在主干隐藏维度上执行。根据公开架构信息K3 的主干 Hidden Dimension 为 7168而 Latent MoE Dimension 为 3584。可以将这一过程理解成7168 \rightarrow 3584 \rightarrow \text{Experts} \rightarrow 7168也就是将主干 Hidden State 投影到较低维的 latent space在 latent space 中执行路由和专家计算再把专家结果映射回主干空间。为什么要多做一次投影因为专家数量非常多。如果 896 个专家全部直接在完整 7168 维空间中工作专家层参数量和每次专家计算成本都会进一步增长。LatentMoE 将两个目标分开主干 Hidden Dimension 负责全局表达能力Latent Dimension 控制专家计算成本。这是一种很典型的“解耦”设计。模型不再要求主干表示有多宽专家内部就必须有多宽。而是允许主干保持较高表达维度专家在更经济的潜在空间中完成稀疏计算。这也是 Stable LatentMoE 名称中 “Latent” 最值得理解的部分。它不是简单增加专家数量而是在重新设计专家工作的表示空间。七、MoE 最难的不是选 16 个专家而是避免路由系统失控很多介绍 MoE 的文章到“每个 Token 选择部分专家”就结束了。但真正训练超大 MoE 时这只是开始。Router 至少要解决三个问题第一专家能否形成差异化如果所有专家最后学到的内容几乎相同那么 896 个专家只是重复存储。MoE 的总参数虽然很大但并没有转化成真正不同的能力。第二Router 能否选对专家即使模型内部存在合适专家如果 Router 没有把 Token 发送给它这部分能力也不会被使用。因此MoE 的有效能力取决于\text{专家能力} \times \text{路由准确性}专家本身很强但路由错误结果仍然不好。第三专家负载能否保持平衡假设某个批次的路由结果是专家 A10,000 个 Token专家 B8,000 个 Token专家 C100 个 Token专家 D20 个 Token。专家 C 和 D 很快完成计算。但整个批次仍然必须等待专家 A。此时系统性能取决于最繁忙的专家而不是平均负载。这就是分布式系统中的 Straggler 问题。MoE 中还可能出现专家坍缩某些专家早期略微占优Router 更愿意选择这些专家它们获得更多训练样本能力进一步增强Router 更加依赖它们其他专家逐渐失去训练机会。最终模型名义上有大量专家实际长期活跃的却只有少数几个。Quantile Balancing 的意义K3 使用 Quantile Balancing 处理专家平衡。它不是只依赖固定阈值或人工反复调整的启发式参数而是利用 Router 分数分布中的分位信息推导更合适的专家分配边界。这里需要避免一个误解负载均衡并不意味着每个专家永远收到完全相同数量的 Token。如果强行平均Router 可能为了平衡而把 Token 交给不合适的专家损害模型能力。理想的平衡机制需要同时考虑两个目标让 Token 尽量进入最合适的专家避免少数专家长期过载。这两个目标并不总是一致。所以MoE 路由本质上是一个多目标优化问题而不是简单的 Top-K 分类。896 个专家决定模型有多大的潜在容量。Router 和负载平衡机制决定这些容量能否真正被使用。八、量化为什么开始进入训练过程完成架构设计后K3 还要面对一个非常现实的问题2.8T 参数即使采用低精度依然是一个极其庞大的模型。过去大模型常见的量化路径是使用 BF16 或 FP16 完成训练得到高精度模型在部署前再进行 INT8 或 INT4 量化。这种方法被称为训练后量化也就是 PTQ。它的问题在于训练阶段的模型从未真正经历过部署时的低精度误差。假设某个权重原本为0.183726量化后可能只能表示为0.1875单个权重的误差很小。但模型中存在万亿级参数误差还会经过数十层矩阵运算、非线性激活和残差累积。最终结果可能是困惑度上升长文本能力下降推理稳定性降低某些敏感任务出现明显能力损失。K3 的处理方式K3 使用MXFP4 权重MXFP8 激活。并从 SFT 阶段开始引入量化感知训练。这里的表述需要准确这不代表 K3 从预训练第一步开始所有计算都完全使用 4bit。更准确的理解是从 SFT 阶段开始训练过程会模拟目标低精度格式产生的误差让模型通过梯度更新适应最终部署环境。量化感知训练的逻辑是前向传播时模拟量化模型看到量化后的近似数值损失函数反映量化误差带来的能力下降反向传播调整权重分布模型逐渐学会在目标精度下保持能力。这意味着量化不再只是部署团队最后进行的模型压缩。它已经进入训练目标本身。MXFP4 为什么不等于普通 INT4MXFP4 属于 microscaling 浮点格式。它的基本思路不是让整个张量共享一个巨大范围而是让较小的数据块共享 Scale块内元素使用低位宽浮点数表示。可以理解为x_i \approx s_b \times q_i其中(s_b) 是当前数据块共享的缩放因子(q_i) 是低位宽浮点表示不同数据块可以使用不同 Scale。这种设计让低位宽格式在保留较低存储成本的同时获得比固定整数范围更灵活的动态范围。K3 使用 MXFP4 存储权重而激活使用更高的 MXFP8。原因也不难理解权重在推理期间基本固定数值分布相对稳定激活取决于输入内容变化更加剧烈激活需要更大的动态范围来避免溢出或精度损失。因此权重可以更加激进地压缩而激活通常需要保留更高精度。九、把 K3 拆开之后会发现它其实在做同一件事KDA、Gated MLA、AttnRes、Stable LatentMoE、Quantile Balancing 和量化感知训练看起来属于完全不同的技术方向。但它们背后的目标是一致的让模型规模继续扩大但不让成本按照传统方式同步扩大。KDA 解耦的是\text{历史长度} \quad\text{与}\quad \text{记忆状态大小}AttnRes 解耦的是\text{网络深度} \quad\text{与}\quad \text{历史信息访问方式}MoE 解耦的是\text{模型总容量} \quad\text{与}\quad \text{单 Token 计算量}LatentMoE 进一步解耦\text{主干表达宽度} \quad\text{与}\quad \text{专家计算维度}量化感知训练解耦的是\text{模型能力} \quad\text{与}\quad \text{高精度部署成本}所以K3 真正的技术主题不是“大”。它的技术主题是解耦。传统 Scaling 路线中很多变量会被绑定在一起上下文越长KV Cache 必然越大网络越深残差流必然越混合参数越多单 Token 计算必然越高模型越强部署精度似乎就必须越高。K3 的每一项结构创新都在尝试打破其中一组绑定关系。这也是理解 Scaling Efficiency 的关键。所谓 Scaling Efficiency不只是用更少 FLOPs 获得更高 Benchmark 分数。它更深层的含义是当某一个能力维度继续扩大时系统能否避免其他成本按照相同比例恶化十、K3 并没有“取代 Transformer”它展示了混合架构的现实价值技术传播很喜欢“新架构淘汰旧架构”的故事。但 K3 并不是这样的故事。它没有完全抛弃 Softmax Attention而是保留 Gated MLA。它没有完全依赖循环状态而是混合显式历史检索。它没有把所有参数都做成稀疏专家而是保留共享专家和公共主干。它没有只追求最低精度而是让权重和激活采用不同格式。它没有让每一层访问所有历史层而是引入 Block AttnRes 控制成本。这说明一个很现实的架构规律成熟系统通常不是选择某一种机制做到极致而是让不同机制在各自擅长的区域工作。KDA 擅长维护低成本长期状态但精确细节恢复存在风险。MLA 成本更高但保留了显式历史访问路径。MoE 可以扩大总容量但会引入路由和负载平衡问题。AttnRes 改善深度信息访问但需要 Block 化控制额外开销。低精度可以降低存储和带宽压力但必须通过训练适应误差。K3 的价值不在于宣称某个技术没有缺点。恰恰相反它承认每种结构都有边界然后用另一种结构补足边界。十一、对普通开发者而言K3 最值得学习的是什么绝大多数开发者不会训练一个 2.8T 模型也没有必要部署完整 K3。但 K3 背后的设计思想并不只适用于基础模型。1. 长期记忆不能只有一种形态做 Agent、RAG 或企业知识系统时经常有人选择两个极端保存全部历史只保存一份摘要。更合理的设计通常是分层记忆原始记录保存精确证据结构化状态保存当前任务信息动态摘要保存长期语义向量检索负责找回历史细节。这本质上与 KDA 和 MLA 的混合思路一致高频访问的信息进入压缩状态低频但必须精确的信息保留可检索原文。2. 历史状态不是越多越好很多 Agent 系统会把全部历史消息、工具结果和日志重新塞回模型。这种方法短期简单长期一定会遇到上下文膨胀关键信息被淹没历史错误持续污染后续步骤推理成本不断上升。AttnRes 提供的启发是系统不应该只是继承历史而应该学习选择历史。规划阶段、执行阶段、验证阶段和失败恢复阶段需要的上下文并不相同。3. 总能力和单次调用成本应该分开设计MoE 的思想也可以迁移到 Agent 平台。一个企业 AI 系统可以拥有代码分析能力文档解析能力数据分析能力合同审核能力流程执行能力质量验证能力。但每个任务不应该调用全部模块。合理的方式是识别任务类型选择必要能力执行并验证必要时再调用其他模块。这就是软件系统中的稀疏激活。4. 部署限制必须进入设计阶段K3 的量化路径说明部署约束不应该等系统完成以后再考虑。企业 AI 项目从设计阶段就应该明确最大上下文是多少单次请求允许多少延迟是否需要并发模型运行在本地还是 API是否允许低精度需要保存哪些状态出错后如何恢复。一个完全忽略部署条件的模型方案通常不是先进而是不完整。十二、结语2.8T 只是表面扩展效率才是主线如果只用一句话概括 K3我不会说它是一个拥有 2.8T 参数的超大 MoE 模型。我更愿意把它概括为K3 是一次围绕 Transformer 扩展效率进行的系统重构。它分别回答了四个问题。上下文越来越长怎么办使用 KDA 压缩长期状态同时保留 Gated MLA 提供精确检索。模型越来越深怎么办使用 AttnRes 在网络深度方向选择历史表示而不是只依赖无差别残差累加。参数越来越多怎么办使用 Stable LatentMoE 扩大总容量让每个 Token 只激活部分专家。低精度部署损害能力怎么办从 SFT 阶段开始进行量化感知训练让模型主动适应 MXFP4 权重和 MXFP8 激活。这些设计并没有消除大模型的成本。K3 依然需要巨大的权重存储、复杂的推理系统和高性能硬件。它真正证明的不是“硬件不再重要”而是当模型规模接近传统架构的成本极限时继续扩展不能只靠堆参数还必须重新设计信息存储、网络深度、专家路由和数值精度。参数规模决定模型有多大。扩展效率决定这个模型是否真正可训练、可运行、可继续演进。这才是 Kimi K3 最值得研究的地方。