Published on

GLM-5.2 技术报告速览:IndexShare 与 critic-based PPO

Authors
Table of Contents

GLM-5.2 是智谱的开源旗舰,主打长程任务(744B MoE,约 40B 激活,MIT)。目前公开材料主要是官方博客、模型卡与相关子技术论文,还不是一篇完整的独立技术报告。本文讲三件事:

  • IndexShare(论文中称为 IndexCache,实为同一机制),让 sparse attention 里「挑重点」的开销跨层复用;
  • 长程 RL 中从 GRPO 转向 critic-based PPO 的取舍;
  • coding agent RL 里针对 reward hacking 的在线拦截。

背景

当模型大量用于长篇推理、多步 agent、超长文档检索时,注意力的二次复杂度(文本长一倍、计算量涨四倍)成了推理速度和服务成本的主瓶颈。

Sparse attention 是当前主流解法:与其让每个词都看全文,不如只挑最相关的一小撮来算。其中 DeepSeek 的 DSA 工程化最彻底,上一代的 GLM-5 用的就是它:它把核心注意力从 O(L2)O(L^2) 降到 O(Lk)O(Lk)LL 是序列长度,kk 是每个 query 实际保留的 key 数),但负责挑 token 的 indexer 本身仍是 O(L2)O(L^2),而且每层都要独立重算。IndexShare 解决的就是这个被遗留下来的开销。

IndexShare

indexer 的开销没省掉

DSA 每层拆成「挑重点」和「读重点」两步。挑重点由一个轻量旁路 lightning indexer 完成:它有自己一套独立、低维的投影 qI,kIq^{I},k^{I}(不复用主注意力的 Q/K),对 query 位置 tt 和每个合法 key 位置 sssts\le t)算一个标量索引分:

It,s=j=1HIwt,jIReLU ⁣(qt,jIksI)I_{t,s} = \sum_{j=1}^{H_I} w^{I}_{t,j}\,\mathrm{ReLU}\!\left(q^{I}_{t,j}\cdot k^{I}_{s}\right)

直观理解:这是 indexer 给「位置 tt 该不该关注位置 ss」打的相关性分。qt,jI,ksIq^{I}_{t,j},k^{I}_{s} 是低维的 indexer query/key(维度远小于主注意力头),HIH_I 是 indexer 头数(很少),wt,jIw^{I}_{t,j} 是每头门控权重。用 ReLU\mathrm{ReLU} 而非 softmax 是为了快、对 FP8 友好。算完取 top-k(k=2048Lk=2048\ll L),主注意力只在这 kk 个 token 上算,于是降到 O(Lk)O(Lk)

问题在于:indexer 单次打分虽便宜一个量级,但它要对所有 (t,s)(t,s) 都打,仍是 O(L2)O(L^2),跨 NN 层累计成 O(NL2)O(NL^2)。在百万级上下文下,这个省不掉的 indexer 反而成了主导项——profiling 显示它在 prefill 阶段的延迟占比随上下文长度急剧上升。

少数层挑,其余层复用

IndexShare 的立足点是一个实证观察:相邻层 indexer 选出的 top-k 高度重合。论文对一个 47 层模型逐对计算重合率,相邻层达 0.7–1.0,且呈现明显的功能块聚类。既然下游几层选的几乎是同一批 token,每层重算就是浪费。

DSA 各层 top-k 索引两两重合率热力图

做法是把层分成两类:Full 层保留 indexer、正常挑,行为与标准 DSA 一致;Shared 层没有 indexer,直接继承最近一个 Full 层的索引集。GLM-5.2 博客用的是每 4 层一组、1 Full + 3 Shared。要点是:复用的是「挑哪些 token」这份索引,不是读出来的结果——Shared 层省掉的只是算索引这一步,每层的 sparse attention 仍各算各的。所以省的是 indexer 的 O(L2)O(L^2),不是 attention 的 O(Lk)O(Lk)

直接隔层复用会掉点,因为每个 indexer 原本只为自己那层训练。解法是训练时让保留的 indexer 去拟合它所服务那组层注意力分布的平均,而非只拟合自己那层:

pˉt=1m+1j=0mpt(+j)\bar{\mathbf p}_t=\frac{1}{m+1}\sum_{j=0}^{m}\mathbf p^{(\ell+j)}_t

其中 pt(+j)\mathbf p^{(\ell+j)}_t 是第 +j\ell{+}j 层主注意力各头平均后的真实分布,mm 是该 Full 层服务的 Shared 层数,pˉt\bar{\mathbf p}_t 是这组层的「质心」分布。让 indexer 用 KL 去对齐这个质心,它挑出的 top-k 才对整组层都够用。消融显示去掉这个目标后 Long Avg 从 51.6 掉到 49.8、AA-LCR 从 49.8 掉到 44.0——让硬复用可行的不是复用本身,而是这个把 indexer 训成组代表的目标。

效果

在 744B 的 GLM-5 上,保留一半 indexer 的 IndexShare 在长上下文和推理任务上与原始 DSA 基本持平。提速方面,30B 模型在 200K 上下文下 prefill 提速 1.82×1.82\times、decode 1.48×1.48\times;744B 的 GLM-5 在 100K 以上也有至少 1.3×1.3\times

需注意口径:博客宣称的 2.9×2.9\times 是 1M 上下文下 per-token FLOPs 降幅,IndexCache 论文给的 1.82×/1.48×1.82\times/1.48\times 是 30B 模型 200K 下的端到端推理提速,两者不是一回事。

GLM-5 与 GLM-5 + IndexCache 的对比

同样的「复用」思路还被 GLM-5.2 博客延伸到了投机解码:它把 IndexShare 与 KVShare 接进 MTP(multi-token prediction,投机解码的草稿层),让草稿模型直接复用主模型已经算好的索引和 KV 结构上下文,把平均接受长度提到 5.10 token,再叠加验证阶段的 rejection sampling 提到 5.29,相比改进前接受长度提升最多约 20%。

critic-based PPO

从 GRPO 到 critic-PPO

近年 coding RL 主流是 GRPO 那类 group-relative 优势估计:同一 prompt 采 GG 条 rollout,优势直接在组内标准化。

A^i=rimean({rj}j=1G)std({rj}j=1G)\hat A_i = \frac{r_i - \operatorname{mean}(\{r_j\}_{j=1}^G)}{\operatorname{std}(\{r_j\}_{j=1}^G)}

rir_i 是第 ii 条轨迹的奖励,用同组均值当 baseline、标准差归一。好处是不需要 value network,但隐含前提是:组内 GG 条 rollout 是同质、可比的单条轨迹。

GLM-5.2 的长程 trace 极长,超窗就要压缩历史、把一条超长轨迹切成多段。后果是同一 prompt 的不同 rollout 切出的子轨迹数量不同、长度悬殊,组里装的不再是同质单元,对它们做 mean/std\operatorname{mean}/\operatorname{std} 本身就不稳定。

解法是改用 critic-based PPO:训一个 value 函数 VϕV_\phi,优势改用单条轨迹自身的 token 级 GAE 估计。

A^t=l0(γλ)lδt+l,δt=rt+γVϕ(st+1)Vϕ(st)\hat A_t = \sum_{l\ge 0}(\gamma\lambda)^l\,\delta_{t+l}, \qquad \delta_t = r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t)

δt\delta_t 是单步 TD 残差(依赖 critic VϕV_\phi),γ\gamma 折扣、λ\lambda 是 GAE 的偏差-方差权衡系数。关键在于这个估计只依赖单条 rollout,不需同组比较,于是一个 prompt 产出多少条、多长的子轨迹都无所谓。配套地用 token 级 loss 抵消长度不均:序列级平均会按 1/τi1/|\tau_i| 稀释长轨迹里每个 token,改成全局 token 级归一化让每个 token 等权。值得注意的是这条边界:当轨迹结构不再同质时,group-relative 的免 critic 红利会失效——这对判断哪类 RL 技巧在 agentic 长程场景下会失灵有参考价值。

针对 reward hacking 的在线拦截

长程 coding RL 的另一现实问题是 reward hacking。代码任务常用可验证的 pass/fail 奖励,模型越强越可能学会绕过评测:读取受保护的评测文件、复制参考答案、从上游仓库或 GitHub raw 链接直接取目标实现。这些行为抬高 rollout reward,却污染训练信号。

GLM-5.2 的处理是在线拦截而非整条作废:先用规则模块高召回地标记可疑 tool call,再交给 LLM judge 判断意图;确认是 hack 就阻断该工具调用、返回 dummy 信息,让 rollout 继续。价值不在规则多新,而在于它承认 agentic RL 的奖励信号会被工具环境反向塑形,因此必须把反作弊放进训练闭环,而不是只在离线评测后清洗。

模型评估

重点在长程编码。在 FrontierSWE、PostTrainBench、SWE-Marathon 三个长程 coding benchmark 上,GLM-5.2 是排名最高的开源模型:FrontierSWE 落后 Opus 4.8 约 1%、略胜 GPT-5.5;按 GLM-5.2 博客发布时的口径,PostTrainBench 超过 Opus 4.7 和 GPT-5.5、仅次于 Opus 4.8,但第三方榜单后续更新后已把 GLM-5.2 列到榜首;SWE-Marathon 这种超长程任务还有差距,落后 Opus 4.8 约 13%。

三个长程 coding benchmark 对比

常规 coding benchmark 上,Terminal-Bench 2.1 从 GLM-5.1 的 63.5 提到 81.0,逼近 Opus 4.8 的 85.0,领先 Gemini 3.1 Pro;SWE-bench Pro 62.1 对 58.4。

常规 coding benchmark 对比

effort level 控制方面,相同 token 预算下 GLM-5.2 的 agentic coding 大致落在 Opus 4.7 与 4.8 之间,Max 档允许在难任务上追加算力进一步拉高上限。

不同 token 预算下的 coding 表现

几点需要留意:完整 benchmark 表里仍有明显短板,SWE-Marathon 只有 13.0(Opus 4.8 是 26.0),NL2Repo、Tool-Decathlon 与闭源前沿差距可见。评测口径上,HLE 等用 GPT-5.5 当 judge,而三个长程 benchmark 由第三方机构(Proximal、PostTrainBench、Abundant AI)评测,后者相对更可信。

小结

1M context、effort levels、MTP 与投机解码优化这些更多是把现有路子打磨到位——属于扎实的增量工程。相对有意思的是三点:IndexShare 把「跨层索引高度冗余」这个先验工程化,对做长上下文检索和服务有借鉴;「能力上升伴随 reward hacking 上升」这一实证信号及其在线拦截设计;critic-PPO 适配 compaction 子轨迹这个被工程约束逼出来的取舍。这三点更接近方法层面的边界探索,而非范式突破。开源、可自托管、服务成本更低、coding 接近 Opus,则更多体现在产品和成本上。

我不是模型训练的专家,对强化学习也不算很了解,本文章纯粹出于兴趣,追踪前沿开源模型的发展进展,如有差错请不吝指出。


欢迎关注微信公众号👏

微信公众号

欢迎微信扫码加入我的付费知识星球👏

知识星球