0x00 概要

Miles 将 Slime 的"研究级 RL 框架"升级为"Agentic-first 的企业级生产系统",核心创新在于用 Session/TITO 解决多轮 tokenization 正确性,用全异步 + staleness 解决性能,用 R3 + True On-Policy 解决稳定性。

Miles 的技术特色总结如下:

特色核心理念实现
Agentic-FirstAgent 开发像写普通应用Session Server + TITO + agentic_tool_call
正确性优先消除所有训推不一致源R3 + FP8 统一 + True On-Policy + TIS/MIS
性能极致GPU 永不空闲全异步 + 投机解码 + 零拷贝 + 部分 rollout
渐进式保证从宽松到严格可选Staleness(宽) → TIS(中) → True On-Policy(严)
工程纪律静默错误 → 显式断言Chat template 验证 + 运行时 prefix 校验
插件化扩展新模型零改核心代码miles_plugins/ + middleware_hub
Multi-Agent从轻量到生产级内置示例 → MrlX 完整框架

下图可以看到Miles的工作:

Miles 的工作 = 利用Slime扩展点
                + 底层内核 / 精度改造        ◄─── 非扩展点
                + RDMA 权重同步基础设施      ◄─── 非扩展点
                + 训练后端深度改造 (FSDP/CP) ◄─── 非扩展点
                + Chat Template 正确性工程  ◄─── 非扩展点
                + 可观测性 / 调试系统        ◄─── 非扩展点
                + 20+ 场景示例生态          ◄─── 非扩展点
                + ......

注:在本文撰写时,朱小霖大神 已经发布了最新版本 slime v0.3.0: 面向 Agent 时代 ,因此,本文涉及的 slime 都是旧版本的表现,不代表 slime 的最新能力。

另:因为本文为从源码反推涉及,且编写仓促,所以肯定有错误,还请读者不吝指出,谢谢。

0x01 基础

1.1 Agentic RL 的需求与难点

在传统 RLHF 中,模型根据一个 prompt 生成一段回答,reward model 对该回答打分,完成一轮训练。

而在 Agentic RL 场景下,Agent(LLM)在一个有状态的环境中通过多轮交互来完成任务——调用工具、搜索信息、执行代码、与外部 API 交互。模型需要从交互的最终结果(而非中间回答的评分)中学习。

1.1.1 传统 RLHF vs Agentic RL 范式对比

以下数值不是精确值。

维度传统 RLHF(单轮)Agentic RL(多轮)
交互轮次1 轮10-50+ 轮
序列长度<4K tokens8K-64K+ tokens
单次 Rollout 时长<10s60-600s
Token 归属全部归模型混合:model token (loss_mask=1) + env token (loss_mask=0)
环境依赖强依赖外部环境(Docker/API/沙箱)
失败模式超时/环境崩溃/格式错误/上下文满/沙箱死亡
Reward 来源固定 Reward Model环境结果(test pass, task complete)
Credit Assignment短序列,信号直接长序列,Reward 在末尾
Off-policy 风险高(生成慢,模型可能已更新多次)
1.1.2 核心难点

Agentic RL 的需要是:框架可以处理 推理编排、长程训练、外部环境和工程维护方式等功能,其核心难点具体举例如下:

难点具体表现影响
多轮状态管理50 轮 × 200 token = 10K+ token 需要在 session server 中累积追踪内存和 tokenization 一致性压力
Token 混合属性env token(工具返回/用户输入)mask=0,model token mask=1;错标一个 = 梯度噪声一个 token 错标 → 该样本梯度方向偏移
Tokenization 一致性Jinja loop.last 导致 10% prefix 变化,首轮 tokenization 被后续轮覆盖10% token 不一致 → 训练数据质量下降
训推不一致 (log prob)推理用 SGLang(FP8/int4),训练用 Megatron(BF16),log prob 不一致KL 估计失真 → 优势函数偏差
MoE 路由翻转~5-15% token 在训练和推理时路由到不同 expert;精度差异导致 expert 选择不同 → 梯度计算在错误 expert 上前向 log prob 和反向梯度路径不一致 → 训练崩溃
长尾延迟一个慢 Agent 会话阻塞整个 batch,GPU 利用率暴跌GPU 利用率断崖下降
On-Policy 过期120s 推理窗口内模型已更新 2-3 步,但 rollout 仍使用旧模型权重重要性采样权重偏离
Credit Assignment50 轮后 reward=1,不知道哪步贡献最大策略梯度信号极稀疏
异构 Agent 协同不同 agent 用不同模型、不同训练循环、消息队列通信数据结构不统一、reward 非对称
规模可扩展性1TB+ MoE 模型数十 GB 参数同步RDMA 带宽成为瓶颈

1.2 系统架构

Miles fork 自 slime,继承其核心的 RL 流水线架构:

mile-1-1

Miles 的系统架构如下:

mile-1-2

1.3 组件边界说明

Miles 由多个可独立启停的进程/服务组成,以下标准明各组件的职责边界:

组件职责何时需要
SGLang Engine模型推理( rollout 生成),每个实例管理一组 GPU始终需要(无推理则无 rollout)
SGLang Router (sglang_router)Round-robin / cache-aware 推理请求路由多 GPU 推理(默认搭配 SGLang engine)
Miles Router (miles/router/)最少连接负载均衡 + 健康检查 + 故障隔离 + radix tree 缓存中间件高级路由需求:--use-miles-router + --miles-router-middleware-paths
Session Server多轮会话管理 + TITO 增量 tokenization + OpenAI 格式代理Agentic RL(多轮交互):--use-session-server
Megatron Actor分布式训练(前向/反向/optimizer step)始终需要(--train-backend megatron,默认)
FSDP Actor分布式训练(实验性后端)--train-backend fsdp(小规模/非 MoE 模型)
Ray分布式进程编排、Placement Group、Actor 生命周期始终需要(框架基础设施)
mooncake TransferEngineRDMA 零拷贝权重传输P2P 模式(默认,--update-weight-transfer-mode p2p

1.4 数据流

miles 的 6 步完整流程如下:

1.4.1 步骤 1:Prompt 输入

路径

JSONL 文件 → Dataset 加载 → tokenizer/processor 预处理
→ RolloutDataSource.get_samples(batch_size)
→ 每个 prompt 复制 n_samples_per_prompt 份 → list[list[Sample]]

每个 Sample 的初始字段:— prompttokensresponseresponse_lengthloss_maskrollout_log_probsrollout_routed_expertsrewardstatusmetadata 等。

1.4.2 步骤 2:Agent 交互(多轮场景)

路径

Sample → generate(Sample) 
    → OpenAIEndpointTracer.create() → POST /sessions → session_id
    → custom_agent_function(base_url, prompt, kwargs, metadata)
    → Agent 内部多次 POST /sessions/{id}/v1/chat/completions
    → Session Server 代理到 SGLang Router → SGLang Engine 推理
    → collect_records() → GET /sessions/{id}
    → compute_samples_from_openai_records() → TITO trailing token trim
    → list[Sample] (每轮一个)
    → merge_samples() / 保持多轮
1.4.3 步骤 3:训练数据转换

路径_convert_samples_to_train_data()

Sample[] → {
    "tokens": [...],            # prompt + response 完整 token
    "response_lengths": [...],  # 每样本 response 长度
    "rewards": [...],           # 归一化后的奖励
    "raw_reward": [...],        # 原始奖励
    "loss_masks": [...],        # 每 token 是否参与 loss
    "truncated": [...],         # 是否被截断
    "rollout_log_probs": [...], # SGLang 推理时的 log prob(用于 TIS)
    "rollout_routed_experts": [...],  # R3 路由数据
    "weight_versions": [...],   # 推理时的权重版本(用于 staleness 检测)
}
1.4.4 步骤 4:训练

路径train_actor()

rollout_data → get_data_iterator() → micro-batches
    → [if R3] _fill_replay_data() → 解析 routed_experts 到 Replay 对象
    → [if KL] _switch_model("ref") → compute_log_prob(ref_log_probs)
    → _switch_model("actor") → compute_log_prob(log_probs)
    → compute_advantages_and_returns() → GRPO/PPO/REINFORCE++
    → train() → Megatron 前向 + 反向 + optimizer step

优势函数计算的核心逻辑见,支持 6 种优势估计器

估计器机制
GRPO组内 reward 减去均值 + 可选 std 归一化
GSPO组内 reward 归一化 + 序列级 KL 约束
PPOGAE + value function clipping
REINFORCE++逐 token 折扣累积 reward
REINFORCE++ Baseline同上 + baseline 减方差
On-Policy Distillationteacher - student log prob 差
1.4.5 步骤 5:权重同步

路径:[actor.py] → [mixin.py] → [p2p.py]

Megatron GPU params
    → TP all_gather (收集 tensor parallel 分片)
    → EP all_gather (收集 expert parallel 分片)
    → Megatron→HF 格式转换
    → ParameterMapper.map() (HF name → SGLang name)
    → load_weights() → shared CPU buffer
    → mooncake RDMA write → SGLang GPU memory
    → post_load_weights() (FP8 重量化)
    → weight_version++
1.4.6 步骤 6:循环(全异步变体)

路径:[train_async.py]

rollout_data_next = generate(rollout_id + 1)   ← 提前启动
rollout_data_curr = await rollout_data_next    ← 等待本次
train(rollout_id, rollout_data_curr)           ← 训练与下次 rollout 重叠

0x02 从 Slime 说起

在 Slime 基础上,Miles 将 Slime 的 "支持 Agentic"升级为 "Agentic-first",提供开箱即用的 Agent 训练工具链。

维度SlimeMiles (fork)
设计初衷通用 LLM RL 后训练框架企业级大规模 Agentic RL
Agentic 支持通过异步解耦架构支持继承 + 增强 (多智能体 MrlX)
核心用户GLM 系列模型训练更广泛的企业场景

2.1 Slime 的职责定位

Slime 是 "分布式 RL/LLM 训练底座" - 负责把 Ray + Megatron + SGLang 组织成可训练、可 rollout、可评估的闭环系统。Slime 的核心职责不是定义具体 agent 玩法,而是提供:

  • 训练主循环 (train.pytrain_async.py): rollout -> train -> save -> eval -> update weights
  • Ray 资源编排 (Placement Group, Train Actor, Rollout Manager 生命周期)
  • Megatron 训练后端 (模型初始化, train/save, loss/value/log prob 计算)
  • SGLang rollout 基础设施 (启动推理引擎, router, generate/eval, 健康检查)
  • 插件 / 扩展点 (25+ 个 --xxx-path 动态导入接口)

Slime 不负责:复杂 agent/session/tool/多轮语义、训推精确一致性治理、多后端。

2.2 Slime 端到端做了什么

在 train.py 里,Slime 负责完整训练编排:

分配 GPU -> 启动 rollout manager -> 创建 actor/critic -> 每轮:generate rollout -> train -> save -> eval -> update rollout weights 

在 rollout 层面:

  • 启动 / 恢复 SGLang engine
  • Router 地址与端口管理
  • Offload/onload
  • 健康监控
  • 多 server group 组织

在训练后端:

  • Megatron 初始化
  • Tokenizer/config 加载
  • Model/optimizer/scheduler 初始化
  • Rollout 数据转训练 batch
  • Policy/value/log prob/loss 计算
  • Actor -> rollout 权重同步

2.3 Slime 的扩展点体系

Slime 明确把以下内容(举例)设计成可插拔,这样开发者可以定制:

类别扩展点机制
Rollout--rollout-function-path / --custom-generate-function-path / --eval-function-pathimport path
数据--data-source-path / --buffer-filter-pathimport path
过滤--dynamic-sampling-filter-path / --rollout-sample-filter-pathimport path
Reward--custom-rm-path / --custom-reward-post-process-pathimport path
Loss--custom-loss-function-path / --custom-tis-function-path / --custom-pg-loss-reducer-function-pathimport path
训练--custom-convert-samples-to-train-data-path / --custom-advantage-function-pathimport path
Megatron Hooks--custom-megatron-init-path / before-log-prob-hook / before-train-step-hookimport path
模型args.spec / @register_model / @MegatronModelBridge.register_bridgeimport + 注册
日志--custom-rollout-log-function-path / --custom-eval-rollout-log-function-pathimport path
ABCDataSource / TrainRayActor / HfWeightIteratorBase / HuggingfaceAttention继承

0x03 Miles 的升级

Miles 将 Slime 的"研究级 RL 框架"升级为"Agentic-first 的企业级生产系统",核心创新在于用 Session/TITO 解决多轮 tokenization 正确性,用全异步 + staleness 解决性能,用 R3 + True On-Policy(当前支持 dense 模型)解决稳定性。

3.1 升级思路 --- 三层利用策略

虽然 Slime 提供了扩展点,但是 Miles 并没有简单的利用扩展点,而是“利用扩展点 + 新增架构层 + 深度改造核心” 三者并行。具体可以分为三层:

  • Layer C: 新增架构层 (Miles 独创) Session Server / TITO / Miles Router / Agent Hook → Slime 完全没有预见
  • Layer B: 深度改造 (修改 Slime 核心 + 扩展点) 改默认 rollout/data-source / 删 advantage hook 类 / 优化 rollout 合约 / bridge 路径切换
  • Layer A: 直接利用扩展点 (Slime 设计的 path hooks) custom-generate / custom-rm / dynamic-filter , Miles 用户进一步通过这些接口接入自己的逻辑

3.2 分工边界

Slime 做 "能跑起来",Miles 做 "跑得正确 + 跑得快 + 跑复杂场景"。因此,两者分工边界如下:

维度Slime 负责Miles 负责
训练主循环基本闭环 (同步/异步骨架)异步化增强 / AsyncRolloutWorker / Staleness
Ray 编排PG / Actor Group / Rollout Manager在上面加 runtime 语义,不改编排层
Rollout单次 generate + eval + 基础 routerSession 多轮 + tool call + agent loop + 统一编排
训练后端Megatron onlyMegatron 增强 + FSDP + 跨后端公共抽象
权重同步基础 HTTP 传输broadcast + P2P RDMA + 多并行布局
MoE 支持基础+ R3 路由重放, 解决训推不一致
算法一致性无系统治理频谱:Staleness -> TIS -> R3 -> True On-Policy
Token 正确性无验证TITO + template 验证 + append-only 校验
可观测性基础 logging4 后端 Tracking + debug dump + profiling
模型生态GLM 为主的支持10+ 模型族 bridge + megatron_bridge patch

3.3 Miles工作全景

下表为Miles工作全景,对于主要工作领域进行分类,看看属于三层中哪一层。其中:

  • Layer A. 利用扩展点:通过 Slime 预设的 --xxx-path 接口注入实现
  • Layer B. 新增架构层:Slime 完全没有的模块,Miles 从零建设
  • Layer C. 深度改造/修改核心:对 Slime 原有代码的深度改造 / 重写
工作领域Layer A. 利用扩展点Layer B. 新增架构层Layer C. 深度改造/修改核心
① Rollout 生成agentic_tool_call/multi_turn/single_turngenerate_utils/ (token对齐/loss_mask/prefill log prob)inference_rollout/ 重构调度架构
② Session & 多轮-Session Server / Linear Trajectory / TITO / Template 验证 / --custom-agent-function-path-
③ Reward 体系8+ 内置 RMrm_hub/ 异步框架-
④ 样本过滤check_reward_nonzero_std / check_no_abortedfilter_hub/ 协议抽象-
⑤ 数据源RolloutDataSourceWithBuffer-默认数据源切换
⑥ 训练 Loss保留 loss/tis 扩展点training_utils/loss.py 跨后端公共层Loss 重构 (TIS/OPD/true-on-policy/CP)
⑦ 训练一致性-True On-Policy 契约 / FP8 统一内核训练侧可直接用 rollout log prob
⑧ MoE 路由--R3 路由重放注入 MoE 层
⑨ 权重同步-P2P RDMA 零拷贝多并行布局支持 + broadcast 增强
⑩ Router & 中间件-Miles Router / RadixTree 中间件-
⑪ 训练后端args.spec 保留FSDB 后端 / training_utils/ 抽象Megatron actor 增强 (LoRA/CP/P2P/debug)
⑫ SGLang 集成-sglang_utils/ 引擎管理rollout 启动改造
⑬ 模型插件10+ 模型 bridgemegatron_bridge/ Core patchbridge 加载路径切换
⑭ 可观测性保留 log 扩展点Tracking 4 后端 / Debug EngineTracking 生命周期改造
⑮ 训练主循环--全异步 / Staleness 过滤 / AsyncRolloutWorker
⑯ 参数系统-200+ 新参数 / 插件自注册 args删除 advantage hook; 默认值调整

具体统计

改造方式涉及领域数工作量占比
A. 利用扩展点(Layer A)5~15%
B. 新增架构层(Layer B)12~45%
C. 修改核心(Layer C)10~40%
Logo

免费领 150 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐