naive.py — NaiveRewardManager 是最基础的奖励管理器实现¶
文件路径:
verl/experimental/reward_loop/reward_manager/naive.py
文件概述¶
NaiveRewardManager 是最基础的奖励管理器实现。它支持同步和异步两种模式来计算奖励分数,是其他更复杂管理器的基础。
关键代码¶
类定义¶
@register("naive")
class NaiveRewardManager(RewardManagerBase):
"""基础奖励管理器,支持同步/异步奖励计算"""
def __init__(self, config, tokenizer, num_examine, ...):
self.config = config
self.tokenizer = tokenizer
self.num_examine = num_examine # 日志中打印多少个样本用于检查
@register("naive") 将这个类注册到全局注册表中,配置文件中设置 reward_manager.name: naive 就会使用这个管理器。
核心方法 run_single¶
def run_single(self, data, compute_score_fn, ...):
"""计算单批数据的奖励
Args:
data: DataProto 数据
compute_score_fn: 评分函数(可以是同步或异步的)
"""
# 解码 prompt 和 response
prompts = self.tokenizer.batch_decode(data.batch['input_ids'], ...)
responses = self.tokenizer.batch_decode(data.batch['responses'], ...)
# 调用评分函数
scores = compute_score_fn(prompts, responses, ...)
# 将分数转换为 tensor
reward_tensor = torch.tensor(scores, dtype=torch.float32)
return reward_tensor
同步与异步支持¶
NaiveRewardManager 同时支持同步和异步的 compute_score_fn:
# 同步模式
scores = compute_score_fn(prompts, responses)
# 异步模式(通过 asyncio)
scores = await compute_score_fn(prompts, responses)
这种灵活性使得它既可以用于简单的规则奖励(同步),也可以用于需要 API 调用的奖励(异步)。
核心类/函数列表¶
| 名称 | 类型 | 说明 |
|---|---|---|
NaiveRewardManager |
类 | 基础奖励管理器 |
run_single |
方法 | 批量计算奖励分数 |
与其他模块的关系¶
- 继承自
RewardManagerBase - 通过
@register("naive")注册到全局注册表 - 是最常用的奖励管理器,适用于大多数场景
小结¶
NaiveRewardManager 是"默认选择"。它的实现简洁直观:解码文本 -> 调用评分函数 -> 返回分数张量。如果没有特殊的奖励计算需求(如速率限制或超长惩罚),使用它即可。