跳到正文
Modal Blog·· 2026-06-01精选AI 评分60

Modal 发布开源库 Training Gym,用不到 100 行代码定义 RL 训练任务

Reinforcement learning is an infrastructure problem

AI 导读

Modal 发布实验性开源库 Modal Training Gym,可在不到 100 行代码内定义训练任务,只需配置奖励函数、模型和环境,并内置训练可观测性与 RL 教程。

推荐理由

Modal 把 RL 后训练的基础设施痛点拆成三类,并给出开源库 Training Gym 的抽象方式,可据此判断自建训练栈的取舍。

正文 · AI 翻译

在 Modal 上,用强化学习(RL)对 LLM 进行后训练已变得极为流行。

我们帮助过各种规模的团队,从研究实验室到成熟企业,构建训练系统,以从基础模型中获得前沿的性价比。我们意识到,当前 RL 的瓶颈在于基础设施。

今天,我们想分享从大规模运行 RL 后训练中学到的经验,以及我们构建的一个开源库,让你不必再走弯路。

问题的形态

一个 RL 训练循环是一个整体,分为三个部分,每一部分都是一个独立且困难的基础设施问题。

  • 训练:使用一个能够可靠地运行前向传播、反向传播和权重更新的引擎,并且规模要能支撑有用的基础模型(数十亿到数万亿参数)。
  • Rollout:来自高性能推理引擎,能够在一块或多块最新 GPU 上(从单卡到数百卡)以接近光速的速度服务大模型。
  • 隔离环境:你的模型策略可以在其中并发地转化为动作,速率与你的 rollout 相匹配(数千到数百万个容器)。

过去一年的变化:走向多节点

更多团队在微调开放权重模型。他们正在将 AI 投入生产,而不仅仅是为高管们拼凑演示,以应对模糊的“AI 任务”,而且许多产品正在迅速成熟。与此同时,由于越来越依赖测试时计算,前沿专有模型的每 token 总成本持平或上升。幸运的是,从 NVIDIA 和 Google 到 DeepSeek 和 Kimi,多个组织正在以宽松许可证发布优秀模型。

虽然小型模型(这里指十亿参数以下)仍有很强的微调潜力,但对于更复杂的任务,更大的模型才是方向。它们往往具有更高的能力上限、更好的数据效率,以及更少的灾难性遗忘。代价是需要更多 VRAM 来保存权重、梯度、优化器状态和 KV 缓存——以及更多带宽来传输它们。

一旦训练跨越多个 GPU 节点,训练器与 rollout 引擎之间的权重同步就成为瓶颈。LoRA、异步 RL 或训练器-rollout 共置等技术各自都能减轻压力,但有不同的权衡。即便如此,训练集群仍然昂贵,因此在大多数情况下,每个空闲秒你仍然要消耗数美分的成本。

这使得多节点设置成为基本要求。

在同一集群内,RDMA 传输速度可将训练提升 100 倍。
模型权重更新大小传输速度(NCCL over TCP)传输速度(NCCL over RDMA)参考 GPU 数量每个训练步骤预计节省的成本
Qwen3 8B16.3 GB (BF16)2.62 s41 ms1x8 H100$0.21
Qwen3-30B-A3B61.1 GB (BF16)9.78 s153 ms1x8 H100$0.77
Qwen3-30B-A3B LoRA (r=32, shared-outer)1.0 GB (BF16)160 ms2.5 ms1x8 H100$0.013
GLM 4.7716.7 GB (BF16)114.67 s1.79 s4x8 B200$36.12
GLM 4.7 LoRA (r=32, shared-outer)4.7 GB (BF16)752 ms11.75 ms4x8 B200$0.24
GLM 4.7 LoRA (r=32, per-expert)18.8 GB (BF16)3.01 s47 ms4x8 B200$0.95
Kimi K2.6595.2 GB (INT4 MoE / BF16 attn)95.23 s1.49 s16x8 H200$119.99
Kimi K2.6 LoRA (r=32, shared-outer)9.4 GB (BF16)1.50 s23.5 ms16x8 H200$1.90
Kimi K2.6 LoRA (r=32, per-expert)41.0 GB (BF16)6.56 s102.5 ms16x8 H200$8.27

这里假设 TCP 为 50 gbps,RDMA 为 3.2 tbps。

在进行分离式 RL 时,由于未连接 RDMA,模型权重更新时间会很慢,但使用增量压缩也能改善体验。

模型大小全量权重传输时间增量压缩
Qwen3 8B16 GB (BF16)12.8s0.26s
Qwen3 30B-A3B60 GB (BF16)48s0.96s
GLM 4.7 (~355B)357 GB (BF16)285.6s5.73s
Kimi K2.6 (~1T)595.2 GB (INT4, MoE / BF16 attn)480s9.6s

这里假设通过 WAN 互联网链路达到 10 gbps,并且 增量压缩可节省 98% 的权重更新量。

团队卡在哪里

我们发现团队都被同样三个问题坑过:

  • 维护胶水代码
  • 排队等集群时间
  • GPU 利用率不足

这些问题你在最喜欢的 RL 教科书里都找不到。它们都可以通过更好的基础设施来解决。

维护胶水

要构建一个好的训练环境,你必须做大量的基础设施管理工作。这样一来,你的训练代码中越来越大的比例会变成胶水代码(或者更糟,YAML)。

你将在哪里获取并准备训练节点?如何在其上引导训练框架?沙箱缓冲区和 rollout 缓冲区放在哪里?当 [REDACTED INFERENCE ENGINE] 让你的 rollout 节点崩溃时会发生什么?尽管训练中的故障代价高昂,但你典型的训练代码库对这些问题给出的答案很糟糕,训练运行既有 bug 又难以调试。

幸运的是,Modal 将基础设施和代码打包在一起。例如,在 Modal 上,客户只需几行代码就能启动一个支持 RDMA、GPU 加速的训练集群,并内置可观测性、容错(重试、GPU 健康检查)和自动扩缩容。看,妈妈,没有胶水!

单个布尔 rdma=True 关键字参数为模型训练者隐藏了一个复杂的焦油坑。本就该如此!“抽象的目的不是含糊,而是创造一个可以做到绝对精确的新语义层级。”

同样干净的抽象也构成了我们为其他组件提供的服务,比如用于环境执行的沙箱。但也许你已经构建了其中一个组件?Modal 是一个模块化平台,所以如果你想在胶水矿里冒险,你可以自带训练循环中的任何组件。

排队等集群时间

拥有必要的脚手架代码只是能够执行训练运行的第一步。

我们正处于算力短缺之中。但你不需要听 Dwarkesh Podcast 或购买 SemiAnalysis 的市场模型才能看到这一点。你有多少次启动了一个训练任务,结果却排队等了几个小时?

然后,当你终于被调度时,运行却立刻失败,因为你的 NCCL 配置错了,或者忘了设置某个 YAML 值。排队会扼杀迭代速度,而迭代速度会扼杀工程速度(对人类和智能体都是如此)。

我们有容量。我们能够以极高的效率管理它,并利用多租户的优越经济性。借助我们的快速容器启动技术,我们的用户能够在几分钟内从零扩展到 B200 集群——不是几小时,当然也不是其他平台上需要的几天。

GPU 利用率不足

所以你已经搭建好了意大利面脚手架,也有了容量。现在你遇到了最后一道障碍:环境成为 GPU 的瓶颈。

你为整个 GPU 付了钱。你必须使用整个 GPU。你必须永远不要阻塞 GPU。

要做到这一点,你需要正确设置沙箱缓冲区的大小——这是一个沙箱池,其中的环境已预先准备好,可供你的 rollout 使用。如果你随意定义一个过大的沙箱缓冲区,就会承担空闲算力的成本。如果你维护的缓冲区太小,就会因为沙箱启动时间而阻塞 GPU,而且每一次 rollout 都是如此。

Modal Sandboxes 能在数百毫秒内启动,所以有时我们的客户会忘记缓冲区大小是可以优化的,但每一毫秒都很重要。

那么,如何确定缓冲区大小?一个通用的经验法则是,在每个推理步骤中,新动作的数量最多为 batch size,通常远少于此。因此,你只需要为每个 episode/rollout 至少维护一个沙箱,以便动作能被立即处理,无需排队。你还应该考虑错误率:运行大量环境意味着你会观察到更多失败模式,而对于长时间运行的任务,失败的代价更高。

我们将 Modal Sandboxes 设计为具备每秒启动数千个沙箱、同时保持多达一百万个并发沙箱的规模。这意味着你可以并发评估所有 rollout,加速训练并让 GPU 持续运转。

为了说明并发沙箱数量对步骤时长的影响,让我们考虑以下场景。

单个步骤请求 10,000 个 rollout。每个沙箱负责执行一个简单动作(例如代码执行),该动作端到端完成的时间上限为 10 秒。

你还可以使用诸如 快照 之类的功能,在创建沙箱时跳过设置工作、对 agent 动作进行检查点保存等。

你不应该独自担心这一切!

所有这一切——维护训练集群、争夺容量,以及管理 rollout 和沙箱——对团队来说要处理的事情太多了。

这就是为什么我们发现团队转向 Modal,以抽象掉许多棘手的细节,从而专注于真正重要的事情:改进他们的环境、奖励计算和训练算法,以在损失函数和产品层面取得更好的结果。

为什么我们押注开源

我们还想强调最后一点:我们今天看到在 RL 上取得成功的团队,几乎无一例外都是从开源训练框架起步的——slime、miles、verl、OpenRLHF——而不是自己从头构建。

这有充分的理由:这些框架已经过真实前沿规模训练运行的验证。它们处理 RL 中微妙的部分(优势估计、KV 缓存复用、分布式权重同步)的方式,已经在数十万 GPU 小时的测试中得到压力验证。

借助这些框架,Modal 目前支持我们的客户在 GLM 4.7 和 Kimi K2.6 等大模型上进行 SFT 和 RL,涵盖低秩适应和全量微调。我们做了大量工作来改善这一体验,例如 为 slime 添加增量压缩。我们所有的改进都在向上游贡献给这些开源框架,以帮助所有人——而不仅仅是我们的用户——成功训练大模型,正如我们开源 我们 对 内核 的 改进,例如 FlashAttention 4,以及我们对 推理 引擎(如 SGLang)的改进。

我们本可以像许多其他公司一样,构建一个闭源、托管的训练服务。但我们选择不这样做。我们的客户在我们的基础设施之上使用开源模型和开源训练框架,原因有两个:

  1. 强化学习生态系统的演进速度太快,任何单一供应商都无法跟上。新的算法、基础模型、环境模式和想法每周都在涌现,一个静态的产品在一个季度内就会过时,一年内就会被淘汰。掌控训练框架代码意味着你(或你的智能体)可以直接实现你需要的功能,而不必在别人的任务追踪系统里创建工单。
  2. Modal 的价值不在于掌控你的训练循环然后将其劣化。它的价值在于为你提供从 Python 文件到数千块 GPU 的最简洁路径,不让你不关心的事情挡路。

有了 Modal,任何人都可以训练任何东西。我们将继续构建更多基础设施,更好地赋能我们的用户。

那么,接下来是什么?

我们的用户创建的训练任务在 RDMA 连接的集群函数上运行经过验证的框架,在数千个并发沙箱中编排环境,并将权重存储在分布式卷中,以供下游评估和晋升到生产环境。他们可以在 Modal 上迭代训练,安心地确信基础设施不会拖累他们。但拼图还差最后一块:上手和采用这些框架与工具本身就是一件令人头疼的事。

像 slime 这样的工具和框架通常是为希望暴露每一个旋钮的研究人员构建的,这意味着微调一个模型让它向文件输出 "hello world" 往往需要 2,000 行配置和另一堆胶水代码。

我们合作过的每个团队都在一遍又一遍地做着大致相同的脚手架工作:连接多节点集群、搭建环境管道、构建更多可观测性。

所以我们决定将最后一块胶水基础设施抽象出来。

隆重推出 Modal Training Gym

在过去一个月里,我们构建了一个实验性库,其中包含我们客户关心的通用抽象。

为了致敬那些先行者,我们将其命名为 Modal Training Gym,你可以在 GitHub 上这里访问它。使用这个库,你可以在不到 100 行代码中定义一个训练任务。你只需要指定和配置你关心的事情:奖励函数、模型和环境。

Training Gym 是 Modal 之上的抽象层,是我们作为训练用户时想要的。它内置了训练可观测性、一套强化学习教程,以及出色的智能体开发体验。下载它,告诉你的编程智能体“训练一个用 Y 做 X 的模型”,然后放手让它跑。

在接下来的几个月里,我们将快速为它添加功能,并且我们正在积极寻找设计合作伙伴。如果你对此感兴趣,请来和我们聊聊。

让我们一起定义 Modal 上开源训练的未来形态。

来源:Modal Blog · modal.com