跳到正文
原文
LMSYS:Blog(Chatbot Arena 团队)·· 2 小时前精选AI 评分62

LMSYS 发布 SGLang 原生后训练框架 slime

Blog slime: An SGLang-Native Post-Training Framework for RL Scaling We believe in RL. We believe RL is the final piece toward AGI. If you feel the same way, you'll share our vision: - Every field should be end-to-end RLed and every task should become an agent enviro... The slime Team July 9, 2025

AI 导读

LMSYS Chatbot Arena 团队发布后训练框架 slime,定位为面向 RL scaling 的 SGLang 原生框架。

推荐理由

官方介绍了框架如何通过参数透传和自定义 rollout 接口保持 SGLang 原生性能,读者可据此评估它对 RL 训练工作流的适配。

正文 · AI 翻译

驱动 slime 的愿景

我们相信 RL。我们相信 RL 是通往 AGI 的最后一块拼图。

如果你也这么认为,你会认同我们的愿景:

  • 每个领域都应被端到端地 RL 化,每个任务都应成为一个 agent 环境。
  • 每次 RL 运行都应持续更久,每个模型都应扩展得更大。
  • RL 系统应与现有基础设施无缝集成,让我们专注于新想法,而不是样板式工程。

因此我们推出 slime,一个后训练框架,其设计目标是:

  • 通用 – 拥有完全可定制的 rollout 接口和灵活的训练配置(共置或解耦、同步或异步、RL 或 SFT 冷启动)。
  • 高性能 - 原生集成 SGLang 用于推理,Megatron-LM 用于训练。
  • 易维护 - 代码库轻量,从 Megatron 预训练到 SGLang 部署的过渡顺畅。

简而言之,一个面向 RL 扩展的后训练框架。

以下是我们如何实现它的。

可定制性带来自由

我们不应再试图寻找思考心智内容的简单方式,比如思考空间、物体、多智能体或对称性的简单方式。

— The Bitter Lesson

RL 社区中一个普遍存在的误解是,不同任务需要不同的框架:一个用于纯数学,一个用于多轮工具调用,一个用于异步训练,一个用于 agentic 任务,等等。分叉并维护多个框架是可怕的,会导致浪费时间的 bug 修复挑选,或者更糟,因缺少补丁而导致训练崩溃。

情况并非一直如此:没有人会仅仅为了一个新的 dataloader 就去分叉 PyTorch。我们认为当前的混乱源于规定人们应如何构建其应用的陷阱。如果我们坚持为每个 rollout 场景定义一个通用模板,我们必然会创建一个只能满足现实世界一小部分需求的 RL 框架。

slime 以不同的方式看待 RL 中的数据采样。我们用 sgl-router 管理 slime 内的所有 SGLang 服务器,并为数据生成组件提供一个接口,允许用户注入自定义逻辑并自由地与 SGLang 服务器交互。释放他们的创造力。

slime architecture

借助 sgl-router,用户只需向单个端点发送 HTTP 请求。通过暴露这个端点,复杂的 agent 环境可以通过 OpenAI 兼容的 API 直接与 slime 交互——无需修改环境,并且训练-部署一致性得以保持。

在训练方案方面,slime 使用 Ray 进行资源管理,通过单个标志即可启用共置(相同 GPU)或解耦(独立 GPU)配置(--colocate)。

并且借助 Ray 通过 .remote() 实现的异步执行,slime 天然支持异步训练。改变同步行为就像移动 ray.get 操作一样简单。为了让尝试不同策略变得容易,我们没有用 trainer 类包装代码,而是简单地在入口 train.py 中暴露训练循环。

为性能而构建

一个像样的 RL 框架必须快,并且始终快。

快意味着利用最快的推理和训练框架。

与预训练不同,RL 工作负载在训练期间涉及大量在线采样,这使得推理性能至关重要。因此,slime 独家集成 SGLang,并刻意提供 SGLang 原生的体验。

那么“SGLang 原生”是什么意思?它意味着你可以充分利用所有 SGLang 优化——在 slime 中使用 SGLang 就像单独使用它一样。为了实现这一点:

  • slime 内部以基于服务器的模式启动 SGLang 服务器。
  • slime 为所有 SGLang 参数实现了无缝透传(带有 --sglang 前缀),确保所有优化选项都能启用。例如,你可以传入 --sglang-enable-ep-moe、--sglang-enable-dp-attention 和 --sglang-enable-deepep-moe,以获得强大的多节点 MoE 推理能力。
  • slime 提供了仅 SGLang 的调试模式(--debug-rollout-only),便于性能调优。

我们携手在 slime 中复现了 SGLang 的独立性能。甚至 slime 的基础镜像也是基于 lmsysorg/sglang:dev 构建的。

在训练方面,slime 集成了久经考验的 Megatron-LM,旨在提供同样原生的预训练体验:

  • slime 还为所有 Megatron 参数实现了无缝透传。
  • slime 支持所有 Megatron 并行方式(TP、PP、EP、CP),并监控训练 MFU。
  • slime 提供了仅 Megatron 的调试模式(--debug-train-only),并支持存储采样数据以保证可复现性。

Megatron 出了名的复杂,因此我们还提供了检查点转换工具来简化其使用。

始终快速意味着与不断演进的推理和训练框架保持同步。

如果你曾关注过 SGLang PR 列表,你会对其快速演进感到惊讶。另一方面,Megatron 往往被大量定制,每个组织都维护着自己的分支。slime 旨在跟上 SGLang 的上游变更,并适应内部 Megatron 变体中的优化。这也是我们追求原生支持 SGLang 和 Megatron 的另一个原因。参数透传让升级变得轻而易举。

除了优化推理和训练框架,我们还解决了 RL 特有的工作负载。当 SGLang 需要变更以支持这些工作流时,我们会与 SGLang 团队紧密合作,将补丁上游——这样即使 RL 逻辑不断演进,slime 也能保持原生。例如:

优化权重更新:与推理任务不同,RL 训练涉及模型权重的频繁更新。为此,我们在 SGLang 中引入了多项优化:

  • 各种并行策略下 MoE 模型的参数更新(#6265、#6308、#6311)。
  • 支持分桶参数更新以减少开销(#7292)。

用于动态采样的 /abort_request:在需要过采样的 RL 算法中,例如 DAPO,即使已收集到足够的数据,某些请求仍可能继续运行。我们与 AReal 团队合作,设计了一个新端点:/abort_request。该端点能够:

  • 立即终止正在进行的请求。
  • 回收部分生成的内容,从而实现部分 rollout。

已在 #6698、#6855、#6184、#5966 中实现。

轻量且可扩展

专注于定制和性能,slime:

  1. 提供可定制的 rollout 接口。
  2. 使用 Ray 进行 GPU 管理和异步执行。
  3. 集成 SGLang 用于推理,Megatron 用于训练。
  4. 在训练和推理之间提供权重更新。

很简单,对吧?slime 将复杂性从框架转移到用户自定义的 pipeline 和核心库(SGLang 和 Megatron),从而形成一个轻量、易于维护的代码库。

但它不止于 RL。

得益于其模块化设计和强大的后端,slime 可以自然地扩展到其他后训练工作流,只需极少的额外代码:

  • SFT:加载 Megatron 并使用 token 预测损失。
  • 拒绝采样:使用 SGLang 进行过滤,随后进行 Megatron SFT。

(注意,SFT 功能目前处于实验状态。)

除此之外,slime 的原生集成无缝衔接了预训练与在线服务。我们可以使用 Megatron 进行预训练,切换到 slime(它集成了 Megatron 和 SGLang)进行后训练,最后直接使用 SGLang 进行评估和部署。这消除了转换 checkpoint 格式和对齐框架间精度这些繁琐且易错的步骤。

统一的 pipeline 让我们免于繁琐的胶水代码,从而能够专注于真正重要的事情:更好的 RL。万岁!

路线图

RL 扩展的旅程才刚刚开始,slime 也在持续演进。在下一阶段,我们将重点关注:

  1. 与 SGLang 团队合作,探索大规模 MoE 模型的最优 RL 训练策略。
  2. 支持更广泛的后训练工作流,加强从预训练到生产的桥梁。
  3. 添加原生 PyTorch 训练后端支持,以降低入门门槛。

我们希望 slime 能加速你的 RL 扩展之旅,将你的创新想法变为现实。欢迎贡献和交流!

特别感谢 AMD GenAI - Foundation Model Team 提供的 Day-1 AMD 硬件支持。

来源:LMSYS:Blog(Chatbot Arena 团队) · lmsys.org