@vivek_2332: 最近一直在探索 RL 基础设施,这是我想深入研究的方向。所以我一直在阅读 prime-rl 代码库……

X AI KOLs Timeline 工具

摘要

一篇技术博客文章,剖析了 prime-rl 强化学习编排器的主循环,涵盖了 RolloutDispatcher、TrainSink、EvalSink、WeightWatcher 和 PeriodicLogger 等组件。

最近一直在探索 RL 基础设施,这是我想深入研究的方向。 所以我一直在阅读 @PrimeIntellect 的 prime-rl 代码库,并且我打算将其变成一个博客系列,通过代码拆解关键概念。 第 1 部分:编排器的主循环。我们会深入了解 RolloutDispatcher、TrainSink、EvalSink、WeightWatcher、PeriodicLogger,以及它们如何共同支撑起一次运行的。 https://vivekvkashyap.github.io/posts/rl-infra-orchestrator-part-1.html…
查看原文
查看缓存全文

缓存时间: 2026/08/04 02:12

最近我花了很多时间研究 RL 基础设施,这是我想深入的方向。所以我一直在读 @PrimeIntellect 的 prime-rl 代码库,并把它写成一系列博客文章,通过代码拆解关键概念。第 1 部分:编排器的主循环。我们会依次看 RolloutDispatcher、TrainSink、EvalSink、WeightWatcher、PeriodicLogger,以及它们如何支撑起一次完整运行。https://vivekvkashyap.github.io/posts/rl-infra-orchestrator-part-1.html…


RL 基础设施编排器 - 第 1 部分:主循环 — Vivek Kashyap

来源:https://vivekvkashyap.github.io/posts/rl-infra-orchestrator-part-1.html

过去一年,前沿模型的大部分进展都来自后训练(post-training)。预训练仍然承担着教会模型语言和世界知识的重活,但自从 OpenAI 的 o1 和 DeepSeek-R1 发布以来,后面的 RL 阶段才是近期许多收益体现的地方。它在数学和代码这类可验证领域尤其有效,并且会顺带提升模型的其他能力,这也是 Claude Code、Codex 和 Cursor 这类工具用起来感觉那么好的一个重要原因。

但要真正让模型以这种方式进步,需要大量基础设施,而这正是事情变难的地方。随便问一个做 RL 的人,他们都会告诉你同样的话:RL 基础设施很难。

这是该系列博客的第一篇,我们从这个编排器开始。它内部的内容太多了,我打算分成五六篇文章:先讲主循环,然后是调度器、权重同步、rollout 如何变成训练数据,等等。我们会一路阅读实际代码,来自 Prime Intellect 的 prime-rl,这是我最喜欢的框架之一。

三个组成部分

只有先弄清楚编排器夹在什么之间,它才有意义,所以我们从这里开始。

任何 RL 系统都由三部分组成:推理、训练器和编排器。

  1. 推理运行模型。你给它一个 prompt(提示词),它生成模型的回答。如果任务是单轮的,那就到此为止:进去 prompt,出来答案。如果有工具或多轮对话,它会继续下去。模型调用工具、拿到结果、环境回应,循环继续。整个轨迹——prompt、模型回答、工具调用和环境回合——被称为 rollout。这部分通常由 vLLM 或 SGLang 之类的服务承担。

  2. 训练器接收一批 rollout,更新模型。思路很简单:获得高奖励的 rollout 会被推高,让模型更多地产出类似行为;获得低奖励的 rollout 会被压低,让模型更少地产出这类行为。整个循环就是这样:让好的行为更可能出现,让坏的行为更少出现。

  3. 编排器是把两者绑在一起的组件。它把 prompt 交给推理,收集返回的已完成 rollout,传给训练器,然后协调把训练器的新权重推回推理,让生成 rollout 的模型持续改进。难点在于,它要异步地完成这一切。谁也不等谁。训练器在 rollout 到达时持续训练,推理同时持续生成新的 rollout,所以两者互不阻塞。要让两个系统持续保持同步,同时还要正确且尽可能快地完成训练,这正是编排器有这么多事要做的原因。

五个组件

到目前为止,我们一直把编排器当作一个整体来谈,但它实际上就是一组各司其职的小组件。编排器的全部职责就是在 setup() 中构建它们,然后驱动它们。这些组件彼此不知道对方的存在,只有编排器把它们连接在一起。有五个值得了解:

  1. RolloutDispatcher(rollout 调度器)。 这是调度器。它决定接下来运行哪些 prompt,通过验证器环境把它们发给推理引擎;每当一个 rollout 完成,它就把 rollout 放到队列中,让管线的其余部分取走。你可以把它看作是保持推理忙碌的东西:它总是尽量在容量允许的范围内让尽可能多的任务处于进行中。

  2. TrainSink(训练汇)。

相似文章