MEMENTO 深度解读

MEMENTO:
教 LLM 管理自己的上下文

让模型在推理过程中自主分段、压缩、丢弃已完成的思考块——KV cache 峰值降低 2–3 倍,吞吐量近乎翻倍,而"被删除"的信息竟通过 KV 隐式通道继续流传。

KV Cache 压缩 推理时上下文管理 SFT + RL 隐式信息通道 vLLM 原生支持

来源

论文MEMENTO (arXiv 2604.09852)
团队Microsoft Research AI Frontiers
一作Vasilis Kontonis, Yuchen Zeng, Shivam Garg, Lingjiao Chen
通讯Dimitris Papailiopoulos
发布2026 年 4 月
推文@DimitrisPapail (967 likes)

1. 问题:LLM 不会管理自己的上下文

推理模型(如 o1、DeepSeek-R1、QwQ)通过生成大量 token 来"思考",单次推理可以产生数十万 token——相当于一本书的长度。所有这些 token 都驻留在 KV cache 中,被后续 attention 等权访问,无论它们是否还有用。

模型没有内建机制来压缩已完成的推理、保留结论、继续前进。现有的上下文管理方案都是外部系统

现有外部方案的局限

独立摘要器:用另一个模型总结上下文,但摘要器不理解当前模型的内部状态

重启 API 调用:用压缩后的文本重启推理,但丢失了 KV cache 中的隐式信息

编排层:在模型外搭建逻辑来管理上下文,但增加了系统复杂度

这些方案都是"模型外挂",而非模型自身学会的技能。

?

Memento 的核心假设:决定"记住什么、忘记什么"应该是一种可训练的能力,而非外部系统逻辑。如果给模型正确的训练数据,它就能学会自主管理上下文。

2. 机制:Memento 如何工作

Memento 的核心思想是让模型在推理过程中自主分段、压缩、丢弃。具体来说:

1

分段(Segment)

模型将推理过程分成语义连贯的"思考块"(thinking block)。每个块包含一组相关的推理步骤。

2

压缩(Compress)

当一个块完成时,模型生成一个 memento——一个简洁、信息密集的压缩,包含该块的结论、关键中间值、公式和策略决策。可以把 memento 想象成一个引理(lemma):后续推理所需的最小记录。

3

丢弃(Mask & Evict)

memento 生成后,前面的思考块从 attention 中被遮蔽(mask),其 KV cache 条目被物理清除(evict/flush)。此后模型只能看到过去的 memento + 当前正在工作的块。

4

继续推理

模型从 memento 继续推理,开始下一个思考块。整个过程在单次生成调用内完成,无需重启或外部摘要器。

锯齿形 KV Cache 模式

这产生了一个标志性的锯齿形(sawtooth)内存模式:推理块增长时 KV cache 上升,memento 生成并清除块后 KV cache 骤降,峰值始终保持在标准 CoT 的一小部分。

锯齿形 KV cache 示意:每次 memento 生成后内存骤降,峰值远低于标准 CoT

i

关键区别:Memento 不是"先推理完再总结",而是在推理过程中实时分段压缩。模型在生成 memento 时仍能看到当前块的全部内容,memento 的 KV 表示因此编码了块的信息——即使块后来被清除,信息仍通过 KV 隐式通道传递。

3. 数据生成:OpenMementos

教模型学会上下文管理需要特殊的训练数据:大规模、高质量的推理轨迹,被分段并配对 memento。这种数据不存在,需要从头构建。

3.1 为什么不能直接让 LLM 分段?

直接分段失败的原因

把整条轨迹粘贴给前沿模型,让它一步完成分段+摘要——行不通。因为好的分段需要同时考虑块的语义连贯性、大小均衡和语义边界,这是一个组合优化问题,LLM 难以一步到位。

3.2 分而治之的数据管线

1

基础轨迹选择

基于 OpenThoughts-v3(QwQ-32B 生成的高质量推理轨迹,约 1.2M 条),省去从头生成。

2

原子切分

将轨迹切分为原子单元——句子、代码块、数学公式——不可再分的最小语义单元。

3

边界打分

LLM 对每个句子间边界打 0–3 分:0 = 思路中间(差),3 = 重大转折(好)。这是局部问题,LLM 擅长处理。

4

动态规划分段

用 DP 最大化边界质量分数,同时惩罚不均匀的块大小。全局优化交给算法,而非 LLM 零样本。

5

压缩生成 memento

压缩 LLM 为每个块生成 memento。Prompt 明确要求状态压缩而非普通摘要:生成足够紧凑的内容,使模型仅凭 memento 就能继续推理,无需看到原始块。

6

迭代评审精炼

评审 LLM 按多维度评分(公式提取、数值保留、方法命名、验证包含、无幻觉、结论优先结构)。不合格则给出具体可操作的反馈(如"缺少公式 K²−3K+3"),压缩器重试。单次通过率仅 28%,两轮反馈后升至 92%

3.3 OpenMementos 数据集统计

指标数学代码科学
样本占比54%19%27%
每样本块数(中位数)~9~9~7
块大小(字符)~3.8K~2.8K~2.3K
memento 大小(字符)~509–603~509–603~509–603
压缩比(中位数)0.16~0.20~0.22

总计 228K 条标注轨迹,约 11K token 推理压缩为不到 2K token memento(约 6 倍压缩)。所有 LLM 调用使用 GPT-5.x,但任何足够强的模型均可替代。

4. 训练:课程学习至关重要

有了标注数据,如何 SFT?直觉上直接训练即可,但实际发现课程(curriculum)至关重要

4.1 三种失败/次优方案

方案做法问题
正常因果 attention + 推理时 mask 训练时全可见,推理时遮蔽块 训练时模型总可以 attend 到完整块,没有压力把信息压缩进 memento
从头就带 block masking 训练一开始就遮蔽已完成块 模型同时学三件事(格式、压缩、仅靠 memento 推理),全部学不好
直接在 OpenMementos 上 SFT 跳过基础推理 SFT 非推理基座模型(如 Qwen2.5-7B)大幅低于标准推理 SFT

4.2 成功方案:三阶段课程

S0

标准推理 SFT(仅非推理基座需要)

在原始 OpenThoughts 上 SFT,让模型先学会推理。Qwen3、Olmo3、Phi-4-Reasoning 等已会推理的模型可跳过此步。

S1

全可见注意力 + OpenMementos

标准因果 attention,所有 token 参与计算 loss。模型学习格式:何时结束块、如何写 memento、结构长什么样。此时无压缩压力。

S2

Memento Attention + OpenMementos

引入硬约束:memento 生成后,前面的思考块从后续 attention 中完全遮蔽。模型被迫把所有后续推理所需的信息压缩进 memento,因为原始块已经不可见了。这是真正学习发生的地方——类似 RL 的压力信号,推动模型实现自包含压缩。

!

数据效率:仅需 ~30K 样本(从 228K 池中抽取),每阶段 5 epoch,32K 序列长度,就足以让模型学会这项技能。Memento 不需要比标准推理 SFT 更多的数据,只是需要不同类型的数据。

5. 精度分析:压缩的代价与恢复

5.1 初始精度差距的来源

Memento 模型相比基座有精度下降,但作者发现差距的主要来源不是压缩本身

关键对照实验

训练数据来自 QwQ-32B 生成的轨迹,但微调的目标模型(Qwen3、Phi-4 等)可能比 QwQ 更强。仅在同一模型上做标准 SFT(无块结构、无 memento)就已经有精度损失——这是训练数据分布不匹配导致的。

当把 Memento 与这个"受控基线"比较时,压缩带来的额外精度下降很小,某些情况下可忽略。

5.2 能力保留 vs. 一致性下降

在 AIME 2024/25/26 上生成 64 个补全,发现:

核心发现:能力保留

基座模型和 Memento 模型能解的题目重叠率平均 96.4%,某些设置下达 100%。模型保留了解题能力,下降的是单次尝试的一致性

这意味着精度差距是可弥合的——多数投票 k=3 就足以让 Memento 匹配甚至超过原始基线。

5.3 RL 恢复精度

CISPO 对 Qwen3-8B Memento checkpoint 做 RL 微调:

基准Vanilla 基座Memento (SFT)Memento + RL
AIME'26基线略低恢复至基线 / 超越
GPQA-Diamond基线略低恢复至基线 / 超越

RL 后 KV 节省仍然显著——精度恢复不以牺牲效率为代价。

5.4 规模效应

从 Qwen3-8B 到 32B,即使两者使用相同的 QwQ-32B 轨迹训练,精度差距也显著缩小。更大模型更优雅地处理分布不匹配和压缩影响。

5.5 吞吐量提升

指标Vanilla vLLMMemento vLLM提升
吞吐量(tok/s)2,4474,2901.75×
批次完成时间1,096s693s1.58×
峰值 KV cache基线~1/2–1/32–3× 降低

测试条件:单 B200 GPU,240 并发请求,Qwen3-8B,32K max tokens。

6. 双信息通道:被删除的信息并未消失

这是本文最令人惊讶的发现。

6.1 现象

当模型生成 memento 时,它仍然能看到当前思考块的全部内容。因此 memento token 的 KV 表示是在块内容可见的条件下计算的。即使块后来被遮蔽和清除,块的信息已经"泄漏"进了 memento 的 KV 表示

i

直觉:memento 的文本是"显式通道"——你能读到的压缩内容。memento 的 KV 表示是"隐式通道"——你看不到,但后续 attention 能访问到的、编码了原始块信息的向量。

6.2 重启 vs. 保持的消融实验

对比两种推理模式:

模式做法AIME'24
Keep(正常 Memento) 遮蔽块但保留 memento 的 KV 状态 66.1%
Restart 每个 memento 边界重启,重新计算 KV cache(memento 不再 attend 到块) 50.8%

15 个百分点的差距——这绝非噪声,强烈证明 KV 隐式通道对精度至关重要。

6.3 线性探针实验

更直接的验证:在目标块中注入一个随机 5 位数密码,遮蔽该块,然后在从未直接 attend 过该块的下游 memento 的 KV 状态上训练线性探针——能恢复密码吗?

能!信息确实通过 KV 状态泄漏

探针能以远超随机的准确率重建密码。泄漏集中在更深层,随距目标块的距离衰减,但即使 7 个块之后仍可检测,且随模型容量增大而增强。

6.4 为什么这是架构必然

在小规模受控 Transformer(4 层,810K 参数)上验证:泄漏量在训练过程中恒定不变(即使任务精度从 77% 提升到 95%)。这是残差连接 + 因果 attention + 原位遮蔽的架构后果,而非学习结果。

!

与 InftyThink / Accordion-Thinking 的本质区别:这些方法丢弃原始 token 并仅从摘要文本重建上下文,完全丢失了隐式 KV 通道。Memento 保留了这个通道,这也是作者选择在 vLLM 中实现原生 block masking(而非简单重启)的核心原因。

7. vLLM 原生 Block Masking 实现

Memento 的 block masking 是数据依赖且动态变化的——哪些 token 被遮蔽取决于模型自己生成的内容。没有任何生产级推理框架原生支持这种模式。

关键设计选择

物理 KV cache 压缩(而非逻辑遮蔽)

当块完成时,其 KV 条目被物理驱逐,释放的 slot 返还给 KV 池。这意味着标准 FlashAttention 和 paged-attention 内核完全无需修改——它们永远不会看到被驱逐的 token。

实现完全在 vLLM Python 层面,可作为补丁安装在现有 vLLM 上。

这套基础设施也是 RL 训练的必要条件:生成 32K-token 的训练 rollout 需要在生成过程中动态 block masking,没有 vLLM fork,这个规模的 RL 不可行。

8. 深层 Insight

Insight 1:上下文管理是可训练的技能

一个从未接触过"块"或"摘要"概念的模型,仅通过 ~30K 样例的 SFT,就能学会自主分段推理、压缩每段、从压缩版本继续推理。这涉及非因果的稀疏 attention、选择性遗忘、状态压缩——完全通过常规训练获得。这意味着还有大量非常规能力可以通过这种方式教给模型

Insight 2:KV cache 是第二条信息高速公路

当你在一个前向传播内遮蔽一个块时,块的信息并未真正消失——它通过 memento 的 KV 表示持续传递。这既是有用的(提升精度),也是架构上不可避免的(残差连接的后果)。我们还不清楚这个隐式通道能被推多远,尤其配合 RL 之后。

Insight 3:记忆管理应该是学习到的能力

两个发现指向同一方向:记忆管理应该是学习到的能力,且模型学会它比我们预期的更容易。正如作者所说——"Stop flushing your KV cache. Your model remembers more than you think."

局限与开放问题

局限说明
RoPE 位置编码越界Memento 保留原始位置索引,超长推理时可能进入训练未见过的位置编码范围;而 compaction+重启 方案的位置索引始终在训练范围内(Grad62304977 与作者的讨论)
仅验证了单轮推理当前实验限于数学/代码/科学推理,尚未在多轮 agent 场景中验证
RL 结果仍早期仅 Qwen3-8B 做了 RL,更大模型的 RL 效果未知
压缩的额外计算生成 memento 本身需要额外 decode 步骤,是否在所有场景下都净省计算尚未量化
隐式通道的双刃剑信息泄漏是架构必然,但是否会导致不期望的信息泄露(如安全敏感场景)尚需研究

未来方向

最令人兴奋的方向:Agent 场景

Memento 当前以数学/代码/科学推理为测试用例,但作者认为最有趣的应用是 agent。终端和 CLI agent 天然是多轮的,每个 action-observation 循环就是一个自然块,选择性地记住和遗忘正是当前 OSS agent 所缺少的。Anthropic 和 OpenAI 近期在 agent 上下文压缩上的工作也指向同一方向。

社区讨论中的有趣想法

Grad62304977:能否给模型一个"遗忘工具",让它传入 KV cache 索引直接丢弃?模型可以即时做稀疏 attention(作者认为可能太难学,但 RL 下或许可行)

压缩 memento 的 memento:当 memento 本身积累过多时,是否可以再压缩?(作者确认是好主意)

RL 训练稀疏 attention:用 RL 训练模型自发产生摘要和稀疏 attention 模式,而非通过 SFT 教格式(作者认为在正确 reward 下很可能可行,但路径更长)