-
Notifications
You must be signed in to change notification settings - Fork 208
Open
Description
Multi-turn rollout
-
参与者:yuzhen,chenyang, jin,xiang
-
协调者:chenyang
-
有 test-log 还有 dev-log,还有一个 sandbox-docs,写的文档非常全面
-
提出 WIP 的 PR,跑通:[sglang] feat: Add SGLang async multi-turn rollout with tool support volcengine/verl#1037
-
在带 tool call 的 gsm8k 任务上初步验证了正确性:https://wandb.ai/zhaochenyang20/gsm8k_async_rl/runs/5jmjno2y?nw=nwuserzhaochenyang20
-
rebase with main done, 效果:https://wandb.ai/zhaochenyang20/gsm8k_async_rl/runs/2d844hf2?nw=nwuserzhaochenyang20(batch_size=16),https://wandb.ai/zhaochenyang20/gsm8k_async_rl/runs/3elt9wq8?nw=nwuserzhaochenyang20(batch_size=256)
TODO
- 重构代码,具体的文档还有 dev branch; @SwordFaith
- 为 rl_dataset 提供可选的 sample_id 支持(和可选的 tools 列,通过 tool_kwargs 配置选取的工具和 create/execute/calc_reward/release 时的定制参数)
- 重构 之前版本 AsyncRollout 到 dev branch
- 将 generate_sequence 输入的 prompts 转换为 AsyncRolloutRequest 管理 (结合状态) @zyzshishui
- messages <-> id with loss mask 转换逻辑 @zyzshishui
- 基于 FSM 的 async rollout 1 request @SwordFaith
- 初始时向 async engine 发起多个请求 @SwordFaith
- 中间 check future 完成状态,实现对 rollout turn 输出解析(有 tool call 的执行 tool call,无 tool call 的需要考虑输出是否结束)
- 中间结果提供 chat messages 格式表示,tool parser 可考虑复用现有 sgl 实现好的 parser,最终结果聚合为和原 generate sequences 一致的格式
- 待讨论问题:tool parser 的 <tool_call> </tool_call> 可能会把文本中间的 tool_call apply chat template 后,统一放到当前轮的尾部?是否会和模型原始生成不一致?
- 提供工具生命周期管理的各节点接口
- TODO: 单次工具调用除了 tool response 外,目前还支持返回 reward_score 和 tool_metrics dict,后两者暂时没想到一个清晰的示例演示,导致没有完整的承接链路,和该如何使用
- 支持返回 message 表示
- 支持返回 tool 相关 score
- 批量完成 request level rollout 并重整为 generate_sequence 兼容的表示 (开发结束待补全测试) @SwordFaith
- async rollout with sharding manager 单测
- async rollout e2e training 测试
- merge pr 917 的 loss mask 在主训练流程的支持 @zyzshishui
- 提供工具实现与 reward manager 结合的示例
- 添加 GSM8kTool 实现与 session 周期结合的 create instance(存 instance_id 和 gsm8k 结果的地方), call 写入 gsm8k 计算结果, calc_reward impl, release instance
- 结合 meta info 和配置的 tools 计算每条 rollout (对应 async rollout request) 的 reward
- 实现一种在 ppo_trainer 下配置使用指定 tool cls 和 tools schema 的方式(配置 + 创建 + rollout build 时传参) @zyzshishui
- 添加 reward manager 对 generate_sequences 返回的 reward_scores 和 tool_names 来源的支持,可以融合这部分分数到 reward 计算,并提供示例 (放到下一期和 step-level reward 一起做)
- async rollout with tool e2e training 测试
- 本期改为在 AsyncSGLangRollout 中根据 tool_config file 创建所需的工具并根据 request-level 配置初始化对应工具状态,后续 micro-batch 化版本会提供第一版带 tools 配置读取和初始化的 ray_agentic_trainer 和 main_agentic_ppo,
- 和最新的 main 持续 rebase。 @zyzshishui
- 学习笔记加进 dev-log,整理 dev-log,test-log 为英文,重构文档翻译成英文整合进 dev-log。 @zyzshishui
- Pre-merge To-do
- 整合当前 async sglang spmd/rollout 测试,减少文件个数,并按照 haibin comment 调整 ci 触发配置 @SwordFaith
- 调整 ci 触发配置
- 合并测试文件
- 验证 get_response_mask & get_eos_mask 使用的等效性,给出一个验证单测脚本(changed commit <-> (fn, 调用方式) 写一个简单的示例脚本,和输入,判断新旧两种调用方式的结果差异是否符合逻辑,当前实现是否需要因为 fn 切换有修改) @zyzshishui
- 更新 contributor list to PR @SwordFaith
- core_algo.compute_policy_loss seems still use response_mask when multi-turn which will calc loss on tool response. 检查所有 response mask 和计算 loss 或 loss 中间结果的地方,需要保证除了 on-purpose 的 LM loss 以外(这个好像没有默认实现),loss_mask 不要计算 tool_response 内的 token 和 turn 间 special token 不应该算 prefix ? @SwordFaith @zyzshishui
- 找出所有需要 check 的在计算 loss 或 loss 依赖的中间结果 apply response mask 作为聚合 mask 的地方,添加 to-do
- 依次 review 是否需要因为 multi-turn 切换为细粒度的 loss_mask
- 定位 grad_norm nan 增多的原因并 fix [sglang] Fix tool format and response position ids padding in AsyncSGLangRollout volcengine/verl#1475
- multi-turn config improvement follow advice: [sglang] feat: Add SGLang async multi-turn rollout with tool support volcengine/verl#1037 (comment) @zyzshishui
- Add doc to index [sglang] feat: Add SGLang async multi-turn rollout with tool support volcengine/verl#1037 (comment) @zyzshishui
- Add multi-node and image support to async rollout
- Improve doc about how-to use
tool kwargs
in data preprocess - refactor current examples , follow advice in:
- clean unused code [sglang] feat: Add SGLang async multi-turn rollout with tool support volcengine/verl#1037 (comment) [sglang] feat: Add SGLang async multi-turn rollout with tool support volcengine/verl#1037 (comment)
- rebase 后大面积 step 出现 nan issue 定位
- 训练代码问题:目前 set_detect_anomaly + hook 看,比较容易出现在 dQ/dK 或 RMSNorm 的 dVar dPow
- 额外的 eos 不需要,见 data_model
- _tool_schemas 初始化时和 request 结构体内存的不一致
- base 模型问题:目前看 nan 的概率 Qwen-2.5-3B-Instruct > Qwen-2.5-3B ≈ Qwen-2.5-0.5B-Instruct
- 训练代码问题:目前 set_detect_anomaly + hook 看,比较容易出现在 dQ/dK 或 RMSNorm 的 dVar dPow
- 整合当前 async sglang spmd/rollout 测试,减少文件个数,并按照 haibin comment 调整 ci 触发配置 @SwordFaith
Metadata
Metadata
Assignees
Labels
No labels