Kimi K3 架构篇:一文详解 2.8 万亿参数的K3模型如何训练
K3 训练时创建了 5121 万个沙箱。不是为了炫规模而是只有高保真环境才能让 RL 学会真实世界里的活儿。架构篇聊了 K3 的「身体结构」。但一个模型强不强身体只占一半另一半是「怎么喂数据、怎么调教」。这篇讲训练。我读报告时有个越来越强的感受K3 真正想做的事不是「在榜单上刷分」而是「训出一个能在长上下文里真正使用工具、写代码、做研究的 agent」。所以训练这一半的篇幅比架构还长而且大量笔墨花在「让训练环境像真实世界」上。这对我们做工程的其实更有启发很多时候模型不行不是网络不够深是训练数据和环境太假。图K3 的训练是一条完整的流水线语料 → 原生多模态 → 长上下文课程 → 后训练三段式 → 白盒环境、知识图谱、可验证奖励、沙箱四大支撑系统。下面分几块讲预训练数据、长上下文怎么训出来、后训练三段式SFT→RL→蒸馏、以及最精彩的「白盒环境 知识图谱任务合成」。预训练数据四域 视觉重点是「改写要保真」K3 的预训练语料覆盖四个文本域网页、代码、数学、知识再加一大块视觉语料图像描述、图文文档、OCR、视频、甚至视觉编程数据。数据管线本身不稀奇规则过滤、分类器打分、去重采样率靠在小模型上做消融定。但有一个细节我觉得值得记他们对「知识」和「数学」语料做了改写rephrasing用风格和视角多样的 prompt 来做 chunk 级自回归生成并且要拿生成结果和原始文档做「保真校验」。为什么这个重要因为直接抓来的网页和数学材料质量参差简单去重后还是有很多噪声。改写能把同一份知识用不同说法表达等于做了一次数据增强但如果不校验模型就会「学歪」记住改写引入的错误。他们专门加了一道 fidelity verification确保改写没篡改原意。这其实是数据工程里最容易被偷懒跳过、却最影响上限的一步。我自己做训练数据时也踩过这个坑不校验的增强短期 loss 好看长期净是幻觉。视觉数据里有个点我挺喜欢他们大量合成了「代码段 它渲染出来的图」这种配对覆盖 SVG、3D、网页、游戏、CAD。这意味着模型从预训练起就见过「写一段代码会画出什么」对后面做前端、做可视化是直接的养分。原生多模态从第一步就联合而不是事后嫁接很多多模态模型的做法是先训一个纯语言大模型再把视觉编码器「接」上去做对齐post-hoc alignment。K3 选了原生多模态策略训练一开始语言和视觉就在同一个 next-token 预测目标下联合优化文字 token 和视觉 token 交错着喂。好处是共享 backbone 从最早期就学到统一的多模态表示而不是「语言归语言、视觉归视觉、最后拼一下」。代价是工程上更难视觉编码器的计算量会卡在关键路径上报告后面用一整套流水线气泡隐藏技术把这块开销压下去了。我写部署篇会展开。顺带提一句 MoonViT-V2架构篇讲过它的视觉编码器是从零用 next-token prediction 训出来的不需要对比预训练优化过程比对比学习稳。这点和传统 CLIP 路线很不一样值得单拎出来记。一个诚实的 scaling law 研究比较要公平报告里有段关于学习率调度cosine decay vs WSD的讨论看似琐碎但我认为是整篇最有「工程师脾性」的地方。WSDWarmup-Stable-Decay之前被一些工作说成能打平甚至超过 cosine decay。K3 团队发现这两种调度在各自的最优超参下表现完全不同即便模型大小和训练 token 数一样它们的峰值学习率、batch size 最优值差很远。所以「用同一组超参去比两种调度」本身就是不公平的结果谁好谁坏全看那组超参更偏向谁。他们的做法是对每种调度都独立做一次 scaling law 搜索找到各自的最优超参再比。在各自的甜点上cosine decay 的最终 loss 稳定更低于是 K3 默认用 cosine decay。这个思路可以照搬到你自己的调参里比较两个方案先保证各自都调到最好再比。拿「都还凑合的超参」去比结论基本是噪声。我见过太多「我们试了 A 和 BA 更好」的汇报点到为止一问B 用的是 A 调剩下的超参。长上下文怎么训出来四阶段课程外加「合成长文档」K3 支持一百万 token 上下文。报告里讲了两层设计。第一层是 NoPE上一篇讲过因为位置信息靠递归门控隐式表达所以扩展上下文时不用改任何位置编码参数外推几乎免费。这是架构给训练铺好的路。第二层是渐进式课程。上下文窗口不是一上来就 1M而是跟着训练进度分阶段拉长预训练阶段从 8k 涨到 64kcooldown退火阶段再从 256k 拉到 1M。把最贵的长序列计算集中在训练预算的一小段里既便宜又让模型逐步适应更长的依赖。但光把窗口拉大没用报告很诚实地指出自然界里真正长且连贯的文档、视频太少了而且长素材里充斥着近似重复、二进制块、截断文件、机器生成的废日志。所以他们对长素材做了专门的清洗精确 模糊去重、视频帧感知哈希、质量过滤还刻意上采样长文档免得被短文本淹没。更关键的一步是「合成长上下文数据」他们小心地重新排列、拼接多模态文档和子任务使得嵌在里面的任务必须跨越整整一百万 token 去注意分散在各处的信息才能解。否则模型会偷懒退化成只看局部。这一点特别像我们做检索系统时的教训光给长文本不够得构造「不全局看就答不对」的任务模型才会真的用上长上下文。后训练三段式SFT → RL → 多教师蒸馏K3 的后训练是一条清晰的三段流水线监督微调SFT用高质量轨迹给模型一个冷启动策略强化学习RL在三个大域上把推理和执行的上限拉高多教师在线策略蒸馏MOPD把上一步训出的一堆「领域专家」合并回一个统一模型。图SFT 做冷启动RL 在 3 域 × 3 力度上拉出 9 个专家MOPD 把 9 个专家蒸馏回一个统一模型。SFT把复杂 agent 轨迹序列化SFT 阶段他们扩展了数据集重点覆盖复杂的 agentic 任务。做法是用上一代 Kimi 的领域专用模型合成轨迹再做多轮验证 人工标注。所有轨迹用一套叫 XTML 的 chat 模板序列化eXtensible Token Markup Language可以理解为给 token 加结构标记的对话格式类似给对话流打上工具调用、观察、思考的分层标签。还有个对部署很关键的决定从 SFT 阶段起就做量化感知训练QAT权重用 MXFP4、激活用 MXFP8。也就是说模型从微调第一天就知道「我最后要被压成 4-bit 跑」提前适应精度损失。这种「训练就为部署量身定做」的思路我写部署篇会详聊——它直接决定了 K3 能不能把 2.8 万亿压成 4-bit 还不崩。RL三域 × 三推理力度 九个专家RL 阶段他们没有给每个具体任务训一个专用模型而是铺了三个大域通用任务含视觉、推理、搜索、知识工作、通用 agent长程助理、深度研究、写作、编码 agent软件工程、内核、Web 开发。每个域又按「推理力度」分 low / high / max 三档于是交叉出 9 个专家模型。图三个大域 × 低/高/max 三档推理力度交叉出 9 个专家。推理力度预算 λ 退火控制成本。这里有两个工程细节我很欣赏。一是 partial rollout部分回滚。长程 agent 任务的轨迹可能拖得很长如果等非得等所有 rollout 跑完才更新会有大量「慢轨迹」拖垮整批。他们的做法是每轮迭代只等一定比例比如 NK 个的轨迹完成就先开始优化没跑完的排队下轮优先续跑。代价是数据会变「陈旧」off-policy但他们用 per-token 的正则化把这种极端 off-policy 稳住了。这对我们做异步系统的也是现成经验别等最慢的先推进再用正则兜住一致性。二是推理力度预算控制reasoning effort budget。他们对每个问题估一个初始 token 预算 b0超过λ·b0的轨迹直接判 -1 分。先训一个预算宽松的 max 变体再逐步把 λ 退火到小值得到 high 和 low 专家。本质是用奖励信号防止模型「想太多」在能力和 token 效率间取平衡。我们线上服务也常遇到这问题模型能答但啰嗦到成本爆炸得用预算把嘴缝上。奖励模型怎么防作弊Agentic GRM 四步协议奖励模型本身也防作弊这里值得多写几句。非可验证的任务用 Agentic GRM生成式奖励模型它强制走一个四步协议读产物read the artifact先真正看模型交出来的东西生成评分标准generate rubric针对这个具体任务临时写出打分维度按 rubric 打分score by rubric逐条对照给分写进 scorepadwrite to scorepad把评分过程和结论记下来可追溯。并且对输出长度设上限超了就判输专门对付「越长越啰嗦越能骗分」的 reward hacking。这套设计很像一个严谨的阅卷老师先看卷子再自己列评分标准然后按标准打分最后留痕。比那种「给个分数完事」的奖励模型难钻空子。MOPD把九个专家蒸馏回一个9 个专家很好但线上不能部署 9 个模型。MOPDMulti-Teacher On-Policy Distillation把不同域、不同推理力度的能力合并回一个模型对某个 (域, 力度) 组合用对应的教师模型给学生的每 token 输出打一个 OPD 奖励带 clip 截断避免极端优势信号把 RL 搞崩这个稠密奖励直接融进 RL 框架。报告说他们试过更细的 top-k 蒸馏目标没看到明显好处就用了这个更简单的。这点也值得记很多时候「更复杂的蒸馏目标」并不比「朴素目标 好基础设施」强别过度设计。我自己也常犯这毛病想着「既然能更细那肯定更好」结果在简单方案上多花一周benchmark 没动。白盒 RL 环境别让模型只认一种 harness这是我最想单独拿出来说的设计。如果 RL 只在一个固定的 agent harness比如某套固定的工具 schema、system prompt、上下文管理里训模型会过拟合那一套约定换个别的框架就懵。K3 的做法是搞一个「统一白盒 RL 环境」把 harness 表示成一堆可配置、可组合的模块工具接口、system prompt、上下文管理、skills、记忆、子 agent 等通过配置就能实例化出 Kimi Code、Claude Code、Codex、OpenClaw、Hermes 等主流 harness甚至完全新的。图把 harness 拆成可配置模块按需组合成不同 agent 框架。模型见够多样性就不会只认一种约定。训练时对不同任务组动态拼出不同 harness 配置让模型见到这些模块的各式组合而不是某一个 harness 的套路。顺带提一句报告里点名的 OpenClaw 正好是我自己也在跟的一个项目看到它能直接当 RL 环境的「标准模块」被实例化还挺惊喜的说明这类开源 harness 的生态位正在被认真当回事。这种「把环境做成可组合模块」的思路和我们搭测试基建时「用 fixture 抽象掉具体依赖」是一个道理模型见的多样性够了泛化才稳。需要诚实地说一句K3 这次同步开源了 MoonEP、FlashKDA、AgentEnv 这三项 Infra但报告里描述的训练数据、任务合成流水线和 RL recipe 本身并没有一并开源。也就是说我们能复现的是它「怎么跑」不是它「喂了什么」。知识图谱引导的任务合成让训练任务自己长出来训练任务从哪来K3 建了一个自演化、分层组织的知识图谱。做法很像一个有意思的 agent 系统图谱是有向无环图DAG边永远从粗概念指向细概念给每个节点派一个 agent让它做多次网络搜索去探究这个概念加新节点前先让 agent 去现有图里找等价或相关的能复用就复用减少重复一个分支探索到「这个概念已经够原子了」就停。图粗概念 → 细概念 → 原子概念边永远从粗到细每个节点由 agent 探究新节点先查重再复用。然后按想要的域/任务类型分布采样不同粒度的节点单个或成组相关节点用节点关键词 祖先节点的上下文去构造网络查询抓真实公开材料论文、博客、代码仓库再由一个合成 agent 产出训练任务编码类、知识类、视觉类等。我喜欢这个设计是因为它把「训练数据从哪来」从一个静态语料库变成了一个会自己生长的系统。模型越强图谱越厚能造的任务越刁钻形成正反馈。这比「人工写几千条题」更像是在养一片森林而不是摆一盆花。可验证环境从 kernel 优化到「假装上班」光有任务还不够奖励得可验证否则 RL 学歪。报告列了几类我很服的环境内核优化任务从单算子到融合 mega-kernel覆盖 CUDA、Triton、CuTe DSL、ThunderKittens、TileLang数值格式含 BF16/FP8/FP4。奖励同时看正确性和性能有 PyTorch 参考实现数值误差超阈直接 0 分性能对照专家实现摸到硬件 roofline 奖励趋近 1。还专门搞了「hacking 检测」惩罚 CUDA graph 重放、输入缓存、降精度这类钻空子的招而且新花招一出现就加进检测。个人助理任务用 Gmail、Notion、Slack、Canvas 的真·mock 实现保留核心语义但不依赖外部 API让 agent 在「跨好几天、事件互相依赖」的持久环境里干活单次 rollout 能到上千次工具调用、几百万上下文 token。自主执行任务AET每个任务给定初始状态、受限目标、工具空间、预算和一个独立验证器。agent 只看到目标和约束看不到参考轨迹必须自己分解、选工具、规划、从错误里恢复、自己决定何时停。奖励基于验证器对「最终环境状态」的评估而不是 agent 自报「我完成了」。还用「公开验证器给诊断反馈 隐藏验证器测留出场景」来防作弊。Web 开发任务从一句话到多段规格都有产物涵盖网站、游戏、3D/WebGL、数据可视化、SVG、全栈应用全在容器沙箱里跑用确定性检查 模型评判双重打分构建失败或「假装实现」直接 0 分。这些环境的共同点是奖励扎根在「可观测的最终状态」上而不是「过程看起来对」。这恰好是 RL 里最该守住的底线。我见过太多 agent 评测agent 把「我已经完成了」写进回复就拿到高分结果产物根本跑不起来。K3 这套把验证器当成一等公民是对的。沙箱基础设施AgentENV长程 agent 训练要跑海量沙箱。K3 用了一个叫 AgentENV 的 microVM 沙箱基于 Firecracker这次是与 KVCache.ai 合作开发的三个设计目标很实在高保真隔离容器跑 agent 时出过 kernel panic 和死锁microVM 隔离级别高得多又允许 agent 大胆探索挂盘、跑容器、甚至起虚拟机灵活的沙箱生命周期支持增量检查点/恢复checkpoint 和 resume 延迟低到 133ms / 49ms、暂停暂停的沙箱不占内存 CPU而 agent 等模型推理能占掉 98% 的生命周期这下省大了、fork从原状态克隆一个新沙箱做无副作用的奖励评判、snapshot定期快照做错误恢复高密度用 OverlayBD 镜像 自定义 ublk 驱动 写时复制内存实测内存超配比能到 6.5 倍。整轮训练评测里他们一共创建了 5121 万个沙箱、跨 150 万多个镜像。我特别服 checkpoint/resume 那组数字133ms 存、49ms 恢复。这意味着一个跑了几百万 token 的长程任务可以在任意点冻住、挪到别处、再续上几乎不花时间。没有这个能力长程 agent RL 根本玩不转——你想想一个任务跑三天中途机器要维护没法续就全废了。收尾训练篇的核心我觉得就一句话K3 把「训一个 agent」当成「造一个能真实干活的小世界」来做而不是「在题海里刷榜」。白盒环境防过拟合、知识图谱让任务自生长、可验证奖励守住底线、沙箱提供高保真又便宜的试验场。这些加起来的工程量可能比网络结构本身还吓人。下一篇部署篇我会讲训练完之后更硬的部分怎么把 2.8 万亿参数压成 4-bit 上生产线、怎么让 KDA 的递归状态在分布式和推理时都不掉链子、以及那一整套把成本压到前沿模型几分之一的 serving 设计。AisketchLab。下一篇《部署篇》见。