OlmoRL 的基础架构比 Olmo 2 快 4 倍,并且大大降低了实验运行成本。部分改进包括: 1. 连续配料 2. 飞行中更新 3. 主动采样 4. 对我们的多线程代码进行了许多改进
在连续批处理中,我们采用完全异步的生成设置,其中我们有两个队列:一个用于提示,一个用于生成结果。 我们的演员完全异步运行,不断拉取新的提示,并在任务完成后生成提示。
利用实时更新(PipelineRL,由 @alexpiche_、@DBahdanau 等人开发),我们可以在生成过程中更新 Actor。由于无需清空生成队列来更新权重(这与静态批处理存在相同的问题),系统速度更快。
主动采样(@mnoukhov 的一项创新贡献)解决了 GRPO 中出现的一个棘手问题,即奖励方差为 0(因此优势为 0,梯度为 0)的组被过滤掉,导致批次大小随训练步骤而变化。
之前的论文通过采样所需组数的3倍来解决批次大小不一的问题,希望过滤后始终能有足够的组数。而Michael修改了我们的代码,使其在训练前等待获得一整批非恒定奖励组。
这需要进行大量巧妙的工作,才能使我们的演员和学习者保持同步。
最后,我们花费了大量时间重构代码库,减少同步,使角色能够异步运行。这涉及到对 Python 线程和 asyncio API 的大量工程开发工作。
我们的 RL 基础设施工作是一项团队努力,我本人、@hamishivi、@mnoukhov、@saurabh_shah2 和 @tyleraromero 都做出了贡献,并且建立在 @vwxyzjn 留下的基础之上。
要了解更多关于我们工作的信息,请查看论文、博客文章和相关工作,包括我们从太平洋时间上午 9 点开始的直播。


