GLM Post-Training Beyond SFT
先给结论:什么才是 NPU 原生
截至 2026 年 8 月,GLM-5 有完整技术报告;更新的 GLM-5.2 有官方博客,并由 SAO 与 CompactionRL 两篇论文补充后训练方法,但还没有一份同等完整的新技术报告。公开证据可以还原出下面这条演化线:
- GLM-5:SFT 之后依次执行 Reasoning RL、Agentic RL、General RL,最后用 Cross-Stage OPD 合并各阶段能力。[^glm5]
- GLM-5.2:继续用 slime 承载更大规模、更复杂的 Agentic RL;官方披露并行 OPD 合并了十多个专家模型,整个 OPD 约两天完成。[^glm52]
- GLM-5.2 的方法补充:SAO 用单轨迹异步优化消除组采样屏障;CompactionRL 把上下文摘要变成可训练动作,两篇论文都称方法用于 GLM-5.2 的 RL pipeline。[^sao][^compaction]
这意味着“原生”至少有三层含义:
- 算子原生:Attention、DSA Top-k、MoE、log-softmax、fake quant、collective 等核心算子运行在 NPU 上。
- 框架原生:训练、rollout、teacher、reward、权重同步不依赖 GPU 侧的隐藏补丁或中转。
- 数值闭环原生:同一 token、同一前缀、同一量化规则下,训练策略、rollout 策略和教师策略的概率可比较;偏差能被观测、校正和回归测试。
第三层才是 RL/OPD 是否真的成立的分界线。如果 NPU rollout 重新分词、DSA 选中了另一组 token、低精度 GEMM 改变了采样分布,训练端即使成功反向传播,也是在优化另一个行为策略。
一条统一主线
后面的算法名称很多,但都可以放回四个问题:
| 问题 | 典型对象 | 方法如何回答 |
|---|---|---|
| 状态从哪里来 | prompt、学生 trajectory、环境 observation、compacted history | RL/OPD 都尽量在当前学生会访问的状态上学习 |
| 信号从哪里来 | rule reward、ORM、LLM judge、Critic value、teacher log-prob | GRPO 用组内奖励;PPO/SAO 用 Critic;OPD 用教师逐 token 信号 |
| 策略是否可比较 | π_train、π_rollout、π_old、π_teacher |
IcePop/DIS 约束概率比;TITO 保存 exact token ID |
| 数值是否一致 | Top-k index、BF16/FP8/INT4、scale、zero-point、KV Cache | 确定性 Top-k、bitwise-identical quant kernel、精度分层 |
在传统的同步 RL 中,一批 prompt 先完成 rollout,再一起打分和更新。到了长程 Agent 任务,不同 trajectory 的长度可能相差几个数量级,最慢样本会让整批等待;一旦训练与推理解耦,吞吐变高,却又出现 policy lag:生成样本时的策略已经落后于当前训练策略。
因此 GLM 的核心矛盾不是“同步还是异步”二选一,而是:
允许系统异步前进,同时只让仍然可信的 token 产生梯度。
GLM-5 报告的原始训练流程图如下。它支持“多阶段后训练 + 最终 OPD”这一流程关系,但不能单独证明其中某一组件带来多少收益。
Reasoning RL:相对奖励与可信 token
GRPO 在优化什么
给定一个 prompt $x$,策略为它采样一组 $G$ 个回答 $y_1,\ldots,y_G$,并得到序列级奖励 $R_1,\ldots,R_G$。GRPO 不训练 Critic,而是用组内均值和标准差构造相对优势:
$$
\hat A_i=\frac{R_i-\operatorname{mean}(R_1,\ldots,R_G)}
{\operatorname{std}(R_1,\ldots,R_G)+\epsilon}.
$$
直觉上,同一个题目中比同伴更好的回答获得正优势,更差的回答获得负优势。它消除了跨题难度尺度差异:一道所有回答都失败的难题,不会仅因为奖励绝对值低就主导梯度。
若 $r_{i,t}(\theta)=\pi_\theta(y_{i,t}\mid s_{i,t})/\pi_{\mathrm{old}}(y_{i,t}\mid s_{i,t})$,常见 clipped objective 是:
$$
\mathcal L_{\mathrm{GRPO}}
=-\mathbb E_{i,t}\left[
\min\left(r_{i,t}\hat A_i,\operatorname{clip}(r_{i,t},1-\epsilon_l,1+\epsilon_h)\hat A_i\right)
\right].
$$
其中 $s_{i,t}=(x,y_{i,<t})$ 是第 $t$ 个 token 的状态。奖励是序列级的,概率比和梯度却是 token 级的。因此,一个回答只要通过验证,其中每个生成 token 默认共享同一个方向,真正的 token 级差异来自概率比与 mask。
GLM-5 的 Reasoning RL 使用 GRPO + IcePop,组大小和 batch size 均为 32,训练数据混合数学、科学、代码和 Tool-Integrated Reasoning,并主要使用可验证的二值结果奖励。[^glm5]
IcePop 为什么有两层 ratio
RL 解耦训练和推理后,至少存在两种偏差:
- 训练更新偏差:当前参数 $\theta$ 相对旧训练策略 $\theta_{\mathrm{old}}$ 改了多少,对应 PPO ratio $r_t$。
- 训推实现偏差:训练引擎重算的概率与 rollout 引擎实际生成概率差了多少,对应 mismatch ratio
$$
\rho_t=\frac{\pi_{\theta}^{\mathrm{train}}(y_t\mid s_t)}
{\pi_{\theta}^{\mathrm{infer}}(y_t\mid s_t)}.
$$
IcePop 的核心不是把离群 ratio 裁到边界,而是将超出可信区间的 token 直接移出梯度。GLM-5 报告给出的 mismatch 阈值为 $\beta=2$,即保留 $\rho_t\in[1/2,2]$;PPO 的上下裁剪为 $\epsilon_l=0.2,\epsilon_h=0.28$。[^glm5]
$$
m_t=\mathbf 1!\left[\beta^{-1}\le \rho_t\le\beta\right].
$$
最终可把 $m_t$ 乘到 token loss 上。这样做接受了一个事实:当两个引擎对该 token 的概率意见相差太大时,我们并不知道它还是不是由声明的行为策略产生,继续反向传播比丢掉样本更危险。
1 | # Rollout / forward path |
数据形态与所有权:exact_ids、infer_logp、reward、policy version 属于 rollout record;训练激活和 train_logp 属于 Actor worker;group advantage 由 trainer 生成。Rollout 激活不应跨阶段保存,只有可重放的 token 与最小概率元数据进入训练队列。
DSA 的确定性为什么是 RL 问题
GLM-5 使用 DSA indexer 为每个 query 选择 Top-2048 key。报告指出,直接存下所有 replay index 成本太高,因此训练侧重算 Top-k;而非确定性的 CUDA/TileLang Top-k 曾导致 RL 明显退化和熵坍缩,最终训练使用确定性的 torch.topk,并默认冻结 indexer。[^glm5]
这件事很容易被误认为普通算子精度问题。实际上,如果训练与 rollout 选择了不同的稀疏注意力集合,即便参数相同,二者也实现了不同的策略:
$$
\mathcal I_t^{\mathrm{train}}\ne\mathcal I_t^{\mathrm{rollout}}
\quad\Rightarrow\quad
\pi^{\mathrm{train}}(\cdot\mid s_t)\ne\pi^{\mathrm{rollout}}(\cdot\mid s_t).
$$
Agentic RL:异步之后先处理策略滞后
Agentic RL 的 rollout 不再是一段纯文本,而是交替出现模型动作与环境观察:
$$
\tau=(a_0,o_0,a_1,o_1,\ldots,a_n,o_n).
$$
其中 observation 由编译器、终端、搜索引擎或浏览器产生,模型不对 observation token 负责。长程 coding/search 让不同 trajectory 的耗时非常不均匀,GLM-5 因此将训练和 rollout 完全解耦,并使用中央 Multi-Task Rollout Orchestrator 调度。[^glm5]
TITO:token ID 是动作事实
若 rollout 先输出文本,训练端再 tokenize,空格、特殊 token、工具协议或 tokenizer 版本的差异会让训练动作与真实动作不一致。TITO 保留 rollout 引擎产生的 exact token IDs,使训练端在实际被采样的离散动作上重算概率。
这不只是避免工程 bug。策略梯度中的动作 $a_t$ 就是 token ID;一旦 ID 改了,公式中的 $\pi(a_t\mid s_t)$ 已经指向另一个事件。
Direct Double-Sided Importance Sampling
异步系统中,一个 trajectory 生成期间 rollout 权重可能更新多次,精确维护每个 token 对应的旧训练 checkpoint 代价很高。GLM-5 直接把 rollout 时保存的概率当作行为策略代理:
$$
r_t(\theta)=\exp\left(
\log\pi_\theta(a_t\mid s_t)-
\log\pi_{\mathrm{rollout}}(a_t\mid s_t)
\right).
$$
然后使用双边可信区间:
$$
f(r_t)=
\begin{cases}
r_t,&1-\epsilon_l<r_t<1+\epsilon_h,\
0,&\text{otherwise}.
\end{cases}
$$
这里的“0”表示该 token 不产生梯度。相比只在特定优势方向裁剪的 PPO,它更激进地拒绝不可信 token;相比维护历史模型集合,它用可控的 off-policy 偏差换取系统可实现性。
GLM-5 还用版本差 $v_{\mathrm{train}}-v_{\mathrm{rollout}}>\tau$ 丢弃过旧样本;权重每 $K$ 次更新同步到推理侧,并在推理权重更新后重置 optimizer。环境失败样本也单独过滤:若组内仍有一半以上有效样本则补齐,否则整组丢弃。[^glm5]
1 | # Asynchronous rollout workers |
DP-aware routing 进一步把同一多轮会话稳定路由到同一个 rollout DP rank,以复用 KV Cache。它是性能优化,但同时改变了 KV 的 owner 和生命周期:路由表、会话 version 与 cache eviction 必须一致,否则“复用”可能变成读取错误状态。
General RL:奖励不是一个标量来源
Reasoning RL 的二值可验证奖励适合数学和代码,但事实性、情商、指令遵循和写作质量难以用同一规则描述。GLM-5 的 General RL 混合三类信号:[^glm5]
- 规则奖励:格式、长度、引用、工具协议等可以确定判断的约束。
- Outcome Reward Model(ORM):预测回答最终是否满足目标。
- 生成式奖励模型:读取上下文与回答,生成分析或评分,覆盖开放式质量。
它们通常都先落成 trajectory-level reward,再进入优势估计。混合奖励的本质不是“把分数相加”这么简单,而是选择一个标量化函数:
$$
R(\tau)=\sum_k w_kR_k(\tau)-\sum_j\lambda_jP_j(\tau).
$$
权重 $w_k$ 定义能力之间的交换率,惩罚 $P_j$ 定义不可接受行为。若 Reward Model 学会利用数据偏差,策略会放大这种偏差。因此 GLM-5 还使用人工编写的 anchor 保持目标不漂移,但公开报告没有披露完整奖励权重和数据配比。
OPD:把教师变成逐 token 优势
多阶段 RL 会产生一个常见问题:后一阶段强化新能力时,前一阶段能力可能被覆盖。GLM-5 最后使用 On-Policy Cross-Stage Distillation:把之前各阶段的最终 checkpoint 当作教师,从各教师原来的 RL 数据中采 prompt 并混合,学生生成自己的轨迹,再由对应教师在这些前缀上打分。[^glm5]
为什么是 on-policy
给定 prompt $x$,学生先采样:
$$
y\sim\pi_\theta(\cdot\mid x).
$$
教师不是给一条固定答案,而是在学生已经走到的每个状态 $s_t=(x,y_{<t})$ 上计算概率。GLM-5 用下面的 log-ratio 直接替换 RL advantage:
$$
\hat A^{\mathrm{OPD}}_t
=\operatorname{sg}\left[
\log\pi_T^{\mathrm{infer}}(y_t\mid s_t)
-\log\pi_\theta^{\mathrm{train}}(y_t\mid s_t)
\right].
$$
sg 是 stop-gradient。若教师比学生更偏好学生刚采到的 token,优势为正,学生提高该 token 概率;反之为负。它等价于 sampled reverse-KL 的 policy-gradient 形式:只需教师返回学生实际采样 token 的 log-prob,不必传输 [tokens,vocab] 全词表 logits。
1 | # Forward: student owns the state distribution |
由于教师差值已经提供 token 级方向,不需要同一 prompt 采 32 个回答做组内比较。GLM-5 报告把 OPD 的 group size 设为 1,batch size 提高到 1024。教师 logits 由推理引擎计算;报告也指出后续可切到训练引擎或 MQA mode。[^glm5]
OPD 和 RL 的关系
OPD 的核心是学生 rollout 上的教师信号,不是某个特定优化器。至少有三种实现维度必须分开:
- 分布传输:full vocab、teacher top-k、或只传 sampled token log-prob。
- 损失形式:直接 KL/cross entropy,或把 log-ratio 写成 policy-gradient advantage。
- 任务奖励:可以纯蒸馏,也可以在 OPD advantage 上叠加 task advantage。
当前 slime 的 OPD 实现已经把 OPD 作为与 advantage estimator 正交的项:读取 teacher log-prob,并把 student-teacher reverse-KL 差加入 advantage。[^slime_opd]
MOPD:能力整合发生在策略空间
MOPD(Multi-Teacher On-Policy Distillation)把多领域能力整合拆成三步:[^mopd]
- 从同一个通用 SFT checkpoint 出发;
- 各领域独立做最适合自己的 RL,得到数学、指令、SWE、工具等教师;
- 学生仍从通用 SFT 初始化,自己生成多领域 trajectory,再按领域把每条 trajectory 硬路由到一个对应教师。
其完整 reverse KL 是:
$$
\mathcal L_{\mathrm{revKL}}
=\mathbb E_{x,,y\sim\pi_\theta}
\left[
\frac1{|y|}\sum_t\sum_v
\pi_\theta(v\mid s_t)
\log\frac{\pi_\theta(v\mid s_t)}{\pi_{T_{d(x)}}(v\mid s_t)}
\right].
$$
其中 $d(x)$ 是 prompt 的领域,$T_{d(x)}$ 是被路由到的教师。工程上可用 sampled-token PG 形式,也可传教师 Top-k。MOPD 的 Top-k 目标额外加入 $\pi_T(v)-\pi_\theta(v)$ 修正截断偏差,使 top-k 区域的最优点仍位于师生分布相等。[^mopd]
为什么强调同源教师
同源不是组织关系,而是优化条件:教师与学生从同一个 SFT checkpoint 分叉,初始策略分布接近。MOPD 的受控实验中,Qwen3-30B-A3B 的三领域归一化得分为 0.9373,高于 Mix-RL 的 0.8818;而把数学教师换成更强但异源的 Qwen3-235B-A22B 后,初始 per-token KL 约从 0.04 升到 0.19,训练出现熵收缩甚至 Top-k 版本崩溃。[^mopd]
GLM 与 MOPD 的准确关系
GLM-5 报告称 Cross-Stage OPD:上阶段 checkpoint 是教师,教师各自的 RL prompt 被混合。GLM-5.2 官方博客进一步披露并行 OPD 合并了十多个专家。二者都具有“多教师、路由或分源数据、学生 on-policy trajectory、策略空间整合”的结构。
但 GLM 官方没有把这套方法命名为 MOPD。因此更准确的说法是:
- GLM-5 的 Cross-Stage OPD 是多阶段教师整合;
- GLM-5.2 的十多个专家并行 OPD 在结构上接近 MOPD;
- MOPD 论文提供了更完整的多领域同源教师原理与消融证据,但不是 GLM recipe 的直接证明。
GLM-5.2:SAO 与 CompactionRL
GLM-5.2 没有简单沿用 GLM-5 的全部公开配方。两篇后续论文分别针对长程 Agent RL 的两个结构性瓶颈:组采样等待和上下文耗尽。
SAO:一条轨迹完成就训练
GRPO 的 group baseline 需要同一 prompt 的 $G$ 条轨迹全部完成。长程任务中,最快样本会等待最慢样本;异步系统里,这段等待还会增加 policy staleness。SAO(Single-Rollout Asynchronous Optimization)把 group size 降到 1,每条完成的轨迹立即进入训练。[^sao]
但 $G=1$ 后无法计算组内相对奖励,SAO 必须重新引入 Value Model $V_\phi$ 来降低 REINFORCE 方差,并使用三个稳定机制:
- DIS:直接用 rollout log-prob 计算双边 ratio,超出区间的 token 不产生梯度。
- Critic 更快更新:每次 policy 更新前做 $K>1$ 次 value update,论文设置 $K=2$。
- 冻结 Critic Attention:论文观察到 Value Model 的 Full Attention 梯度更不稳定,因此冻结 attention,只更新 MoE 投影。
对 Agent trajectory,observation 不是模型动作。SAO 的 Skip-Observation GAE 直接把当前动作末尾连接到下一动作开头:
$$
\delta=r_t+\gamma V(a_{i+1,0})-V(a_{i,N}),
$$
$$
\hat A(a_{i,N})=\delta+\gamma\lambda\hat A(a_{i+1,0}).
$$
这样不会强迫 Critic 为外部 observation token 学一个虚假的自回归价值过渡。
1 | trajectory = async_rollout.one(prompt) |
SAO 论文在 Qwen3-30B-A3B 上报告:SWE-bench Verified 从 GRPO+DIS 的 27.0 提高到 SAO 的 29.8;数学任务也优于对照。这个实验支持 SAO 组件组合,但不是 GLM-5.2 的独立组件消融。[^sao]
CompactionRL:摘要也要为任务结果负责
长程 Agent 即使有 1M context,也会遇到 KV Cache、调度和上下文预算限制。CompactionRL 在剩余预算低于阈值时,让同一个可训练策略生成摘要:[^compaction]
$$
C-|h_t|<T_{\mathrm{comp}},
\qquad
S_t\sim\pi_\theta(\cdot\mid h_t\oplus q_{\mathrm{sum}}).
$$
随后用系统提示、摘要和最近 $k$ 个原子化的 action-observation 对重建上下文:
$$
\bar h_t=(s)\oplus u_{\mathrm{resume}}(S_t)
\oplus(z_{t-k+1},\ldots,z_t).
$$
摘要不是外部预处理器。它和普通执行 token 一样由 Actor 生成,并共享最终任务奖励 $R(\tau)$。如果摘要漏掉文件路径、失败命令或未解决错误,后续执行失败会反向惩罚摘要行为。
压缩会把一条 trajectory 切成数量和长度都不固定的 $K$ 个 segment。若按 segment 平均 loss,压缩次数多的轨迹会被重复加权。CompactionRL 因此在全部可训练 token 集合 $\mathcal M$ 上归一化 PPO loss:
$$
\mathcal L_\pi=-\frac1{|\mathcal M|}
\sum_{(s,i)\in\mathcal M}
\min\left(
\rho_{s,i}\hat A_{s,i},
\operatorname{clip}(\rho_{s,i},1-\epsilon,1+\epsilon)\hat A_{s,i}
\right).
$$
第二个问题是信用距离。若每个 segment 独立做 GAE,早期摘要会“看起来”离终局奖励很近。设后续 segment 还有 $N_{>s}$ 个可训练 token,跨轨迹修正为:
$$
\hat A_{s,i}=(\gamma\lambda)^{N_{>s}}A^{\mathrm{loc}}_{s,i}.
$$
这恢复了早期 token 到最终结果的大致时间距离,同时保留 segment 独立训练的系统并行性。
CompactionRL 的 GLM-4.5-Air 实验中,80K 峰值上下文下的压缩推理,SWE-bench Verified 从 base 的 59.8、普通 RL 的 62.5 提高到 66.8;去掉 token-level loss 后降至 60.0,去掉 cross-trajectory GAE 后为 63.0。[^compaction]
QAT:让模型在量化误差里学习
先纠正阶段归属:GLM-5 报告原文明确写道,INT4 QAT 应用于 SFT stage,并开发了同时适用于训练和离线权重量化的 kernel,以保证训练与推理逐比特一致。[^glm5]
因此它不属于本文的“非 SFT 方法序列”,但它直接决定 NPU 上低精度后训练能否保持分布一致,必须单独理解。
Fake quant 的前向
对一组浮点值 $x$,仿射量化可写成:
$$
q=\operatorname{clip}\left(
\operatorname{round}\left(\frac{x}{s}\right)+z,
q_{\min},q_{\max}
\right),
$$
$$
\hat x=s(q-z).
$$
$s$ 是 scale,$z$ 是 zero-point。QAT 前向并不一定真的把模型状态长期存成 INT4;它通常执行 quantize → dequantize,让后续 GEMM 看到离散化后的 $\hat x$,从而把舍入、截断和动态范围误差暴露给训练。
量化粒度决定多少元素共享一组 qparam:
- per-tensor:整个 tensor 共用一组 scale,开销小、误差大;
- per-channel/per-row:一行或一个输出通道一组;
- per-group/per-block:例如每 32 或 128 个权重一组,在误差与元数据间折中;
- per-token activation:每个 token 的激活独立求 scale。
torchao 的 INT4 fake quant 代码明确使用 quant_min=-8, quant_max=7 的有符号范围;其通用 fake-quant op 等价于量化再反量化但不做实际 dtype cast。[^torchao]
STE 的反向
round 几乎处处梯度为 0,直接求导会让训练停止。Straight-Through Estimator 在反向把离散算子近似成恒等映射:
$$
\frac{\partial\operatorname{round}(u)}{\partial u}\approx1.
$$
torchao 的 _Round.backward 直接返回上游梯度 gy,就是最直白的 STE。[^torchao_ste]
1 | # QAT forward |
物理对象必须分清:浮点 master weight 由 optimizer 更新;q 是临时整数语义;fake_weight 仍是浮点 tensor;部署 checkpoint 则可能是实际 packed INT4 加 scale/zero-point。只看 Python dtype 很容易误判究竟在哪一步获得了内存收益。
为什么强调 bitwise-identical
若 QAT 前向和离线转换使用不同的 rounding mode、group 划分、scale 精度、饱和范围或 packing 顺序,训练适应的是误差 $e_{\mathrm{train}}$,部署面对的却是另一个误差 $e_{\mathrm{deploy}}$:
$$
\hat W_{\mathrm{train}}=Q^{-1}{a}(Q_a(W)),
\qquad
\hat W{\mathrm{deploy}}=Q^{-1}_{b}(Q_b(W)).
$$
即使两者平均误差相近,MoE router、DSA indexer 或采样 logits 的边界 token 也可能改变。GLM-5 的“逐比特一致”要求,本质上是在消除这一隐藏的第二量化器。
MindSpeed-LLM 的固定提交已经暴露 w4a16-mxfp4、w4a16-mxfp4-moe-only、w4a4-mxfp4、w4a8-moe-only 等 QAT scheme,并允许 W4A8 使用 32/128 block size。[^mindspeed_qat] 这说明昇腾侧已有 QAT 算子积木,但仍不能据此断言 GLM-5.2 的官方 INT4 QAT 配方已复现。
量化:三件事不要混为一谈
围绕 GLM 的公开材料,至少存在三条低精度路径:
| 路径 | 训练参数 | 前向数值 | 主要目的 | 是否产生适应量化误差的梯度 |
|---|---|---|---|---|
| QAT | 通常保留浮点 master weight | fake quant 或低精度训练 kernel | 让模型适应目标量化误差 | 是 |
| 量化 Rollout | Actor 可继续 BF16 训练 | 推理侧 FP8/INT8/INT4 权重或 KV | 降低采样显存、带宽和时延 | 否,除非同一误差也进入训练前向 |
| 离线部署量化 | 训练已结束 | packed W8A8/W4A8/INT4 | 降低部署成本 | 否 |
slime 当前推荐的大型 MoE 路径是 Megatron BF16 训练 + SGLang FP8 rollout:同步时把更新后的 BF16 权重按 rollout checkpoint 的量化配置转换成 FP8 后发送;FP8 KV Cache 是另一个独立开关。固定提交把 INT4 rollout/QAT 标为 beta,FP8 训练 + rollout 标为 experimental。[^slime_lowp]
这条路径最容易产生误解:Actor optimizer 并没有在 FP8 参数上更新,但行为数据由 FP8 rollout 策略产生,所以必须继续测量:
$$
\Delta_t=log\pi^{\mathrm{BF16\ train}}(y_t\mid s_t)
-\log\pi^{\mathrm{FP8\ rollout}}(y_t\mid s_t).
$$
IcePop/DIS 可以屏蔽 $\Delta_t$ 过大的 token,却不能替代量化校准。如果大量 token 被屏蔽,训练虽然不崩,有效样本率也会下降。
另一方面,GLM-5.2 的官方 Ascend 部署文档使用 QuaRot、Flex SmoothQuant 和 SSZ 组合的混合 W8A8;这是部署推理方案,不是 QAT 证据。[^glm52_ascend] MindSpeed-RL 还公开了基于 Flash-RL 的 NPU INT8 online-quantized rollout 示例,通过 BF16/INT8 profile 决定更新权重如何在线量化;同样不能把它写成 GLM-5.2 官方 recipe。[^mindspeed_rl_quant]
NPU 原生的数值契约
把前面的方法压缩成 NPU 研发对象,可以得到六份不能破坏的契约。
动作与概率契约
- rollout 交付 exact token IDs、response mask、rollout log-prob、采样配置和 tokenizer/chat-template revision;
- train、rollout、teacher 必须对同一 token ID 和同一前缀计算 log-prob;
- observation、prompt、工具返回和复制的 compacted tail 不进入 policy loss;
- sampled log-prob 的精度、logsumexp 和 vocabulary parallel reduction 必须有对照测试。
稀疏与版本契约
- DSA Top-k 记录 tie、排序、NaN、index dtype 与跨卡归并规则;
- rollout sample 携带 policy version,trainer 定义可接受的最大 staleness;
- 权重同步包含训练分片 → 推理分片 → 量化 → 发送 → 原子切换 → 确认,不把“传输完成”等同于“新策略已生效”;
- 多轮会话的 DP routing 与 KV Cache owner 同步迁移或显式失效。
Teacher 与量化契约
- 每个 prompt 的 teacher route 可追溯,教师 tokenizer 和 action space 与学生兼容;
- teacher prefill payload 明确是 sampled log-prob、Top-k IDs/logits 还是 full vocab;
- QAT 与离线量化共享 rounding、scale、zero-point、group/block、饱和和 packing 语义;
- BF16/FP8/INT8/INT4 分别标注为 model state、GEMM compute、rollout weight、KV Cache 或 checkpoint format。
内存不是“参数量乘位宽”
RL/OPD 峰值显存至少应写成:
$$
M_{\mathrm{peak}}=
M_{\mathrm{model\ state}}+
M_{\mathrm{saved\ activations}}+
M_{\mathrm{operator\ workspace}}+
M_{\mathrm{communication\ buffers}}+
M_{\mathrm{live\ IO}}+
M_{\mathrm{allocator}}+
M_{\mathrm{runtime\ margin}}.
$$
其中 Actor、Reference、Teacher、Critic、rollout KV、DSA index、teacher logits、weight-reshard buffer 可能在不同 NPU、不同进程或不同时间段驻留。必须为每个对象记录:
- 逻辑形状与物理布局;
- producer、consumer 与 owner;
- 创建、跨进程传输、复用和释放时间;
- 属于持久模型状态、保存激活、算子 workspace、通信 buffer 还是 live IO。
现有昇腾栈到了哪里
固定到本文核验的提交,开源状态可以概括为:
| 能力 | 已有证据 | 仍缺的 GLM-5.2 闭环证据 |
|---|---|---|
| GLM-5.2 模型训练 | MindSpeed-LLM 有 744B-A40B、32 节点、每节点 16 NPU 的预训练脚本,含 DSA/MoE/MTP | GLM-5.2 SFT/RL/OPD 的公开 NPU recipe |
| 通用 RL | MindSpeed-RL 支持 GRPO/PPO/DAPO、异步队列、训推重分片、vLLM-Ascend | IcePop、GLM TITO/DIS、Cross-Stage OPD 的 E2E 示例 |
| 量化训练 | MindSpeed-LLM 有多种 W4/A4/A8 QAT scheme | 与 GLM 报告逐比特一致要求对应的公开验证 |
| 量化 rollout | MindSpeed-RL 有 Qwen INT8 online-quantized rollout 示例 | GLM-5.2 DSA/MoE 的概率 mismatch、吞吐和收敛证据 |
| 昇腾推理 | GLM-5.2 官方文档支持 vLLM-Ascend/SGLang/xLLM 与混合 W8A8 | 训练 Actor、Teacher Prefill、Verifier、权重原子切换的统一 recipe |
因此当前最准确的判断不是“昇腾不支持 GLM RL”,而是:模型、通用 RL、QAT 与推理积木已经存在;等价于官方 GLM-5.2 的端到端 NPU 原生后训练配方仍是公开缺口。
证据能说明什么
本文把证据分成四层,避免把模型级结果误写成算法因果:
- 流程证据:GLM-5 报告和 GLM-5.2 博客说明哪些阶段、框架和方法被使用。
- 方法证据:MOPD、SAO、CompactionRL 在各自受控模型和任务上的结果,说明机制有实验支持。
- 代码证据:固定提交证明某个 flag、loss、QAT scheme、backend 或示例存在。
- 缺口证据:没有找到 GLM-5.2 NPU E2E recipe,只能表述为“截至固定版本未找到”,不能推断内部或未来一定不存在。
尤其要保留三个边界:
- GLM-5/5.2 的总体 benchmark 不能隔离某个 RL、OPD 或 QAT 组件的收益;
- SAO 的主实验是 Qwen3-30B-A3B,CompactionRL 的主实验是 GLM-4.x;“用于 GLM-5.2 pipeline”是部署陈述,不是 GLM-5.2 消融;
- GLM-5 报告没有给 INT4 QAT 的独立精度/吞吐消融,不能编造“QAT 提升了多少”。
总结
GLM 的非 SFT 后训练可以记成一条清晰主线:
- Reasoning RL 用 GRPO 获得组内相对方向,用 IcePop 和确定性 DSA 只保留可信 token;
- Agentic RL 用异步 rollout 提升吞吐,再用 exact token、rollout log-prob、双边 IS 和 policy version 控制滞后;
- General RL 把规则、ORM 和生成式 judge 组合成开放任务的目标;
- Cross-Stage OPD 用教师 token 分布恢复前序阶段能力,GLM-5.2 的十多个专家并行 OPD 在结构上接近多教师 MOPD;
- SAO 消除组内等待,但以 Critic 和 Value Model 稳定机制换取单轨迹更新;
- CompactionRL 把摘要纳入策略,让上下文压缩也对最终任务负责;
- QAT 用 fake quant + STE 让模型适应低比特误差,但 GLM-5 明确把它放在 SFT,而 FP8/INT8 rollout 与 W8A8 部署是另外两条量化路径。
对 NPU 团队而言,最需要掌握的不是更多算法缩写,而是动作、概率、索引、版本、量化和对象生命周期。这些契约守住以后,RL、OPD、SAO 或 QAT 才能在 NPU 上保持它们原本的数学含义。
参考文献
[^glm5]: GLM Team, GLM-5: from Vibe Coding to Agentic Engineering, 2026。后训练方法见 Section 3;INT4 QAT 的 SFT 阶段归属见 Section 2.5.4。
[^glm52]: Z.ai, GLM-5.2: Built for Long-Horizon Tasks, 2026-06-16。官方披露 slime、十多个专家并行 OPD 与约两天训练时间。
[^sao]: Hou et al., Single-Rollout Asynchronous Optimization for Agentic Reinforcement Learning, 2026。
[^compaction]: Li et al., CompactionRL: Reinforcement Learning with Context Compaction for Long-Horizon Agents, 2026。
[^mopd]: Ma et al., MOPD: Multi-Teacher On-Policy Distillation for Capability Integration in LLM Post-Training, 2026。
[^slime_opd]: THUDM, slime on-policy distillation documentation 与 loss implementation, 固定提交 f655e13。
[^torchao]: PyTorch AO, fake_quantizer.py, 固定提交 623c463。
[^torchao_ste]: PyTorch AO, _Round with STE backward, 固定提交 623c463。
[^mindspeed_qat]: Ascend, MindSpeed-LLM QAT quant engine, 固定提交 79afbee。
[^slime_lowp]: THUDM, slime low-precision training and rollout, 固定提交 f655e13。
[^glm52_ascend]: Z.ai, Using Ascend NPU to Deploy GLM-5.2, 固定提交 436efa0。
[^mindspeed_rl_quant]: Ascend, MindSpeed-RL Online Quantized Rollout, 固定提交 26c21e6。