SAO — Single-Rollout Asynchronous Optimization for Agentic RL

SAO: Single-Rollout Asynchronous Optimization

笔记地图

  • 问题定义:同步 vs 异步 RL 的根本矛盾
  • 方法:DIS + Single-rollout + 三个 value 改进
  • 实验:6 个基准 + ablation + 训练动态 + 在线学习仿真
  • 相关工作:与 GRPO / VAPO / AReaL 的关系
  • 我的疑问:frozen-attention 的代价?DIS 在长 horizon 是否还有效?

阅读进度:当前 read-status: in-progress,用 [[Meta Bind]] 插件可一键切换

button
type: cycle
id: read-status
cycle: [todo, in-progress, done]

§1 背景:为什么需要异步 agentic RL

同步 RL 的痛点

在长链路 agentic 任务里(一次 rollout 可能要走 100+ 步),同步 pipeline 必须等一个 batch 里最慢的 rollout 跑完才能开始训练。常见症状:

  • 长尾样本拖慢整轮迭代 → GPU 利用率低
  • 工程上必须 padding 到统一长度,进一步浪费算力
  • 在 coding agent 这种"百轮工具调用"的场景里尤其严重

异步 RL 的代价

异步 rollout 不需要等齐整 batch,但它引入 policy lag:

rollout 模型 $\pi_{\text{rollout}}$ 是几轮训练前的旧策略,用它采出来的轨迹再去更新 $\pi_\theta$,等同于在 off-policy 数据上做 on-policy 更新。

GRPO 在异步场景下结构上不工作:GRPO 依赖同一 prompt 的多条 rollout 算 group-relative advantage,这要求所有 rollout 的 policy 差距不能太大;异步下 group 内政策漂移严重,advantage 估计失效。

[!quote] 作者 “group-wise sampling doesn’t naturally fit asynchronous training — groups must wait for the slowest sample.”


§2 方法:SAO 三大组件

2.1 DIS: 直接 Double-Sided Importance Sampling

[!note]+ 公式推导(折叠,先看思路) Decoupled PPO 引入三个 policy:$\pi_\theta$ (训练中)、$\pi_{\theta_{\text{old}}}$ (上次训练快照)、$\pi_{\text{rollout}}$ (采样用)。但在异步场景下 $\pi_{\theta_{\text{old}}}$ 根本追踪不了——一个 rollout 可能横跨多次 policy 更新。

SAO 的简化:丢掉 $\pi_{\theta_{\text{old}}}$,直接用 $\pi_\theta / \pi_{\text{rollout}}$: $$r_t(\theta) = \exp\left(\log\pi_\theta(a_t|s_t) - \log\pi_{\text{rollout}}(a_t|s_t)\right)$$

双侧 mask 比标准 PPO 更激进:把落在 $[1-\epsilon_\ell, 1+\epsilon_h]$ 之外的 token 整段 mask 掉(梯度为 0),而不是只裁剪梯度: $$f(x, \epsilon_\ell, \epsilon_h) = \begin{cases} x & \text{if } 1-\epsilon_\ell < x < 1+\epsilon_h \ 0 & \text{otherwise} \end{cases}$$

直觉:异步下 off-policy 比例分布长尾,单靠 PPO 的 clip 不足以抑制少量极端 token 对梯度的污染——直接 mask 更稳。

2.2 单 Rollout + 强化 Value Model

单 rollout 砍掉了 group 同步开销,但也让 advantage 估计方差更大(没有 group baseline 减方差)。SAO 通过加强 critic 来补:

2.3 Skip-Observation GAE(细节)

[!example]+ 公式与直觉(折叠) Agentic 轨迹形式:$T = [a_0, o_0, a_1, o_1, \ldots]$,observation $o_i$ 由环境生成,不在策略分布内。

标准 GAE 在 $a_{i,N} \to o_{i+1} \to a_{i+1,0}$ 这条边界上的 bootstrapping value 噪声很大。SAO 改写为:

$$\hat{A}(a_{i,N}) = \delta + \gamma\lambda \hat{A}(a_{i+1,0})$$ $$\delta = r_t + \gamma V(a_{i+1,0}) - V(a_{i,N})$$

关键改动:$\hat{A}(a_{i+1,0})$ 之前那一项本来是 $V(o_{i+1})$(环境 token 的 value),现在直接链到下一个 action 的 advantage。绕过环境状态,把"动作价值"链路直接打通。

2.4 GRPO vs SAO 对照


§3 实验

3.1 设置

项 值
Backbone Qwen3-30B-A3B-Thinking-2507,SFT 在 Tool-Integrated Reasoning 数据
Batch size 128
Group size 1 (关键)
Max length 128k
Policy LR 1e-6
$\epsilon_\ell$ / $\epsilon_h$ 0.3 / 5.0 (reasoning) · 0.8 / 3.0 (coding)
K (critic 频次) 2
Coding scaffold OpenHands,最多 300 轮

3.2 主结果

Model AIME2025 BeyondAIME HMMT IMOAnswerBench
Claude-Sonnet-4.5 87.0 62.0 81.7 65.8
GPT-5 High 94.6 74.0 89.2 76.0
GLM-4.7 95.7 — 93.5 82.0
SFT (w/ python) 80.4 53.3 75.2 53.3
GRPO (w/ python) 84.2 54.8 76.0 55.8
SAO 97.3 74.8 88.3 74.0
SAO (DIS only) 94.2 71.5 86.7 71.3
GRPO (+ DIS) 93.5 70.8 84.0 70.0
基准 Qwen3-30B-A3B baseline GRPO+DIS SAO
SWE-Bench Verified 23.0 27.0 29.8

[!tip] 关键观察

  • SAO 在 4/4 reasoning 上全面击败 GRPO 和加了 DIS 的 GRPO,说明不只是 DIS 的功劳,整套单 rollout + value 改进叠加才有效
  • SWE-Bench Verified 提了 +6.8 绝对分(vs baseline),这是 agentic coding 的大数字
  • 训练稳定性:标准 GRPO 在 ~160 步崩,SAO 训了 1000 步 仍稳定

3.3 Ablation

变体 AIME2025 BeyondAIME
SAO(完整) 97.3 74.8
w/o Faster value 95.0 (-2.3) 69.8 (-5.0)
w/o Frozen attention 90.6 (-6.7) 74.5 (-0.3)
Vanilla VAPO(w/o DIS) 91.3 69.0
Running mean baseline 79.8 55.3

[!warning] 三个改动缺一不可

  • frozen-attention 在 AIME 上掉了 6.7 分——这是最大单点贡献
  • faster value update 在 BeyondAIME 上掉了 5.0 分——长链路任务里 critic 频率关键
  • Vanilla VAPO 在 ~90 步就崩——DIS 是稳定性基础,没有它其他都白搭

3.4 训练动态

[!example]+ 训练曲线对比(折叠) Explained variance(EV):SAO 在 ~400 步后 EV 显著高于 baseline;EV 衡量 critic 的预测质量,越接近 1 越好。

Critic gradient norm:full-parameter 训练的 critic 梯度范数**比 frozen-attention 大一个数量级——直接对应上表 frozen-attention 那 6.7 分的损失。

Clip ratio:VAPO 的 clip ratio 接近 0(说明它根本没在裁剪,gate 失效);SAO 的 DIS 主动 clip 偏离更新。这是稳定性差异的根源。

3.5 在线学习仿真

构造任务:写作风格在 cute → chuunibyou → classical 三阶段切换,reward = $r_{\text{quality}} \times r_{\text{style}}$,judge 用 GLM-4.7。

[!quote] 关键洞察 Running-mean baseline 有历史窗口惯性,切换到新风格时它仍反映旧偏好,导致 reward 看起来"够好",策略不更新。SAO 的 state-dependent baseline 只反映当前策略状态,能跟上切换。


§4 相关工作(折叠)

[!note]+ RLHF 算法谱系

  • PPO:clipped surrogate + GAE,需 critic,是 SAO 的基础
  • GRPO:group-normalized rewards(无 critic),但 group 同步开销大
  • RLOO:REINFORCE leave-one-out,组规模小就方差爆炸
  • VAPO:async-friendly PPO 改进(已被 SAO 全面超越)

[!note]+ 异步 RL 系统

  • IMPALA:actor-learner 分离
  • AReaL:异步 RLHF
  • ROLL Flash:异步 rollout flash attention

共同问题:都假设仍能用 group baseline 或 trust region 约束,而 SAO 论证这些约束在异步长链路下结构上失效。


§5 部署:GLM-5.2 (750B-A40B)

  • 模型规模:750B 总参 / 40B 激活(MoE)
  • 训练规模:稳定 1000 步
  • 是首批在异步 agentic pipeline 上训出大 MoE 的公开报告之一

我的批注

  • ⚡ 双侧 mask vs 单侧 clip 这个区别很微妙但关键——异步下 off-policy 比例分布长尾,单侧 clip 留了"边界附近的污染梯度",mask 彻底干净。值得在自己做 async RL 时借鉴。
  • ⚡ frozen-attention 节省的训练成本没单独报——如果 attn 冻结只训 expert projection,critic 显存/通信直接少一个数量级。这对 750B MoE 是必要而非"经验技巧"。
  • ❓ frozen-attention 的代价:attn 不更新意味着 critic 对长上下文位置编码不敏感,多轮 agent 里 observation 的 token 位置是关键信号——会不会有 systematical bias?
  • ❓ DIS 在 1000+ 步外推?$\epsilon_h = 5.0$ 这么宽是经验值,理论上没收敛性保证
  • ❓ Skip-Observation GAE 把动作链路直接打通后,observation 上的 reward 信息还能传到前面吗?($\delta$ 里只有 $r_t$,observation token 的价值如何被利用?)
  • 🔗 与 [[VAPO:Efficient and Reliable Reinforcement Learning for Advanced Reasoning Tasks|VAPO]] 同源,SAO 把 VAPO 的失败原因归到"没做 DIS"
  • 🔗 与 [[SAPO]](Soft Adaptive Policy Optimization)名字像但完全不同的方法——SAPO 改 clip,SAO 改 group + clip + critic

行动项

  • 精读 SAO 论文 §3.1 DIS 部分,跟自己以前写的 IS estimator 推导对比
  • 在小规模 async RL 实验里试 frozen-attention critic
  • 调研 GLM-5.2 公开技术报告,看 SAO 在更大规模下的参数选择是否一致
  • 把 [[grpo]]、[[RLOO]]、[[VAPO:Efficient and Reliable Reinforcement Learning for Advanced Reasoning Tasks|VAPO]] 也整理一下,画一张"RLHF 算法谱系图"