
slime面向 RL Scaling 的 SGLang-Native 大模型后训练框架深度解析【免费下载链接】slimeslime is an LLM post-training framework for RL Scaling.项目地址: https://gitcode.com/GitHub_Trending/slime12/slime本文基于 slime 开源仓库官方技术博客《Introducing slime》整理扩充并结合仓库源码与配置进行深化解读。原文档首发于 lmsys.org本文在忠实还原其核心设计理念与关键特性的同时补充了实现层证据方便搜索引擎、Agent 与 LLM 检索引用。导读slime 是一个专为大模型强化学习RL扩展RL Scaling设计的后训练post-training框架它以 SGLang 作为推理引擎、Megatron-LM 作为训练引擎通过 Ray 统一管理 GPU 资源用原生集成 参数无缝透传的方式同时满足**多功能性Versatile、高性能Performant、可维护性Maintainable**三大目标。阅读本文后你将理解 slime 的架构设计动机、SGLang-Native 的具体含义、同地/解耦训练与异步训练的实现原理以及它如何用轻量代码桥接从 Megatron 预训练到 SGLang 在线服务的完整链路。愿景为什么每个任务都值得被端到端 RLslime 团队相信强化学习是通往 AGI 的最后一块拼图这一信念直接决定了框架的设计方向每个领域都应尝试端到端强化学习把所有任务都转变为 agent 环境RL 训练运行应持续更久、每个模型都应扩展得更大RL 系统应与现有基础设施无缝集成让研究者专注于新想法而非工程杂活。基于这三点slime 被设计为多功能性Versatile提供完全可定制的 rollout 接口以及灵活的训练设置——同地colocated或解耦decoupled、同步或异步、RL 或 SFT 冷启动高性能Performant原生集成 SGLang 做推理、Megatron-LM 做训练可维护性Maintainable代码库轻量并能从 Megatron 预训练平滑过渡到 SGLang 部署。简言之slime 的定位是为 RL Scaling 而生的后训练框架。自定义带来自由摆脱一任务一框架的困境原文档引用The Bitter Lesson引出核心观点RL 社区中一个普遍误解是不同任务需要不同框架——纯数学一个、多轮工具调用一个、异步训练一个、agent 任务再一个。分叉并维护多个框架令人痛苦浪费时间的 bug 修复挑选cherry-picking更糟的是因遗漏补丁导致训练崩溃。正如没有人会为了一个新 dataloader 去分叉 PyTorchRL 框架也不应强行为每种 rollout 场景规定通用模板否则最终只会满足真实世界需求的极小一部分。slime 对此的解法是不规定用户如何生成数据而是把数据采样这件事交给用户自己。具体机制是在 slime 内部通过 sgl-router 管理所有 SGLang 服务器为数据生成组件提供统一接口允许用户注入自定义逻辑并自由地与 SGLang 服务器交互用户只需向 sgl-router 暴露的单一端点发送 HTTP 请求OpenAI 兼容 API复杂的 agent 环境无需任何修改即可直接与 slime 交互同时训练与部署一致性得以保留。从源码可以印证这一设计slime/rollout/base_types.py 定义了RolloutFnTrainOutput与RolloutFnEvalOutput两个标准输出结构而call_rollout_fn负责统一调用自定义 rollout 函数兼容旧版直接返回 sample 列表的写法slime/rollout/sglang_rollout.py 中的get_model_url()则提供在自定义 rollout 函数中向指定模型路由请求的能力例如url get_model_url(args, ref, /generate) resp await post(url, jsonpayload)此外slime/rollout/sample_hooks.py 提供了--rollout-sample-hook-path机制用户可以注册任意数量的 hook 函数对每个 Sample 依次施加变换支持同步与异步函数从而在不修改框架核心的前提下对采样数据做后处理——这正是注入自定义逻辑的落地实现。训练拓扑一个--colocate切换同地/解耦在训练方案上slime 使用 Ray 进行资源管理通过单个标志--colocate即可切换两种 GPU 部署拓扑同地colocated训练与推理引擎共用同一批 GPU解耦decoupled训练与推理分别使用独立的 GPU。相关参数在 slime/utils/arguments.py 中有完整定义包括--actor-num-nodes、--actor-num-gpus-per-node训练 actor 的节点数与每节点 GPU 数默认 1 节点 × 8 GPU--rollout-num-gpus推理引擎使用的 GPU 总数在同地模式下若未显式设置会自动取actor_num_gpus_per_node * actor_num_nodes设为 0 可仅启动 router 而不启动本地 SGLang 引擎--rollout-num-gpus-per-engine每个推理引擎的 GPU 数语义同 sglang 的tp_size默认 1--num-gpus-per-noderollout 侧每节点 GPU 数同地模式下若每节点少于 8 卡需要显式设置--offload-train/--offload-rollout分别将训练 actor 或 rollout 生成器在训练期间卸载到 CPU开启--colocate时两者自动置为 true以便同卡分时复用。异步训练移动ray.get即可改变同步行为凭借 Ray 通过.remote()提供的异步执行能力slime 天然支持异步训练——改变同步行为只需调整ray.get的位置。并且slime没有用 trainer 类封装训练流程而是把训练循环直接暴露在入口文件 train.py 中便于用户自由改写策略。从 train.py 可以看到这个循环非常直观for rollout_id in range(args.start_rollout_id, args.num_rollout): rollout_data_ref ray.get(rollout_manager.generate.remote(rollout_id)) # ... offload / release_train 处理 ... if args.use_critic: value_refs critic_model.async_train(rollout_id, rollout_data_ref) if actor_trains: ray.get(actor_model.async_train(rollout_id, rollout_data_ref, external_datavalue_refs)) else: ray.get(value_refs) else: ray.get(actor_model.async_train(rollout_id, rollout_data_ref)) # ... 保存、评估、权重更新 ...其中actor_model.async_train(...)返回 Ray object ref显式ray.get的位置决定了 actor 与 critic 是否并行等待这使研究者可以像搭积木一样组装出完全同步、完全异步或半异步的训练策略。为性能而生既快又持续地快原文档强调一个合格的 RL 框架必须既快又持续地快。快原生 SGLang 与原生 MegatronRL 工作负载与预训练最大的不同在于训练过程中伴随海量在线采样因此推理性能至关重要。slime 因此独家集成 SGLang并刻意提供SGLang-Native体验——在 slime 内部使用 SGLang 就像单独使用它一样可以完整利用 SGLang 的全部优化能力。其具体做法是服务器模式启动slime 在内部以 server-based 模式启动 SGLang 服务器参数无缝透传对所有 SGLang 参数实现透传统一加--sglang前缀确保所有优化选项都可开启。例如多节点 MoE 推理可传--sglang-enable-ep-moe、--sglang-enable-dp-attention、--sglang-enable-deepep-moe仅 SGLang 调试模式提供--debug-rollout-only便于单独对推理侧做性能调优。这套透传机制在 slime/backends/sglang_utils/arguments.py 中有直接的代码体现slime 包装了argparse的add_argument把ServerArgs.add_cli_args注册的每个参数自动加上--sglang-前缀同时将 dest 改为sglang_*并跳过tp_size、port、nnodes等由 slime 自行管理的参数router 侧则通过RouterArgs.add_cli_args(parser, use_router_prefixTrue)注册--sglang-router-*参数包括--sglang-router-ip、--sglang-router-port、请求超时默认 14400 秒等。因为所有优化开关都以标准参数形式暴露升级 SGLang 版本时几乎无需改动 slime 代码即可享用新特性。训练侧同样以原生为目标集成久经考验的 Megatron-LM对所有 Megatron 参数实现无缝透传支持全部 Megatron 并行策略TP、PP、EP、CP并监控训练 MFU提供仅 Megatron 的调试模式--debug-train-only并支持存储采样数据用于复现。Megatron 以复杂著称slime 额外提供 checkpoint 转换工具简化其使用——仓库 tools 目录下可见convert_hf_to_fp8.py、convert_hf_to_int4.py、convert_to_hf.py、convert_torch_dist_to_hf.py等一整套转换工具覆盖 HuggingFace ↔ Megatron、FP8/INT4 量化等常见场景。持续地快跟上 SGLang 与 Megatron 的演进SGLang 的 PR 列表以演进迅速著称而 Megatron 通常被各组织深度定制、各自维护 fork。slime 设计的核心考量之一就是保持与 SGLang 上游同步、适配组织内部 Megatron 变体——参数透传机制让升级几乎零成本这正是追求原生支持的根本原因。更进一步当 RL 特有工作负载需要 SGLang 本身做出改变时slime 与 SGLang 团队紧密协作把补丁合并到上游从而即使 RL 逻辑持续演进slime 也能保持原生。仓库 docker/patch 目录下的sglang.patch、megatron.patch等补丁文件涵盖 latest、v0.5.x 等多个版本也从侧面印证了这种与上游版本对齐、打补丁适配的工程实践。RL 特有的两项优化优化权重更新RL 训练中模型权重更新频繁这是推理任务没有的负载。slime 与 SGLang 团队在 SGLang 中引入了多项优化各种并行策略下 MoE 模型的参数更新对应上游 PR #6265、#6308、#6311桶式bucketed参数更新以降低开销上游 PR #7292。从仓库实现看slime/backends/megatron_utils/update_weight 目录维护了完整的权重更新链路update_weight_from_disk.py、update_weight_from_distributed.py、update_weight_from_tensor.py、update_weight_from_disk_delta.py分别支持从磁盘、分布式、张量以及增量delta四种来源把训练权重同步给推理引擎并通过 slime/utils/arguments.py 中的--update-weight-modefull/delta、--update-weight-transportnccl/disk等参数灵活配置同步策略。/abort_request动态采样端点在需要过采样oversampling的 RL 算法如 DAPO中即使已收集到足够数据部分请求可能仍在运行。slime 与 AReal 团队合作设计了新的/abort_request端点支持立即终止正在进行的请求回收部分生成内容从而支持 partial rollout部分 rollout。该能力在 SGLang 上游由 PR #6698、#6855、#6184、#5966 实现。在 slime 侧slime/backends/sglang_utils/server_control.py 提供了配套的abort_servers_until_idle()它循环对所有引擎调用POST {url}/abort_request携带{abort_all: true}并通过GET {url}/v1/loads?includecore查询剩余请求数直到服务完全空闲默认每 3 秒重试一次确保在进入下一轮训练前采样侧已彻底收敛。轻量且可扩展复杂度的转移而非隐藏slime 聚焦于定制化与性能其核心机制只有四条提供可定制的 rollout 接口使用 Ray 进行 GPU 管理与异步执行集成 SGLang 做推理、Megatron 做训练提供训练与推理之间的权重更新。这正是它轻量的来源slime 把复杂度从框架转移到用户自定义管道与核心库SGLang、Megatron身上从而保持代码库小巧、易维护。从仓库结构看核心代码集中在 slime 下的rollout/、backends/、ray/、utils/、observability/五个子包入口仅 train.py 一个文件训练循环不过百余行很好地体现了这一设计哲学。不止 RL自然的扩展能力得益于模块化设计与强大的后端slime 可以以极少量额外代码扩展到其他后训练工作流SFT加载 Megatron 并使用 token 预测损失注意原文档明确 SFT 功能目前处于实验状态Rejection Sampling使用 SGLang 进行过滤然后接 Megatron SFT。仓库中的 slime/rollout/sft_rollout.py、slime/rollout/on_policy_distillation.py 等模块以及 examples 下on_policy_distillation/、fully_async/、retool/、search-r1/、tau-bench/等多样化示例都说明同一套框架可以承载多种后训练范式。无缝连接预训练与在线服务slime 的原生集成打通了预训练 → 后训练 → 在线服务全链路用 Megatron 做预训练 → 切换到 slime同时集成 Megatron 与 SGLang做后训练 → 最后直接用 SGLang 做评估与部署。由于全程不更换推理/训练核心消除了转换 checkpoint 格式、对齐框架间精度这些繁琐且易错的步骤统一的管道省去了大量胶水代码让研究者聚焦于真正的目标——更好的 RL。这一点在仓库中有多处印证slime/backends/megatron_utils/hf_to_megatron 与 slime/backends/megatron_utils/megatron_to_hf 分别负责 HF ↔ Megatron 的权重转换覆盖 qwen、glm、deepseek、llama、minimax、mimo 等主流架构slime/backends/megatron_utils/hf_checkpoint_saver.py 负责把 Megatron 训练结果保存为 HF 格式方便无缝对接 SGLang 部署与社区生态。发展蓝图RL Scaling 的旅程才刚刚开始slime 的后续规划聚焦于三点与 SGLang 团队合作探索大规模 MoE 模型的最优 RL 训练策略支持更广泛的后训练工作流加强预训练到生产的桥梁添加原生 PyTorch 训练后端支持降低入门门槛。从仓库现状看第 3 点已有雏形迹象slime/utils/accelerator 下的base.py、cuda.py、musa.py、torch_accelerator.py抽象了加速器后端为多后端支持预留了接口。快速上手参考若希望在本地尝试 slime可参考 README.md或中文版 README_zh.md完成安装随后通过 scripts/models 下的示例脚本快速启动例如qwen2.5-0.5B.sh、qwen3-30B-A3B.sh、glm4-9B.sh它们展示了如何组合 Megatron 训练参数与--sglang-*推理参数进阶用法可阅读 docs/en 下的get_started/quick_start.md、get_started/usage.md以及advanced/中关于 Megatron/SGLang 配置、PD 分离、容错、低精度等专题文档。结语slime 以一句朴素而坚定的信念开场——我们相信强化学习——并用三个关键词落实它多功能性让研究者自由定义数据生成高性能让 RL 跑得更快更久可维护性让工程债务最小化。通过 SGLang-Native 的推理体验、Megatron 原生的训练体验、Ray 驱动的灵活拓扑以及把 RL 专属优化权重更新、/abort_request回馈上游的协作模式slime 正试图为 RL Scaling 提供一块坚实的基座。特别感谢 AMD GenAI - Foundation Model Team 提供的 Day-1 AMD 硬件支持。【免费下载链接】slimeslime is an LLM post-training framework for RL Scaling.项目地址: https://gitcode.com/GitHub_Trending/slime12/slime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考