AstraFlow:把Agentic RL训练系统拆开重写,2.7×加速背后是一套被忽视的抽象
核心摘要
做过 Agentic RL 训练的人大概都遇到过这个尴尬场景——好不容易把 verl 或者 SLIME 跑通,现在你想多加一个策略模型协同训练(比如 Solver + Verifier),或者想把一半 rollout 节点扔到另一个机房去跑,或者想插一个 Dynamic Sampling 的数据策略进去。然后你打开代码,发现这些功能全都得改 trainer 主循环——调度、数据筛选、回放、staleness 处理,全嵌在那一个 trainer-centered 的 loop 里。每加一个能力都是一次系统级手术。
AstraFlow 这篇文章在做的事情很朴素:它把 RL 训练系统拆成三个真正解耦的抽象——Dataflow Layer、Rollout-as-a-Service 和 Trainer——然后宣称同一套系统能原生支持多策略协同、弹性扩缩、跨地域异构、可插拔数据算法,而且不用改一行系统代码。数学任务上 Solver+Verifier 协同训练相比 verl 拿到 5.4 个点提升的同时还快了 2.7×;跨地域异构训练靠权重 delta 的稀疏性把每轮同步 payload 从 28GB 压到 1.5GB;自动扩缩省了 13% 的 GPU-hours。
说实话,这篇 paper 的算法层面没什么惊天动地的新东西,它的价值完全在系统抽象上——而这恰恰是这一年来 Agentic RL 工程化里最被低估的一件事。如果你团队在搭多策略训练或者想跑跨机房 RL,这套抽象值得至少花一晚上读懂。
论文信息
| 项目 | 内容 |
|---|---|
| 标题 | AstraFlow: Dataflow-Oriented Reinforcement Learning for Agentic LLMs |
| 作者 | Haizhong Zheng, Yizhuo Di, Jiahui Wang, Shuowei Jin, Xueshen Liu, Yongji Wu, Z. Morley Mao, Ion Stoica, Jiawei Zhao, Beidi Chen |
| 机构 | CMU、密歇根大学、UC Berkeley、Meta |
| arXiv | 2605.15565 |
| 代码 | https://github.com/Infini-AI-Lab/astraflow |
| 发表时间 | 2026 年 5 月 |
一、问题是从哪里来的:trainer-centered 的天花板
先说点背景。LLM RL 系统这两年迭代得很快,从最早一锅炖(rollout 和 training 共用 GPU)到现在主流的 disaggregated 架构(rollout 池和 trainer 池分开),表面上看已经解耦得挺彻底了——AReaL、SLIME、verl、prime-rl 都是这套路子。
但你真去读这些系统的源码会发现,所谓的"解耦"只是把计算分了,控制还是攥在 trainer 手里。调度谁先 rollout、哪些数据进 batch、什么时候触发 weight sync、staleness 怎么纠正——这些逻辑全都是 trainer 主循环里 hard-code 的一段段 if-else。
为什么这会成为问题?因为 Agentic RL 在快速演化出一堆新需求:
- 多策略协同训练:Solver + Verifier 两个模型同时被 RL 训练,互相打分。Dr.MAS 这种工作开始流行,但所有现有系统都得改 trainer 才能支持
- 弹性 rollout:长链 agentic 任务里,rollout 是绝对的瓶颈(占 60-80% 时间),动态扩缩能省一大块成本
- 跨地域异构:手头机器一半在 us-east,一半在 ap-south,权力链路 4Gbit/s+300ms RTT,怎么训?
- 可组合的数据算法:GRESO 做 pre-rollout 过滤、Dynamic Sampling 做 post-rollout 过滤、Buffer Replay 做 serving-side 复用——这些工作各自发 paper,但落地全得改系统
每加一个能力都是一次 ad-hoc 工程。作者给了张对比表,把这个问题摆得很清楚:
| 特性 | AstraFlow | AReaL | SLIME | verl | RLBoost | Dr.MAS(verl) | prime-rl |
|---|---|---|---|---|---|---|---|
| 多策略协同训练 | ✓ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ |
| 可替换 trainer / rollout 服务 | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | 部分 |
| 模块化数据算法接口 | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| 完全异步训练 | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ |
| 解耦 rollout-training 架构 | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
| 运行时弹性 rollout 扩缩 | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | 部分 |
| 跨地域 / 异构 rollout | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | 部分 |
看这张表你能感觉到作者在说什么——不是某个系统不够好,是所有系统的设计哲学本身就限制了能力扩展。RLBoost 加了弹性但牺牲了完全异步,Dr.MAS 支持了多策略但放弃了解耦,没人能全部拿下。
这就是 AstraFlow 想填的坑:与其每出一个新需求打一个补丁,不如重新设计一套抽象,让所有这些需求都是"配置一下就能跑"。
二、核心架构:三个自治组件的舞蹈
整个系统的核心理念可以一句话讲清楚——去掉 trainer 中心化的控制循环,把它变成三个独立的自治组件,只通过最小化的数据和权重接口交互。

图1:AstraFlow 整体架构。注意几个关键点:(1) 四个 Trainer Model 同时在训不同策略(多策略协同);(2) RaaS 1-N 节点跨地域部署,包含 us-east、us-west、eu-west、ap-south 多个机房;(3) 部分 RaaS 标记为 elastic(弹性可扩缩);(4) Weight Manager 统一管理 pull-based 异步稀疏权重更新。
我先把这张图掰开来讲。
2.1 Dataflow Layer:所有协调发生的地方
Dataflow Layer 是 AstraFlow 真正的"中枢",但它和传统 trainer 中心的"中枢"有本质区别:它不调用任何人,它只持有数据,让数据来调度计算。
具体来说,这一层管的是 RL 训练中的四种数据:prompts、trajectories、metadata、training batches。它对外暴露一组可编程接口,让你用纯数据操作的方式实现 RL 数据算法:
- selective rollout(pre-rollout 阶段筛选哪些 prompt 值得跑)
- post-rollout filtering(rollout 完成后扔掉零优势轨迹)
- dynamic sampling(按某种策略采样)
- replay(多次复用历史轨迹)
- curriculum scheduling(课程学习排序)
- staleness correction(异步训练中的版本偏差纠正)

图2:Dataflow Layer 内部结构。所有组件都是通过往这一层 push 数据、从这一层 pull 数据来交互——典型的数据驱动协调模式。
更妙的是协调机制。传统系统是 trainer 主动喊话:"rollout worker,开工!"——一旦 worker 挂了或者慢了,trainer 就得显式处理。AstraFlow 的设计反过来:通过数据的可用性和路由来隐式调控。某个 RaaS 节点慢了?它的轨迹就排不上 batch,自然被节流。新轨迹来了?优先调度到对应 trainer。某条数据流满了?触发 backpressure 让上游慢下来。
听起来玄乎,其实是个老套路——任何写过流式系统(Kafka、Flink)的人对这种数据驱动反压模式都不陌生。但把它搬到 RL 训练系统里、并且抽象得这么干净,确实是第一次见。
2.2 Rollout-as-a-Service:把 rollout 当 Web 服务来做
第二个组件 RaaS 是我个人觉得这篇 paper 最优雅的设计。

图3:RaaS 节点的接口非常简单——三件事。
什么叫"把 rollout 当 Web 服务"?意思是 rollout 节点对外只暴露三个动作:
- 消费任务(吃一个 prompt)
- 产生轨迹(吐一个 trajectory)
- 刷新权重(pull 最新模型)
就这么三件事,没了。它不知道有多少 trainer 在等它的数据、不知道现在是 iteration 几、不知道别的 RaaS 节点在干嘛——它只是个无状态服务(well,模型权重算状态,但权重的更新策略也是被动 pull 而不是主动 push)。
这种设计带来的好处是巨大的:
- 弹性扩缩容:加机器?启动一个新 RaaS 注册进去就行,不用通知任何人
- 异构混合:H100、A100、L40S 可以同时存在,每个 RaaS 自己用 vLLM 跑得多快是它自己的事
- 跨地域:远程节点和本地节点对 dataflow layer 来说没区别,只是数据吐得慢一点
- 故障容忍:某个 RaaS 挂了?没事,dataflow layer 不会等它,trainer 该训训
- 可热插拔:今天用 vLLM,明天换 SGLang,对其他组件零影响
这一点其实和阿里 Dr.MAS、字节 RLHF 系统的方向有点不谋而合——大家都意识到 rollout 应该被独立出来作为基础设施层。但 AstraFlow 把这件事做得更彻底:RaaS 就是一个 agent-serving 服务,跟你日常用的推理服务没什么两样。
2.3 Trainer 抽象 + 权重传输:让 trainer 回归本职
最后一个组件是 Trainer 抽象。它做的事情比传统 trainer 少得多——只做三件事:消费 batch、做优化、发布权重。
不管理 rollout workers,不调度数据,不做版本控制。这意味着你可以非常容易地替换不同的 trainer 后端:今天用 RL,明天用 SFT,后天加一个容错训练器(fault-tolerant trainer)做断点续训——对系统其他部分零影响。
更重要的是权重传输机制。这块作者花了大篇幅讲,因为它是跨地域训练能 work 的关键。
Delta Weight Transfer:传统系统传整个模型权重(几十 GB),AstraFlow 只传 delta(更新前后的差值),而且 delta 极其稀疏。
作者做了一个非常关键的测量:

图8:权重 delta 稀疏度测量。数学任务上 Qwen3-1.7B/8B/14B 的平均稀疏度都在 0.989-0.993,意思是 99% 以上的参数在一次迭代后根本没动。Qwen2.5-7B 在 AlfWorld/WebShop/Search 任务上稀疏度都 ≥0.996,即便最激进的设置(Search 任务 lr=5e-6)也有 0.978。
这个数据其实挺反直觉的。我第一反应是:lr=5e-6 跑 800 iterations 之后模型还能保持 99% 的参数没变?后来想想其实合理——RL 阶段不像 pre-training 那样让模型大幅迁移知识,它更多是在做局部 policy 调整,反而符合稀疏更新的假设。
有了这个稀疏性,跨地域传输的可行性就完全不一样了:每轮同步 payload 从 28GB 降到约 1.5GB,4Gbit/s 的链路 3 秒就传完——而你的 trainer iteration 通常要 100 秒以上,传输完全可以被训练 overlap。
权重传输是 pull-based 异步的:每个 RaaS 自己决定什么时候 pull,不会因为某个 trainer 推送而阻塞。版本不一致?由 Dataflow Layer 用 staleness correction 处理。这个解耦做得非常干净。
三、实验:跑数据看真章
理论讲完,接下来看实验。作者评估了四类工作负载:Math、Code、Search、AgentBench——涵盖了当前主流 Agentic RL 的全场景。
3.1 多策略协同训练:数学任务上的 2.7× 加速
这是论文最有冲击力的实验。在 Qwen3-8B 上做 Solver + Verifier 的协同训练(两个策略同时被 RL 训练,Verifier 给 Solver 的答案打分),对比 verl 实现的同样设置:
| 方法 | AIME24 | AIME25 | MATH500 | Minerva | 平均 | 每迭代时间(s) |
|---|---|---|---|---|---|---|
| Solver(单策略基线) | 42.9 | 31.8 | 90.5 | 39.2 | 51.1 | — |
| Solver+Verifier (verl) | 44.6 | 41.5 | 90.7 | 40.9 | 54.4 | 212.64 |
| Solver+Verifier(AstraFlow) | 47.3 | 40.6 | 92.9 | 45.0 | 56.5 | 77.65 |
精度提升 5.4 个点(相对单策略),同时每迭代时间从 212.64 秒降到 77.65 秒——2.7× 加速。
这里要冷静一下问几个问题:
Q1:精度为什么比 verl 高? 作者的解释是 AstraFlow 的异步设计让两个策略可以同时利用 GPU 资源、各自的 rollout 不会互相阻塞,所以同样的 wall-time 内能跑更多有效迭代。这个解释合理但其实也藏了一层意思——verl 的 baseline 跑得不够好,并不是 AstraFlow 在算法上更优。这种"系统优势导致更多有效计算 → 间接拿到精度"的论证方式我个人是接受的,但读者要心里有数。
Q2:2.7× 是怎么来的? 核心是两个 trainer(Solver 和 Verifier)各自的 rollout 完全并行、不互相阻塞。verl 的多策略实现还是单循环串行调度,所以慢一截。这个对比公平吗?我觉得是公平的——因为这恰恰是论文要论证的点:trainer-centered 设计本身就在拖累多策略训练。
代码任务上类似的趋势:

图6:可以清楚看到 Solver+Test-Case Generator(绿线)在整个训练过程中都明显高于其他两条。Test-Case Generator 这个策略是动态生成测试用例去验证 Solver 的代码,比 Selector 更有效。
最终代码任务结果:
| 方法 | LCB v5 | LCB v6 | Codeforces | 平均 |
|---|---|---|---|---|
| Solver | 36.83 | 32.86 | 21.20 | 30.29 |
| Solver+Selector | 38.32 | 35.43 | 22.67 | 32.14 |
| Solver+Test-Case Generator | 41.62 | 36.29 | 25.74 | 34.55 |
Solver+Test-Case Generator 平均涨了 4.26 个点——这其实也间接说明了一件事:多策略协同训练本身就是 Agentic RL 的真问题,不是 paper 灌水。能优雅支持它的系统就是有价值的。
3.2 弹性扩缩:13% GPU-hours 不是白省的
第二个核心实验是 rollout 池自动扩缩容。Qwen3-14B 数学任务:
| RaaS 策略 | 平均精度 | Wall(h) | Rollout GPU-h | Trainer GPU-h | 总 GPU-h | 等待比例 |
|---|---|---|---|---|---|---|
| 固定 6 GPUs | 68.6 | 35.8 | 214.8 | 143.2 | 358.0 | 26.9% |
| 固定 11 GPUs | 68.0 | 23.9 | 263.4 | 95.8 | 359.2 | 2.1% |
| 自动扩缩 | 67.9 | 24.4 | 214.5 | 97.4 | 312.0 | 3.0% |
看这张表的姿势:
- 6 GPUs 不够用,trainer 26.9% 时间在等 rollout,但 GPU 总账没占便宜(trainer 闲着也是花钱)
- 11 GPUs 足够了,trainer 等待降到 2.1%,但总 GPU-h 没省(rollout 池太大了又浪费)
- 自动扩缩:trainer 等待 3.0%(接近 11 GPU 配置的效果),但总 GPU-h 只用了 312,比固定配置省了 13%
控制器逻辑也不复杂,三区策略(公式 1):
参数 \(\tau_{\text{low}}=0.05\),\(\tau_{\text{high}}=0.10\),\(\rho=1.10\)。意思就是:trainer 等待超过 10%(rollout 不够),按比例扩;trainer 等待低于 5%(rollout 富余),按消费/生产比缩。没什么花活,关键是这个控制器能 plug-and-play 接到系统里——这才是抽象设计的价值所在。
顺便说一句,作者在 paper 里特别强调了一件事:这个自动扩缩控制器是用 Claude Code 在不改系统代码的前提下加上去的。这是个有意思的副产品——一个抽象足够干净的系统,可以让 LLM 自己往上加功能。
3.3 跨地域异构:把 28GB 压成 1.5GB 的工程胜利
第三个实验是真正能让人睁大眼睛的。实验设置:
- 3 个节点,1 个 4-GPU trainer + 3 个 4-GPU RaaS 池
- 异构通过功率限制模拟:本地 700W、远程 400W 和 250W
- 吞吐量比例约 100% : 60% : 30%
- 远程链路 4 Gbit/s 带宽、300ms RTT
- 全同步间隔 20 iterations
结果:跨地域运行精度 67.6,与同构本地基线 68.0 差距仅 0.4 分。
这个数据的核心解释还是回到稀疏权重传输——delta sparsity ≥98.9%,每轮 payload 从 28GB 降到 1.5GB,4Gbit/s 链路下传输时间被训练时间完全 overlap。
我第一次看到这个结果的时候有点怀疑:300ms RTT 的链路上做 RL 训练精度只降 0.4 分?这不科学。后来仔细看才理解——关键是 20 iterations 全同步一次,中间用 sparse delta 异步追。也就是说每 20 步精度可能会有点漂移,但全同步把它拉回来。这个 trade-off 设计得很巧妙,既保证了远程节点不需要时时刻刻保持最新权重(不然 4Gbit/s 完全顶不住),又通过周期性全同步避免漂移累积。
不过这里有个我想吐槽的点:跨地域实验是用功率限制模拟异构的,不是真的把机器放到不同机房。这个简化是可以理解的(真的搭跨机房训练成本太高),但读者要清楚——网络方面是真跨地域(带宽和 RTT 都模拟了),算力异构是 power limit 模拟的,不算完全真实。
3.4 数据算法消融:可组合性的价值
最后看数据算法的可组合性。作者把三种代表性的算法接入 dataflow layer:
- GRESO:pre-rollout 阶段过滤低价值 prompt
- Dynamic Sampling:post-rollout 阶段丢弃零优势轨迹
- Buffer Replay:serving-side 复用历史轨迹

图9:横轴是产生的总 rollout 数量(越右越费),纵轴是精度。理想是左上角(精度高、rollout 少)。
读图:
- Vanilla(蓝色单点):约 200K rollouts,精度 62%
- DS+Replay(红线):随着 replay ratio 调整,能拿到 66.7%,但 rollout 数量飙到 500K+——Dynamic Sampling 提精度但生成成本飙升
- DS+Replay+GRESO(绿线):r=0.5 时 ~200K rollouts 达到 65.5%,r=0.3 时 ~280K rollouts 达到 66.7%——GRESO 把这个生成成本压下来了
这张图最值钱的信息是:Dynamic Sampling 这种算法虽然提精度,但代价是 3.5× 的 rollout 生成成本(200K → 700K)。如果你只看精度不看成本,会做出非常错误的选择。
而 AstraFlow 的价值在于——这三个算法是完全独立的模块,你可以任意组合。在传统系统里,DS+Replay+GRESO 这种组合需要在 trainer 里写一大堆 if-else,每改一处都要重新跑通整个 pipeline。
四、和 AReaL 的正面对比:精度匹配但灵活性碾压
我特别想单独看一下作者跟 AReaL 的对比,因为 AReaL 是当前公认做得很完整的 RL 系统:
| 模型 | 框架 | AIME24 | AIME25 | AMC | MATH500 | Minerva | 平均 | s/iter | s/1M tok |
|---|---|---|---|---|---|---|---|---|---|
| Qwen3-1.7B | AReaL | 32.5 | 27.5 | 61.1 | 88.2 | 38.2 | 49.5 | 81.5 | 70.1 |
| Qwen3-1.7B | AstraFlow | 33.3 | 30.6 | 59.2 | 87.5 | 35.8 | 49.3 | 81.1 | 69.4 |
| Qwen3-8B | AReaL | 60.0 | 55.0 | 72.2 | 94.6 | 45.2 | 65.4 | 137.0 | 117.6 |
| Qwen3-8B | AstraFlow | 62.3 | 50.0 | 72.5 | 94.9 | 44.5 | 64.8 | 139.6 | 119.6 |
精度差距在 0.2-0.6 分内,速度差距 1-2% 以内——统计学上无差异。作者对此的表态也很诚实:在单策略训练上 AstraFlow 没有显著优势,但它提供更高的灵活性(多策略、弹性、跨地域、可组合数据算法)。
这种 honest 的对比我喜欢。如果作者非要硬吹 AstraFlow 比 AReaL 在单策略上也快多少,反而会让人怀疑整个 paper 的可信度。明确告诉你"单策略我们打平,多策略和复杂场景我们碾压"——这个定位非常清楚。
五、我的判断:这篇 paper 值不值得读
聊几点我的真实想法。
亮点:系统抽象做得真的干净。读完整篇 paper 我的感觉是——这是一个有"工程审美"的团队做出来的设计。Dataflow Layer / RaaS / Trainer 三个组件的边界划得非常清楚,每个组件的接口都最小化(消费数据、产生数据、发布权重),没有任何冗余。这种设计在工程上的价值很难量化,但任何接手过别人代码的人都知道这种"干净"有多稀缺。
亮点:稀疏 delta 这个发现很有商业价值。98.9-99.6% 的权重稀疏度是个非常关键的实验数据点。它意味着 RL 训练的跨地域、跨集群、甚至跨公司协作都变得可行——这个洞察可以延伸出很多工作(联邦 RL?模型 marketplace?)。我会专门把图 8 这张图保存下来作为以后讲 RL 工程化时的论据。
问题:算法层面没有新东西。GRESO、Dynamic Sampling、Buffer Replay 都是已有工作,Solver+Verifier 协同也不是新概念,自动扩缩用的也是简单的阈值控制器。这篇 paper 在算法上是 0 创新。但我觉得这不是缺点——系统工作不需要算法创新,能把已有算法以统一抽象组织起来本身就是贡献。
问题:跨地域实验是模拟的。前面说过了,算力异构用 power limit 模拟,不是真跨机房。这影响了实验的说服力,但考虑到工程成本,可以接受。
问题:trainer 对接的工作量没说清。文章一直说"系统级 modular,不用改代码",但你要换 trainer 后端(比如从 verl 换到自己的实现),是不是也得写适配层?这部分细节 paper 里讲得不够。
对工程的启发:
- 如果你团队在做 RL infrastructure,这套抽象值得抄。三组件设计可以直接套到你们现有系统上做重构指引
- 如果你团队在做 Agentic RL 应用,可以等 AstraFlow 开源稳定后直接用,省掉系统团队半年的工作量
- 如果你团队在做模型联合训练(federated / collaborative RL),权重稀疏度数据是个很重要的可行性论据
六、几个值得追问的问题
读完之后我心里还存了几个问号,列出来供你思考:
1. 稀疏 delta 的稀疏度在更大模型上还能保持吗? 实验只到 Qwen3-14B,70B+ 的模型上是不是依然 99%?如果不是,跨地域的 payload 优势会大打折扣。
2. RaaS 服务化的代价是什么? 把 rollout 抽象成纯服务听起来很美,但服务化必然有 IPC/RPC 开销。在小 batch、短 trajectory 的任务上,这个开销占比有多大?paper 没专门 ablation。
3. Dataflow Layer 本身会不会成为新瓶颈? 所有数据都过这一层,它的吞吐和延迟决定了整个系统的天花板。paper 里没看到对 Dataflow Layer 本身的压力测试。
4. 多策略协同的精度提升有多大泛化性? 数学任务上 Solver+Verifier 提了 5.4 个点很漂亮,但代码任务上 Test-Case Generator 也才 4.26 个点。其他领域(多模态?工具使用?)能不能复制这个收益?
这些问题不是要 attack 这篇 paper——一篇系统 paper 不可能把所有问题都回答清楚——而是说,如果你要把这套系统真的用到生产环境,这些是需要自己测的点。
收尾
Agentic RL 这个方向卷得很厉害,但卷的更多是算法(reward 设计、credit assignment、PRM/ORM 等等)。系统层面其实长期欠债——大家都在用各自 fork 的 verl/SLIME 打补丁,没人愿意做基础设施层的重构。
AstraFlow 这篇文章的意义在于,它让你重新意识到一件事:当算法快速迭代的时候,系统抽象比算法本身更重要。一套设计得好的抽象能让后续 5 年的算法创新自然落地;一套设计得糟的抽象会让你每加一个 feature 都要重写一遍。
这个道理在数据库领域大家都懂(关系模型让 SQL 改了 40 年还能用),但在 ML 系统领域我们一直在低估它。Ray 是个例外,PyTorch 是个例外,AstraFlow 可能会是又一个例外。
如果你正在搭 Agentic RL 训练系统,这篇 paper 值得花一晚上认真读。如果你只是用别人的训练框架做应用,了解一下这套抽象设计,至少能在以后选型的时候多一个参照系。
参考文献: - AstraFlow: Dataflow-Oriented Reinforcement Learning for Agentic LLMs. arXiv:2605.15565. 2026. - 代码:https://github.com/Infini-AI-Lab/astraflow
觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我