参考视频:b站--使用verl实现code-r1(agent-rl,verl二次开发)
一、强化学习的两个流程:
-
加载模型(无需修改)(verl使用ray进行调度)
-
训练过程
get_data_batch(无需修改)
生成序列的过程:
generate_sequences(normal-rl和agent-rl)
normal-rl:单轮交互
agent-rl:多轮交互 与环境交互 获得反馈(prompt-->model-->response-->env(tool call, code exec, etc)--> model-->response)
reward(无需修改)
log_probs
adv(优势 需要修改 强化学习方法之间的差异主要体现在adv的计算方式)
compute_loss
normal_rl: 无需和环境交互
angent_rl:计算损失时需要对其进行mask
二、ray_trainer部分代码详解
1. verl中数据传递
通过数据类实现 batch+元数据,其中batch是张量字典tensordict
batch: DataProto = DataProto.from_single_dict(batch_dict)
2. dataproto
DataProto 是 MMEngine(OpenMMLab 2.0 生态的核心引擎) 中定义的一个数据原型类 ,用于统一封装模型训练 / 推理过程中的批量数据(如图像、标签、元信息等),并提供标准化的接口供模型、数据集和数据加载器之间交互。
在 OpenMMLab 框架(如 MMDet、MMCls、MMSeg 等)中,数据从数据集读取后,会通过 DataLoader 组装成批量数据(batch_dict,字典格式),再通过 DataProto.from_single_dict(batch_dict) 转换为 DataProto 实例。