跳转至

reward_model.py — RewardModelManager 负责初始化和管理用于奖励计算的 LLM 推理服务

文件路径: verl/experimental/reward_loop/reward_model.py

文件概述

RewardModelManager 负责初始化和管理用于奖励计算的 LLM 推理服务。当你需要使用一个语言模型(如判别式 RM 或生成式 RM)来给强化学习的输出打分时,这个类会帮你启动推理服务器、设置负载均衡路由器、管理多个推理副本。

核心类:RewardModelManager

初始化流程

class RewardModelManager:
    def __init__(self, config, resource_pool, ...):
        self.config = config
        self.resource_pool = resource_pool

        # 1. 初始化 LLM 推理服务器
        self._init_llm_servers()

        # 2. 设置路由器(负载均衡)
        self._init_router()

        # 3. 创建推理副本
        self._init_rollout_replicas()

三个核心功能

1. LLM 服务器初始化

使用 Ray 在 GPU 资源上启动 LLM 推理服务(通常是 vLLM 或 sglang 后端),每个 GPU 运行一个推理服务实例。

2. 路由器设置

当有多个推理服务实例时,需要一个路由器来分发请求。支持两种路由器: - NaiveRouter:基于 FastAPI 的简单负载均衡,选择负载最低的服务器 - inner_sglang_router:使用 sglang 原生的路由器实现

3. 推理副本管理

管理多个推理副本的创建和销毁,确保有足够的并行推理能力。

生命周期管理

def wake_up(self):
    """唤醒模型 - 将模型加载到 GPU"""
    for replica in self.replicas:
        replica.wake_up()

def sleep(self):
    """休眠模型 - 将模型从 GPU 卸载以节省显存"""
    for replica in self.replicas:
        replica.sleep()

这种唤醒/休眠机制在训练循环中很有用:训练阶段使用 GPU 做梯度更新时,可以先把奖励模型移走;到了奖励计算阶段再唤醒。

核心类/函数列表

名称 类型 说明
RewardModelManager 类 奖励模型的完整管理器
_init_llm_servers 方法 启动 LLM 推理服务
_init_router 方法 设置请求路由/负载均衡
_init_rollout_replicas 方法 创建推理副本
wake_up / sleep 方法 GPU 资源的动态管理

与其他模块的关系

  • 被 RewardLoopManager(在 reward_loop.py 中)创建和管理
  • 使用 router/ 子模块中的 NaiveRouter 或 inner_sglang_router 做负载均衡
  • 底层使用 Ray 的 RayResourcePool 管理 GPU 资源

小结

RewardModelManager 是奖励模型的"运维管家"。它不直接参与奖励计算,而是确保推理服务正常运行、请求被合理分发、GPU 资源被高效利用。如果你只使用规则奖励(不需要模型打分),这个类不会被启用。