0.9.0(默认)与 0.9.1。方法有 verl/grpo、dapo、ppo、
rloo、reinforce-baseline、remax、distillation、sft。
新的上游版本在成为默认之前是可选的:加 --framework-version 0.9.1 试用,原因见
适配新的上游版本。
与 NeMo-RL 不同,verl 在提交时需要 --model 和 --train-data。observability 是 platform,
集成会往 trainer.logger 添加 tensorboard 并声明输出目录,由独立采集器读取文件。
其他显式配置的 tracker 会保留,不修改 Tracking 构造函数或安装导入钩子。
verl 镜像是部署侧的产物。在任何人能提交之前,管理员要设
TUNEPLANE_IMAGE_VERL 或注册对应的
runtime id。没有它,提交会失败并点名缺的是 runtime 而不是方法。带显式版本创建
verl.trainer.main_ppo。上游移除了 0.8 的 main_ppo_sync,所以 catalog 不再带更旧的
runtime。
如果 experiments/my-verl/main.py 存在,它就是入口。那是 verl-recipe 的写法:继承 TaskRunner 或
RayPPOTrainer。只改奖励不需要它 —— 在配置里设 custom_reward_function.path 就行。
模型与数据是必填的
recipe 把三个参数绑到 Hydra 键上:--train-data 是它内部的路径:
data.train.dataset;参数只是临时覆盖。见
数据集。缺了必填声明时 tp validate 会提前失败。
方法就是 estimator
这里每个 RL 方法跑的都是同一个verl.trainer.main_ppo。recipe 钉住 algorithm.adv_estimator,
那就是这个方法本身。
把
algorithm.adv_estimator 写进 config.yaml 会在提交时被拒绝。要换 estimator,就换方法。
loss 变体是旋钮而不是方法:在上面任意 recipe 上设 policy_loss_mode 即可得到 GSPO、CISPO、
GMPO、clip-cov、kl-cov 或 GPG。
DAPO
verl/dapo 是配置,不是一个内置的分叉训练器。0.9 在主线 main_ppo 里带了全部四项已发表的技巧,
所以 recipe 钉住 algorithm.filter_groups.enable 和 dapo reward manager,并把论文的取值作为
默认值:clip 0.2/0.28、token-mean 聚合、factor 1.0 的 4096 token 超长缓冲、每 prompt 16 个样本、
两条路径上都不加 KL。
提交这种作业之前有两件事要知道:
- 动态采样在 rollout 期间按
filter_metric判断一个组,所以那时奖励必须已经存在。用基于规则 的奖励函数,或把奖励模型放在自己的 pool 里。共卡的奖励模型是在采样之后打分的,上游对此有断言。 - step 耗时天生是波动的:训练器会一直重新生成直到够数的组合格。
verl/grpo 配 clip_ratio_high=0.28 和
loss_agg_mode=token-mean。
rollout 校正
rollout 引擎(vLLM,bf16)和训练器(FSDP,fp32)即使权重相同也不是同一个策略。过期或补充的 rollout 会把差距拉大。每个 verl RL recipe 都暴露了校正:rollout_is_threshold=0.5_5.0 给出 IcePop 的区间,区间外置零而不是截断。
rollout_calculate_log_probs 不是可选的。没有 rollout 引擎自己的 log-prob,就没有可对比的行为
策略,平台会在编译期拒绝这个组合,而不是悄悄什么都不做。
不设 rollout_is 会只上报差异指标而不做任何校正,在一套新环境上这是个合理的第一步。
蒸馏需要两个 pool
verl/distillation 在训练器之上、自己的 Ray placement group 里跑教师推理服务,所以作业声明两个
pool,并把 teacher 角色映射到第二个:
trainer.nnodes,从教师 pool 填 distillation.nnodes。单 pool 的提交会在编译期
被拒绝,而不是卡在放置上。多 pool 需要一个 kubernetes 或 slurm Fleet。
拓扑
适配器从TUNEPLANE_CLUSTER_* 写 trainer.nnodes 和 trainer.n_gpus_per_node,作业有教师 pool
时取主 pool。
确认成功
tp job logs 会显示 Ray 集群成形,然后是第一批 rollout。Charts 标签页会填入 reward 和 loss 曲线。
PPO 运行里 train/value_loss 一直不动,说明 critic 没在学,此时 advantage 是噪声。
训练之后
verl-fsdp 和 verl-megatron。SFT 的评测可以用 tp eval --run-id 把样本挂回训练运行上。
见流水线。