奖励模型使用¶
奖励模型 (RM) 旨在评估和评分语言模型生成的输出质量,充当人类偏好的代理。
摘要¶
- 模型用途:reward
- Pooling 任务
| 模型类型 | 池化任务 |
|---|---|
| (序列) (结果) 奖励模型 | classify |
| token (结果) 奖励模型 | token_classify |
| 过程奖励模型 | token_classify |
- 离线 API
LLM.encode(..., pooling_task="...")
- 在线 API
- 池化 API (
/pooling)
- 池化 API (
支持的模型¶
奖励模型¶
将序列分类模型用作 (序列) (结果) 奖励模型时,其用法和支持的功能与普通分类模型相同。
| 架构 | 模型 | 示例 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]}'。
离线推理¶
池化参数¶
支持以下池化参数。
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 任务请参考上表。