在策略一致性设置中,rollout 和 actor 每个 GPU 的微批量不同时,`log_prob` 和 `old_log_prob` 会不同
作者: kqhxnm-zzz创建于 2026年5月8日更新于 2026年9月18日
当遵循官方建议设置 `rollout.log_prob_micro_batch_size_per_gpu = 2 * actor.ppo_micro_batch_size_per_gpu` 时,即使在 on-policy 设置下, `log_prob` 和 `old_log_prob` 也不同: `actor.ppo_epochs = 1` 和 `train_batch_size = actor.ppo_mini_batch_size`。在这种设置下,训练应为 on-policy,但日志中的 `pg_clipfrac` 为非零,表明 logits 不同。一个简单的解决方案是设置: `rollout.log_prob_micro_batch_size_per_gpu = actor.ppo_micro_batch_size_per_gpu`。另一个可能的解决方案是直接设置: `old_log_prob = log_prob`。这在 #3119 中已实现,但在新版本中似乎已被删除。此外,这种解决方案对 off-policy 训练不适用。是否是由于核函数不具有批量可变性造成的?是否有办法在不明显影响性能的情况下解决此问题?
内容来源: verl-project/verl