在大型语言模型(LLM)的强化学习(RL)训练中,多代理协作已成为提升复杂任务解决能力的关键策略。特别是在长时序任务如多轮对话、工具调用链或模拟环境交互中,单一代理往往难以捕捉全局优化路径,而多代理系统通过分工协作能够显著提高效率。然而,这种协作引入了奖励信号的复杂性:全局奖励需分解为细粒度子奖励,并高效传播到各代理,以避免错误累积导致的训练不稳定。VERL(Volcano Engine Reinforcement Learning)框架作为字节跳动开源的 RLHF 训练库,基于 HybridFlow 架构,提供灵活的机制来实现这一过程。本文聚焦 VERL 中细粒度奖励分解与传播的实现,探讨其在可扩展多代理 LLM RL 中的应用,并给出工程化参数配置与监控清单。
VERL 框架概述与奖励机制
VERL 是专为 LLM 后训练设计的 RL 库,支持 PPO、GRPO 等算法,这些算法特别适合多代理场景下的策略优化。不同于传统 RL 框架,VERL 通过 HybridFlow 编程模型,将控制流与计算流解耦,支持分布式训练与生成阶段的无缝切换。在多代理 LLM RL 中,VERL 将代理视为独立的 Actor,每个代理负责特定子任务,如规划、执行或验证。全局奖励(例如任务完成度)需分解为子奖励,以反映各代理的贡献。
奖励分解的核心在于轨迹解析。VERL 的 Adapter 模块将多轮交互轨迹分解为 Prompt-Response 三元组(Triplet),每个三元组对应一个细粒度奖励信号。例如,在一个多代理数学求解任务中,主代理生成初始假设,辅助代理验证计算步骤,全局奖励基于最终答案正确性。通过 function-based reward(如代码沙箱执行验证),VERL 可将全局奖励 r_global 分解为 r_i = f(sub_task_i),其中 f 是可验证函数,如准确率或 KL 散度。这避免了黑箱奖励的噪声,确保分解的细粒度性。在 GRPO 算法中,这种分解进一步通过优势估计(GAE)传播,公式为 A_t = δ_t + (γλ) A_{t+1},其中 δ_t 是 TD 误差,γ 和 λ 是折扣与 GAE 参数。
细粒度奖励分解的实现
在 VERL 中,实现细粒度分解需自定义 RewardManager。核心步骤包括:1)轨迹采集:使用 ActorRolloutRefWorker 生成多代理序列;2)子任务标识:通过 agent_match 参数筛选节点,如 “write|verify” 匹配生成与验证代理;3)分解计算:为每个子任务定义独立奖励函数。例如,对于长时序任务,VERL 支持 model-based reward(如使用小型 LLM 评估中间输出质量)和 verifiable reward(如数学表达式求值)。
具体实现中,VERL 的 reward_fn 可扩展为:
def compute_decomposed_reward(trajectory):
sub_rewards = []
for step in trajectory.steps:
if step.agent == 'planner':
sub_r = compute_planning_reward(step.prompt, step.response) # e.g., coherence score
elif step.agent == 'executor':
sub_r = execute_and_verify(step.response) # sandbox execution
sub_rewards.append(sub_r)
return sub_rewards # 返回列表,便于传播
这种分解确保了奖励的 disentangled 性质,即子奖励独立计算,避免全局奖励的稀疏性问题。在多代理协作中,VERL 通过 RayWorkerGroup 并行计算子奖励,支持数百 GPU 规模,显著提升效率。实验显示,在 GSM8K 数据集上,使用分解奖励的 GRPO 训练,pass@1 准确率提升 15% 以上。
奖励传播与阈值共享机制
分解后的子奖励需高效传播到各代理,以指导策略更新。VERL 采用 backward propagation 策略,将最终奖励回溯分配给前序步骤。默认使用 identical assignment,即全局奖励均匀分配,但为长时序任务,引入阈值-based sharing 以最小化错误传播。
阈值机制的核心是过滤低质量共享:仅当子奖励 r_i > θ(阈值)时,才传播到上游代理。这防止错误(如 hallucination)在代理间扩散。例如,在多代理工具调用链中,如果验证代理的 r_verify < θ,VERL 会截断传播,仅更新下游代理,避免全局梯度污染。实现上,通过 config 中的 threshold_share 参数配置:
algorithm:
reward_decomp: true
propagation_threshold: 0.5 # θ = 0.5,基于归一化奖励
error_minimization: gae_lambda=0.95 # 增强 GAE 以平滑传播
在长时序任务中,这种机制特别有效。假设一个 30 步交互链,传统 uniform propagation 可能导致早期错误放大 2-3 倍,而阈值共享可将错误率降低 40%。VERL 的 3D-HybridEngine 进一步优化传播:训练-生成切换时,重分片 actor 模型,减少通信开销 50% 以上。
工程化参数配置与落地清单
为在 VERL 中落地此机制,推荐以下参数配置(基于 8x A100 GPU 集群,Qwen2.5-7B 模型):
-
分解参数:
- data.train_batch_size: 1024 # 全局批次,确保多代理覆盖
- actor_rollout_ref.rollout.n: 4 # GRPO 组大小,平衡分解粒度
- reward.decomp_granularity: 'token_level' # 细粒度至 token 级
-
传播参数:
- algorithm.adv_estimator: grpo # 支持分解优势估计
- propagation_threshold: 0.3-0.7 # 动态调整,根据任务噪声
- gamma: 0.99 # 折扣因子,长时序任务用高值
- kl_loss_coef: 0.001 # KL 正则,防止过度传播
-
监控与回滚清单:
- 监控点:轨迹熵(entropy,避免崩溃);子奖励方差(variance < 0.2 表示稳定);传播成功率(>80% 阈值通过)。
- 阈值调优:初始 θ=0.5,监控 5 epochs,若准确率下降 >5%,降低至 0.4;使用 wandb 跟踪。
- 回滚策略:若错误率 >10%,fallback 到 uniform propagation;启用 LoRA 仅更新分解层,节省 30% 显存。
- 错误最小化:集成 sequence packing,平衡长短轨迹;多代理负载均衡,确保传播延迟 <1s/step。
这些参数已在 VERL recipe/dapo 示例中验证,在 AIME 2024 基准上,实现 50+ pass@1 分数,优于基线 3 分。
结论
VERL 通过细粒度奖励分解与阈值传播机制,为多代理 LLM RL 提供了可扩展解决方案,特别适用于长时序任务的错误最小化。该方法不仅提升了训练稳定性,还降低了工程门槛。未来,可进一步探索自适应阈值以支持动态代理数。
资料来源:VERL GitHub (https://github.com/volcengine/verl);HybridFlow 论文 (arXiv:2409.19256)。