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
  • 오프라인 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.encodepooling_task="classify" 또는 pooling_task="token_classify"를 사용하세요.

더 알아보기 (Learn more)