强化学习框架VeRL全面解析(架构、调试、修改与应用)

当前的RL框架一览

字节系:
VeRL
CURE(RL for coding)

阿里系:
ROLL淘天爱橙团队

智谱:
slime

huggingface:
trl

VeRL的特点

由于强化学习算法在LLM时代中,对与“灵活性”和“高效性”的双重需求,VeRL应运而生。
其主要特点包括:【Single-controller、multi-controller 以及Hybrid Engine】

  • 引入single-controller的范式思想;将复杂的RL workflow简化为20几行代码;
    在这里插入图片描述
  • 引入multi-Controller的思想:实现高效数据并行、训练和生成:
    在这里插入图片描述
    针对RL当中各个operator之间效率的优化,VeRL引入了Hybrid Engine
    其中包括:offloading&reloading;并行策略切换
    在这里插入图片描述
    在这里插入图片描述

VeRL分布式框架—分布式新范式

分布式框架的实现思路主要有两种:
**single-controller:**一个中心controller来控制所有的worker进行对应任务;【single controller来掌控全局】
multi-controller: 每一个worker独立控制自身,通过其他方式实现并行,例如数据并行,每个worker之间通过通信的方式汇总并行数据。【通过worker间通信来协调】
在这里插入图片描述
两种方案各有优略:
在这里插入图片描述

Hybrid Flow分布式范式

新范式Hybrid Flow,提出了Hybrid Controller思路:结合Single- Controller和Multi-controller。
数据调动上灵活的中央控制+在大规模分布式计算上实现高效的分布式通信:通过一个Single-Controller进行全局的控制,而具体的生成和计算交给muliti-controller

single-controller 通过远程进程调用PRC来控制multi-controller
在这里插入图片描述
在代码中,通过@register装饰器,对multi-controller进一步进行优化。

VeRL调试方法

安装和启动分布式调试插件

首先,由于VeRL采用Ray进行分布式运行,因此传统的基于vscode的调用方法无法生效,需要安装插件Ray distributed debugger

官方使用说明

插件安装后确保需要debug的环境中安装了ray debug所需要的依赖,如下:
代码ide: Visual Studio Code
ray[default] >= 2.9.1
debugpy >= 1.8.0

环境配置:
conda create -n myenv python=3.9
conda activate myenv
pip install "ray[default]" debugpy

在这里插入图片描述
插件安装成功后会出现下图2中左下角1处 图标,然后点击2处 add cluster,在3处 添加服务器集群地址和端口号,ray默认地址 127.0.0.1:8265 (可Enter直接添加此地址)
在这里插入图片描述
此时在集群Cluster未启动的情况下显示如下的connecting状态即为插件配置启动成功
在这里插入图片描述
然后启动ray

ray start --head

在这里插入图片描述

设置调试启动参数

在代码中需要调试的地方设置breakpoint()
⚠️注意:添加断点位置的函数/类,必须有@ray.remote()装饰器,例如:
在这里插入图片描述
然后直接用bash启动sh脚本,脚本中用python调用,即可,可以用如下代码测试:

bash examples/grpo_trainer/run_qwen3-0.6b.sh

插件自动捕捉到断点之后就可以像正常python程序一样调试了:
在这里插入图片描述
在非@ray.remote装饰位置的设置的breakpoint()会在命令行进行pdb调试。

Verl example中的数据预处理

在Verl example中提供了许多有用的小例子,包括从数据处理到一些训练的例子。

在这里插入图片描述
具体包含的数据处理example如下:
在这里插入图片描述
其中,例如gsm8k.py针对GSM8k数据集进行预处理。
https://verl.readthedocs.io/en/latest/start/quickstart.html
通常使用parquet格式的原因是加载更快,当前默认原始数据集就是这个数据格式,因此不用修改。

main_ppo.py主文件架构分析

该文件基本定义了训练的最简化的流程,是一个基于 Hydra + Ray 驱动的 PPO/GRPO 类强化学习训练入口。它把「资源管理、进程/角色划分、数据集与采样、奖励函数、多种分布式策略(FSDP / Megatron / vLLM)」这些零件拼在一起,然后交给 RayPPOTrainer 去跑。

首先是基于Hydra的配置

yaml文件中主要包括如下配置:
data: # 数据
actor_rollout_ref::#核心配置,包括model、actor、ref、rollout、
reward_model:: #奖励模型,用于计算输出样本及时分数
critic: #批评家模型,用于估计期望回报
custom_reward_function: # 自定义奖励模型
trainer: # 训练器

25.06 - update&plan

多轮强化学习训练支持

异步引擎,辅助LLM多轮对话强化学习优化,解决之前同步方案的效率问题;
在这里插入图片描述

MoE模型训练支持

优化Megatron
采用多node推理
参数切片管理,用于megatron和inference引擎。
在这里插入图片描述

planned

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

参考内容

### 如何修改 Verl 框架的代码或配置 Verl 是火山引擎推出的大型语言模型强化学习框架,其设计目标是提供高效、灵活的支持以适应不同场景下的需求[^3]。为了满足特定业务的需求或者优化性能,开发者可能需要对 Verl 的代码或配置进行自定义修改。 #### 修改方法概述 Verl 提供了一种模块化的设计理念,允许开发者通过调整 API 或者 YAML 配置文件来快速适配新的算法逻辑或实验环境[^1]。以下是具体的修改方向: --- #### 一、通过 YAML 文件动态调整参数 Verl 支持基于 Hydra 动态加载配置的功能,在 `main_ppo.py` 中可以看到类似的实现方式: ```python @hydra.main(config_path='config', config_name='ppo_trainer', version_base=None) def main(config): run_ppo(config) ``` 上述代码片段展示了如何利用 Hydra 加载名为 `ppo_trainer.yaml` 的配置文件[^2]。如果希望更改超参数或其他设置,可以直接编辑对应的 YAML 文件。例如,增加一个新的奖励函数可以通过如下形式完成: ```yaml reward_function: type: custom_reward params: weight_factor: 0.8 penalty_threshold: -1.0 ``` 此部分改动无需重新编译源码即可生效,适合用于调试阶段的小范围调整。 --- #### 二、扩展核心组件功能 对于更深层次的功能定制,则需深入到 Verl 的内部结构中去操作。比如要引入一种全新的策略更新机制(如 ReMax),可以根据 HybridFlow 所描述的方法新增一段简洁明了的关键路径处理逻辑: ```python class CustomPolicyUpdate(BasePolicyUpdater): def __init__(self, model, optimizer, **kwargs): super().__init__(model, optimizer) def update(self, batch_data): # 自定义计算梯度的方式 loss = self.compute_loss(batch_data) self.optimizer.zero_grad() loss.backward() self.optimizer.step() return {"loss": loss.item()} ``` 随后只需注册该类至主流程里便可启用新特性。 另外值得注意的是,由于 Verl 已经经过高度优化从而具备较高的训练吞吐量表现[^4],因此任何额外加入的操作都需要特别注意是否会拖慢整体速度。 --- #### 三、集成外部工具链支持 除了单纯改变已有模块外,还可以考虑接入第三方库增强某些方面的能力。假设想让生成出来的程序更加贴近实际应用场景中的最佳实践标准,那么就可以尝试结合 Linting 和 Testing 插件形成闭环反馈循环体系。具体做法是在项目根目录下创建 `.pre-commit-config.yaml` 并写入相关内容: ```yaml repos: - repo: https://github.com/pre-commit/mirrors-prettier rev: v2.7.1 hooks: - id: prettier args: ["--write"] ``` 这样每次提交前都会自动执行格式修正动作,有助于长期维护高质量代码资产。 --- #### 总结 无论是简单地调节现有选项还是大胆重构底层架构Verl 均提供了足够的灵活性帮助用户达成目的。只要遵循官方文档指引并合理运用现代软件工程原则就能顺利推进各项工作进程。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五阿哥爱跳舞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值