发表时间: 2025-11 · OpenReview yk3ICpEbv8 (Prime Intellect)
我们介绍了 prime-rl,一个用于大规模强化学习(RL)的开源框架。prime-rl 旨在从单个节点无缝扩展到数千个 GPU,使其适用于实验、研究和生产规模的训练。该框架专为智能体(agentic)RL 设计,通过其异步架构为多轮交互和工具使用提供了一流的支持。环境使用 verifiers 库构建,并与 Environments Hub 集成,使得环境开发能够与训练基础设施完全解耦。为了展示其能力,我们使用 24 个 NVIDIA H200 GPU,在思维链(CoT)数学推理任务上训练了 DeepSeek-R1-Distill-Qwen-32B 模型。我们测得聚合吞吐量高达每秒 30K token,峰值 MFU(模型浮点运算利用率)达到 38.46%。
研究背景:通过可验证奖励的强化学习(RLVR)来扩展计算以训练大型语言模型(LLM),已成为后训练阶段提升模型性能的主流范式。诸如 OpenAI o3【13】,Grok 4【22】和 DeepSeek R1【3】等模型表明,通过 RL 训练模型进行长上下文推理和智能体工具使用,可以极大地增强其能力,使其在日常和专业任务中都更有效。
核心问题:然而,现有的开源框架通常复杂、庞大,且缺乏模块化设计【16】。这可能导致扩展性困难,阻碍广泛采用,减慢个人研究项目,并导致生态系统产物的碎片化。此外,目前没有一个框架是为去中心化 RL 的独特需求而设计的,包括对异构、动态扩展或无需许可的计算的支持。
研究目标与创新点:本文介绍了 prime-rl,一个用于大规模强化学习的框架,它为我们的内部后训练流程和公开的无需许可运行提供支持。prime-rl 易于使用且可定制,同时性能和可扩展性足以支持最先进的 RL 后训练。我们强调以下特点:
RL 训练由三个主要抽象部分协同完成:协调器(orchestrator)、训练器(trainer)和推理服务(inference service)。
图 1: 架构。一次 RL 训练运行涉及训练器、协调器和推理服务的协调。FSDP 训练器和 vLLM 推理服务是分离运行的,可以独立部署在多个节点上。
协调器(Orchestrator)。
协调器是一个轻量级的 CPU 进程,负责处理核心数据和调度逻辑,作为训练器和推理服务之间的中介,进行双向中继。在一个方向上,它从推理服务器收集 rollout 数据,将其组装成打包的批次,并分派给训练器;在另一个方向上,它将训练器更新后的模型权重中继到推理服务。协调器利用 verifiers 环境来抽象化多轮 rollout 的生成和评分,并利用与 OpenAI 兼容的异步推理客户端。
训练器(Trainer)。
训练器负责根据给定的 rollout 和优势(advantages)来生成更新的策略模型。我们使用 FSDP 2【1,PyTorch 2: Faster Machine Learning Through Dynamic Python Bytecode Transformation and Graph Compilation. 2024. ASPLOS ’24】作为后端,兼容任何 HuggingFace(HF)模型。FSDP 对模型参数、梯度和优化器状态进行分片,从而允许以数据并行的方式训练大型模型,并最小化 GPU 内存占用。该训练器的设计灵感来源于 torchtitan【10,TorchTitan: One-stop PyTorch native solution for production ready LLM pre-training. 2025】,并依赖于原生的 PyTorch 特性来实现高级并行技术,如张量并行、上下文并行或专家并行。
推理服务(Inference Service)。
推理服务最简单的形式是一个标准的、与 OpenAI 兼容的服务器,后端为 vLLM【8,Efficient Memory Management for Large Language Model Serving with PagedAttention. 2023. SOSP】。其 API 规范通过三个自定义端点进行了扩展,以便用最新的策略更新服务器:/init_broadcaster 用于在启用 NCCL 权重广播后端时初始化一个 NCCL 进程组,/update_weights 用于更新策略,/reload_weights 用于在实验之间将权重重置为基础模型。除此之外,我们依赖 vLLM 优化的内核、并行策略和调度来实现快速的 rollout 生成。鉴于该服务架构的分离特性,它可以直接扩展到包含多个引擎并共享一个请求池,从而允许跨多个集群操作,并能直接集成替代的推理引擎(例如 SGLang【28】、Tokasaurus【7】)。
数据流概览。
此处我们描述 prime-rl 单个训练步骤中的核心数据流。在一个步骤开始时,协调器会检查是否需要用最新的训练检查点来更新推理服务的策略模型。如果需要,它会发送一个 /update_weights 请求,以触发在整个推理服务中就地替换 vLLM 张量。
数据采样与 Rollout 生成。
随后,协调器从数据缓冲区(data buffer)中采样提示(prompts),数据缓冲区是一个用于定义动态数据采样策略的抽象,例如在线难度过滤【27】或难度池【23】。采样出的提示被发送到 verifiers 环境,该环境异步地调度 rollout 的生成和评分。
Rollout 处理与训练。
verifiers 环境根据其规范返回 rollout 结果,包括补全(completions)、vLLM 对数概率(logprobs)、掩码(masks)和奖励(rewards)。完成的 rollout 会被添加回数据缓冲区;协调器会持续调度 rollout,直到准备好一个足够大的批次供训练器使用,例如,由在线难度过滤策略确定。
批次分发与模型更新。
然后,协调器将这批 rollout 分片到各个数据并行(DP)等级上,将它们整理成可供训练的张量,并分派给每个训练器。每个 FSDP 等级消费本地的训练批次,并处理微批次(micro-batches),同时累积一个同步的梯度。在完成一个全局批次后,更新后的策略模型作为权重检查点被写入磁盘,推理服务可以在未来的步骤中从磁盘加载它。
异步训练流程。
对于异步训练,整个过程在多个并行的通道中进行,并通过适当的偏移量进行错开(详见 3.4 节)。检查点仅在异步级别所需的时间内保留在磁盘上。
图 2: 数据流。单个训练步骤中,训练器、协调器和推理模块之间的数据流。我们展示了每个模块的动作,以及它们从左到右的顺序依赖关系。为简单起见,我们展示了一个完全同步的流程,并隐藏了非核心逻辑。
环境与训练解耦。
prime-rl 对使用 verifiers 库【2,Verifiers: Reinforcement Learning with LLMs in Verifiable Environments. 2025. https://github.com/willccbb/verifiers】开发并通 过 Environments Hub 作为独立 Python 模块安装的 RL 环境提供了一流的支持。这种设计将 RL 环境的开发与训练抽象解耦,从而实现了更快的开发速度和可移植性。例如,同一个环境可以与 prime-rl、verifiers、trl【19】或任何其他支持 verifiers 环境的训练器一起使用。
环境功能与奖励管理。
环境是一个轻量级的抽象,它封装了多轮 rollout 逻辑,并原生支持工具调用(如搜索、代码执行)或其他外部系统交互(如游戏、用户模拟器),同时还包括数据集预处理和奖励计算。从概念上讲,用于 RL 训练的 verifiers 环境与用于 SFT 或预训练的数据集扮演着相同的角色;将环境与训练基础设施分离带来了理想的组合性和互操作性,因为多个环境可以被直接组合成一个“混合”环境,并支持在线和离线 rollout 生成(例如用作评估)。环境管理着在 rollout 的整个生命周期内提交推理请求和状态信息,并将完成的 rollout 返回给协调器。一个名为“Rubric”的奖励管理器抽象存在于环境中,它提供可配置的控制和资源,以支持广泛的奖励计算策略,例如复合奖励函数、全局状态引用、LLM 评判、昂贵计算的缓存以及可定制的并行策略。
开发与部署流程。
环境的构建与训练逻辑相隔离,可以轻松地针对本地或 API 模型进行测试。一旦准备好用于训练,它们就会被推送到 Environments Hub,并立即可用作 prime-rl 训练器的可安装 Python 模块。通过采用 verifiers 规范,在环境中进行训练和评估无需在 prime-rl 中修改任何代码即可直接工作。
统一的 SFT 和 RL 接口。
现代的后训练流程通常结合了监督式微调(SFT)和强化学习(RL)【17,GLM-4.5: Agentic, Reasoning, and Coding (ARC) Foundation Models. 2025】,【24,Qwen3 Technical Report. 2025】。为了支持这一点,我们的框架为这两种方法提供了一个统一的接口。SFT 和 RL 训练器共享核心建模组件,因此任何可用于 RL 的模型也可以用作 SFT 的热启动模型,反之亦然。这种紧密的集成简化了整个后训练工作流。
无缝扩展性设计。
prime-rl 的一个关键要求是无缝的可扩展性。将一个在单节点上开发的研究想法,无摩擦地应用到在拥有数百个节点的去中心化集群上进行的生产规模训练中,是其核心目标。这推动了一个关键的设计选择:使用 FSDP 作为训练后端,vLLM 作为推理后端,并使这些组件完全解耦。至关重要的是,这消除了对自定义硬件编排逻辑的需求,因为两者都内置了对多节点部署的支持。
适配无需许可的推理工作者。
使用 prime-rl 进行全局分布式训练,并配备无需许可的推理工作者,无需对训练器进行任何更改。唯一的区别是,协调器不直接与推理服务器通信,而是会向一个中间的调度器组件请求 rollout 补全。
调度与验证机制。
该调度器负责将传入的 rollout 请求进行负载均衡,分配到无需许可的推理池中,并保证 rollout 响应已经通过 TOPLOC【12,TOPLOC: A Locality Sensitive Hashing Scheme for Trustless Verifiable Inference. 2025】的验证。为此,推理池中的每个工作者都会提供一个扩展的、与 OpenAI 兼容的规范,其中包含用于生成和验证 TOPLOC 证明的额外路由。每个请求首先被路由到一个推理工作者进行生成。生成响应,包括相关的 TOPLOC 证明,然后被路由到池中的另一个工作者进行验证。
异步执行的必要性。
在去中心化设置中,训练器和推理的异步执行成为必要,以避免长时间的阻塞。因此,prime-rl 的训练器和推理服务是分离运行的,即在不同组(可能非共置)的 GPU 上运行。
同步与异步流程对比。
在每个步骤中,所有产物都由步骤数 n 标识。对于训练器,这是梯度 $g_n$ 和模型权重 $\theta_n$;对于推理服务,这是 rollout $(x_n, y_n)$。在步骤 0,推理服务使用 $\theta_0$(基础模型)来产生 $(x_0, y_0)$。训练器随后使用 $(x_0, y_0)$ 来计算 $g_0$,最终更新模型为 $\theta_1 \leftarrow \theta_0 - g_0$。在同步的在策略(on-policy)训练中,推理引擎在产生 $(x_0, y_0)$ 后会停顿,因为它需要 $\theta_1$ 来产生下一个 rollout $(x_1, y_1)$。
离策略异步训练机制。
为了防止这种情况,我们允许离策略(off-policy)训练,这意味着推理服务可以从一个旧的策略模型异步生成 rollout,最多可达到某个 async_level。例如,如果 async_level=1,推理服务会继续从 $\theta_0$ 生成 $(x_1, y_1)$,而训练器则在并行地产生 $\theta_1$。图 3(a) 展示了这种重叠的异步计算示例。更一般地,对于任何 async_level,推理服务从 $\theta_{\min(0, n-\text{async_level})}$ 生成 rollout。在去中心化设置中,我们通常需要 async_level $\geq 2$ 来完全隐藏因广播更新后的模型权重而产生的通信瓶颈,如图 3(b) 所示。
图 3: 异步离策略训练。我们展示了单步(左)和双步(右)离策略训练的执行图。在步骤 n,推理引擎使用 $\theta_{\min(0,n-\text{async_level})}$。在共置设置中,单步离策略可以完全重叠训练和推理。在去中心化设置中,权重广播可能成为瓶颈,需要更高的异步级别。
MoE 实现与并行。
我们支持来自 torchtitan【10,TorchTitan: One-stop PyTorch native solution for production ready LLM pre-training. 2025】的混合专家(MoE)【15,Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer. 2017. ICLR】层实现。该实现利用分组矩阵乘法内核进行专家执行,并支持专家并行(EP)。
负载均衡监控。
为了监控负载分布,我们计算并记录了最大违规负载均衡指标 $MaxViolation = \max_i \frac{Load_i - \overline{Load_i}}{Load}$,如【20,Auxiliary-Loss-Free Load Balancing Strategy for Mixture-of-Experts. 2024】中所述。
与训练紧密集成的评估。
评估和训练通过使用 verifiers 紧密耦合,简化了针对各种常见基准进行评估的过程,包括 AIME【5, 14】、SWE-Bench【6】、TerminalBench【18】或 τ-bench【26】。
在线与离线评估模式。
评估既可以作为活跃训练的一部分(在线)运行,也可以作为独立的入口点(离线)运行。在在线评估时,协调器异步地将评估请求与训练请求交错进行,从而有效地隐藏了任何开销,同时提供了有关训练性能的有用实时反馈。
训练目标函数。
我们采用了 Llama-RL【21,LlamaRL: A Distributed Asynchronous Reinforcement Learning Framework for Efficient Large-scale LLM Training. 2025】中引入的 AIPO 训练目标的令牌级【27,DAPO: An Open-Source LLM Reinforcement Learning System at Scale. 2025】损失变体,并省略了熵和 KL 损失项。在每个步骤中,我们从数据集中采样 N 个提示。对于每个提示 x,我们采样一组 rollout ${y_i}_G^i$,并使用一个 verifier 为每个 $y_i$ 分配分数 $s_i$。然后,优化目标由以下公式给出:
其中,$\mu$ 指的是生成 rollout 的策略,$\pi$ 指的是当前策略。令牌级优势估计为 $\hat{A}_{i,t} = S_i - \text{mean}({S_i}_G^i)O$【11,Understanding R1-Zero-Like Training: A Critical Perspective. 2025】,我们使用 $\delta = 8$。
推理-训练不匹配问题。
我们发现解决以下推理-训练不匹配问题至关重要:即使 $\pi$ 和 $\mu$ 共享相同的参数 $\theta$,它们也可能产生显著不同的令牌概率,导致意外的分布偏移,可能在实验进行数天后导致运行崩溃。
解决方案。
在我们的设置中,我们发现不使用我们的训练后端重新计算对数概率,而是直接依赖 vLLM 的对数概率来估计 $\mu(y_{i,t}^{(j)} | x_j, y_{i,<t}^{(j)})$ 会更稳定。在这种设置下,这直接等同于在训练器和推理的对数概率之间加入重要性采样校正。关于更深入的调查,我们建议读者参考【25,Your Efficient RL Framework Secretly Brings You Off-Policy RL Training. August 2025】。
为了展示 prime-rl,我们使用 prime-rl 在 24 个 H200 GPU 上,针对数学推理任务训练了 DeepSeek-R1-Distill-Qwen-32B。我们详细说明了训练设置及完整的复现步骤,并报告了训练动态和效率。
skywork-math2 上进行训练,这是一个单轮环境,包含源自 Skywork OR1 训练数据【4】的具有挑战性的数学问题。验证方面,我们使用 verifiers 原生的 think 解析器和 boxed-answer 提取,以及 math-verify【9】进行最终奖励分配。我们在训练前对数据进行过滤,以排除过易和过难的问题。训练效率 (Training Efficiency)。
如图 4 所示,系统在整个训练过程中保持了高吞吐量。在训练器上,我们实现了每秒 11.3K (±1K) token 的吞吐量,而推理达到了每秒 14.4K (±1.3K) token,这显示出轻微的吞吐量不平衡。尽管如此,计算利用率仍然很高,训练器上的峰值模型 FLOPs 利用率(MFU)达到了 38.46%。实验总共运行了 64 小时,消耗了 1,536 GPU 小时,每个训练步骤平均耗时 22.9 (±3.4) 分钟。
图 4: 训练效率。在我们的实验设置中,我们维持了高吞吐量,几乎没有空闲时间,并且在训练器上实现了 38.46% 的峰值 MFU。
训练动态 (Training Dynamics)。
在整个训练过程中,运行表现出稳定和健康的学习行为,如图 5 所示。梯度范数保持一致,没有梯度消失或爆炸的迹象。同样,令牌间的熵没有显著下降,表明策略保留了探索性,没有过早收敛。与此同时,奖励呈上升趋势,表明性能在逐步提高。总而言之,这些趋势反映了一个行为良好的优化过程和稳定的策略改进。
图 5: 训练动态。我们报告了训练稳定性的关键指标,包括梯度范数、熵和平均奖励。梯度范数和熵是稳定且非递增的,而奖励在上升,表明学习行为健康。
在本报告中,我们介绍了 prime-rl,这是我们用于大规模强化学习(RL)的开源框架。它是一个功能丰富、经过实战检验的 RL 训练器,专为智能体 RL 训练和去中心化计算时代而设计。其架构将训练和推理分离,实现了高效的异步执行。主要特点包括与 verifiers 环境和 Environments Hub 的原生集成、端到端的后训练(SFT + RL)以及原生的 MoE 支持。我们通过在数学推理任务上训练一个 32B 模型,展示了该框架的有效性和鲁棒性,维持了高吞吐量和稳定的优化过程。
以下是用于启动第 5 节中描述的实验的命令。
uv run inference \
--model.name deepseek-ai/DeepSeek-R1-Distill-Qwen-32B \
--max-model-len 16384 \
--max-seq-len-to-capture 16384 \
--data-parallel-size 4 \
--tensor-parallel-size 4 \
--data-parallel-size-local 2 \
--data-parallel-address 192.168.0.113 \
--data-parallel-rpc-port 13345
uv run inference \
--worker-extension-cls rl_framework.inference.vllm.worker.CheckpointWorker \
--model.name deepseek-ai/DeepSeek-R1-Distill-Qwen-32B \
--max-model-len 16384 \
--max-seq-len-to-capture 16384 \
--data-parallel-size 4 \
--tensor-parallel-size 4 \
--data-parallel-size-local 2 \
--data-parallel-address 192.168.0.113 \
--data-parallel-rpc-port 13345 \
--data-parallel-start-rank 2 \
--headless
v run orchestrator \
--client.host 192.168.0.113 \
--num-train-workers 8 \
--model.name deepseek-ai/DeepSeek-R1-Distill-Qwen-32B \
--environment.id skywork-math \
--environment.args '{"solve_rate_field": "solve_rate_qwen_r1_distill_32b", "min_solve_rate": 0.001, "max_solve_rate": 0.999}' \
--max-steps 500 \
--log.level debug \
--ckpt.interval 50 \
--ckpt.keep 1 \
--monitor.wandb.project prime-rl \
--monitor.wandb.name r1-distill-qwen32b-orchestrator \
--monitor.wandb.log-extras.interval 1 \
--outputs-dir ~/shared/outputs \
--batch-size 2048 \
--micro-batch-size 1 \
--seq-len 16384 \
--rollouts-per-example 16 \
--sampling.temperature 0.7 \
--async-level 1
uv run torchrun --nproc-per-node 8 src/rl_framework/trainer/rl/train.py \
--model.name deepseek-ai/DeepSeek-R1-Distill-Qwen-32B \
--model.compile \
--model.ac \
--optim.lr 1e-6 \
--max-steps 500 \
--log.level debug \
--ckpt.interval 50 \
--ckpt.keep 1 \
--weights.interval 10 \
--monitor.wandb.project prime-rl \
--monitor.wandb.name r1-distill-qwen32b-trainer \
--monitor.wandb.log-extras None \
--outputs-dir ~/shared/outputs \
--async-level 1
单节点实验简化。
为了简化单节点 RL 实验,prime-rl 提供了一个简单的入口点脚本。该脚本接收配置文件,并为训练器、协调器以及可选的推理服务启动子进程。它管理硬件放置,验证共享配置字段,并确保在发生故障时进行适当的清理。
增强的可观察性。
为了获得更好的可观察性,我们还提供了一个 tmux 布局脚本,该脚本将每个模块的日志流式传输到专用的窗格中,从而提供一个清晰有序的训练过程视图(图 6)。
图 6: 布局脚本。辅助脚本 http://tmux.sh 将训练器、协调器和推理服务的日志流式传输到三个水平窗格中。
[1] Jason Ansel et al. PyTorch 2... (ASPLOS ’24)
[2] William Brown. Verifiers... (GitHub, 2025)
verifiers 环境提供一流支持,并详细阐述了 verifiers 库如何将 RL 环境的开发与训练抽象解耦。[3] DeepSeek-AI et al. DeepSeek-R1... (2025)
[4] Jujie He et al. Skywork Open Reasoner 1 Technical Report (2025)
skywork-math2 环境中的数学问题源自该报告的训练数据。[6] Carlos E Jimenez et al. SWE-bench... (ICLR, 2024)
prime-rl 可通过 verifiers 集成进行评估的基准之一。[7] Jordan Juravsky et al. Tokasaurus... (2025)
[8] Woosuk Kwon et al. Efficient Memory Management... (SOSP, 2023)
[9] Hynek Kydlícek. Math-Verify...
[10] Wanchao Liang et al. TorchTitan... (2025)
torchtitan,并支持其 MoE 层实现。[11] Zichen Liu et al. Understanding R1-Zero-Like Training... (2025)
[12] Jack Min Ong et al. TOPLOC... (2025)
[13] OpenAI. OpenAI o3 and o4-mini System Card
[15] Noam Shazeer et al. Outrageously Large Neural Networks... (ICLR, 2017)
[16] Guangming Sheng et al. HybridFlow... (arXiv, 2024)
[17] 5 Team et al. GLM-4.5... (2025)
[18] The Terminal-Bench Team. Terminal-Bench... (Apr 2025)
prime-rl 可通过 verifiers 集成进行评估的基准之一。[19] Leandro von Werra et al. TRL... (GitHub, 2020)
verifiers 环境一起使用的其他训练器框架的例子。[20] Lean Wang et al. Auxiliary-Loss-Free Load Balancing... (2024)
MaxViolation 指标的计算方法。[21] Bo Wu et al. LlamaRL... (2025)
prime-rl 采用的 AIPO 训练目标变体源于该文献。[22] xAI. Grok 4.
[23] LLM-Core Xiaomi et al. MiMo... (2025)
[24] An Yang et al. Qwen3 Technical Report (2025)
[25] Feng Yao et al. Your Efficient RL Framework... (August 2025)
[26] Shunyu Yao et al. τ-bench... (2024)
prime-rl 可通过 verifiers 集成进行评估的基准之一。[27] Qiying Yu et al. DAPO... (2025)
prime-rl 的训练目标是该文献中令牌级损失的一种变体。[28] Lianmin Zheng et al. SGLang... (2024)