QwenGyre: An Elastic Reinforcement Learning Framework for Training xLong-Horizon Agents
Weiqi Wang, Yuxin Zhou, Mouxiang Chen, Siyuan Zhang, Yi Zhang, Yuyan Luo, Zhiyu Yin, Chencan Wu, Jiemin Jiang, Wentao Yao, Chujie Zheng, JianWei Zhang
cs.LG, cs.DC
2026-09-28
阿里提出QwenGyre,在不中断进行中执行的前提下把空闲GPU转给训练,并用轨迹树给分支路径去重。Qwen 3.8 2.4T在NL2RepoBench上48步从52.5%升到58.5%,相对Async最多快1.78倍。
Issue 修复(SWE-bench 一类)通常几十轮交互就结束。仓库生成、整库重写、跨仓迁移把单次执行拉到数小时、上百次模型与环境往返、生命周期合计约 100 万 token。论文把这个区间叫做 XLong-horizon。
在线强化学习在这个尺度上会同时卡住调度和数据。Colocate 把整池 GPU 在 rollout 和训练之间整池切换:长尾任务没跑完,已经空出来的卡只能闲着。Async 把卡静态切成 rollout 池和训练池,等一个 batch 就绪经常长过一步训练,训练卡空转,闲着的一侧也借不过来。部署用的 harness 会压缩历史、派子 agent、重试路径,一次任务变成带大量共享前缀的分支图。
最强的 harness 是闭源、还在快速改版,这篇实验用的是 Claude Code 2.1.220。调度必须保证进行中的执行一直能打到模型,否则超时改写的是基础设施,跟策略无关。
QwenGyre 把 harness 执行寿命、GPU 角色、训练样本三条时间线拆开。沙箱和仓库停在 GPU worker 外面;模型调用走代理,角色切换时改路由。
弹性调度把 GPU 切成共享同一套训练并行布局的 cell。水位定义为已派发但尚未结束的执行数。水位下降、剩下的 rollout 容量仍盖得住未完成任务,cell 就按固定顺序转去训练:core cell 持有权威权重和优化器,satellite 经 Mooncake 的 RDMA 拉参数快照,加入正在跑的 batch。训练按 micro-step 流式发活,先空的 cell 多领。
切换时代理把进行中的请求改到其他 rollout 引擎,必要时用 RDMA 迁移 KV cache,再卸 rollout 权重、装训练权重。论文测到的切换是 rollout 到训练 8.52 秒、反向 3.46 秒,相对数小时的执行可以忽略。
轨迹侧用 TITO(token-in, token-out)把每次调用的精确 token 和 behavior log-prob 记进轨迹树,共享前缀只存一份。超时后只要工作区里有可评的部分产物,就按任务规则打分,不当成清一色的失败。评估失败和合法零分分开处理,前者进不了训练。每个 execution 最多收 Jmax=5 条轨迹,优先级 main > main-summary > sub-agent > sub-agent-summary。共享前缀的训练 target 只计一次;loss 先在 execution 内对可训练 token 平均,再对 batch 内 execution 平均,避免路径多的任务权重大。优化器用的是 GSPO 改版:token 级 importance 上限 5,序列级 clip 落在 [0.995, 1.005],每组 16 条独立 rollout。
训练走 Megatron,推理走 SGLang。对照是同等 GPU 预算、匹配调度 staleness(入队策略版本与消费前版本之差的期望 E[d])的 Colocate 和 Async。
| 设置 | 对照 | 结果 |
| Qwen 3.6 122B,NL2RepoBench,48 步 | Async | 累计加速 1.42-1.53× |
| 同上 | Colocate | 1.36-1.47× |
| Qwen 3.8 2.4T,NL2RepoBench,48 步 | Async 134.55 小时 | 75.42 小时,1.78× |
| 同上 | Colocate 91.47 小时 | 1.21× |
| 122B DeepSWE,24 步 | Async / Colocate | 最高 1.57× / 1.82× |
| 122B TerminalBench,24 步 | Async / Colocate | 最高 1.43× / 1.85× |
2.4T 的评测 passrate 从 52.48% 升到 58.54%。训练分数曲线和两个基线对齐,这 6 个点是「在这套管线上跑了 48 步 RL」的收益,调度器本身没有额外把分数拉开。
122B 在 NL2RepoBench 上单次 rollout 均值 1.93 小时,query 均值 2.96 小时,9.51% 的 query 至少 4 小时;harness 超时 6.25%,整体超时 0.87%。2.4T 加长了超时预算,仍有 61.1% 的 query 至少 4 小时,其中 38.2% 最长那条 rollout 以整体超时结束。执行挤在时限附近时,弹性调度很难提前回收 cell,相对 Colocate 只快 1.21 倍。Async 的固定训练池在长执行期间闲着,把那部分卡借给 rollout,才拉出 1.78 倍。
消融在 122B、前 12 步、E[d]=1.5。完整配置 E0 用 16.12 小时。Async 加流式训练(A3)仍要 22.18 小时;Colocate 加 standalone 和流式(C2)要 19.23 小时。细粒度 cell 相对 C2 再快 1.19 倍。每 burst 只更新 1 步的 E1 比 E0 慢 10.9%,但仍比流式 Async 快 1.24 倍。32 节点从八个 4 节点 cell 合成四个 8 节点 cell,只慢 2.2%。只留主轨迹分数更低、梯度更大;Jmax=5 对齐全收,前向反向时间是不封顶的 74.8%,少 25.2%。
这是给「数小时、近百万 token、闭源 harness」这一档 agent RL 的系统件,不是新的目标函数。能用的前提很窄:已经在用类似 Claude Code 的黑盒 harness 跑仓库级任务,并且有几十到上百张卡按 cell 切。
和 TideRL、BiDiRL、DynaResize、Libra 等弹性调度工作相比,这里把「进行中的执行不能断」和「分支轨迹按角色限额、共享前缀只训一次」绑在同一套管线。对要训 Qwen 级 coding agent 的团队,48 步换约 6 个 NL2Repo 点、墙钟从 134 小时压到 75 小时,账算得过来。框架是否开源,论文没写。
作者点了两处。弹性调度需要多块可独立切换的 cell,还要留够 rollout 容量伺候没跑完的执行;很小的 GPU 预算撑不起这套拓扑,更小预算下的效率没有测。流式训练在每 burst 多步更新时,按到达顺序把 group 塞进连续几步,burst 内做不到全局 shuffle;样本顺序对学习质量的影响没有单独拆开。
还有几处没被挡住。2.4T 的 6 分来自内部训练数据和训练期的 Qwen 3.7-Max 评委,正式评测走 NL2RepoBench 协议,两把尺不是同一把。超时偏高时相对 Colocate 的优势明显收窄:大家一起卡在时限上,弹性回收就没有空间。