名称: miles-rl-training 描述: 提供使用miles进行企业级强化学习训练的指南,miles是slime的生产就绪分支。适用于使用FP8/INT4训练大型混合专家模型、需要训练-推理对齐或需要推测性RL以实现最大吞吐量的场景。 版本: 1.0.0 作者: Orchestra Research 许可证: MIT 标签: [强化学习, MoE, FP8, INT4, 企业级, SGLang, Megatron-LM] 依赖: [sglang-router>=0.2.3, ray, torch>=2.0.0, transformers>=4.40.0]
miles: 用于大规模模型训练的企业级强化学习
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草稿模型实现25%+的rollout加速
- 零拷贝权重同步: CUDA IPC零拷贝映射
- 部分Rollout: 回收半完成的轨迹
训练-推理对齐
- TIS/MIS: 截断/掩码重要性采样用于离策略校正
- 内核级优化: FlashAttention-3、DeepGEMM集成
安装
# 推荐: Docker
docker pull radixark/miles:latest
docker run --rm --gpus all --ipc=host --shm-size=16g \
-it radixark/miles:latest /bin/bash
# 从源代码安装
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训练
使用此工作流训练大型MoE模型,如DeepSeek V3或Qwen3-MoE。
先决条件检查清单
- [ ] 支持FP8的H100/H200 GPU
- [ ] MoE模型(如DeepSeek V3、Qwen3-MoE)
- [ ] 安装miles的Docker环境
步骤1: 环境设置
# FP8块缩放(推荐用于稳定性)
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训练
使用此工作流实现最大rollout吞吐量,通过EAGLE推测解码。
推测性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分布检查点。在从HuggingFace转换检查点时添加 --mtp-num-layers 1。
预期加速
- 标准rollout: 基线
- 推测性RL: 25-40%更快的rollout
- 带部分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专家并行
推测解码(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采样和训练,消除量化导致的RL崩溃在MoE模型中。
Rollout Routing Replay (R3)
记录SGLang推理期间的专家路由决策,并在Megatron训练期间重放以实现位级专家对齐。
R3如何工作:
- 在SGLang推理期间,记录专家路由决策
- 路由决策存储在
sample.rollout_routed_experts中 - 在Megatron训练期间,重放路由而不是重新计算
- 确保训练和推理间一致的专家选择
INT4量化感知训练
启用单机部署1TB+模型(例如,在H200上)。
INT4内存节省:
| 模型大小 | BF16 VRAM | INT4 VRAM | 减少 |
|---|---|---|---|
| 70B | 140GB | 45GB | 3.1x |
| 235B | 470GB | 150GB | 3.1x |
| 671B | 1.3TB | 420GB | 3.1x |
训练-推理对齐
miles通过以下方式实现训练和推理间“零KL散度”:
- 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]] # 用于R3的MoE路由
完整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概率匹配
- 为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