关于 miles-rl-training
miles 是面向大规模模型后训练的 RL 框架,适用于训练 MoE 等大型模型的团队。它侧重低精度训练、提升 rollout 吞吐量,以及训练与推理对齐。
主要功能
- 01统一的 FP8 训练与推理
- 02INT4 量化感知训练
- 03用于对齐的 MoE 路由回放
- 04推测式 RL 与部分 rollout
- 05训练推理离策略校正
适用场景
- 01大型 MoE 模型后训练
- 02使用 FP8 或 INT4 量化训练
- 03通过推测式 RL 提升 rollout 吞吐量
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ kalarislabs/ research-agent-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:在单机 VRAM(H200)上训练 1TB 模型
- Rollout Routing Replay(R3):实现 MoE 专家逐位对齐
性能优化
- 推测式 RL:借助在线 SFT 草稿模型,rollout 速度提升 25% 以上
- 零拷贝权重同步:采用 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 的工作原理
- 小型草稿模型生成候选 token
- 目标模型并行验证
- 通过在线 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 Reference。
集群资源(来自 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 之间的对数概率是否匹配
- 为 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 | 完整 |
资源
- GitHub:https://github.com/radixark/miles
- 介绍博客:https://lmsys.org/blog/2025-11-19-miles/
- Slime(上游):https://github.com/THUDM/slime
- SGLang:https://github.com/sgl-project/sglang
相关技能
tensorrt-llm:使用 NVIDIA TensorRT 优化 LLM 推理,以实现最高吞吐量和最低延迟。slime-rl-training:提供使用 slime 进行 LLM 强化学习后训练的指南。slime 是一个 Megatron+SGLang 框架。serving-llms-vllm:使用 vLLM 的 PagedAttention 和连续批处理,以高吞吐量提供 LLM 服务。