11 KiB
11 KiB
"현 상태 개선" 시나리오 완전 분석
작성일: 2026-02-26
역할: "고쳐서 간다" 옹호자
현 상태: SFT 5000 steps, 반복률 17.7% (올바른 포맷 + rep_penalty=1.1), 목표 <5%
1. 현재 수정 사항들의 효과 예측
1.1 버그 수정 효과 정량 분석
Bug #1: Dynamic Padding 미작동
문제: SFTDataset.__init__에서 모든 샘플을 max_seq_len=4096으로 미리 패딩 → dynamic_collate_fn이 사실상 무효화.
수정 후 효과:
- 평균 시퀀스 길이 ~385 토큰 (실측 기반 추정)
- 패딩 비율: (4096-385)/4096 = 90.6% 낭비 제거
- gradient 품질: 기존에는 배치 내 모든 시퀀스가 4096이므로 attention 계산에 ~3600개 PAD 토큰 포함 → attention mask로 무시되지만, backward pass에서 PAD 위치의 불필요한 연산이 gradient noise로 작용
- 실질 gradient 품질 향상: 10-20% 추정 (직접적 loss 영향은 제한적이나, 학습 속도 3-8x 향상으로 같은 wall-time에 3-4x 더 많은 유효 step 가능)
- 반복률 직접 영향: 미미 (~1-2%p). 이건 학습 효율 문제이지 반복 원인이 아님.
Bug #2: EOS Truncation
문제: response_ids[:allowed_response]에서 마지막 EOS 토큰 절단 가능.
수정 후 효과:
- 영향 받는 샘플: 4096 초과 61건 (0.04%) — 이전 보고서 기준
- 그러나 재처리된 188,234 샘플에서는 비율 다를 수 있음
- EOS 보존으로 모든 샘플에서 종료 신호 학습 보장
- 반복률 직접 영향: 1-3%p (EOS 학습 누락 샘플이 극소수이므로)
- 심리적 효과 > 실질 효과: "모든 샘플이 EOS를 학습한다"는 보장이 모델 일관성에 기여
데이터 품질 개선
제거된 오염:
- Q/A 패턴 550건: 모델이 자체 Q/A 루프를 학습하는 원천 제거
- EOS 리터럴 113건: EOS 경계 혼란 원천 제거
- 반복 패턴 57건: 직접적 반복 학습 원천 제거
효과 추정:
- 총 ~720건 제거 (전체의 0.38%)
- 수치적으로는 소량이나, 이들이 반복 패턴의 seed 역할 — 모델이 이 패턴을 한번 학습하면 생성 시 증폭됨
- 예상 반복률 감소: 3-5%p
1.2 종합 예측: 재학습 후 반복률
| 현재 상태 | 17.7% (rep_penalty=1.1) |
|---|---|
| Bug #1 (dynamic padding) | -1~2%p (간접 효과) |
| Bug #2 (EOS truncation) | -1~3%p |
| 데이터 오염 제거 | -3~5%p |
| 재학습 후 예상 (rep_penalty=1.1) | 8-13% |
| 재학습 후 예상 (rep_penalty 없이) | 15-25% |
핵심 인사이트: 현재 17.7%는 이미 "올바른 포맷 + rep_penalty"의 결과. 재학습만으로 <5%는 어려움. 추가 조치 필요.
2. 단계별 개선 계획
Phase A: 수정된 코드/데이터로 재학습 (즉시, ~40분)
설정:
- 데이터: 188,234 샘플 (val: 9,907)
- Steps: 5,000 (기존과 동일) → ~1.7 epoch
- Dynamic padding 작동 → 학습 속도 3-5x 향상
- EOS 보존 보장
예상 결과:
| 지표 | 현재 | Phase A 후 |
|---|---|---|
| Val Loss | N/A (없었음) | 1.85-1.92 |
| 반복률 (rep_penalty=1.1) | 17.7% | 8-13% |
| 반복률 (penalty 없이) | 30.7% | 15-25% |
| 학습 시간 | 39분 | ~40분 (속도 향상되나 유효 연산 증가) |
근거:
- Dynamic padding 수정 → 실제 gradient 품질 개선 + 더 많은 유효 데이터 처리
- 깨끗한 데이터 → 오염 패턴 미학습
- Val split 추가 → 과적합 모니터링 가능
Phase B: ORPO 적용 (+2시간)
데이터 확보 방안:
kuotient/orca-math-korean-dpo-pairs: 수학 중심, 193K — 도메인 편향 있으나 즉시 사용 가능- 자체 생성 (권장):
- 현재 모델로 동일 프롬프트에 대해 반복 출력 생성 → rejected
- 깨끗한 데이터셋의 정답 → chosen
- ~10K-20K 쌍 생성 가능 (1시간 소요)
maywell/ko_Ultrafeedback: 60K 일반 한국어 preference
예상 결과:
| 지표 | Phase A 후 | Phase B 후 |
|---|---|---|
| 반복률 (rep_penalty=1.1) | 8-13% | 3-7% |
| 반복률 (penalty 없이) | 15-25% | 8-15% |
| ko_ifeval | 15-25% | 20-30% |
근거: ORPO가 명시적으로 "반복 출력은 나쁘다"를 학습 → 반복 억제를 모델 가중치에 내재화. rep_penalty라는 외부 보조 장치 의존도 감소.
Phase C: 고품질 SFT 데이터 추가 (+4-6시간)
추가 데이터셋:
| 데이터셋 | 크기 | 품질 | 효과 |
|---|---|---|---|
junelee/sharegpt_deepl_ko |
~90K | 상 | 다양한 도메인, 긴 답변 |
beomi/KoAlpaca-v1.1a |
~21K | 중상 | 검증된 한국어 instruction |
heegyu/korean_chatgpt_corpus |
~12K | 상 | ChatGPT 품질 답변 |
예상 결과:
| 지표 | Phase B 후 | Phase C 후 |
|---|---|---|
| 반복률 (rep_penalty=1.1) | 3-7% | 2-5% |
| ko_ifeval | 20-30% | 25-35% |
3. 타임라인 및 비용
시간 예산
| Phase | 준비 | 학습 | 평가 | 합계 |
|---|---|---|---|---|
| A: 재학습 | 10분 (이미 준비됨) | 40분 | 20분 | ~1.1시간 |
| B: ORPO | 1시간 (데이터 생성) | 1시간 | 20분 | ~2.3시간 |
| C: 데이터 추가 | 2시간 (다운로드+필터) | 1.5시간 | 30분 | ~4시간 |
| 합계 | ~7.4시간 |
GPU 비용 (8× B200 기준)
- Phase A: 0.67 GPU-hours × 8 = 5.3 GPU-hours
- Phase B: 1.0 GPU-hours × 8 = 8.0 GPU-hours
- Phase C: 1.5 GPU-hours × 8 = 12.0 GPU-hours
- 총 GPU 소비: ~25 GPU-hours
마일스톤 예측
시작 → +1.1h: Phase A 완료 → 반복률 8-13% (rep_penalty)
→ +3.4h: Phase B 완료 → 반복률 3-7% (rep_penalty)
→ +7.4h: Phase C 완료 → 반복률 2-5% (rep_penalty), ko_ifeval 25-35%
4. 17.7% 반복률의 실제 위험도 평가
4.1 업계 기준
| 모델 등급 | 반복률 (3-gram) | 사례 |
|---|---|---|
| 상용 최상위 (GPT-4, Claude) | <1% | 거의 반복 없음 |
| 상용 중상위 (GPT-3.5) | 1-3% | 드물게 반복 |
| 오픈소스 우수 (Llama-3 8B SFT) | 3-8% | 간헐적 반복 |
| 오픈소스 보통 (7B SFT) | 8-15% | 눈에 띄는 반복 |
| 현재 (1B SFT, rep_penalty) | 17.7% | 빈번한 반복 |
| 미수정 (포맷 불일치) | 57% | 사용 불가 |
4.2 실제 사용 시나리오별 영향
| 시나리오 | 17.7% 반복의 영향 | 허용 가능? |
|---|---|---|
| 짧은 QA (1-2문장) | 거의 무영향 (반복률 0%, 샘플 #1 참조) | ✅ 가능 |
| 설명/교육 (3-5문장) | 간헐적 반복, 읽을 만함 (#3, #6 참조) | ⚠️ 조건부 |
| 긴 서술 (10+ 문장) | 반복 눈에 띄고 품질 저하 (#4, #8 참조) | ❌ 불충분 |
| 코드 생성 | 심각한 반복 (#2 참조, 30.5%) | ❌ 사용 불가 |
| RAG 백엔드 | 짧은 답변 위주면 OK | ⚠️ 조건부 |
4.3 현실적 평가
17.7%는 "데모는 가능하나 서비스 배포는 불가"한 수준.
- 1B 모델 기준으로는 나쁘지 않음 (대부분의 1B SFT가 비슷하거나 더 나쁨)
- 그러나 사용자 대면 서비스에는 <5% 필요
- rep_penalty=1.1 없이는 30.7% → 외부 보조 장치 의존이 높음
5. 현 경로의 리스크
5.1 1B 모델의 구조적 한계
반복 퇴화가 스케일 문제인가?
부분적으로 YES.
- 1B 모델은 hidden dim 2048, 24 layers — attention head당 표현력이 제한적
- 긴 시퀀스에서 이전 토큰들을 "기억"하는 capacity 부족 → 같은 패턴 반복
- 경험적 데이터: 7B+ 모델은 동일 SFT에서 반복률이 1/3~1/5로 감소
- 1B에서 반복률 <5% 달성은 가능하나 많은 노력 필요 (ORPO/DPO 필수)
스케일 외 요인:
- EOS 학습 품질 (수정됨 ✅)
- 데이터 오염 (제거됨 ✅)
- 학습 epoch 부족 (2 epoch → 3-4 epoch 필요)
5.2 데이터 오염의 가중치 영향
회복 가능한가? → YES, 높은 확률로.
근거:
- 오염 데이터 720/159,125 = 0.45% — 모델 가중치에 미친 영향 극히 제한적
- SFT는 pretrain 가중치 위에 fine-tuning — pretrain 가중치는 무관
- 재학습 시 clean 데이터로 from scratch (기존 SFT 체크포인트가 아닌 base checkpoint에서) → 오염 완전 제거
- 188,234 clean 샘플로 재학습하면 이전 오염의 잔재 없음
5.3 최악의 시나리오: 고쳐도 안 되는 경우
| 시나리오 | 확률 | 대응 |
|---|---|---|
| Phase A 후에도 반복률 >20% | 15% | Phase B (ORPO) 즉시 진행 |
| Phase A+B 후에도 반복률 >10% | 10% | Unlikelihood Training loss 추가 |
| 모든 Phase 후에도 반복률 >5% | 5% | 1B 한계 인정, 3B 전환 |
| 재학습이 기존보다 악화 | <3% | 하이퍼파라미터 문제, LR 조정 |
최악 시나리오 발생 시 손실:
- 시간: 최대 7.4시간
- 수확: 최소한 데이터 파이프라인 정비 + val split 확보 + 버그 수정 완료 → 3B로 전환해도 이 인프라는 재사용
6. 최종 판정
수치 요약
| 항목 | 현재 | Phase A | Phase A+B | Phase A+B+C |
|---|---|---|---|---|
| 반복률 (rep_penalty) | 17.7% | 8-13% | 3-7% | 2-5% |
| 반복률 (penalty 없이) | 30.7% | 15-25% | 8-15% | 5-12% |
| ko_ifeval | 미측정 | 15-25% | 20-30% | 25-35% |
| 소요 시간 (누적) | 0 | 1.1h | 3.4h | 7.4h |
성공 확률
| 목표 | 성공 확률 | 경로 |
|---|---|---|
| 반복률 <10% (rep_penalty) | 85% | Phase A만으로 가능 |
| 반복률 <5% (rep_penalty) | 70% | Phase A+B 필요 |
| 반복률 <5% (penalty 없이) | 40% | Phase A+B+C 전부 필요 |
| ko_ifeval 20-35% | 65% | Phase A+B+C |
| 두 목표 동시 달성 | 55% | Phase A+B+C |
권장 여부
✅ 권장: "고쳐서 간다"
근거:
- 이미 수정 완료: 코드 버그 2개 수정, 데이터 재처리 완료 — 재학습만 하면 됨
- 비용 대비 효과: Phase A는 40분이면 끝나고, 반복률 8-13%까지 확보 가능
- 점진적 개선 가능: Phase A → B → C를 순차적으로 진행하며 매 단계 평가 가능
- 최악의 경우에도 손실 최소: 7.4시간 투자로 최소한 인프라 정비 완료
- 3B 전환 시에도 재사용: clean 데이터, val split, 수정된 코드는 3B SFT에 그대로 사용
권장하지 않는 경우:
- ko_ifeval 40%+ 같은 1B 한계를 넘는 목표가 있다면 → 3B가 맞음
- 시간이 매우 촉박하여 40분도 아깝다면 → 현재 17.7%로 데모만 하고 3B로
실행 순서
1. [즉시] Phase A: 재학습 시작 (40분)
2. [Phase A 평가]
- 반복률 <10%? → Phase B로 (ORPO)
- 반복률 >15%? → 하이퍼파라미터 조정 (LR 1e-5, epoch 3-4)
3. [Phase B 평가]
- 반복률 <5%? → 목표 달성. Phase C는 선택적.
- 반복률 5-10%? → Phase C (추가 데이터)
- 반복률 >10%? → 1B 한계. 3B 전환 고려.
"고쳐서 가는" 경로는 비용 효율적이고, 최악의 경우에도 인프라 투자를 회수할 수 있다. Phase A 40분의 투자로 현 상태를 크게 개선할 수 있으며, 이후 ORPO와 데이터 추가로 목표 달성 확률을 높일 수 있다."