리워드 모델 사용법
리워드 모델 사용법 (Reward Usages)
리워드(reward) 모델은 생성형 모델과 달리 답을 만들어내지 않고, 입력에 대해 점수나 분류 결과를 내놓는 pooling 모델이에요. 강화학습(RL)에서 보상 신호를 만들거나, 후보 응답을 평가할 때 쓰이죠. 이 페이지에서는 vLLM에서 리워드 모델을 다루는 방법을 정리해볼게요.
한눈에 보는 요약 (Summary)
- 모델 사용 방식: reward
- 풀링 태스크 (Pooling Task):
| 모델 유형 | 풀링 태스크 |
|---|---|
| (시퀀스) (outcome) 리워드 모델 | classify |
| 토큰 (outcome) 리워드 모델 | token_classify |
| process 리워드 모델 | token_classify |
- 오프라인 API:
LLM.encode(..., pooling_task="...")
- 온라인 API:
- Pooling API (
/pooling)
- Pooling API (
지원되는 모델 (Supported Models)
리워드 모델 (Reward Models)
시퀀스 분류 모델을 (시퀀스) (outcome) 리워드 모델로 쓰는 경우, 사용 방식과 지원 기능은 일반 분류 모델과 동일해요.
C 표시가 붙은 모델은 --convert classify 옵션으로 자동으로 분류 모델로 변환돼요. 자세한 내용은 모델 변환 을 참고하세요.
토큰 리워드 모델 (Token Reward Models)
토큰 단위로 판단하는 리워드 모델도 마찬가지로 --convert classify로 자동 변환돼요.
오프라인 추론 (Offline Inference)
LLM.encode
encode 메서드는 모든 pooling 모델에서 사용할 수 있어요.
- 리워드 모델: (시퀀스) (outcome) 리워드 모델에
LLM.encode를 쓸 때는pooling_task="classify"로 설정해요. - 토큰 리워드 모델: 토큰 (outcome) 리워드 모델은
pooling_task="token_classify"로 설정해요. - Process 리워드 모델: process 리워드 모델도
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")
온라인 서빙 (Online Serving)
온라인에서 쓸 때는 Pooling API를 참고하세요. 리워드 모델 유형에 해당하는 풀링 태스크는 위 표를 참고하면 돼요.
더 많은 예제 (More examples)
더 많은 예제는 examples/pooling/reward에서 찾을 수 있어요.
폐기 예정 기능 (Deprecated Features)
LLM.reward
llm.reward API는 deprecated라서 v0.23에서 제거될 예정이에요. 대신 LLM.encode를 pooling_task="classify" 또는 pooling_task="token_classify"와 함께 사용하세요.