官方博客的原话是「Scaling post-training is all we did for GLM-5.3」:GLM-5.3 与 GLM-5.2 同基座,增益来自后训练; 算法侧沿用 SAO with compaction。SAO 的原始论文(arXiv 2607.07508v1)给出单轨迹异步 RL、DIS 与更强 value model 的完整设计, 但论文的部署对象是 GLM-5.2 750B-A40B,不是 GLM-5.3。这两条来源必须分开读。
GLM-5.3 的官方材料是一篇 2026-08-14 的博客和 HF 模型卡;未找到 GLM-5.3 专门技术报告。博客明确写 same base model as GLM-5.2、every gain comes from post-training;SAO 是另一条线: 它解决异步长程 RL 的稳定性,训练对象是 Qwen3-30B-A3B,部署对象是 GLM-5.2。
SAO 把 GRPO 的 group-wise sampling 换成每个 prompt 一条轨迹。DIS 直接用 rollout logprob 算
rt = πθ / πrollout,落在
[1−εl, 1+εh] 之外的 token 整个从梯度中置零;critic 每次策略更新配 K=2 次更新,
冻结 attention、只训 MoE 投影,并用 skip-observation GAE 跳过环境观测。
结果分两套:SAO 在 Qwen3-30B-A3B 上把 AIME2025 从 GRPO 的 84.2 拉到 97.3,SWE-Bench Verified 从 23.0 拉到 29.8,稳定训练到 1000 步; GLM-5.3 博客报告 Terminal-Bench 3.0 从 4.6 到 28.3,DeepSWE v1.1 从 46.2 到 66.9。两套数字不能相加。
先看同步 batch 的三个成本:长尾等待、跨版本 off-policy、以及和线上单轨迹反馈不兼容。
同步 RL 的流程是「采一整批 rollout,等齐,再优化」。长程 Agent 任务的轨迹长度差异很大: 短轨迹很快结束,长轨迹变成 straggler,GPU 集群在等最慢那条时大面积空转(SAO §1)。 这不是某个实现细节,而是 batch 语义本身决定的。
GRPO 把这个问题放大了一层。它对每个 prompt 采一组 G 条轨迹,用组均值做 baseline,因此必须等组内所有轨迹完成才能算 advantage; 等待时间由最慢的一条决定。论文把这种延迟称为 latency-driven off-policy:等得越久,用于更新的数据离当前策略越远(SAO §1)。 在线上或复杂 Agent 环境里,环境常常只返回单条轨迹反馈,group-wise sampling 还会直接和反馈形态冲突(SAO §1)。
异步训练能拆掉这个等待,但会引入 policy lag。一条轨迹的生成可能横跨多次模型更新, 精确追踪行为策略 πold 需要保存一串 checkpoint 历史;论文认为这在实践中不可行(SAO §3.1)。 如果直接用当前策略去更新很旧的数据,off-policy 偏差会变成训练震荡。
另一条路是单轨迹:每个 prompt 只采一条,完成即训练。它拆掉了组屏障,但也拆掉了 group baseline; 梯度估计退化成 REINFORCE 式的高方差(SAO §3.2)。所以问题不是「异步还是同步」, 而是「拆掉 group 之后,用什么补方差、用什么挡 off-policy token」。
同步 batch 必须等组内最长轨迹;长尾越重,空转越多。异步消费轨迹能缓解,但不自动解决稳定性。
组均值减方差,但组必须等齐;等齐的过程本身制造 off-policy。单轨迹去掉等待,方差又升上来。
真实沙箱与在线业务往往一次只给一条反馈;group-wise 采样和这种反馈形态不匹配。
前人方案分别在「省显存」和「提吞吐」上用力;SAO 要同时处理稳定性和单轨迹反馈。
PPO 的 actor-critic 用独立 value model 估 advantage。论文 §2 指出,这相当于为 value function 再维护一份模型参数, 训练显存 footprint 近似翻倍;换来的是一定程度上的方差控制。GRPO 把这份成本省掉:它不训 critic, 用同一 prompt 的组内归一化奖励做 baseline(SAO §2)。
GRPO 的代价是组屏障。标准 GRPO 在这套 agentic RL 设置里约 160 步崩溃 (SAO §4.2);它的分数是崩溃前的最后有效值。VAPO 换成长度自适应 GAE 与 value-based RL, 但没有 DIS 时 token-level clip ratio 接近 0,约 90 步崩溃(SAO §4.4、Figure 4c)。 也就是说,「看起来没在裁剪」不等于稳定。
异步系统走的是另一条路。AReaL、ROLL Flash、asynchronous RLHF 等工作把 rollout 与训练解耦,重点在吞吐与墙钟效率; 论文的判断是,这些工作对训练稳定性和任务效果的覆盖不足(SAO Abstract、§5.2)。 Decoupled PPO 进一步保留 πθ、πθold、πrollout 三个策略做重要性采样, 但当一条轨迹横跨多次更新时,πθold 的精确行为概率很难追(SAO §3.1)。
SAO §1–§3 的方案对照;「约 160 步」与「约 90 步」是论文报告的训练崩溃位置,条件为 Qwen3-30B-A3B 的 agentic RL 设置。
| 方案 | 机制 | 在本实验里的卡点 |
|---|---|---|
| PPO | actor-critic + GAE,critic 与策略同时训 | critic 让训练显存 footprint 近似翻倍(§2) |
| GRPO | 同一 prompt 采 G 条,组均值做 baseline,无 critic | 组必须等最慢一条;标准 GRPO 约 160 步崩溃(§4.2) |
| VAPO | length-adaptive GAE + value-based RL | 没有 DIS 时 clip ratio 接近 0,约 90 步崩溃(§4.4、Figure 4c) |
| AReaL / ROLL Flash / async RLHF | rollout 与训练解耦,主打吞吐 | 论文称其重点在效率,稳定性与任务效果覆盖不足(§1、§5.2) |
| Decoupled PPO | πθ / πθold / πrollout 三策略重要性采样 | 轨迹跨多次更新时,精确追踪 πθold 需要 checkpoint 历史,实践不可行(§3.1) |
单轨迹拆掉了组屏障,但把方差控制的担子全压到 value model。SAO 围绕 value model 的四个设计——K=2 的更快 value 更新、 冻结 attention、skip-observation GAE、扩大 value pretraining——都是围绕这一件事。 所以它不是「GRPO 加一个 mask」,而是把 baseline 从组均值换成了 critic。
SAO 的关键不是「异步」本身,而是异步之后仍能把极端 off-policy token 挡在梯度外。
单轨迹的设置很直接:每个 prompt 只采一条 rollout,轨迹完成就送入训练缓冲区,不等待同组其他样本(SAO §3.2)。 这让训练节奏和线上单条反馈对齐,但也让 advantage 估计失去 group baseline。SAO 的选择是把 baseline 交给 critic, 并用 DIS 处理异步带来的 policy lag。
DIS 的核心是「直接」:行为策略用 πrollout 代替,ratio 只算当前策略与采样策略的差。 论文的理由是,异步 rollout 可能横跨多次模型更新,精确的 πθold 既贵又容易错; 直接用 rollout logprob 可以省掉一次独立的 old-policy 推理(SAO §3.1)。
这和 PPO 的 clip 不是一回事。PPO 的 min/clip 会保留一个被裁剪后的项;DIS 直接把区间外的 token 置零。 论文的措辞是「masked from gradient computation entirely」,并说这让更激进的裁剪成为可能(SAO §3.1)。 区间也不对称:推理任务用 εl=0.3、εh=5.0;coding 任务用 0.8/3.0(SAO §4.1)。 上限比下限宽得多;论文没有解释这组取值的来源。
组 1:reasoning 预设,ε_l=0.30,ε_h=5.00,r=2.40。
1−0.30=0.70,上界 1+5.00=6.00;0.70 < 2.40 < 6.00,所以 f=2.40,状态「保留」。6.00:6.00 < 6.00 不成立,所以 f=0,状态「mask」。区间是开区间,边界值也被挡掉。组 2:coding 预设,ε_l=0.80,ε_h=3.00,r=0.75。
1−0.80=0.20,上界 1+3.00=4.00;0.20 < 0.75 < 4.00,所以 f=0.75,状态「保留」。0.20:0.20 > 0.20 不成立,所以 f=0,状态「mask」。这个模拟覆盖了什么:只实现 Eq.3 的 mask 函数,覆盖「区间内保留」与「区间外置零」两个分支;预设的 0.3/5.0/0.8/3.0 来自 §4.1。比较前把 r 与区间端点按页面显示的 2 位小数取整,避免 1−0.80 的二进制尾差把边界值 0.20 误判成区间内。它不实现 Eq.1 的 logπθ 项、Eq.2 的 logprob 计算、优势符号、PPO 的 min/clip,也不模拟 token 级批量与数值误差。
单轨迹没有组内对比,方差比 GRPO 高。SAO 的做法不是再加一个 group,而是把 value model 训好: 每次策略更新配 K=2 次 value 更新(§3.2);冻结 value model 的 attention,只优化 MoE 投影(§3.2); 用 skip-observation GAE 处理「模型动作 → 环境观测 → 模型动作」的轨迹;并扩大 value model 的预训练语料(§3.2)。
环境观测 oi 不是模型生成的,标准 GAE 跨过 oi 去算 V(oi,start), 等于让 value model 预测一个外部环境状态的价值;论文认为这会引入噪声(§3.2)。 skip-observation 的改法是把 Bellman target 从「动作 → 观测 → 动作」改成「动作 → 下一个动作」, advantage 只在模型自己生成的 token 上传播。论文在 Appendix A.1/Table 5 还比较了 step-level 与 token-level: 同样训练 400 步时,step-level average 是 85.8 / 60.5、last-token 是 87.3 / 62.8、token-level 是 89.8 / 66.8 (AIME2025 / BeyondAIME,Accuracy %)。
SAO §3.1–§3.2 的方法组件;本表是归纳,不是原文表格。
| 组件 | 做法 | 解决什么 | 出处 |
|---|---|---|---|
| 单轨迹采样 | 每个 prompt 1 条 rollout,完成即入训练 | 去掉组同步屏障 | §3.2 |
| DIS | rt=πθ/πrollout;区间外 token mask | 异步 policy lag 与极端 off-policy token | §3.1、Eq.1–3 |
| Faster value | 每次策略更新配 K=2 次 critic 更新 | critic 跟上快速漂移的策略 | §3.2 |
| Frozen attention | 冻结 attention,只训 MoE 投影 | critic 梯度范数过大 | §3.2、Figure 4b |
| Skip-observation GAE | 跨过环境观测 token,action-to-action | 环境噪声污染 advantage | §3.2、Eq.4–5 |
| Value pretraining | 扩大 value model 预训练语料 | critic 冷启动 | §3.2 |
Table 1 里「SAO (w/ DIS only)」的 AIME2025 是 94.2, 完整 SAO 是 97.3,差 3.1 个百分点(97.3 − 94.2);「GRPO (+ DIS)」是 93.5。DIS 能把训练稳住,但完整方法还包含单轨迹 value model 的一整套训练设计。 把 SAO 简化成「一个 mask」会漏掉这部分。
把论文的实验配置拆成可复算的 batch 与更新次数,先看清 SAO 的成本落在哪里。
SAO §4.1 的实验配置;GRPO 变体为 16 prompts × 8 rollouts = 128。
| 项 | 值 | 出处 |
|---|---|---|
| Backbone | Qwen3-30B-A3B-Thinking-2507;TIR SFT 3 epochs,数据由 GPT-OSS-120B 生成 | §4.1 |
| Batch / group | 128 条轨迹 / G=1 | §4.1 |
| Max length | 128k tokens | §4.1 |
| Policy LR | 1×10−6 | §4.1 |
| ε_l / ε_h(reasoning) | 0.3 / 5.0 | §4.1 |
| ε_l / ε_h(coding) | 0.8 / 3.0 | §4.1 |
| Value LR / λ_critic / warmup | 5×10−6 / 1 / 10 steps | §4.1 |
| K(critic 更新频次) | 2 | §4.1 |
| Coding scaffold | OpenHands,最多 300 轮,128k context | §4.1 |
| Eval | Pass@1;temp 1.0,top-p 1.0,max 128k;math 最多 50 轮;AIME/HMMT/IMO 16 次、BeyondAIME 4 次 | §4.1 |
这套配置里,batch 固定为 128 条轨迹。SAO 的 G=1 意味着 128 个 prompt、每个 prompt 1 条轨迹;GRPO 变体则是 16 个 prompt、每个 prompt 8 条轨迹,乘积仍是 128(§4.1)。同样的 batch 大小,组内等待的轨迹数从 0 变成最多 7 条。 下面这个拆分器只做算术,不模拟墙钟时间。
组 1:G=1(SAO)。
batch=128 条轨迹;128/1=128 个 prompt,每个 prompt 1 条轨迹。1−1=0 条其他轨迹。这就是「单轨迹、完成即训练」的配置。组 2:G=8(GRPO 变体)。
batch=128 条轨迹;128/8=16 个 prompt,每个 prompt 8 条轨迹;16×8=128。8−1=7 条其他轨迹。这是结构计数,不是墙钟时间;论文没有给出等待时间或 GPU 利用率数字。这个模拟覆盖了什么:只做 batch 的算术拆分,覆盖 G=1 与 G=8 两种论文设置;不模拟 rollout 长度分布、调度策略、吞吐或 GPU 空转比例。
更新次数上,论文 §3.2 把 K 的单位写成「每次策略梯度更新」,§4.1 与 §4.3 的实验描述写成「每 batch」。 两处单位不同,本页只按原样并列,不把 2 次/更新换算成 2 次/batch。 能确定的是:K=2 是实验设置,目的是让 value 估计在策略漂移之前跟上(§3.2)。
成本也在这里。PPO 式 critic 让训练显存 footprint 近似翻倍(§2);SAO 仍然需要 critic, 冻结 attention 只是减少可训练参数,论文没有给出显存账本。所以「省掉组等待」不等于「省掉 critic 的显存与训练时间」。
算法上是一条轨迹立即训练;工程上要靠 rollout、training、buffer 同一条 dataflow 才能不重建训练栈。
rt;不维护 πθold(Eq.2)。[1−εl, 1+εh] 外的 token 置零;区间内的 token 保留原 ratio(Eq.3)。SAO 论文描述的是算法与 Qwen3-30B-A3B 实验,没有展开 slime 的内部实现;GLM-5.3 博客描述的是工程栈与 GLM-5.3 的 benchmark, 没有给出 SAO 的完整消融。把「Megatron + SGLang + 单 dataflow」当成 SAO 论文的结论,会混淆来源。 本页把算法图归到 SAO §3/Figure 2,把工程分工归到博客 §slime,并在图注里分开标注。
先看 SAO 在 Qwen3-30B-A3B 上的对照,再看 GLM-5.3 官方博客的报告值;两套实验不要混。
SAO Table 1(节选):Qwen3-30B-A3B-Thinking-2507,reasoning-with-Python,Pass@1 %; AIME2025/HMMT/IMOAnswerBench 为 16 次评测均值,BeyondAIME 为 4 次;temp 1.0,top-p 1.0,max 128k,math 最多 50 轮。
| Model | AIME2025 | BeyondAIME | HMMT Nov 2025 | IMOAnswerBench |
|---|---|---|---|---|
| Qwen3-30B-A3B w/ python | 14.6 | 10.5 | 17.3 | 7.8 |
| Qwen3-30B-A3B w/o python | 85.0 | 63.0 | 76.7 | 55.3 |
| SFT w/ python | 80.4 | 53.3 | 75.2 | 53.3 |
| GRPO w/ python | 84.2 | 54.8 | 76.0 | 55.8 |
| GRPO (+ DIS) | 93.5 | 70.8 | 84.0 | 70.0 |
| SAO (DIS only) | 94.2 | 71.5 | 86.7 | 71.3 |
| SAO | 97.3 | 74.8 | 88.3 | 74.0 |
在 Qwen3-30B-A3B、reasoning-with-Python、Pass@1 的条件下,SAO 的 AIME2025 是 97.3,GRPO 是 84.2, 差 +13.1 个百分点(97.3 − 84.2);BeyondAIME 是 74.8 vs 54.8, 差 +20.0 个百分点(74.8 − 54.8);HMMT 是 88.3 vs 76.0, 差 +12.3 个百分点(88.3 − 76.0);IMOAnswerBench 是 74.0 vs 55.8, 差 +18.2 个百分点(74.0 − 55.8)。 对 GRPO (+ DIS) 的 AIME 93.5,SAO 还高 3.8 个百分点(97.3 − 93.5)。
SAO Table 2:Qwen3-30B-A3B,SWE-Bench Verified,OpenHands,最多 300 轮,128k context,Pass@1 %。
| Model | SWE-Bench Verified |
|---|---|
| Qwen3-30B-A3B | 23.0 |
| + GRPO (w/ DIS) | 27.0 |
| + SAO | 29.8 |
SWE-Bench Verified 上,SAO 是 29.8,base 是 23.0,差 +6.8 个百分点(29.8 − 23.0); 对 GRPO (+ DIS) 的 27.0,差 +2.8 个百分点(29.8 − 27.0)。
SAO Table 4:AIME2025 / BeyondAIME,Accuracy %;SAO 与各消融变体,同为 Qwen3-30B-A3B 设置。
| Variant | AIME2025 | BeyondAIME |
|---|---|---|
| SAO | 97.3 | 74.8 |
| SAO w/o Faster value | 95.0 | 69.8 |
| SAO w/o Frozen attention | 90.6 | 74.5 |
| Vanilla VAPO (w/o DIS) | 91.3 | 69.0 |
| Running mean baseline | 79.8 | 55.3 |
去掉 faster value:AIME2025 95.0,比 SAO 低 2.3 个百分点(97.3 − 95.0);BeyondAIME 69.8,低 5.0 个百分点(74.8 − 69.8)。 去掉 frozen attention:AIME 90.6,低 6.7 个百分点(97.3 − 90.6);BeyondAIME 74.5,只低 0.3 个百分点(74.8 − 74.5)。 Running mean baseline 是 79.8 / 55.3,分别低 17.5 个百分点(97.3 − 79.8) 与 19.5 个百分点(74.8 − 55.3)。
稳定性方面,标准 GRPO 约 160 步崩溃;SAO 训练到 1000 步(Abstract);SAO 与 GRPO (+ DIS) 在约 400 步后才出现明显分化(§4.2)。VAPO 在约 90 步崩溃(§4.4)。这些是论文报告的训练动态,不是收敛性证明。
一个反直觉的数字在 Table 1:未做 TIR SFT 的 Qwen3-30B-A3B,AIME2025 在 w/ python 时是 14.6,w/o python 时是 85.0; SFT w/ python 才回到 80.4。 推断(由 Table 1 反推):工具本身不是增益,模型要先学会在推理里调用工具; 未对齐的基座把 python 当成额外噪声。
frozen attention 的代价也不均匀:AIME 掉 6.7 个百分点, BeyondAIME 只掉 0.3 个百分点(Table 4)。 同一个改动在不同 benchmark 上的代价差了一个数量级,不能用一个平均分概括。
GLM-5.3 Blog §Stronger Coding(前 3 行)与 §Emergent Cyber Capability(后 2 行):GLM-5.3 vs GLM-5.2,官方博客报告值; 不同 benchmark 的 harness 与预算不同,差值只在行内成立。Terminal-Bench 3.0 为 avg@3,口径为 Claude Code 2.1.207 harness、400K context、128K max output。
| Benchmark | GLM-5.2 | GLM-5.3 | 差值(百分点) |
|---|---|---|---|
| Terminal-Bench 3.0 | 4.6 | 28.3 | +23.7 |
| DeepSWE v1.1 | 46.2 | 66.9 | +20.7 |
| Agents' Last Exam | 23.8 | 28.5 | +4.7 |
| CyberGym | 77.2 | 84.5 | +7.3 |
| ExploitBench | 24.4 | 54.4 | +30.0 |
在 GLM-5.3 vs GLM-5.2、官方博客报告值下,Terminal-Bench 3.0 从 4.6 到 28.3(avg@3),差 +23.7 个百分点(28.3 − 4.6); DeepSWE v1.1 从 46.2 到 66.9,差 +20.7 个百分点(66.9 − 46.2); Agents' Last Exam 从 23.8 到 28.5,差 +4.7 个百分点(28.5 − 23.8)。
Cyber 侧:CyberGym 从 77.2 到 84.5,差 +7.3 个百分点(84.5 − 77.2); ExploitBench 从 24.4 到 54.4,差 +30.0 个百分点(54.4 − 24.4), 即 2.23 倍(54.4 / 24.4)。 ExploitGym 是任务计数:2 小时内从 29 到 105 个任务,6 小时内从 39 到 130 个任务;预算是按每模型 TPS 归一化的。
Z.ai Code Bench 上,Max effort 是 34.5% at ~75K output tokens, GLM-5.2 是 23.4% at 96K,差 +11.1 个百分点(34.5 − 23.4); High effort 是 31.4% at ~50K, Claude Opus 4.8 是 29.5% at 120K,差 +1.9 个百分点(31.4 − 29.5)。 官方博客还写「50% improvement」over GLM-5.2 on Z.ai Code Bench;同一节给出 GLM-5.2 在 Max effort 的 23.4%(96K),但未说明 50% 与这组 Max effort 数值的换算口径,本页不替它换算。 官方博客同时写 Claude Fable 5 在 Max effort 达到 39.5%,GLM-5.3 仍在其后。
安全侧,博客说自 GLM-5.2 以来与安全团队合作,在 269 个项目里 确认了 2,436 个漏洞,其中 1,097 个中高危;最早的漏洞可追溯到约 40 年前。 博客未说明这些数字是否经过独立审计。
slime 侧,博客说新增 top-p mask、top-k 与 full-vocabulary OPD;训练与 rollout 的 logprob 平均差控制在 1e-7 量级, 相对此前设置降低 99.99% 以上; 长时序 coding RL 的端到端吞吐提升 2.3 倍以上。
SAO 的 AIME/BeyondAIME/HMMT/IMO 数字来自 Qwen3-30B-A3B、reasoning-with-Python、Pass@1;SWE-Bench Verified 来自 OpenHands、Pass@1;GLM-5.3 的数字来自官方博客、开放权重模型(博客称 open-weights)与各 benchmark 自己的 harness。 模型、数据、评测协议都不同。本页把它们并排,是为了看清「后训练 scaling」的两层证据,而不是做加法。
SAO 的适用边界由 value model、logprob 基础设施和实验覆盖决定;GLM-5.3 的证据强度则由官方博客决定。
rt 直接来自 rollout 阶段记录的 logprob;Appendix B 明确说部署需要能可靠保留行为概率的基础设施。两者都是 scaling 的账本:SAO 把成本记在 critic 和 logprob 基础设施上,GLM-5.3 把成本记在环境、数据与 RL 系统上。 看清账本,再决定要不要把这套 stack 搬到自己的模型和任务上。