Miles v0.1: 生产级后训练 (阅读约20分钟)
摘要
Miles v0.1 是一个生产就绪的系统,用于前沿后训练,通过SGLang优化完全异步的强化学习循环和智能体展开。
Miles v0.1 是一个开放系统,用于通过强化学习在初始训练后改进AI代理。例如,一个训练编码代理的团队可以让多个副本在隔离环境中尝试任务,评分哪些尝试成功,将这些结果反馈到训练中,并将更新后的模型分发给工作者,而无需停止整个流水线。Miles 包装了大规模运行该循环所需的rollout、沙箱化、异步训练、重放、模型更新和多硬件组件。
查看缓存全文
缓存时间: 2026/08/19 15:37
# Miles v0.1:生产级后训练系统
来源:https://www.lmsys.org/blog/2026-08-18-miles-v0-1
我们推出 Miles v0.1,这是一个用于前沿模型后训练的全栈生产就绪系统,是我们首个 Miles 版本的后续作品[1](https://www.lmsys.org/blog/2026-08-18-miles-v0-1#ref-1)。Miles 建立在 slime (https://github.com/THUDM/slime) 清晰的设计之上,围绕一个简单的原则——**“处处可验证、可净化、可定制”**——优化了 RL 训练循环的每个阶段。以准确性、效率、可靠性和可扩展性为核心目标,Miles 致力于让前沿规模的 RL 研究对研究人员和开发者都触手可及。在本篇博文里,我们将逐步介绍 Miles。
## Miles RL 训练循环
Miles 中的一个 RL 训练任务是以下阶段的循环:
1. **Rollout(采样生成)**—— SGLang 引擎生成轨迹。在智能体 RL 中,每个多轮会话的采样生成与其独立环境交互,该环境执行动作并产生奖励。
2. **Training(训练)**—— 完成的轨迹组由训练器(NVIDIA Megatron-LM 或 FSDP)消费,计算 RL 损失并更新策略。
3. **Weight update(权重更新)**—— 新权重以最小化对进行中采样生成的干扰的方式同步回采样生成集群。
接下来,我们将逐一探讨循环中的每个环节,重点说明 Miles 如何实现准确、高效、可靠和可扩展。
Miles 全异步 RL 循环
*图 1. Miles 全异步 RL 循环。*
## Rollout(采样生成)
Miles 中的每次采样生成都由 SGLang 产生。基于 SGLang 原生的推理效率,Miles 解锁了完整的智能体训练工作流:多轮会话、工具执行、沙箱环境以及 token 级忠实的轨迹捕获。
### SGLang 实现快速智能体采样生成
Miles 通过原生集成 [SGLang](https://github.com/sgl-project/sglang) 提供快速智能体采样生成,SGLang 为长序列、多轮生成进行了优化。智能体轨迹的长度差异很大,且每个新轮次都复用大部分先前的上下文。默认情况下,Miles 使用 SGLang 路由器,它将一个会话的所有轮次保持在同一个 SGLang 引擎和 DP 层级(如果启用了 DP 注意力)上以复用缓存的前缀,同时将新会话分配给负载最轻的层级,这样少数长轨迹就不会压垮集群的一部分。SGLang 路由器还会预先为长会话预留 KV 缓存容量。这些特性确保了采样生成并发度平衡稳定,并在智能体训练中保持高缓存命中率。
### 全异步 RL
对于长上下文、工具使用和智能体工作负载,采样生成时间主要由少数几个“拖后腿”的任务决定。同步调度会加剧拖后腿问题,因为训练器必须空闲等待批次中最慢的轨迹返回,而采样生成引擎又必须等待优化器完成模型更新。Miles 的[全异步 RL](https://miles.radixark.com/docs/user-guide/fully-async) 通过允许采样生成引擎持续工作来消除这种相互阻塞:采样生成持续进行,而训练器消费已完成的轨迹组并更新模型。双方互不阻塞。
全异步如何处理长尾轨迹
*图 2. 全异步 RL 如何处理长尾轨迹。不同颜色代表不同权重版本;绿色片段代表工具调用时间。*
调度在样本粒度上运行:每个完成的轨迹立即释放一个槽位,尽管轨迹长度差异很大,也能保持生成并发度稳定。完成的轨迹组进入一个有界数据缓冲区,将采样生成吞吐量与训练节拍解耦。这个缓冲区也构成了一个可定制的策略边界,用户可以在不修改调度或执行的情况下决定保留、重试、丢弃或因过时而拒绝哪些样本。
为了实现异步评估,Miles 提供了三种评估模式,其区别在于模型权重的来源。
- **共享引擎评估**使用采样生成集群,并暂时暂停新的提交,适用于无需额外 GPU 的小型调试集。
- **专用评估**使用从检查点快照加载的独立 GPU 集群,允许训练和采样生成不间断进行。
- **外部评估**将检查点目录传递给任何用户提供的评估器,包括非 SGLang 服务。
所有三种模式都将结果与产生该结果的检查点和训练步骤关联起来。如果评估在几步之后完成,Miles 会报告延迟,而不是错误归因;评估失败会跳过该评估点,而不是终止训练。
评估模式时间线
*图 3. 评估模式:共享采样生成引擎会限制生成,而检查点快照将评估交给专用集群或外部服务,无需停止训练。*
### 智能体环境
在智能体 RL 中,大量工作发生在隔离的环境中。例如,训练一个编程智能体意味着为每个任务提供一个独立的沙箱:它运行命令、编辑文件、读取返回结果,最后由测试套件决定任务是否解决。环境负责维持状态、执行动作并运行产生奖励的验证器。Miles 同时运行多个这样的回合,以训练器可学习的形式记录每条轨迹,并将验证器的结果作为奖励传递。
环境通过插件点接入 Miles。Miles 在采样生成堆栈的不同层级提供多个插件点,因此环境可以根据需要接管尽可能多或尽可能少的采样生成功能。我们提供了与现有生态系统的集成,包括 Harbor、HUD、NeMo Gym、OpenEnv 和 Prime Intellect Verifiers。您甚至可以自带环境,通过相同的插件点接入。
沙箱运行在您选择的任何后端上。我们支持多种后端,包括 AgentENV、DAYTONA、E2B 和 Modal。每个回合都获得一个全新的沙箱,构建自该任务自己的镜像,因此回合之间不共享任何内容,运行结束后也不保留任何驻留进程。
Miles v0.1 提供了经过维护的、端到端的智能体编程和终端任务方案。这些方案已在真实硬件上验证,可直接启动运行。
### Token 输入 Token 输出(TITO)
在多轮智能体 RL 中,模型输出在进入下一轮之前,会经过消息解析、工具执行和聊天模板渲染。此过程可能会更改分词、剪枝历史推理或重新序列化工具调用,导致训练器看到的 token 上下文与实际采样生成时使用的不同。
Miles 中的 [TITO](https://miles.radixark.com/docs/user-guide/agentic-rollout) 会话服务器[6](https://www.lmsys.org/blog/2026-08-18-miles-v0-1#ref-6) 保留了模型生成的确切 token ID。在每个新轮次,它仅对新附加的消息进行分词,并与现有前缀合并。这使得完整的轨迹可以组装成一个连续的训练样本,在保留原始采样生成 log 概率的同时,对模型未生成的 token 进行损失掩码。对于每个模型系列,TITO 通过 CPU 往返测试和真实的 SGLang GPU 会话进行验证,确保了 R3、OPD 和 zero-KL 对齐所需的 token 级精确性。
基于 TITO,Miles 正在为 Claude Code 和 Codex 等黑盒智能体工具集开发训练方案。这些工具集在运行时生成子代理并压缩上下文,因此每个任务的轨迹数量是动态且事先未知的。因此,Miles 通过会话服务器记录完整的轨迹树,并在训练侧应用所需于可变批次大小的损失归一化,保持梯度尺度一致。
TITO 会话服务器
*图 4. Token 输入,Token 输出。会话服务器保留了引擎生成的确切 token ID,因此即使工具集是一个不透明的黑盒,训练器看到的也是模型实际生成的 token。*
### 高效采样生成路由重放(R3)
MoE RL 对采样生成和训练之间微小的数值差异非常敏感:一次 top-k 路由翻转会改变 token 计算和接收梯度的专家权重。为解决此问题,Miles 的[采样生成路由重放(R3)](https://miles.radixark.com/docs/advanced/miles-router)在采样生成期间记录 SGLang 的专家路由结果,并在训练期间重放。这种重放在 SGLang 中被高效处理,与正常路由相比只增加了极小的开销。
## Training(训练)
训练器是 RL 的支柱。在 Miles 中,我们提供了众多训练器优化,使 RL 稳定、快速且资源高效。
### 低精度训练
Miles 支持在 NVFP4、MXFP4、MXFP8 和 FP8 格式下进行采样生成;提供 NVFP4、MXFP8 和 FP8 的端到端训练方案;并为大多数模型提供 INT4 量化感知训练(QAT)[3](https://www.lmsys.org/blog/2026-08-18-miles-v0-1#ref-3)。早期的文章详细介绍了 FP8[2](https://www.lmsys.org/blog/2026-08-18-miles-v0-1#ref-2) 和 INT4 QAT[3](https://www.lmsys.org/blog/2026-08-18-miles-v0-1#ref-3) 方案。
在 RL 中捕捉 Blackwell 的低精度吞吐量不仅仅需要交换 GEMM 数据类型:采样生成和训练端的量化必须一致,否则不匹配会在权重更新中累积,导致策略偏差。为此,我们构建了 Blackwell 原生的 MXFP8 和 NVFP4 方案[9](https://www.lmsys.org/blog/2026-08-18-miles-v0-1#ref-9),作为跨堆栈的端到端精度契约:MXFP8 在采样生成、前向传播和两个梯度 GEMM 中运行,并带有硬件级块缩放;NVFP4 对 MoE 专家权重进行逐 token 量化,并配合在线激活缩放以避免批次依赖的量化伪影;一个比特精确的量化器契约确保训练和采样生成内核看到相同的量化值,并带有细粒度标志以将敏感层保持在 BF16。通过 SGLang 和 Megatron-LM 之间低 KL 散度验证了这些方案。所有低精度配置都使奖励曲线紧密跟踪 BF16 基线,同时减少采样生成时间。
### 内存效率与磁盘卸载
在 16 个节点上异步训练一个 7440 亿参数的模型会带来巨大的内存问题。Miles 提供了复杂的大规模运行所依赖的内存优化,首先是优化器:优化器状态可以卸载到 CPU 或节点本地 NVMe,并在每个优化器步骤期间按桶流式传输回来,因此它们无需同时驻留在 GPU 上。在本博文末尾展示的示例中,正是这种 NVMe 优化器状态流式传输使得 GLM-5.2 优化器得以与训练引擎一起适配 32GB GB300 GPU。除了卸载,Miles 还启用了一系列其他 GPU 和 CPU 内存占用减少措施,在示例 GLM-5.2 运行中,每个 GPU 节省了 30GB 以上的 HBM 内存,并在训练器与采样生成引擎共存时,每个节点节省数百 GB 的 CPU 内存。
### 双训练后端
Miles 在一个接口后支持两个训练后端:NVIDIA Megatron-LM 和 PyTorch FSDP。一个启动标志选择哪个后端拥有 GPU 上的模型;后端实现五个方法,此之上的内容无需更改。
- **Megatron-LM** 是默认后端,也是模型方案所依据的后端。它在内部将模型拆分为张量、流水线、上下文、专家和专家张量并行,支持 CPU 和 NVMe 优化器卸载、按桶优化器状态流式传输,以及与并行度无关的检查点,因此布局可以在以后更改而无需重新转换。
- **FSDP** 在 PyTorch FSDP2 下训练模型自身的 HuggingFace 实现。配置和权重直接从 HuggingFace 目录加载,因此无需转换步骤,无需编写架构标志,且并行度仅为数据并行。需要小调整的架构将它们注册为适配规范,而不是分叉模型代码。
## Weight Update(权重更新)
在每个训练步骤中,优化器更新模型权重后,必须将新权重同步到所有采样生成引擎。当训练和采样生成在不同的 GPU 上运行时,权重同步可能成为主要的流水线瓶颈。Miles 为多样的部署设置提供了两条优化路径。通过 [P2P 权重传输](https://miles.radixark.com/docs/advanced/p2p-weight-transfer)[5](https://www.lmsys.org/blog/2026-08-18-miles-v0-1#ref-5),训练层级为每个目标 SGLang 布局重新分片每个权重桶,并仅通过 RDMA 将所需的分片直接写入采样生成层级的内存。这避免了将完整模型广播到每个层级,并使用多个训练层级作为并行发送者。其收益随模型大小和专家并行度增长:对于 Kimi-K2 1T 模型,P2P 将权重更新时间从 53.3 秒减少到 7.2 秒。
对于没有直接 NCCL 或 RDMA 连接的采样生成集群,Miles 支持磁盘增量更新。连续的 RL 步骤通常只改变模型字节的一小部分,因此 Miles 只需发布相对于先前策略版本的增量权重,而不是传输完整的检查点。采样生成引擎在生成继续时应用并验证增量权重,然后仅暂停以将组合权重加载到 SGLang。通常,对于 BF16 采样生成,只有 2% 的参数包含在增量权重中,对于 FP4 采样生成则为 0.5%。在 GLM-4.7-Flash 运行中,这将每次更新的负载从 62.4 GB 减少到 0.69–0.83 GB,同时将生成暂停时间控制在 3–5 秒内。
## 验证过的第 0 天模型支持
Miles 与 SGLang 同步,在前沿模型权重公开的当天就使其可训练。Kimi-K3[13](https://www.lmsys.org/blog/2026-08-18-miles-v0-1#ref-13)、DeepSeek-V4[10](https://www.lmsys.org/blog/2026-08-18-miles-v0-1#ref-10)、Inkling[12](https://www.lmsys.org/blog/2026-08-18-miles-v0-1#ref-12)、Qwen3.8[14](https://www.lmsys.org/blog/2026-08-18-miles-v0-1#ref-14) 和 NVIDIA Nemotron 3 Ultra[11](https://www.lmsys.org/blog/2026-08-18-miles-v0-1#ref-11) 在发布当天都可在 Miles 中训练,这是因为 SGLang 中的推理路径和 Miles 中的 RL 方案是并行提升的,而非一个接一个。第 0 天覆盖也不限于某一个架构系列:它涵盖稠密模型和 MoE 模型、混合注意力机制和多模态输入。第 0 天之后,几乎所有开放的前沿模型都能在 Miles 上运行,包括 DeepSeek-V3.2、Kimi-K2.6、Qwen3.8、GLM-5.2、Gemma-4、GPT-OSS 等。对于每个支持的模型,我们都在 Miles 中提供经过 CI 守护的方案。完整列表可[在此](https://miles.radixark.com/docs/models)找到。
## 其他后训练方案
除了核心的 RL 循环,Miles 是一个通用的后训练平台。上述的采样生成引擎、训练器和权重更新路径是共享组件而非 RL 特有的机制,它们可以组合成其他训练范式:LoRA RL、在线策略蒸馏(OPD)和监督微调(SFT),后者使用相同的训练器但采用 SFT 损失且完全不使用采样生成引擎。本节将介绍 LoRA RL 和 OPD,其中包含了大部分 Miles 特有的工作,并以 Zero-KL 对齐结束,它消除了采样生成和训练之间的数值不匹配,使在线策略数据真正成为在线策略。
### LoRA RL
Miles 支持跨训练、权重同步和 SGLang 采样生成的端到端 [LoRA](https://miles.radixark.com/docs/advanced/lora) 强化学习,适用于 LLM 和扩散模型。基础模型保持冻结并驻留,而 Miles 仅训练和同步适配器,SGLang 在采样生成期间应用最新的适配器。
Miles 支持 LoRA RL。
相似文章
Miles:用于大规模LLM强化学习后训练的PyTorch原生栈(14分钟阅读)
Miles是RadixArk推出的一个开源的PyTorch原生框架,用于大规模LLM强化学习后训练,集成了SGLang、Megatron-LM和Ray,以实现高吞吐量的推演和分布式训练。
@sgl_project:SGLang很荣幸能成为Miles的原生rollout引擎。我们致力于让token持续流转,让GPU保持忙碌状态...
SGLang正式宣布成为Miles v0.1的原生rollout引擎。Miles是一个针对大语言模型与多模态模型的开源强化学习框架,旨在提升大规模强化学习训练中的吞吐量、缓存效率与稳定性。
@MiniMax_AI:祝贺我们的长期合作伙伴SGLang/RadixArk发布Miles v0.1!从M系列到H3和Music 3,我们一直……
RadixArk发布Miles v0.1,这是一个开源强化学习框架,专为大型语言模型和多模态模型设计,旨在简化和扩展强化学习训练。
@PyTorch: 基于PyTorch、Ray、SGLang和NVIDIA Megatron-LM构建,Miles是RadixArk推出的一个用于大规模……的开源框架
Miles是RadixArk推出的一个开源框架,用于大规模LLM强化学习后训练,集成了PyTorch、Ray、SGLang和NVIDIA Megatron-LM,支持MoE、低精度和容错。
@VukRosic99: GLM 5.2 后训练代码已开源 (slime) Megatron-LM 进行训练。SGLang 生成 rollout。单数据缓冲…
GLM 5.2 后训练代码已开源,使用 Megatron-LM 进行训练,SGLang 生成 rollout,形成一个持续强化学习循环,权重同步。