LLM | 完全面向算法的 VeRL 代码阅读笔记
1 代码结构简介
关键代码在 ray_trainer.py 的 fit 函数里(VeRL 包了好几层)。
with marked_timer 是关键部分。
verl 支持哪些算法?ppo grpo dapo reinforce++,好像都支持。
于是推断,PPO GRPO 等算法,它们应该有一个共用的流程,但还有一些自己的实现,可能包装在某个关键函数内。
现在看了 ppo 和 grpo,还没看 reinforce++。
RayPPOTrainer fit() 函数的基本流程
照抄一下 with marked_timer 的几步。
advantage 的计算过程
advantage:adv_estimator 参数,在 ray trainer 里的 compute_advantage 函数 work。参考博客:https://zhuanlan.zhihu.com/p/677607581
核心实现在 core_algos 里面。
与 ref policy 的 KL 散度 loss 的计算
KL:GRPO 使用 KL loss。这个 loss 好像加在 actor 里面。ray trainer 的 self.actor_rollout_wg 这个东西是 actor。其实是在 verl/workers/actor/dp_actor.py 里面,if self.config.use_kl_loss: ,不过这个最后还是会引到 core_algo 里面
VeRL 的 evaluation 代码
还没看【】
目前对我来说比较 minor 的点
关于 reward:
reward,在 experimental/reward_loop/reward_loop.py 的 worker 的 compute score 里,会调用一个 reward manager,然后好像就都靠这个 reward manager 了
关于 actor():
ray trainer 的 self.actor_rollout_wg 这个东西是 actor。
所以 wg 的意思是 work group。actor PPO 和 GRPO 使用的都是 vanilla,只要有 advantage,actor 的 loss 计算方式,这两个算法都是一样的。
2 VeRL 官方提供的示例训练脚本
可以把 csdn 博客搬过来,简单解释一下每一篇的内容。
3 跑官方示例脚本的记录
还在跑,还没看 eval【】

浙公网安备 33010602011771号