跳到内容

奖励模型使用

奖励模型 (RM) 旨在评估和评分语言模型生成的输出质量,充当人类偏好的代理。

摘要

  • 模型用途:reward
  • Pooling 任务
模型类型 池化任务
(序列) (结果) 奖励模型 classify
token (结果) 奖励模型 token_classify
过程奖励模型 token_classify
  • 离线 API
    • LLM.encode(..., pooling_task="...")
  • 在线 API
    • 池化 API (/pooling)

支持的模型

奖励模型

将序列分类模型用作 (序列) (结果) 奖励模型时,其用法和支持的功能与普通分类模型相同。

架构 模型 示例 HF 模型 LoRA PP
JambaForSequenceClassification Jamba ai21labs/Jamba-tiny-reward-dev 等。 ✅︎ ✅︎
Qwen3ForSequenceClassificationC 基于 Qwen3 Skywork/Skywork-Reward-V2-Qwen3-0.6B 等。 ✅︎ ✅︎
LlamaForSequenceClassificationC 基于 Llama Skywork/Skywork-Reward-V2-Llama-3.2-1B 等。 ✅︎ ✅︎
*ModelC, *ForCausalLMC 生成式模型 不适用 * *

C 通过 --convert classify 自动转换为分类模型。(详情)

如果您的模型不在上述列表中,我们将尝试使用 as_seq_cls_model 自动转换该模型。默认情况下,类概率是从对应于最后一个令牌的 softmax 后的隐藏状态中提取的。

Token 奖励模型

(序列)分类和令牌(token)分类之间的关键区别在于输出粒度:(序列)分类为整个输入序列生成单个结果,而令牌分类则为序列中的每个单独令牌生成结果。

将 token 分类模型用作 token (结果) 奖励模型时,其用法和支持的功能与普通token 分类模型相同。

架构 模型 示例 HF 模型 LoRA PP
InternLM2ForRewardModel 基于 InternLM2 internlm/internlm2-1_8b-reward, internlm/internlm2-7b-reward 等。 ✅︎ ✅︎
Qwen2ForRewardModel 基于 Qwen2 Qwen/Qwen2.5-Math-RM-72B 等。 ✅︎ ✅︎
*ModelC, *ForCausalLMC 生成式模型 不适用 * *

C 通过 --convert classify 自动转换为分类模型。(详情)

如果您的模型不在上述列表中,我们将尝试使用 as_seq_cls_model 自动转换该模型。

过程奖励模型

用于评估中间步骤的过程奖励模型对于实现预期结果至关重要。

架构 模型 示例 HF 模型 LoRA PP
LlamaForCausalLM 基于 Llama peiyi9979/math-shepherd-mistral-7b-prm 等。 ✅︎ ✅︎
Qwen2ForProcessRewardModel 基于 Qwen2 Qwen/Qwen2.5-Math-PRM-7B 等。 ✅︎ ✅︎

重要

对于 peiyi9979/math-shepherd-mistral-7b-prm 等过程监督奖励模型,应显式设置 pooling 配置,例如:--pooler-config '{"pooling_type": "STEP", "step_tag_id": 123, "returned_token_ids": [456, 789]}'

离线推理

池化参数

支持以下池化参数

    use_activation: bool | None = None

LLM.encode

encode 方法适用于 vLLM 中的所有池化模型。

  • 奖励模型

在使用 LLM.encode 处理 (序列) (结果) 奖励模型时,请设置 pooling_task="classify"

from vllm import LLM

llm = LLM(model="Skywork/Skywork-Reward-V2-Qwen3-0.6B", runner="pooling")
(output,) = llm.encode("Hello, my name is", pooling_task="classify")

data = output.outputs.data
print(f"Data: {data!r}")
  • Token 奖励模型

在使用 LLM.encode 处理 token (结果) 奖励模型时,请设置 pooling_task="token_classify"

from vllm import LLM

llm = LLM(model="internlm/internlm2-1_8b-reward", runner="pooling", trust_remote_code=True)
(output,) = llm.encode("Hello, my name is", pooling_task="token_classify")

data = output.outputs.data
print(f"Data: {data!r}")
  • 过程奖励模型

在使用 LLM.encode 处理 token (结果) 奖励模型时,请设置 pooling_task="token_classify"

from vllm import LLM

llm = LLM(model="Qwen/Qwen2.5-Math-PRM-7B", runner="pooling")
(output,) = llm.encode("Hello, my name is<extra_0><extra_0><extra_0>", pooling_task="token_classify")

data = output.outputs.data
print(f"Data: {data!r}")

在线服务

请参阅 Pooling API。奖励模型类型对应的 Pooling 任务请参考上表