mcpField
M
miles-rl-training

miles-rl-training

github.com/orchestra-research开发14.1k954 次安装19 周前更新
代码仓库

关于 miles-rl-training

miles 是用于大规模模型后训练的 RL 框架,面向训练 MoE 等大型模型的团队。它结合低精度训练、路由重放和推测式 RL,处理训练稳定性与训练、推理对齐问题。

主要功能

  1. 01统一的 FP8 训练与推理
  2. 02INT4 量化感知训练
  3. 03用于专家对齐的 MoE 路由重放
  4. 04在线草稿模型训练与推测式 RL
  5. 05部分 rollout 与零拷贝权重同步

适用场景

  1. 01后训练大型 MoE 模型
  2. 02使用 FP8 或 INT4 量化进行训练
  3. 03通过推测解码缩短 rollout 时间

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/orchestra-research/ai-research-skills --skill miles-rl-training

安装后在 Claude Code 中输入/miles-rl-training确认已加载。

附带文件references/api-reference.mdreferences/troubleshooting.md

详细介绍

miles:面向大规模模型训练的企业级 RL

miles 是一个高性能、可用于企业生产环境的 RL 框架,针对大规模模型后训练进行了优化。它基于 slime 的生产分支构建,解决了 MoE 训练稳定性、低精度训练和训练与推理对齐方面的关键挑战。

何时使用 miles

在以下情况下选择 miles:

  • 训练 1TB 以上的 MoE 模型(DeepSeek V3、Qwen3-MoE)
  • 进行 FP8 或 INT4 量化感知训练
  • 实现逐位一致的训练与推理对齐
  • 通过推测式 RL 实现最高吞吐量
  • 需要生产环境稳定性和企业支持

在以下情况下考虑其他方案:

  • 想使用面向研究的原始版本 → 使用 slime
  • 需要灵活切换后端 → 使用 verl
  • 想使用 PyTorch 原生抽象 → 使用 torchforge

主要功能

低精度训练
  • 统一 FP8:推理和训练均采用端到端 FP8
  • INT4 QAT:在单机显存(H200)上训练 1TB 模型
  • Rollout Routing Replay (R3):实现 MoE 专家逐位对齐
性能优化
  • 推测式 RL:通过在线 SFT 草稿模型提升 25% 以上的 rollout 速度
  • 零拷贝权重同步:CUDA IPC 零拷贝映射
  • 部分 Rollout:回收尚未完成的轨迹
训练与推理对齐
  • TIS/MIS:用于离策略校正的截断/掩码重要性采样
  • 内核级优化:集成 FlashAttention-3、DeepGEMM

安装

# Recommended: Docker
docker pull radixark/miles:latest
docker run --rm --gpus all --ipc=host --shm-size=16g \
  -it radixark/miles:latest /bin/bash

# From source
git clone https://github.com/radixark/miles.git
cd miles
pip install -r requirements.txt
pip install -e .

快速开始

miles 继承了 slime 的配置系统。基本训练:

python train.py \
    --advantage-estimator grpo \
    --model-name qwen3-30b-a3b \
    --hf-checkpoint /path/to/qwen3-30b-a3b-hf \
    --rollout-batch-size 512 \
    --n-samples-per-prompt 8

工作流 1:大型 MoE 训练

使用此工作流训练 DeepSeek V3 或 Qwen3-MoE 等大型 MoE 模型。

前置条件检查清单
  • 支持 FP8 的 H100/H200 GPU
  • MoE 模型(DeepSeek V3、Qwen3-MoE)
  • 配有 miles 的 Docker 环境
步骤 1:环境设置
# FP8 block scaling (recommended for stability)
export NVTE_FP8_BLOCK_SCALING_FP32_SCALES=1
export CUDA_DEVICE_MAX_CONNECTIONS=1
步骤 2:配置训练
python train.py \
    --actor-num-gpus-per-node 8 \
    --rollout-num-gpus 8 \
    --hf-checkpoint /path/to/deepseek-v3 \
    --advantage-estimator grpo \
    --tensor-model-parallel-size 8 \
    --expert-model-parallel-size 4 \
    --prompt-data /path/to/data.jsonl \
    --num-rollout 3000
验证检查清单
  • 模型加载无错误
  • 路由决策保持一致
  • 损失值中没有 NaN/Inf

工作流 2:推测式 RL 训练

使用此工作流,通过 EAGLE 推测解码实现最高 rollout 吞吐量。

推测式 RL 的工作原理
  1. 小型草稿模型生成候选词元
  2. 目标模型并行验证
  3. 通过在线 SFT 更新草稿模型,使其跟踪策略
步骤 1:启用推测解码

miles 通过 SGLang 支持 EAGLE 推测解码:

python train.py \
    --actor-num-gpus-per-node 8 \
    --hf-checkpoint /path/to/target-model \
    --sglang-speculative-algorithm EAGLE \
    --sglang-speculative-num-steps 3 \
    --sglang-speculative-eagle-topk 1 \
    --sglang-speculative-num-draft-tokens 4 \
    --sglang-speculative-draft-model-path /path/to/draft-model \
    --advantage-estimator grpo \
    --prompt-data /path/to/data.jsonl
步骤 2:启用在线 MTP 训练(可选)

在训练期间对草稿模型进行在线 SFT:

--mtp-num-layers 1 \
--enable-mtp-training \
--mtp-loss-scaling-factor 0.2

注意:在线 MTP 训练需要包含 MTP 权重的 torch dist 检查点。从 HuggingFace 转换检查点时,添加 --mtp-num-layers 1。

预期加速效果
  • 标准 rollout:基准速度
  • 推测式 RL:rollout 速度提升 25-40%
  • 启用部分 rollout:额外提升 10-15% 的吞吐量

配置参考

miles 继承了 slime 的全部参数。完整列表请参阅 slime API 参考。

集群资源(来自 slime)
--actor-num-nodes 1
--actor-num-gpus-per-node 8
--rollout-num-gpus 8
--rollout-num-gpus-per-engine 2
--colocate
Megatron 并行策略(来自 slime)
--tensor-model-parallel-size 8
--pipeline-model-parallel-size 2
--expert-model-parallel-size 4    # MoE expert parallelism
推测解码(miles 专属)
--sglang-speculative-algorithm EAGLE
--sglang-speculative-num-steps 3
--sglang-speculative-eagle-topk 1
--sglang-speculative-num-draft-tokens 4
--sglang-enable-draft-weights-cpu-backup
--sglang-speculative-draft-model-path /your/draft/model/path
在线 MTP 训练(miles 专属)
--mtp-num-layers 1
--enable-mtp-training
--mtp-loss-scaling-factor 0.2

主要功能(概念说明)

以下功能在 miles 中有文档说明,但具体 CLI 标志可能有所不同。请查阅 miles 仓库以获取最新配置。

统一 FP8 流水线

端到端 FP8 采样和训练,可消除量化导致的差异,避免 MoE 模型中的 RL 崩溃。

Rollout Routing Replay (R3)

在 SGLang 推理期间记录专家路由决策,并在 Megatron 训练期间重放,实现专家逐位对齐。

R3 的工作原理:

  1. 在 SGLang 推理期间记录专家路由决策
  2. 将路由决策存储在 sample.rollout_routed_experts 中
  3. 在 Megatron 训练期间重放路由,而非重新计算
  4. 确保训练与推理期间选择的专家完全一致
INT4 量化感知训练

支持在单机上部署 1TB 以上的模型(例如在 H200 上)。

INT4 带来的内存节省:

模型大小BF16 显存INT4 显存缩减比例
70B140GB45GB3.1x
235B470GB150GB3.1x
671B1.3TB420GB3.1x
训练与推理对齐

miles 通过以下方式实现训练与推理之间“KL 散度精确为 0”:

  • Flash Attention 3
  • DeepGEMM
  • Thinking Machines Lab 提供的批次不变内核
  • torch.compile 集成

示例数据结构

miles 使用与 slime 相同的 Sample 数据类,并通过 rollout_routed_experts 字段重放 MoE 路由:

@dataclass
class Sample:
    prompt: str | list[dict]
    tokens: list[int]
    response: str
    reward: float | dict
    loss_mask: list[int]
    status: Status
    metadata: dict
    rollout_log_probs: list[float]
    rollout_routed_experts: list[list[int]]  # MoE routing for R3

完整的 Sample 定义请参阅 slime API 参考。


常见问题与解决方案

问题:FP8 训练崩溃

症状:损失暴涨,出现 NaN 值

解决方案:

  • 使用分块缩放:export NVTE_FP8_BLOCK_SCALING_FP32_SCALES=1
  • 降低学习率:--lr 5e-7
  • 确保训练和推理之间的 MoE 路由一致
问题:推测解码草稿漂移

症状:接受率随时间降低

解决方案:

  • 启用在线 MTP 训练,使草稿模型保持对齐
  • 减少推测步数:--sglang-speculative-num-steps 2
  • 使用 CPU 备份:--sglang-enable-draft-weights-cpu-backup
问题:训练与推理不匹配

症状:策略发生偏离,奖励崩溃

解决方案:

  • 使用 TIS 进行离策略校正:--use-tis --tis-threshold 0.9
  • 验证 SGLang 和 Megatron 之间的 log probs 是否匹配
  • 为 MoE 模型启用 R3

支持的模型

系列模型MoE 支持
DeepSeekR1、V3、V3.2完整
Qwen2、2.5、3(包括 MoE)完整
Llama3、3.1、3.3、4仅支持稠密模型
Gemma2、3、3N仅支持稠密模型
GLM4.5、4.6、4.7仅支持稠密模型
MiniMaxM2、M2.1完整

资源

评论

支持 Markdown