AstraFlow:把Agentic RL训练系统拆开重写,2.7×加速背后是一套被忽视的抽象

核心摘要

做过 Agentic RL 训练的人大概都遇到过这个尴尬场景——好不容易把 verl 或者 SLIME 跑通,现在你想多加一个策略模型协同训练(比如 Solver + Verifier),或者想把一半 rollout 节点扔到另一个机房去跑,或者想插一个 Dynamic Sampling 的数据策略进去。然后你打开代码,发现这些功能全都得改 trainer 主循环——调度、数据筛选、回放、staleness 处理,全嵌在那一个 trainer-centered 的 loop 里。每加一个能力都是一次系统级手术。

AstraFlow 这篇文章在做的事情很朴素:它把 RL 训练系统拆成三个真正解耦的抽象——Dataflow LayerRollout-as-a-ServiceTrainer——然后宣称同一套系统能原生支持多策略协同、弹性扩缩、跨地域异构、可插拔数据算法,而且不用改一行系统代码。数学任务上 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 架构概览。Dataflow Layer 在中间协调 RaaS 节点和 Trainer 节点,跨地域 / 异构的 rollout 池通过统一接口接入,权重通过 pull-based 稀疏更新完成异步同步。

图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 抽象。Prompt sources、RaaS 节点和 trainer 通过这个共享层交互,层内对数据做 buffer、sampling、filtering、routing。

图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 节点就是一个服务——消费任务、产生轨迹、刷新权重。

图3:RaaS 节点的接口非常简单——三件事。

什么叫"把 rollout 当 Web 服务"?意思是 rollout 节点对外只暴露三个动作:

  1. 消费任务(吃一个 prompt)
  2. 产生轨迹(吐一个 trajectory)
  3. 刷新权重(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 系列在数学任务(lr=5e-6 或 3e-6),右边是 Qwen2.5-7B 在 AlfWorld、WebShop、Search 等 agentic 任务上。

图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:Code 任务训练曲线(Qwen3-8B),平均 LiveCodeBench v5/v6 和 Codeforces 的精度。三条线分别是 Solver、Solver+Selector、Solver+Test-Case Generator。

图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):

\[G_{\text{target}} = \begin{cases} \lceil G/(1-w)\rceil & w > \tau_{\text{high}} \\ \min(G, \lceil G\cdot(n_c/n_p)\cdot\rho\rceil) & w < \tau_{\text{low}}, n_p,n_c>0 \\ G & \text{otherwise} \end{cases}\]

参数 \(\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:数学任务精度 vs 总 rollout 数量。蓝色是 Vanilla(baseline),红色是 DS+Replay(不同 replay ratio),绿色是 DS+Replay+GRESO。

图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 里讲得不够。

对工程的启发

  1. 如果你团队在做 RL infrastructure,这套抽象值得抄。三组件设计可以直接套到你们现有系统上做重构指引
  2. 如果你团队在做 Agentic RL 应用,可以等 AstraFlow 开源稳定后直接用,省掉系统团队半年的工作量
  3. 如果你团队在做模型联合训练(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前沿,关注我