尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Agent Lightning 如何配置 rollout 级 advantage 与 per_rollout_mean 损失模式

Agent Lightning 如何配置 rollout 级 advantage 与 per_rollout_mean 损失模式 Agent Lightning 如何配置 rollout 级 advantage 与 per_rollout_mean 损失模式【免费下载链接】agent-lightningThe absolute trainer to light up AI agents.项目地址: https://gitcode.com/GitHub_Trending/ag/agent-lightning在 Agent Lightning v1.0 中训练 agent 时一次 rollout 经过 trace aggregation 后可能产出数量不等的训练行trajectory 模式下甚至是一个 rollout 对应多条训练样本。如果按默认的单样本粒度计算 advantage 和 policy loss行数多的 rollout 会获得不成比例的优化权重。本文说明如何配置algorithm.enable_rollout_level_advantage与actor_rollout_ref.actor.policy_loss.loss_mode: per_rollout_mean这两个相互配套的设置以及与之相关的max_ppo_update_times参数并通过 WB 指标验证它们是否生效。适用环境是已按 安装文档 完成安装、能够运行 quick start 中本地训练流程的机器。两个配置项的作用与默认值Agent Lightning 在 verl 的ppo_trainerHydra 配置之上追加了自己的默认配置完整定义见 agentlightning/verl/config.yaml。其中与本场景直接相关的三项如下algorithm: enable_rollout_level_advantage: true actor_rollout_ref: actor: policy_loss: loss_mode: per_rollout_mean agentlightning: max_ppo_update_times: null根据 Trainer Configuration 中的说明algorithm.enable_rollout_level_advantage: true让 advantage 在 rollout 级别而非单个训练样本级别计算。这一点很重要因为 trace aggregation 之后一个 rollout 会产出行数可变的训练行。actor_rollout_ref.actor.policy_loss.loss_mode: per_rollout_mean把 policy loss 归一化到 rollout 级别防止某个 rollout 仅仅因为产出的训练行更多而获得更高的优化权重。agentlightning.max_ppo_update_times限制单个 batch 执行的 PPO mini-batch 更新次数。默认值null表示不做显式上限trainer 使用为当前 step 收集到的所有完整 mini-batch只有填不满一个完整 mini-batch 的样本会被丢弃文档建议为额外的训练稳定性将其设为2超出上限的样本会在 policy 更新前被丢弃。这三项在 Agent Lightning 的默认配置中已经是开启状态因此大多数情况下你不需要额外做任何事。需要显式配置的场景是你使用 Hydra 覆盖机制修改了algorithm或actor_rollout_ref.actor.policy_loss下的键想确认它们没有被覆盖掉或者你想调整max_ppo_update_times。通过 Hydra 覆盖显式设置配置Agent Lightning 的训练入口是 agentlightning/verl/entrypoint.py 中的run_ppo(config, train_dataset, val_dataset)其中config是一个 OmegaConf 对象由示例训练脚本基于agentlightning/verl/config.yaml用compose合成后再合并覆盖项。以 examples/gsm8k/train_gsm8k_agent.py 为例它先加载基础配置再合并两层覆盖with initialize_config_dir(config_dirconfig_dir, version_baseNone): base_cfg compose(config_nameconfig) overrides verl_default_config() ... override_conf OmegaConf.create(overrides) cli_override_conf OmegaConf.from_dotlist(list(config_overrides)) OmegaConf.set_struct(base_cfg, False) config OmegaConf.merge(base_cfg, override_conf, cli_override_conf)如果你要显式保证 rollout 级 advantage 与per_rollout_mean损失生效或调整更新上限可以在自己的overrides字典中加入overrides { algorithm: { enable_rollout_level_advantage: True, }, actor_rollout_ref: { actor: { policy_loss: { loss_mode: per_rollout_mean, } } }, agentlightning: { max_ppo_update_times: 2, }, }该脚本同时支持从命令行传入 Hydra dotlist 覆盖parse_known_args收集到的config_overrides通过OmegaConf.from_dotlist合并因此也可以不动代码直接追加覆盖参数例如python train_gsm8k_agent.py \ --agl-base-url http://localhost:8181 \ --agl-key gsm8k-dev-key \ --run-name local \ algorithm.enable_rollout_level_advantagetrue \ actor_rollout_ref.actor.policy_loss.loss_modeper_rollout_mean \ agentlightning.max_ppo_update_times2启动后脚本会pprint出完整的 resolved 配置 VERL Config 段落确认algorithm.enable_rollout_level_advantage、actor_rollout_ref.actor.policy_loss.loss_mode和agentlightning.max_ppo_update_times的实际值是你期望的是最直接的配置核对方式。trainer 如何应用这两个配置配置进入训练循环后的行为可以在 agentlightning/verl/trainer.py 中核对rollout 级 advantage_train_step中检查self.config.algorithm.get(enable_rollout_level_advantage, False)为真时调用 rollout_level_advantage.py 的compute_rollout_level_advantage否则回退到 verl 原生的compute_advantage。前者按rollout_id_list把同一 rollout 的多行折叠成每个 rollout 一行用 verl 的compute_advantage计算后再把标量 advantage以及 returns广播回该 rollout 的所有行。per_rollout_mean 损失随后读取self.config.actor_rollout_ref.actor.policy_loss.get(loss_mode, vanilla)若等于per_rollout_mean调用 per_rollout_loss.py 的normalize_advantages_by_rollout把每行的 advantage 除以该 rollout 的 token 总数与批内训练行数之积后再送入注册的compute_policy_loss_per_rollout_mean一个基于 clip 的 PPO 损失需要 actor config 提供clip_ratio等参数clip_ratio_c默认 3.0 且必须大于 1.0。因此两项配置是配套的前者保证 advantage 按 rollout 归一计算后者保证 loss 按 rollout 归一加权。单独关掉任一项都会破坏这层归一化建议保持一致。验证配置是否生效训练启动后通过 WB 中以下指标确认两个机制正在工作文档明确给出的上报指标指标含义training/rollout_level_advantage/n_rows当前 batch 的训练行数training/rollout_level_advantage/n_rollouts折叠后的 rollout 数training/rollout_level_advantage/n_multi_row_rollouts产出多行的 rollout 数training/rollout_level_advantage/max_rows_per_rollout单个 rollout 最多产出的行数前四个指标只有enable_rollout_level_advantage为真时才会出现如果n_rows明显大于n_rollouts说明存在多行 rolloutrollout 级归一化正在起作用。设置了max_ppo_update_times后再观察丢弃计数training/n_sample_dropped/same_reward— 因 mini-batch 对齐或更新上限被丢弃的同 reward 样本数training/n_sample_dropped/random— 随机丢弃的样本数。另外 tests/verl/test_per_rollout_loss.py 中test_normalize_advantages_by_rollout展示了归一化的可核对性质两个 rollout一个含两行、一个含一行在num_trained_rows3下各自贡献的损失权重相等均为1/3。如果你需要离线核对归一化行为可以运行仓库内的这个测试作为参考。限制与常见报错以下约束来自 rollout_level_advantage.py 与 trainer.py 中的显式检查遇到对应报错时按提示排查rollout-level advantage requires rollout_id_list in non_tensor_batch— rollout 数据未携带rollout_id_listrollout 级 advantage 无法分组。rollout-level advantage requires uid or data_id_list in non_tensor_batch— batch 缺少uid或data_id_list无法确定 GRPO 分组。rollout-level advantage found multiple uid values for rollout_id.../rollout-level advantage requires all triplets for the same rollout_id to share the same scalar token_level_rewards sum— 同一 rollout 的多行出现了不同 uid 或不同 reward 总和说明 rollout 数据桥接有误。per_rollout_mean loss requires rollout_id_list— 启用了per_rollout_mean但 batch 中没有rollout_id_list两者必须同时可用。REMAX baseline not yet supported in AgentLightningRayPPOTrainer—algorithm.adv_estimator设为 REMAX 时训练会直接报错rollout 级 advantage 目前只支持文档示例中的 grpo 等 estimator 路径。下一步如果训练中出现因 trace aggregation 产生过多样本导致的更新次数膨胀优先把agentlightning.max_ppo_update_times设为2并通过上表的丢弃指标确认影响范围。更细粒度的采样行为可以继续阅读 Trainer Configuration 中的 trace aggregator 章节异步 rollout 的约束见 Asynchronous Training。【免费下载链接】agent-lightningThe absolute trainer to light up AI agents.项目地址: https://gitcode.com/GitHub_Trending/ag/agent-lightning创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表