任务信息
- 任务:Task 38 VAGEN-lite(高级,论文复现类,NeurIPS 2025,arXiv:2510.16907)
- 目标:在 Relax 中复现 Sokoban/FrozenLake 多轮视觉交互 RL,支持 PPO/GRPO 与 concat/non-concat 两种训练模式,效果与官方 Lite 实现一致(成功率差 ≤3–5pp)。
- 参考实现:
Relax-Task/VAGEN(基线 commit 2936322)
- 分支:
feat/vagen-lite-sokoban(基于 task38-baseline)
当前进度
✅ 已完成
| 阶段 |
内容 |
验证 |
| Phase 1 环境移植 |
Sokoban/FrozenLake env 迁入 examples/vagen_lite/(parse_response/prompt/seeding/patch_sokoban_env 逐字保留,仅改周边接线:async→sync、reward 走 info、build_env 派发) |
12 单测通过:同 seed 同地图、同动作序列同 state/reward/done |
| Phase 1.5 多轮 harness |
框架外隔离验证整条链路(env reset→VLM 生成→parse→step→下一 obs) |
Qwen2.5-VL-3B 实跑,wm 模式 2 轮解出 Sokoban(reward=1.2) |
| Phase 2 Relax concat rollout |
多轮循环搬进 generate(args,sample,sampling_params)->Sample 契约;env-driven 初始 prompt、reward=Σinfo["reward"];复用 deepeyes helpers |
隔离 smoke + 全 pipeline:Megatron 加载 + SGLang + rollout 实跑通(64 sample,含 success) |
| 冷启动优化 |
/dev/shm warmup + --warm-hf-checkpoint-page-cache |
Actor 加载 17min→35s,SGLang shard 11min hang→1s |
🔧 train step 闭环(刚定位的两个 blocker)
rollout 已通,但 train forward 连续踩两个坑,均已定位修复,待重跑确认:
- batch 整除约束:
global-batch-size 8 → data.py 抛 mini_rollout_batch_size must be divisible by dp_size。改为 32(32/8=4,4%4=0;同时对齐 VAGEN-Lite train_batch_size=32)。
- VL 多模态透传(根因):actor forward 算 mrope 时
image_grid_thw=None → get_rope_index 崩。定位到 relax/utils/training/data_fields.py:18——multimodal_train_inputs 仅在 --multimodal-keys 非空时才透传到 actor。VAGEN 图来自 env(非数据集列)故未设此 flag。对齐 deepeyes_r3 加 --multimodal-keys '{"image":"images"}':数据集无此列时 data.get("images") or [] 安全返回空,env-driven generate 会覆盖为真实 per-turn grids。
待办
验收对照
| 验收标准 |
状态 |
| 同 seed 同地图;同动作序列同 state/reward/done |
✅ |
| concat/non-concat 逐轮回放对齐 |
concat ✅ / non-concat 待 Phase 3 |
| PPO+GRPO 各完成训练+评测无 hang/泄漏 |
GRPO concat train 待重跑确认;PPO 待 Phase 3 |
| 与原版 Lite 成功率差 ≤3–5pp |
待 401 步对比 |
关联
- 详细规划:
task-38-plan.md
- 进度记录:
Relax/TASK38_PROGRESS.md
- 认领人:@yuki-younai
任务信息
Relax-Task/VAGEN(基线 commit2936322)feat/vagen-lite-sokoban(基于task38-baseline)当前进度
✅ 已完成
examples/vagen_lite/(parse_response/prompt/seeding/patch_sokoban_env逐字保留,仅改周边接线:async→sync、reward 走info、build_env派发)generate(args,sample,sampling_params)->Sample契约;env-driven 初始 prompt、reward=Σinfo["reward"];复用 deepeyes helpers/dev/shmwarmup +--warm-hf-checkpoint-page-cache🔧 train step 闭环(刚定位的两个 blocker)
rollout 已通,但 train forward 连续踩两个坑,均已定位修复,待重跑确认:
global-batch-size 8→data.py抛mini_rollout_batch_size must be divisible by dp_size。改为32(32/8=4,4%4=0;同时对齐 VAGEN-Litetrain_batch_size=32)。image_grid_thw=None→get_rope_index崩。定位到relax/utils/training/data_fields.py:18——multimodal_train_inputs仅在--multimodal-keys非空时才透传到 actor。VAGEN 图来自 env(非数据集列)故未设此 flag。对齐 deepeyes_r3 加--multimodal-keys '{"image":"images"}':数据集无此列时data.get("images") or []安全返回空,env-driven generate 会覆盖为真实 per-turn grids。待办
no_concat_gaeadvantage(需改 core:relax/components/advantages.py新增分支 + turn 索引透传,按 CLAUDE.md「Ask First」征询)reward_variance低方差 filter、FrozenLake、评测、401 步训练、与原版 Lite 成功率对比(验收 4)、docs/Issue/PR验收对照
关联
task-38-plan.mdRelax/TASK38_PROGRESS.md