关于 miles-rl-training
miles 是用于大规模模型后训练的 RL 框架,面向训练 MoE 等大型模型的团队。它结合低精度训练、路由重放和推测式 RL,处理训练稳定性与训练、推理对齐问题。
主要功能
- 01统一的 FP8 训练与推理
- 02INT4 量化感知训练
- 03用于专家对齐的 MoE 路由重放
- 04在线草稿模型训练与推测式 RL
- 05部分 rollout 与零拷贝权重同步
适用场景
- 01后训练大型 MoE 模型
- 02使用 FP8 或 INT4 量化进行训练
- 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 的工作原理
- 小型草稿模型生成候选词元
- 目标模型并行验证
- 通过在线 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 的工作原理:
- 在 SGLang 推理期间记录专家路由决策
- 将路由决策存储在
sample.rollout_routed_experts中 - 在 Megatron 训练期间重放路由,而非重新计算
- 确保训练与推理期间选择的专家完全一致
INT4 量化感知训练
支持在单机上部署 1TB 以上的模型(例如在 H200 上)。
INT4 带来的内存节省:
| 模型大小 | BF16 显存 | INT4 显存 | 缩减比例 |
|---|---|---|---|
| 70B | 140GB | 45GB | 3.1x |
| 235B | 470GB | 150GB | 3.1x |
| 671B | 1.3TB | 420GB | 3.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 支持 |
|---|---|---|
| DeepSeek | R1、V3、V3.2 | 完整 |
| Qwen | 2、2.5、3(包括 MoE) | 完整 |
| Llama | 3、3.1、3.3、4 | 仅支持稠密模型 |
| Gemma | 2、3、3N | 仅支持稠密模型 |
| GLM | 4.5、4.6、4.7 | 仅支持稠密模型 |
| MiniMax | M2、M2.1 | 完整 |