Rollout Dump Mock 使用指南
概述
Rollout Dump Mock是ROLL框架提供的强大调试工具,用于消除RL训练中rollout阶段的随机性,实现数值级精度对齐验证。它通过保存和回放rollout数据,帮助开发者快速验证计算优化的正确性。
核心价值
- 消除随机性:实现数值级精度对齐验证
- 快速迭代:Mock模式下跳过昂贵的环境rollout
- 可复现调试:捕获问题rollout数据,反复调试
- 架构透明:在Scheduler层实现,对Pipeline完全无感知
适用场景
| 场景 | 说明 |
|---|---|
| 计算优化验证 | 验证dynamic_batching、sequence_packing等优化的数值一致性 |
| 模型并行验证 | 验证TP、PP、EP等并行策略的精度对齐 |
| 回归测试 | CI/CD中自动化精度测试 |
快速开始
典型工作流
[1. Dump模式] → [2. 修改代码] → [3. Mock模式] → [4. 精度验证]
↓ ↓ ↓ ↓
捕获基准数据 优化计算逻辑 确定性回放 数值对比
Step 1: Dump模式 - 捕获基准数据
在修改代码前,先捕获正确的rollout数据作为基准。
配置文件 (agentic_sokoban_rollout_mock_dump.yaml):
exp_name: "sokoban_precision_test_dump"
max_steps: 50
# Rollout Mock Configuration - DUMP MODE
rollout_mock:
enable: true
mode: dump
dump_dir: ./output/rollout_dumps/baseline_v1
# 用于确定性执行的环境变量
system_envs:
NCCL_ALGO: Ring
NVTE_ALLOW_NONDETERMINISTIC_ALGO: '0'
CUBLAS_WORKSPACE_CONFIG: ':4096:8'
DETERMINISTIC_MODE: '1'
# ... 其他配置 ...
命令:
python examples/start_agentic_pipeline.py \
--config_name agentic_sokoban_rollout_mock_dump \
--config_path examples/qwen2.5-0.5B-agentic
输出:
./output/rollout_dumps/baseline_v1/
└── train/
├── step_000000.pkl (~5MB)
├── step_000001.pkl
├── step_000002.pkl
├── ...
└── step_000049.pkl
日志示例:
[Rollout Mock] Rollout Mock enabled: mode=dump, dir=./output/rollout_dumps/baseline_v1
[Rollout Mock] Dumped step 0: ./output/rollout_dumps/baseline_v1/train/step_000000.pkl (samples=128, size=4.82MB)
[Rollout Mock] Dumped step 1: ./output/rollout_dumps/baseline_v1/train/step_000001.pkl (samples=128, size=4.85MB)
Step 2: 修改代码
实现你的计算优化,例如:
- 添加dynamic_batching
- 实现sequence_packing
- 迁移到新的并行策略
Step 3: Mock模式 - 确定性回放
使用预录制的rollout数据,验证修改后的代码是否保持数值一致性。
配置文件 (agentic_sokoban_rollout_mock_mock.yaml):
exp_name: "sokoban_precision_test_mock"
max_steps: 50
# Rollout Mock Configuration - MOCK MODE
rollout_mock:
enable: true
mode: mock
dump_dir: ./output/rollout_dumps/baseline_v1 # 与dump模式相同路径
# 用于确定性执行的环境变量(保持与dump模式一致)
system_envs:
NCCL_ALGO: Ring
NVTE_ALLOW_NONDETERMINISTIC_ALGO: '0'
CUBLAS_WORKSPACE_CONFIG: ':4096:8'
DETERMINISTIC_MODE: '1'
# ... 其他配置(保持与dump模式一致)...
命令:
python examples/start_agentic_pipeline.py \
--config_name agentic_sokoban_rollout_mock_mock \
--config_path examples/qwen2.5-0.5B-agentic
行为:
- ✅ 直接从磁盘加载每步的DataProto
- ✅ 后续所有计算(advantages, losses, gradients)完全确定
日志示例:
[Rollout Mock] Rollout Mock enabled: mode=mock, dir=./output/rollout_dumps/baseline_v1
[Rollout Mock] Loaded step 0: ./output/rollout_dumps/baseline_v1/train/step_000000.pkl (samples=128)
[Rollout Mock] Loaded step 1: ./output/rollout_dumps/baseline_v1/train/step_000001.pkl (samples=128)
Step 4: 数值精度验证
对比baseline和优化版本的训练指标,确保数值完全一致。可以通过查看日志中的关键指标(如pg_loss、total_loss、value_loss、approx_kl、grad_norm等)来验证两次运行的结果是否一致。
配置参数
配置Schema
在你的YAML配置文件中添加 rollout_mock 段:
rollout_mock:
enable: bool # 启用rollout dump/mock机制
mode: "dump" | "mock" # dump: 保存数据, mock: 加载数据
dump_dir: str # 数据存储目录
配置示例
Dump模式配置:
rollout_mock:
enable: true
mode: dump
dump_dir: ./rollout_dumps/precision_test_v1
Mock模式配置:
rollout_mock:
enable: true
mode: mock
dump_dir: ./rollout_dumps/precision_test_v1 # 与dump模式相同路径