Reward Usages
Reward Usages (리워드 사용법)
리워드 모델(RM)은 언어 모델이 생성한 출력의 품질을 평가하고 점수를 매기도록 설계됐으며, 인간 선호(human preferences)의 대리(proxy) 역할을 해요. vLLM에서는 리워드 모델 유형에 따라 classify(시퀀스 리워드) 또는 token_classify(토큰/프로세스 리워드) pooling task로 구현돼요.
출처: 문서
본문
요약
- Model Usage: reward
- Pooling Task: 모델 유형에 따라 다름
- (sequence) (outcome) reward models →
classify - token (outcome) reward models →
token_classify - process reward models →
token_classify
- (sequence) (outcome) reward models →
- 오프라인 API:
LLM.encode(..., pooling_task="...") - 온라인 API: Pooling API(
/pooling)
지원 모델
(시퀀스) (outcome) Reward 모델
시퀀스 분류 모델을 (시퀀스)(outcome) 리워드 모델로 사용하며, 사용법과 지원 기능은 일반 분류 모델과 동일해요.
| Architecture | Models | Example HF Models | LoRA | PP |
|---|---|---|---|---|
| JambaForSequenceClassification | Jamba | ai21labs/Jamba-tiny-reward-dev 등 | ✅ | ✅ |
| Qwen3ForSequenceClassification^C | Qwen3 기반 | Skywork/Skywork-Reward-V2-Qwen3-0.6B 등 | ✅ | ✅ |
| LlamaForSequenceClassification^C | Llama 기반 | Skywork/Skywork-Reward-V2-Llama-3.2-1B 등 | ✅ | ✅ |
| *Model^C, *ForCausalLM^C 등 | 생성 모델 | N/A | * | * |
^C:
--convert classify로 분류 모델로 자동 변환됨. 모델이 위 목록에 없으면as_seq_cls_model로 자동 변환을 시도해요. 기본적으로 마지막 토큰에 해당하는 softmax된 히든 스테이트에서 클래스 확률을 추출해요.
토큰 (outcome) Reward 모델
(시퀀스) 분류와 토큰 분류의 핵심 차이는 출력 세분성이에요. 시퀀스 분류는 전체 시퀀스에 대해 단일 결과를, 토큰 분류는 각 토큰에 대한 결과를 생성해요. 토큰 분류 모델을 토큰(outcome) 리워드 모델로 사용하며, 일반 토큰 분류 모델과 동일해요.
| Architecture | Models | Example HF Models | LoRA | PP |
|---|---|---|---|---|
| InternLM2ForRewardModel | InternLM2 기반 | internlm/internlm2-1_8b-reward, internlm/internlm2-7b-reward 등 | ✅ | ✅ |
| Qwen2ForRewardModel | Qwen2 기반 | Qwen/Qwen2.5-Math-RM-72B 등 | ✅ | ✅ |
| *Model^C, *ForCausalLM^C 등 | 생성 모델 | N/A | * | * |
Process Reward 모델
중간 단계(intermediate steps)를 평가하는 데 사용되는 프로세스 리워드 모델은 원하는 결과(outcome)를 달성하는 데 중요해요.
| Architecture | Models | Example HF Models | LoRA | PP |
|---|---|---|---|---|
| LlamaForCausalLM | Llama 기반 | peiyi9979/math-shepherd-mistral-7b-prm 등 | ✅ | ✅ |
| Qwen2ForProcessRewardModel | Qwen2 기반 | Qwen/Qwen2.5-Math-PRM-7B 등 | ✅ | ✅ |
중요:
peiyi9979/math-shepherd-mistral-7b-prm같은 프로세스 감독(process-supervised) 리워드 모델은 pooling config를 명시적으로 설정해야 해요. 예:--pooler-config '{"pooling_type": "STEP", "step_tag_id": 123, "returned_token_ids": [456, 789]}'.
오프라인 추론
Pooling 파라미터
use_activation: bool | None = None
LLM.encode
encode 메서드는 vLLM의 모든 pooling 모델에서 사용 가능해요.
(시퀀스)(outcome) 리워드 모델 — 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}")
토큰 (outcome) 리워드 모델 — 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}")
Process Reward 모델 — 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 task는 위 표를 참고하세요.
추가 예시
examples/pooling/reward에서 더 많은 예시를 찾을 수 있어요.
제거된 기능
LLM.reward
llm.reward API는 deprecated 되었고 v0.24에서 제거됐어요. 대신 LLM.encode에 pooling_task="classify" 또는 pooling_task="token_classify"를 사용하세요.