GRPO/DPO 학습 Job
개요
Continuous Training Pipeline의 3단계 Preference Tuning 구현을 다룹니다. 직전 단계에서 레이블링된 trace 데이터셋(final_reward 컬럼 포함)을 입력으로 받아, NeMo-RL 기반 GRPO 또는 TRL 기반 DPO로 모델을 파인튜닝합니다. Karpenter Spot 노드풀과 Volcano Gang Scheduling으로 GPU 비용과 유휴 시간을 최소화합니다.
GRPO vs DPO 개념
GRPO (Group Relative Policy Optimization)
GRPO는 동일 프롬프트에 대한 여러 응답을 reward 기준으로 순위화하여 학습하는 방법입니다.
프롬프트: "EKS Auto Mode의 장점은?"
응답 A (reward=0.9): "AWS가 노드를 완전 관리하여 운영 부담이 감소합니다..."
응답 B (reward=0.6): "Auto Mode는 편리합니다..."
응답 C (reward=0.3): "잘 모르겠습니다."
학습: A > B > C 순위로 정책 최적화
장점:
- 절대 점수 대신 상대 순위 학습 → 라벨링 노이즈에 강건
- 한 프롬프트당 여러 응답 생성 → 데이터 효율적
- RLHF 대비 간단 (Reward Model 별도 학습 불필요)
DPO (Direct Preference Optimization)
DPO는 선호/비선호 쌍을 직접 학습하는 방법입니다.
프롬프트: "Karpenter의 주요 기능은?"
선호 (reward >= 0.7):
"Karpenter는 자동 노드 프로비저닝, bin-packing 최적화..."
비선호 (reward < 0.5):
"Karpenter는 스케일링 도구입니다." (너무 짧음)
학습: 선호 응답의 확률 ↑, 비선호 응답의 확률 ↓
장점:
- RLHF처럼 별도 Value Function 없이 단일 Loss로 학습
- 안정적인 학습 (PPO 대비 하이퍼파라미터 튜닝 간단)
- 프로덕션 적용 사례 많음 (Llama 3.1, Claude 3 등)
선택 기준
| 상황 | 권장 방법 | 이유 |
|---|---|---|
| 다양한 응답 생성 가능 | GRPO | 순위 학습으로 데이터 효율 ↑ |
| 명확한 선호/비선호 구분 | DPO | 단순하고 안정적 |
| 라벨링 노이즈 많음 | GRPO | 상대 순위는 절대 점수보다 강건 |
| 빠른 프로토타이핑 | DPO | 하이퍼파라미터 튜닝 간단 |
NeMo-RL 기반 GRPO 학습
NeMo Framework는 NVIDIA의 대규모 모델 학습 프레임워크입니다.
# nemo_grpo_training.py
from nemo.collections.llm import GRPO, GPTModel
from nemo.collections.nlp.data import PreferenceDataset
# 학습 데이터 로드
dataset = PreferenceDataset(
data_path='s3://training-data-lake/labeled-dataset/',
reward_column='final_reward',
min_reward_threshold=0.5, # 0.5 이하는 제외
)
# 기본 모델 로드
model = GPTModel.from_pretrained('glm-5-32b')
# GRPO 설정
grpo_config = GRPO(
num_iterations=1000,
batch_size=32,
learning_rate=1e-5,
kl_coeff=0.1, # KL divergence 페널티 (원본 모델과 너무 멀어지지 않도록)
cliprange=0.2,
vf_coeff=0.5,
)
# 분산 학습 실행
trainer = Trainer(
devices=8, # H100 8개
num_nodes=3, # 3 노드 = 24 GPU
precision='bf16',
strategy='fsdp', # Fully Sharded Data Parallel
)
trainer.fit(model, grpo_config, dataset)