OpenRLHF RL 학습 가이드 — 알고리즘과 실행 모드
OpenRLHF RL 학습 가이드 — 알고리즘과 실행 모드
OpenRLHF(0.10.2)의 RL 학습은 세 가지 독립 축을 조합하는 방식이에요. 모든 알고리즘이 각 실행 모드·파이프라인에서 돌도록, 롤아웃은 토큰 단위 궤적을 만들고 손실 계층이 동일하게 소비해요.
출처: https://openrlhf.readthedocs.io/en/latest/agent_training.html
세 축
| 축 | 선택지 | 설정 |
|---|---|---|
| 실행 모드 | Single-turn(기본) / Multi-turn | --train.agent_func_path |
| RL 알고리즘 | PPO / REINFORCE++ / REINFORCE++-baseline / RLOO / GRPO / Dr. GRPO | --algo.advantage.estimator |
| 파이프라인 | Sync(Hybrid Engine) / Async(부분 롤아웃) |
알고리즘 요약
| 알고리즘 | --algo.advantage.estimator |
핵심 아이디어 |
|---|---|---|
| PPO | gae (기본) |
전체 critic과 클립 목적함수 |
| REINFORCE++ | reinforce |
critic 없는 버전, 메모리 절약 |
| REINFORCE++-baseline | reinforce_baseline |
평균 보상을 베이스라인으로 (RLVR/추론에 강건) |
| RLOO | rloo |
leave-one-out 베이스라인 |
| GRPO | group_norm |
그룹 평균/표준편차 정규화 |
보상 소스 세 가지
- 학습된 보상 모델 —
--reward.model_name_or_path - 원격 HTTP RM 서버 —
--reward.remote_url http://host:5000/get_reward - 로컬 파이썬 보상 함수(RFT) —
--reward.remote_url /path/to/reward_func.py
커스텀 보상 함수 예시:
# reward_func.py
import torch
def reward_func(queries, prompts, labels):
"""
Args:
queries: list[str] — full text (prompt + response) per sample
prompts: list[str] — original prompts
labels: list[str] — ground-truth labels (from --data.label_key)
Returns:
dict with:
rewards: Tensor — used in advantage calculation
scores: Tensor — used by --algo.dynamic_filtering_enable (typically in [0, 1])
extra_logs: dict — values logged to Wandb / TensorBoard
"""
batch_size = len(queries)
reward = torch.zeros(batch_size)
for i, (q, label) in enumerate(zip(queries, labels)):
reward[i] = 1.0 if my_check(q, label) else 0.0
return {
"rewards": reward,
"scores": reward,
"extra_logs": {"accuracy": reward.mean().item()},
}