Files
frankenstallm/reports/2026-03-07_ORPO_ANALYSIS_AND_PLAN.md
ModelHub XC d4abdb70fa 初始化项目,由ModelHub XC社区提供模型
Model: pathcosmos/frankenstallm
Source: Original Platform
2026-07-14 04:21:16 +08:00

4.4 KiB

FRANKENSTALLM 3B — Phase 3 ORPO 분석 및 실행 계획

작성일: 2026-03-07 작성자: Claude Code (3-agent 병렬 분석 기반)


1. SFT v1 6차원 평가 결과 요약

차원 지표 결과 목표 판정
1. 지식 보존 PPL forgetting 0.9% <5% PASS
2. 생성 품질 Greedy 반복률 72.97% <5% FAIL
3. 종료 능력 EOS 종료율 0% >90% FAIL
4. 한국어 이해 KoBEST 43.26% >55% FAIL
5. 형식 준수 포맷 정확도 95%+ >90% PASS
6. 안전성 유해 출력률 <1% <5% PASS

핵심 문제: 4/6 PASS이나, 반복률과 EOS는 치명적 수준. KoBEST는 base 대비 소폭 하락.


2. ORPO 진행 근거

2.1 왜 ORPO인가?

  • SFT 한계: SFT는 "좋은 응답"만 학습. "나쁜 응답"을 억제하는 신호가 없음.
  • 반복 문제: 반복은 SFT로 해결 불가. Preference optimization이 필요.
  • ORPO 장점: Reference model 불필요 (메모리 절약), DPO 대비 구현 간단.
  • PPL 보존 양호: 0.9% forgetting은 ORPO 추가 학습의 기반이 건전함을 의미.

2.2 위험 요소

  • Preference 데이터 중 명확한 반복 차이가 있는 쌍은 3.3%에 불과
  • ORPO가 반복 억제에 충분한 신호를 줄 수 있을지 불확실
  • Plan B: DPO (loss_type='sigmoid', ref_model 사용) 전환 준비

3. 치명적 발견 및 해결

3.1 TRL 0.29.0 API 변경

  • ORPOConfig, ORPOTrainer 클래스가 제거됨
  • 해결: DPOConfig(loss_type='orpo') + DPOTrainer(ref_model=None)
  • max_prompt_length 파라미터도 제거됨 → 코드에서 삭제

3.2 모델 경로 수정

  • 기존: eval/outputs/hf_3b_sft_v2_best (SFT v2, 존재하지만 v1 best가 정확)
  • 수정: eval/outputs/hf_3b_sft_best (SFT v1 best checkpoint)

3.3 데이터 규모

  • 실제: 683,181 pairs (기존 문서의 795K는 오류)
  • Effective batch: 2 x 8 GPU x 8 accum = 128
  • Steps/epoch: 683,181 / 128 = 5,337
  • 2 epochs: 10,674 steps
  • 예상 시간: 15~20시간

3.4 Train/Eval Split 추가

  • 기존: eval split 없음 → early stopping 불가
  • 수정: 5% eval split (seed=42) → 34,159 eval pairs
  • EarlyStoppingCallback(patience=3) 추가

4. 최적화된 하이퍼파라미터

파라미터 기존값 신규값 변경 근거
beta 0.1 0.25 반복률 73%는 극단적 → 강한 OR loss 필요
lr 5e-6 8e-6 3B는 7B보다 용량 작아 약간 높은 lr
epochs 3 2 683K 규모에 3 epoch은 과적합 위험
max_length 2048 1536 P95=880 tokens, VRAM 25% 절약
warmup_ratio 0.1 0.05 미세조정에 긴 warmup 불필요
weight_decay 0.0 0.01 약한 regularization
eval_steps - 500 Early stopping용
save_total_limit 3 5 더 많은 rollback 옵션

5. 안전장치

상황 자동 행동
eval_loss 3회 연속 상승 EarlyStoppingCallback 자동 중단
SIGHUP/SIGTERM 수신 Emergency checkpoint 저장 후 종료
ORPO 후 KoBEST 5%+ 하락 SFT best checkpoint로 rollback
ORPO 후 PPL forgetting 15%+ SFT best checkpoint로 rollback
반복률 개선 없음 (>60%) Plan B: DPO (loss_type='sigmoid')

6. 모니터링 전략

메트릭 건강한 범위 위험 신호
loss 점진적 하락 발산/정체
rewards/margins 양수, 증가 음수/감소
eval_loss 하락 3회 연속 상승 → early stop
rewards/chosen 상승 하락
rewards/rejected 하락 상승

7. 실행 절차

  1. 200-step 퀵 테스트: bash scripts/launch_3b_orpo.sh --max_steps 200
  2. 검증: ImportError 없음, VRAM 확인, rewards/margins 양수, eval_loss 계산
  3. 본 학습: nohup bash scripts/launch_3b_orpo.sh 2>&1 &
  4. 모니터링: TensorBoard + 텔레그램 알림 + hourly watchdog
  5. 평가: eval/sft_eval_pipeline.py → Base vs SFT vs ORPO 3-way 비교

8. 수정 파일 목록

파일 작업 설명
train/orpo.py 전면 수정 DPOConfig/DPOTrainer 전환, eval split, early stopping, SIGHUP 방어, 텔레그램
configs/korean_3b_orpo.yaml 업데이트 신규 하이퍼파라미터 반영
scripts/launch_3b_orpo.sh 업데이트 신규 인자 동기화, 모델 경로 수정
reports/2026-03-07_ORPO_ANALYSIS_AND_PLAN.md 신규 본 보고서