__init__.py — 这是奖励评分模块的入口文件¶
模块路径: verl.utils.reward_score
文件概述¶
这是奖励评分模块的入口文件,也是整个 reward_score 子包中最核心的分发器。它提供了一个统一的 default_compute_score 函数,根据不同的数据集来源(data_source),自动调用对应的评分子模块来计算模型输出的得分。
在强化学习训练(如 PPO/GRPO)中,奖励信号(reward)是驱动模型学习的核心。这个文件的作用就是:给定模型的输出和标准答案,返回一个奖励分数。
关键代码讲解¶
1. 核心分发函数 default_compute_score¶
def default_compute_score(
data_source,
solution_str,
ground_truth,
extra_info=None,
sandbox_fusion_url=None,
concurrent_semaphore=None,
memory_limit_mb=None,
**kwargs,
):
参数说明:
- data_source:数据集标识符(如 "openai/gsm8k"),决定使用哪种评分方式
- solution_str:模型生成的解答文本
- ground_truth:标准答案
- sandbox_fusion_url:代码评测沙箱的 URL(仅代码题需要)
2. 数据集路由逻辑¶
if data_source == "openai/gsm8k":
from . import gsm8k
res = gsm8k.compute_score(solution_str, ground_truth)
elif data_source in ["lighteval/MATH", ...]:
from . import math_reward
res = math_reward.compute_score(solution_str, ground_truth)
elif data_source in ["math_dapo", "math", ...]:
from . import math_dapo
res = math_dapo.compute_score(solution_str, ground_truth)
elif data_source in ["numina_aops_forum", ...]:
from . import prime_math
res = prime_math.compute_score(solution_str, ground_truth)
elif data_source in ["codecontests", "apps", ...]:
# 代码题:优先使用沙箱,否则本地执行
if sandbox_fusion_url:
from . import sandbox_fusion
res = sandbox_fusion.compute_score(...)
else:
from . import prime_code
res = prime_code.compute_score(...)
这个路由结构清晰地将不同类型的任务分发到对应的评分模块。
3. 返回值统一处理¶
if isinstance(res, dict):
return res
elif isinstance(res, int | float | bool):
return float(res)
else:
return float(res[0])
不同评分模块返回的格式可能不同(有的返回 float,有的返回 dict),这里做了统一处理。
4. 向后兼容的废弃函数¶
@deprecated("verl.utils.reward_score.default_compute_score")
def _default_compute_score(...):
return default_compute_score(...)
以下划线开头的旧版 API 被标记为废弃,但仍可使用,内部直接调用新版函数。
核心类/函数列表¶
| 函数名 | 作用 |
|---|---|
default_compute_score |
根据 data_source 路由到对应评分模块 |
_default_compute_score |
已废弃的旧版 API |
与其他模块的关系¶
default_compute_score (本文件)
├── gsm8k.compute_score → GSM8K 数学题评分
├── math_reward.compute_score → MATH 数据集评分
├── math_dapo.compute_score → DAPO 风格数学评分
├── prime_math.compute_score → PRIME 数学评分(Numina 数据集)
├── prime_code.compute_score → 本地代码评测
├── sandbox_fusion.compute_score → 远程沙箱代码评测
├── geo3k.compute_score → 几何题评分
└── search_r1_like_qa_em.compute_score → QA 精确匹配评分
小结¶
这个文件是一个典型的工厂模式/策略模式的实现:根据数据集类型选择不同的评分策略。所有评分子模块都遵循相同的接口约定(接受 solution_str 和 ground_truth,返回分数),使得上层调用者无需关心具体评分逻辑。在强化学习训练中,这个函数会被大量调用来为每条模型输出计算奖励信号。