/ Kimi
[Kimi-1] Kimi k1.5 技术报告:用 128K 长 CoT 扩展强化学习
系统解读 Kimi k1.5:从可验证 RL prompt、Long-CoT SFT、在线 mirror descent 策略优化,到长度惩罚、partial rollout、训推混合部署、多模态训练与 long2short。
Kimi k1.5 最容易被记住的是一组结果:长 CoT 模式在 AIME 2024 上达到 77.5、MATH-500 达到 96.2、Codeforces 达到 94 百分位、MathVista 达到 74.9;短 CoT 模式也在 AIME 2024 上达到 60.8。1
但这份报告真正值得拆解的,不是它在 2025 年初追平了哪些模型,而是它给出了一条非常明确的 reasoning scaling 路线:
把更长的输出上下文视为更多搜索步,用结果奖励训练模型在单条自回归轨迹中完成探索、反思、纠错和回退,再用系统优化把 128K rollout 的成本降下来。
这条路线刻意没有依赖 Monte Carlo Tree Search(MCTS)、value function 或 Process Reward Model(PRM)。它把显式搜索树“压平”进上下文,让模型自己学习隐式搜索;训练侧则用在线 mirror descent 变体、课程采样、长度惩罚和 partial rollout 支撑规模化 RL。1
本文基于 Kimi Team 发布的 《Kimi k1.5: Scaling Reinforcement Learning with LLMs》v4。需要先说明:报告公开了相当多的训练方法和系统设计,但没有披露模型参数量、RL prompt 总规模、总训练 token、算力成本等关键规模信息。因此,我们可以分析“方法怎样工作”,却不能仅凭报告复现 k1.5,也不能完整判断各项收益与成本。
1. 先看完整训练链路#
Kimi k1.5 不是从 base model 直接开始 RL。报告给出的链路包含四个主要阶段:1
多模态预训练
-> Vanilla SFT
-> 少量高质量 Long-CoT SFT warmup
-> 长上下文 RL
-> Long2short(可选,得到短 CoT 模型)其中各阶段承担不同职责:
| 阶段 | 主要目标 | 关键做法 |
|---|---|---|
| 多模态预训练 | 建立语言、知识、代码、数学和视觉基础 | 三阶段预训练,最后激活 131,072 token 上下文 |
| Vanilla SFT | 获得通用指令跟随能力 | 约 100 万文本样本和 100 万图文样本 |
| Long-CoT SFT | 给 RL 一个会展开推理的起点 | 用 prompt engineering + rejection sampling 构造少量可验证长推理轨迹 |
| 长上下文 RL | 学会探索、纠错并提高最终答案正确率 | 结果奖励、mirror descent 变体、采样策略、长度控制 |
| Long2short | 把长推理能力压缩到更小 token 预算 | 模型合并、最短拒绝采样、DPO、二阶段 RL |
这里最重要的分工是:SFT 教模型“长推理大致长什么样”,RL 再通过成败反馈发现哪些推理行为真正有用。 如果完全依赖 SFT,模型只能模仿已有轨迹;如果从普通指令模型直接做超长 RL,探索空间又太大,昂贵 rollout 很可能被无效重复和错误路径占满。
2. 长 CoT 的本质:把搜索树压进上下文#
传统 planning 方法会显式维护搜索树。一个节点表示当前的部分解,critic 或 value model 评估节点质量,搜索算法再决定扩展、剪枝或回退哪个分支。
Kimi k1.5 提出另一种视角:思考、评价、反思和回退最终都可以表示成 token 序列,那么可以把搜索历史线性化到同一段上下文中:
显式搜索:状态树 + 节点评分 + 搜索调度器
隐式搜索:问题
-> 尝试路径 A
-> 发现矛盾
-> 回顾错误
-> 尝试路径 B
-> 验证答案上下文越长,模型在一次回答里可执行的“搜索步”就越多。报告将 token 数类比为 planning algorithm 的计算预算:模型仍然只做标准自回归生成,但生成的轨迹开始表现出规划、评估、反思和探索。1
这个观点很诱人,但要注意两个边界。
第一,长输出只是搜索预算,不保证搜索质量。模型可能把预算用于重复、绕路或自我确认。报告后面加入 repeat detection 和 length penalty,正说明“更多 token”与“更多有效搜索”不是一回事。
第二,线性轨迹不等价于真正的树搜索。一条 CoT 可以描述回退,却不能像 MCTS 那样并行保存、比较和重用大量分支。k1.5 证明的是:在一批可验证 reasoning 任务上,足够长的单轨迹配合 RL 已能达到很强的结果;它没有证明显式搜索从此没有价值。
3. RL 数据:奖励可验证比题目看起来难更重要#
k1.5 的目标可以简化为:给定问题 和标准答案 ,模型生成推理轨迹 与最终答案 ,再最大化最终答案奖励:
奖励通常是二值的:代码由测试用例执行判断;结构化数学答案可用规则或 reward model 判断。整条 CoT 不逐步打分,只看它最终是否导向正确答案。1
因此,RL prompt set 必须同时满足三件事:
| 属性 | 为什么重要 |
|---|---|
| 覆盖多样 | 防止策略只适应单一题型,数据覆盖 STEM、代码、通用推理以及图文任务 |
| 难度均衡 | 过易题没有有效梯度,过难题又几乎采不到正确轨迹 |
| 可准确评测 | 奖励一旦误判,模型会优化 verifier 漏洞,而不是推理能力 |
3.1 用模型自身通过率估计难度#
对每道候选题,SFT 模型以较高温度采样 10 次,以通过率作为难度代理。通过率越低,题目相对当前模型越难。这个定义不是在判断题目的绝对难度,而是在测量题目位于当前策略的能力边界何处。1
这使后续两种采样策略成为可能:
- Curriculum Sampling:先训练较容易的问题,再逐渐转向难题;
- Prioritized Sampling:跟踪每道题的成功率 ,按 提高弱项的采样概率。
RL 数据不是一个训练开始后就固定不变的静态集合。模型能力变化后,原来的难题可能变容易,采样分布也需要随之调整。
3.2 先排除容易被“猜中”的奖励#
多选、判断和证明题被排除在主要 RL prompt set 之外,原因不是它们没有推理价值,而是最终答案太容易让 verifier 产生 false positive:模型可能过程完全错误,却碰巧猜中选项或结论。1
报告还采用了一个直接的过滤方法:要求模型不输出 CoT,直接猜答案;如果 8 次以内能猜中,就把题目视为容易 hack 并移除。
这揭示了结果奖励 RL 的一个基本约束:
奖励不只要客观,还必须让“绕过推理直接撞对答案”的概率足够低。
对自由形式数学答案,团队分别用约 80 万样本训练 Classic RM 和会读取推理过程的 CoT RM。内部人工 spot check 中,两者准确率分别为 84.4% 和 98.5%,最终 RL 使用 CoT RM。1 这不是公开 benchmark 成绩,但能解释为什么论文一面强调 outcome reward,另一面仍投入大量工作提高答案等价性判断:只在轨迹末尾打分,并不意味着 verifier 可以很弱。
4. 策略优化:为什么它看起来像 GRPO,却不是同一个公式#
k1.5 使用 online policy mirror descent 的一个变体。第 轮把当前策略 作为 reference,优化带 KL 正则的新策略:1
KL 项限制单轮更新幅度:新策略既要提高奖励,也不能一步偏离采样它的 reference 太远。论文从这个目标的闭式最优解出发,构造了一个平方误差形式的 surrogate loss。实际训练时,每个问题采样 个回答,并用组内平均奖励
近似难以直接计算的归一化项。最终梯度可以概括成两部分:
第一项用组内相对奖励增加正确轨迹概率、降低错误轨迹概率;第二项用 log-ratio 的二次正则约束策略漂移。它和 GRPO 一样利用同题多样本及组内 baseline,但论文的推导起点、off-policy 解释与正则形式并不等同于直接套用 GRPO。1
每轮训练结束后,更新后的模型成为下一轮 reference,并重置 optimizer。这样每一轮实际上都在解一个 reference 不同的新优化问题。
4.1 为什么不训练 value network#
省掉 critic 最直接的收益是降低内存和训练成本,但报告给出的理由更有意思:传统 token-level credit assignment 可能过早惩罚“暂时走错”的推理分支。1
假设模型中途选择了错误步骤,但随后识别错误、回退并得到正确答案。局部 value function 可能给错误步骤负 advantage;只看最终结果的奖励却会保留整段经验,让模型学习完整的 trial-and-error 模式。
这个选择的代价同样明显:最终答案奖励非常稀疏,无法判断长轨迹中究竟哪些步骤有贡献。k1.5 的方案不是解决了 credit assignment,而是做了一个取舍:宁可接受粗粒度信用分配,也不让局部 critic 过早压制探索。
4.2 错误样本也必须产生负梯度#
报告将自身方法与 ReST 做了对比。ReST 反复拟合当前模型采出的最佳回答,却不显式降低错误回答概率;k1.5 的消融显示,引入错误样本的负梯度后,长 CoT 训练的 sample efficiency 更高。1
直觉上,只模仿正确轨迹回答的是“应该怎么做”;同时压低错误轨迹,才回答了“哪些探索模式应该避免”。在昂贵的长 rollout 中,后者尤其重要。
5. 长度惩罚:目标不是越短越好,而是正确前提下更短#
RL 训练中,回答长度与准确率一起增长。更多 token 给了模型更多探索机会,但也出现明显 overthinking:简单问题被反复验证,错误轨迹拖到最大长度,训练和服务成本迅速上升。1
对同一道题的 个采样,记第 个回答长度为 。论文先将长度归一化成:
再根据答案是否正确定义长度奖励:
它表达了三个偏好:
- 正确且更短的回答获得正奖励;
- 正确但更长的回答被相对抑制;
- 错误回答不会因为“短”而得到奖励,错误且很长则额外受罚。
如果一开始就施加强长度惩罚,模型可能还没学会解题就先学会提前结束。因此 k1.5 先进行一段不带长度惩罚的标准训练,再逐渐启用固定惩罚。这是典型的能力与效率分阶段优化:先让模型找到答案,再要求它少走弯路。
6. Partial Rollout:128K RL 真正的系统支点#
长 CoT 会给同步 RL 系统带来严重的 straggler 问题。同一批任务中,有的回答几百 token 就结束,有的可能持续数万 token;如果每轮必须等待最长轨迹完整生成,短任务完成后的 GPU 会持续空等。1
k1.5 为每轮 rollout 设置固定输出 token budget。轨迹超过预算时不丢弃,也不从头重采样,而是切开保存到 replay buffer,下一轮继续:
iteration n-2: [已有前缀 A] ----达到本轮预算----> 保存
iteration n-1: [复用前缀 A][新片段 B] -------> 保存
iteration n: [复用 A+B][新片段 C][答案] ---> 完成并评分只有当前迭代新生成的片段需要按当前策略计算;历史片段可以直接复用,部分片段也可不参与 loss。这样做有三个收益:
- 每轮 rollout 时间被固定预算约束,不再由极端长尾决定;
- 已生成的长前缀得到复用,不必每次从问题重新 decode;
- 异步 rollout worker 可以在部分 worker 处理长轨迹时继续接收短任务。
系统还会检测重复序列并提前终止,既节省生成成本,也可对重复行为施加额外惩罚。1
6.1 Partial rollout 带来的策略陈旧问题#
一条轨迹可能跨越多个 iteration。它的早期片段来自旧策略,最后片段来自更新后的策略,因此严格说整条轨迹并非由同一个 采样。这也是论文强调其优化方法能利用 off-policy data 的现实背景。
不过,报告没有量化轨迹跨轮复用造成的 policy staleness,也没有给出 partial rollout 相对完整 rollout 的端到端吞吐提升。因此,更准确的表述是:它给出了可扩展长轨迹训练的工程机制,但公开数据不足以判断这一机制的收益上限。
7. 训推混合部署:同一批 GPU 在 Megatron 与 vLLM 间切换#
k1.5 使用同步迭代式 RL:rollout worker 生成轨迹,reward service 评分,trainer worker 更新权重,然后新权重进入下一轮 rollout。系统组件包括 central master、replay buffer、多类 reward model、代码执行服务以及训练和推理 worker。1
为了减少独立训练集群和推理集群互相等待,论文让 Megatron 与 vLLM 以 sidecar 形式共置在同一 Kubernetes pod,并共享 GPU:
训练阶段:Megatron onload -> 更新参数 -> offload 显存
|
v
权重转换:Megatron checkpoint -> HF shard -> RDMA 传输
|
v
推理阶段:启动 vLLM -> 加载新权重 -> rollout -> 终止 vLLM训练权重需要处理 pipeline parallelism 和 expert parallelism,再转成只保留 tensor parallelism 的 Hugging Face shard;节点间通过 Mooncake over RDMA 传输。报告称训练切换到推理少于 1 分钟,推理切回训练约 10 秒。1
这里选择“终止并重启 vLLM”,而不是仅做显存 offload,是因为 CUDA Graph、NCCL buffer 和 driver 等资源不容易彻底释放。这个设计牺牲了一部分启动开销,换取更干净的显存回收与故障隔离。
7.1 代码奖励背后是一套沙箱服务#
代码 RL 不能只比较输出字符串,而要实际编译和运行。k1.5 的 sandbox 基于 Kubernetes 调度,通过 HTTP 服务接入 MultiPL-E、DMOJ Judge Server、Lean、Jupyter Notebook 等不同执行镜像,支持在线判题与 repo-level editing。1
系统用 crun 代替 Docker runtime、复用预创建的 cgroup,并把 overlay filesystem 的 upper layer 放到 tmpfs。论文的 16 核内部测试中,容器启动时间从 0.12 秒降到 0.04 秒,最大启动率从 27 提升到 120 containers/s;报告没有给出更多硬件和压力测试条件,因此这些数字更适合用来说明优化方向,而不是当成通用性能承诺。1
对于没有公开测试用例的题目,团队让 base model 调用 CYaRon 生成 50 个 test case,再用 10 份 ground-truth submission 交叉验证。单个 case 至少要有 7/10 提交结果一致才有效;最终至少 9/10 ground-truth submission 通过整个测试集,题目才进入训练集。在抽样的 1,000 道竞赛题中,614 道不需要 special judge,最终有 323 道进入训练集。1
这组数字说明,“可验证奖励”并不等于奖励天然存在。构造可靠 verifier 本身就是一条数据与基础设施流水线。
8. 多模态不是后挂视觉适配器#
k1.5 从预训练、SFT 到 RL 都包含视觉数据。预训练分为三个阶段:1
- Vision-language pretraining:先建立语言基础,再逐步混入多模态数据;
- Cooldown:提高精选和合成数据占比,强化 reasoning 与知识;
- Long-context activation:把序列长度扩到 131,072 token。
报告称 Vanilla SFT 包含约 100 万文本样本;其明确列出的分项是 50 万通用问答、20 万代码、20 万数学与科学、5 千创意写作、2 万长上下文任务,合计 92.5 万,因此“100 万”应视为近似总量。另有约 100 万图文样本,覆盖图表、OCR、visual coding、视觉推理和带图数学/科学问题。1
训练先在 32K 序列长度进行 1 个 epoch,再在 128K 进行 1 个 epoch。RL prompt 也同时包含纯文本和图文问题。这意味着 k1.5 的视觉 reasoning 不是在文本 reasoning 模型完成后临时嫁接,而是共用同一套长上下文训练与结果奖励框架。
9. Long2short:把搜索能力压回有限 token 预算#
长 CoT 追求能力上限,但生产系统更关心 accuracy-per-token。k1.5 给出四种 long2short 方法:1
| 方法 | 做法 | 特点 |
|---|---|---|
| Model Merging | 直接平均 long-CoT 与 short-CoT 模型权重 | 无需继续训练,成本最低 |
| Shortest Rejection Sampling | 同题采样 8 次,选最短正确答案做 SFT | 简单,但生成数据成本较高 |
| DPO | 最短正确答案作 positive,更长回答作 negative | 显式学习长度偏好 |
| Long2short RL | 从性能/效率折中 checkpoint 继续 RL,增强长度惩罚并缩短 rollout 上限 | 最贴近最终 token 预算 |
DPO 的负样本不仅包括错误长回答,也包括长度达到所选正确答案 1.5 倍以上的正确回答。它优化的不是“正确 vs. 错误”,而是“同样能答对时,哪一种推理更紧凑”。
论文的 Figure 7 显示,long2short RL 在 MATH-500 和 AIME 2024 的准确率—token 长度前沿上表现最好。更值得注意的是,这并不是普通 knowledge distillation:teacher 提供的不只是最终答案,还提供了经过 RL 发现的搜索与纠错先验;short model 的任务是把这些行为压缩成更短的路径。
10. 实验结果应该怎样读#
10.1 Long-CoT:强项与短板同时存在#
先统一评测口径:Codeforces 的 94 百分位不是单次生成的 pass@1,而是对 long-CoT 生成的代码做 majority voting,并使用同一模型生成的测试用例筛选;表中的 o1 百分位则取自 OpenAI 发布会。Long-CoT 的 LiveCodeBench 使用 2024-12 至 2025-02 的 v5,短 CoT 使用 2024-08 至 2024-11 的 v4,两组数字不能直接纵向比较。1
| Benchmark | Kimi k1.5 | OpenAI o1 | 论文中更强者 |
|---|---|---|---|
| MATH-500 | 96.2 | 94.8 | Kimi k1.5 |
| AIME 2024 | 77.5 | 74.4 | Kimi k1.5 |
| Codeforces percentile | 94 | 94 | 持平 |
| LiveCodeBench | 62.5 | 67.2 | OpenAI o1 |
| MathVista-Test | 74.9 | 71.0 | Kimi k1.5 |
| MMMU-Val | 70.0 | 77.3 | OpenAI o1 |
| MathVision-Full | 38.6 | 未报告 | Kimi k1.5 |
因此“匹配 o1”应该理解为多个重点 reasoning benchmark 上总体有竞争力,而不是所有任务全面领先,也不是所有条目都采用完全相同的推理与评测协议。尤其在 LiveCodeBench 和 MMMU 上,表中 o1 仍明显更高。1
10.2 Short-CoT:长推理训练能迁移到常规输出#
短 CoT 模型在 MATH-500 达到 94.6、AIME 2024 达到 60.8、LiveCodeBench 达到 47.3、MathVista 达到 70.1。其中 AIME 60.8 是 8 次运行的平均值,平均输出 3,272 tokens。相较论文表中的 GPT-4o,AIME 从 9.3 提升到 60.8;报告所称“最高 +550%”来自这种相对增幅口径。1
不过,这个百分比容易制造夸张印象:低基线上的相对提升天然很大。更有信息量的是绝对差值,以及 long2short 后使用了多少平均输出 token;遗憾的是,论文没有在主结果表中为所有对比模型统一列出 token 成本。
10.3 消融支持了三条趋势,但不是完整归因#
报告的消融给出三项主要观察:1
- 随 RL 推进,平均回答长度和困难 benchmark 准确率同步提高;最终训练扩展到 128K 后仍看到收益;
- 小模型借助更长 CoT 可以接近大模型,但大模型通常 token efficiency 更高、能力上限也更高;
- 课程采样优于始终均匀混合难易题,带错误样本负梯度的方法优于只拟合最佳样本的 ReST。
这些图支持“上下文长度是 RL scaling 的一条轴”,却还不是严格的 scaling law。报告没有给出跨多个模型尺寸、多个固定计算预算的幂律拟合,也没有把长上下文训练与单纯增加 rollout 数、采样温度或 best-of- 的收益完全解耦。
11. 把算法与系统连起来看#
k1.5 的各部分不是互相独立的技巧列表,而是一条闭环:
可可靠判分的高难 prompt
|
v
结果奖励允许自由探索整条轨迹
|
v
长上下文提供更多隐式搜索步
|
v
partial rollout 控制长尾与重复生成成本
|
v
mirror descent 变体利用跨轮、略微 off-policy 的数据
|
v
长度惩罚 + long2short 回收推理效率任何一环缺失都会改变系统性质:
- verifier 不可靠,长探索只会发现更多 reward hacking 路径;
- 没有长上下文,模型缺少展开、失败和恢复的空间;
- 没有 partial rollout,128K 轨迹会拖慢整个同步训练周期;
- 没有长度控制,性能增长会被训练与服务成本吞噬;
- 没有 long2short,长 CoT 的能力很难进入低延迟场景。
所以,Kimi k1.5 的真正贡献不是某一个新 loss,而是证明了结果奖励、长上下文与 RL 基础设施可以共同形成一条可工作的 reasoning scaling 路线。
12. 报告没有回答什么#
读这份报告时,至少要保留以下问题:
- 模型规模未知。 没有参数量、MoE 配置或训练 FLOPs,难以与其他路线做 compute-matched 比较。
- 数据规模未知。 RL prompt 数量、各领域比例、去重策略和污染检查没有完整披露。
- 128K 的利用率未知。 报告展示长度与能力相关,但没有说明实际轨迹长度分布以及多少样本真正接近 128K。
- 系统收益缺少对照。 Partial rollout 的吞吐、GPU 利用率、跨轮 staleness 与完整 rollout baseline 没有定量表格。
- 消融仍不完整。 Long-CoT SFT、不同 reward model、长度惩罚和各采样策略对最终模型的独立贡献没有系统拆开。
- 基准可比性有限。 不同模型的采样次数、输出预算和评测实现未必完全一致,测试时计算量也没有统一。
这些缺口不抹杀报告的价值,但决定了它更像一份高价值的训练实践总结,而不是可以逐项复刻的完整 recipe。
13. 怎样概括 Kimi k1.5#
如果只保留四个结论,可以记住:
- Reasoning scaling 可以沿输出上下文继续扩展。 更长 CoT 为探索、反思与回退提供了计算预算。
- 不一定需要显式搜索树和过程奖励。 在可验证任务上,最终答案奖励配合长轨迹已经能学出一部分隐式 planning 行为。
- 128K RL 首先是系统问题。 Partial rollout、replay buffer、权重快速切换、代码沙箱和 reward service 与算法同等重要。
- 能力与效率必须分阶段优化。 先用长 CoT 找到能力上限,再用长度惩罚和 long2short 把它压回可部署预算。
Kimi k1.5 留下的最重要问题也很直接:如果上下文长度是一条新的 RL scaling 轴,那么下一步不只是继续把 128K 拉长,而是提高每个 token 承载的有效搜索量。真正稀缺的最终不是 token 本身,而是不重复、会回退、能验证的推理步骤。