文章标题:SeamlessFlow:一种通过标签调度实现无气泡流水线的训练器-智能体隔离强化学习框架
作者/机构:Jinghui Wang, Shaojie Wang, Yinghan Cui, Xuxing Chen, Chao Wang, Xiaojiang Zhang, Minglei Zhang, Jiarong Zhang, Wenhao Zhuang, Yuchen Cao, Wankang Bao, Haimo Li, Zheng Lin, Huiming Wang, Haoyang Huang, Zongxian Feng, Zizheng Zhan, Ken Deng, Wen Xiang, Huaixi Tang, Kun Wu, Mengtong Li, Mengfei Xie, Junyi Peng, Haotian Zhang, Bin Chen, Bing Yu
本文旨在解决工业级强化学习(RL)部署中的两个核心挑战:(1) 将RL训练与复杂的智能体(agent)执行流解耦;(2) 在保持大规模部署所需的稳定性和可扩展性的同时,以最小的空闲时间最大化GPU利用率。
核心问题与研究目标:
创新点:
rollout, update),系统可以:总结性贡献:
七层架构。如图1所示,SeamlessFlow采用了一个七层架构,从原始计算资源一直延伸到RL算法层,每个阶段都旨在满足工业级多智能体在线RL对可扩展性、异构性和吞吐量的需求。
底层资源与标签驱动分配。在最底层,异构的物理GPU和CPU资源提供了原始计算能力。在此之上,SeamlessFlow实现了一个标签驱动的资源分配层,这是对传统同构或分离架构的一项创新。每个设备被分配一个或多个能力标签(例如,rollout、update、critic、reference),使得任务能够匹配到最合适的硬件,并允许在单个设备上切换任务而无需等待新的训练周期。标签可以根据工作负载变化或故障动态重新分配,调度在标签池级别上进行,而不是将角色绑定到固定的机器上。这使得系统能够结合同构设置的高吞吐量特性与分离系统的灵活性和弹性。
抽象资源与引擎。在分配层之上,抽象训练资源和抽象推理资源将硬件与消耗它们的引擎解耦。这些资源分别绑定到训练引擎(例如,Megatron-LM【索引21, Megatron-lm: Training multi-billion parameter language models using model parallelism, 2019】、FSDP【索引22, Pytorch fsdp: Experiences on scaling fully sharded data parallel, 2023】)、推理引擎(例如,vLLM【索引23, Efficient memory management for large language model serving with pagedattention, 2023】、SGLang【索引24, Sglang: Efficient execution of structured language model programs, 2024】)和智能体容器,从而可以独立优化训练和rollout,同时仍然允许部分硬件共享以提高利用率。
数据平面。第五层,数据平面,是另一项主要创新。它由轨迹管理器、Rollout管理器和流式数据加载器组成,每个都作为独立服务实现。这些服务共同实现了训练器-智能体隔离,同时保持高吞吞吐量。轨迹管理器记录每个LLM的输入-输出对,通过最长前缀匹配重建完整序列,并保证轨迹的一致性——确保用于RL训练的序列与服务期间观察到的序列在比特级别上完全相同。Rollout管理器透明地缓冲和恢复中断的生成,使权重更新和资源抢占对智能体不可见,而流式数据加载器则持续向智能体分派任务,避免了因固定批次调度造成的空闲时间。
算法层与工作流程。在算法层,标准的RL算法(例如,GRPO【索引25, Deepseekmath: Pushing the limits of mathematical reasoning in open language models, 2024】、PPO【索引26, Proximal policy optimization algorithms, 2017】)从数据平面消费轨迹,不依赖于智能体的任何内部实现。在实际使用中,用户对每一层都有清晰的控制权,可以进行定制,包括算法、数据流调度、标签策略等。训练可以按以下步骤进行:(1)准备资源,(2)初始化引擎,(3)启动数据流,以及(4)启动RL算法循环,如图1所示。
工业级RL中的解耦需求。在工业规模的基于LLM智能体的RL中,让RL训练器与多样化且不断演变的智能体实现紧密耦合是不可取的。不同的智能体在架构、记忆机制和辅助流水线上各不相同,要求每个智能体都实现与训练兼容的日志记录、rollout控制或策略跟踪,这既容易出错,维护成本又高。为了在这种环境下保持高吞吐量,部分rollout至关重要:当达到批次大小阈值、发生策略权重更新或资源事件时,正在进行的生成可以中途暂停,并在之后恢复,而不会浪费已完成的工作。现有的训练器-智能体隔离框架【索引27, Agent lightning: Train any ai agents with reinforcement learning, 2025】通常忽略了部分rollout的处理,这意味着推理期间的权重更新可能会以截断或不一致的响应形式泄露给智能体。
SeamlessFlow数据平面的构成。如图1所示,SeamlessFlow通过一个专用的数据平面来应对这些挑战,该数据平面实现了训练器-智能体隔离与高吞吐量流水线。这个数据平面由三个关键模块组成:一个轨迹管理器,它使智能体和训练器彼此无感知,捕获来自LLM推理服务的所有token级I/O并确保轨迹一致性;一个Rollout管理器,它控制暂停或恢复rollout的触发器,管理策略权重更新和训练的其他信号;以及一个流式数据加载器,它持续向智能体分派任务以保持rollout饱和。
Rollout管理器的职责。在SeamlessFlow的数据平面中,Rollout管理器负责决定何时中断正在进行的rollout,并确保在条件允许时无缝地恢复暂停的rollout。
中断触发条件。中断的触发条件包括:
- 样本达到预定义阈值(例如,批次大小、超时)。
- 同步新策略的权重。
- 标签转换(例如,一个rollout资源被重新分配为actor)。详细信息在下一节提供。
恢复触发条件。恢复的触发条件包括:
- 标签转换(例如,一个节点从actor切换回rollout)。
- 资源恢复事件(例如,一个新资源被添加到池中)。
轨迹管理器的核心作用。轨迹管理器是SeamlessFlow中实现训练器-智能体隔离的关键模块。它充当一个插入在智能体和LLM服务引擎之间的代理服务:所有智能体对LLM服务的请求都必须经过轨迹管理器服务才能到达LLM服务,所有来自LLM的响应也通过它返回给智能体。LLM服务引擎上的一个适配器层确保对于每个请求,输入和输出都被返回给轨迹管理器,轨迹管理器在将模型输出转发给智能体之前记录它们。
轨迹一致性的重要性。此设计的一个关键要求是轨迹一致性:每个轨迹必须是LLM在智能体执行相同任务期间生成的输出的精确token级副本。这种一致性对于准确的对数概率计算和稳定的信用分配至关重要,尤其是在多智能体和长周期场景中,单个会话可能会分支成多个前缀。
存储优化与效率提升。由于轨迹管理器是所有RL数据的唯一真实来源,它必须处理巨大的存储压力。为了缓解这个问题,SeamlessFlow采用最长前缀匹配(LPM)来合并属于同一会话且共享相同前缀的多轮对话。这种合并为每个会话构建一个前缀树,消除了冗余存储,并避免了对共享前缀的对数概率进行重新计算,从而提高了RL训练器的内存效率和计算吞吐量。
模型更新的透明处理。在RL训练中,模型权重更新可能会中断LLM服务,可能使智能体面临不一致的响应。为了让智能体对这类中断无感知,轨迹管理器必须透明地处理这些事件,并在模型切换期间保持无缝生成。为实现这一点,当Rollout管理器触发模型更新时,推理引擎会暂停,重新加载更新后的模型,然后恢复生成。在此阶段任何传入的请求都会从推理引擎收到一个等待信号,此时轨迹管理器会发出一个长时请求,该请求保持挂起状态直到模型切换完成。然后,推理引擎使用新模型从先前生成的token继续生成,生成的结果输出由轨迹管理器记录,然后返回给智能体。详细过程如图2所示。
精确的策略分离。此外,由于部分rollout机制,单个轨迹可能包含由不同模型版本生成的token。为了实现精确的在线/离线策略分离,轨迹管理器会用生成它的模型版本来注释每个token。
流式数据加载器。流式数据加载器以基于流的方式持续向智能体提供任务,而不是等待固定大小的批次。通过在资源一可用时就分派新请求,它保持了rollout流水线的饱和状态,避免了任务之间的空闲间隙,并维持了更高的整体吞吐量。
生产者-消费者架构。这些组件共同构成了一个生产者-消费者架构:从训练器的角度看,轨迹管理器是token对齐轨迹的生产者,而Rollout管理器则消费这些轨迹以触发模型更新;从智能体的角度看,流式数据加载器生产任务,轨迹管理器消费由此产生的轨迹。这种双向的生产者-消费者流使rollout与训练重叠,向智能体隐藏了抢占操作,并保持了严格的训练-推理一致性。
工业级RL集群的矛盾需求。工业规模的RL集群必须调和两个通常相互冲突的需求:(1)高计算资源利用率,这有利于采用同构架构,在同一设备上复用rollout和训练,没有流水线气泡;(2)稳定性和异构性适应能力,这有利于采用分离架构,它清晰地分离各个阶段,并将任务匹配到最合适的硬件。然而,完全同构和完全分离的设置都限制了灵活性:完全同构的设置存在稳定性问题,并且对异构硬件的适应性差,而当阶段延迟出现偏差时,完全分离的设置会产生流水线气泡。因此,我们寻求一种统一的调度抽象,既能保持同构架构的效率,又能保留分离设计的模块化和稳定性。
解耦资源与物理机器。SeamlessFlow引入了一种标签驱动机制,将资源调度与物理机器分配解耦。资源池中的每个计算节点维护两种类型的标签:
1. 一个能力标签,描述该资源在RL中可以扮演的角色(例如,rollout用于rollout阶段;train用于策略更新、对数概率计算、评论家模型的前向传播和更新);
2. 一个活动标签,指示该资源当前正在执行的任务。
抽象资源池。一旦分配了能力标签,所有物理资源都被转换为抽象资源——即按其能力而非物理身份分组的逻辑单元。所有这些抽象资源的集合构成了抽象资源池,调度器查询该池以定位适合给定任务类型的资源。
运行时调度与抢占。在运行时,调度器通过查询抽象资源池中带有所需能力标签的资源来发布任务,并以SPMD(单程序多数据)的方式将任务分派给它们。调度器支持抢占式分配:它不仅可以将新任务分配给空闲资源,还可以分配给当前被占用的资源,在这种情况下,正在进行的任务被中断并替换为新的分配。抢占对于时间复用至关重要——当同一台机器从一个任务切换到另一个任务时,必须在新的任务开始前停止前一个任务。完全同构的架构本质上依赖于这种抢占来切换rollout和训练阶段。
标签视角的架构。从标签的角度来看:
- 完全同构:每台机器都带有所有相关标签({rollout, train, ...}),允许任何设备在任何时候担任任何角色。这最大化了瞬时利用率,但存在稳定性风险,并且对于异构集群是不可行的。
- 完全分离:每台机器只带有一个标签,专门用于单个训练阶段。这最大化了专业化和稳定性,但会引入流水线气泡。
灵活的标签配置。这两种极端情况都是标签驱动调度下标签分配的特例。标签的视角通过采用灵活的标签配置超越了这些限制,实现了资源的部分时间共享。为了同时实现高吞吐量和系统稳定性,我们进一步提供了一种用于时空复用流水线的标签分配策略:
1. 在初始化时,SeamlessFlow分配:(1)一部分机器同时具有rollout和train能力标签;(2)其余机器仅具有rollout能力标签。
2. 在第一个rollout步骤中,调度器观察到所有资源都处于空闲状态,并且所有资源都带有rollout标签。因此,所有机器都在此阶段执行rollout。
3. 当Rollout管理器检测到已生成足够的轨迹以执行更新时,任务调度器查询资源池中带有train标签的机器。
4. 这些机器——无论是空闲还是当前正在执行rollout——都会被抢占并重新分配给训练任务(如果在此之前有其他带有train标签的机器加入了集群并且当前处于空闲状态,它们将直接被分配更新任务而无需抢占)。由于集群中的某些资源仅带有一个rollout能力标签,这些资源不会被中断并继续执行rollout。因此,从这一刻起,rollout和训练同时进行:rollout流继续产生数据,但相对于最近的策略更新,这些数据现在是滞后一步的离线策略数据。
5. 一旦训练阶段完成,调度器再次将所有带有rollout能力标签的机器分配回rollout任务,恢复全部rollout能力。
循环过程与资源利用。上述过程在后续步骤中重复进行,实现了一个高吞吐量的流水线,并达到了几乎没有空闲计算资源的状态。
气泡消除。如图3所示,完全分离的架构不可避免地会遭受流水线气泡的影响:因为RL的各个阶段是顺序执行的,分配给后续阶段的机器在早期阶段仍在运行时会保持空闲。相比之下,标签驱动的方法可以在这些间隙中动态地将这些空闲机器重新分配给rollout任务,将本应浪费的计算能力转化为生产性工作,从而有效地消除气泡。
异构集群的标签放置。除了消除气泡,异构集群还需要仔细的标签放置。例如,将rollout和train标签都分配给计算密集型设备可能会成为模型训练阶段的瓶颈,损害整体吞吐量。为了解决这个问题,我们在rollout和train标签旁边引入了一个train_priority标签。更高的train_priority表示设备更适合动态切换到训练任务。我们通过经典的roofline模型【索引28, Roofline: an insightful visual performance model for multicore architectures, 2009】来确定这个优先级,综合考虑每个设备的HBM带宽和峰值计算性能,以指导在异构环境中的最佳标签分配。
多种流水线实现的比较。如图4所示,我们进一步图示并比较了在分离设置下的多种流水线实现,分析了每种设计中的流水线气泡。
不同流水线设计的缺陷。
- 朴素流水线:Rollout和训练一个接一个地执行,没有重叠。由于下一个阶段只能在前一个阶段完成后开始,阶段之间出现了大量的空闲时间。
- 微批次流水线【索引29, Deepcoder: A fully open-source 14b coder at o3-mini level, 2025】:每个批次被分成更小的微批次,一旦一个微批次准备好,梯度计算就开始。这减少了气泡,但仍然使rollout集群的一部分在每一步都处于空闲状态,因为所有样本都必须保持严格的在线策略。
- 离线策略填充【索引17, Asyncflow: An asynchronous streaming rl framework for efficient llm post-training, 2025】【索引29, Deepcoder: A fully open-source 14b coder at o3-mini level, 2025】【索引30, Asynchronous rlhf: Faster and more efficient off-policy rl for language models, 2024】【索引31, Distrl: An asynchronous distributed reinforcement learning framework for on-device control agents, 2024】:使用离线策略数据来填充微批次流水线的rollout空闲时间。然而,在智能体RL中,rollout通常比训练花费更长的时间,并且性能依赖于尽可能保持数据的在线策略性。在这些条件下,训练集群会长期处于数据匮乏状态,在等待rollout输出时空闲。
- 时空复用流水线(本文):将时间复用引入到分离设置中:当训练节点空闲时,它们被重新分配给rollout任务。这消除了“训练集群”和“rollout集群”之间的刚性分离,将空闲计算转化为生产性工作,并实现了接近无气泡的利用率。
表1 使用SeamlessFlow框架训练的模型性能
本文介绍了SeamlessFlow,一个为在异构工业集群中进行稳定、高吞吐量训练而设计的基于服务器的RL框架。SeamlessFlow的智能体无关数据平面将训练与智能体逻辑解耦,同时通过代理管理的捕获保证了比特级的轨迹一致性,使得新或修改后的智能体能够即时集成。其标签驱动的调度统一了同构和分离设计,动态地重新分配资源以消除流水线气泡并最大化异构硬件的利用率。这些设计共同为多智能体、长周期的部署提供了稳定、可扩展的RL解决方案。