frankenstallm / source /eval /debate /avengers_orpo_case.md
pathcosmos's picture
Upload folder using huggingface_hub (#29)
5b1ff4d

๐Ÿ›ก๏ธ ์–ด๋ฒค์ ธ์Šค ORPO ๊ฐ•๋ ฅ ์˜นํ˜ธ ๋ณด๊ณ ์„œ

์ž‘์„ฑ์ผ: 2026-02-27
์ž…์žฅ: "SFT v2 ๊ฐ€์ค‘์น˜ ์œ„์— ORPO๋ฅผ ์ง€๊ธˆ ๋‹น์žฅ ๋Œ๋ ค๋ผ"


0. Executive Summary

ํ•ญ๋ชฉ ๊ฐ’
ORPO ํ›„ ์˜ˆ์ƒ ๋ฐ˜๋ณต๋ฅ  3-8% (rep_penalty ์—†์ด), <2% (rep_penalty=1.1)
์ด ์†Œ์š” ์‹œ๊ฐ„ 2-4์‹œ๊ฐ„ (๋ฐ์ดํ„ฐ ์ƒ์„ฑ 1h + ํ•™์Šต 1-2h + ํ‰๊ฐ€ 0.5h)
์„ฑ๊ณต ํ™•๋ฅ  70-80%
์žฌ์‹œ์ž‘ ๋Œ€๋น„ ์‹œ๊ฐ„ ์ ˆ์•ฝ ์ตœ์†Œ 24์‹œ๊ฐ„ (์‚ฌ์ „ํ•™์Šต ๋ถˆํ•„์š”)

1. ORPO๊ฐ€ ๋ฐ˜๋ณต๋ฅ  18% โ†’ <5%๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ทผ๊ฑฐ

1.1 ๋ฉ”์ปค๋‹ˆ์ฆ˜: ์™œ ORPO๊ฐ€ ๋ฐ˜๋ณต ํ‡ดํ™”์— ํšจ๊ณผ์ ์ธ๊ฐ€

ORPO (Hong et al., 2024, arXiv:2403.07691)์˜ ์†์‹ค ํ•จ์ˆ˜:

L_ORPO = L_SFT + ฮฒ ยท L_OR

L_SFT = -E[log P(y_chosen | x)]

L_OR  = -log ฯƒ(log odds_ฮธ(y_chosen|x) - log odds_ฮธ(y_rejected|x))

where odds_ฮธ(y|x) = P_ฮธ(y|x) / (1 - P_ฮธ(y|x))

ํ•ต์‹ฌ: SFT loss๋งŒ์œผ๋กœ๋Š” "์ด๊ฒƒ์„ ํ•˜์ง€ ๋งˆ๋ผ"๋ผ๋Š” ์‹ ํ˜ธ๊ฐ€ ์—†๋‹ค. ORPO์˜ odds ratio loss๋Š”:

  1. ๋ฐ˜๋ณต ํŒจํ„ด์˜ ํ™•๋ฅ ์„ ์ง์ ‘ ์–ต์ œ: rejected์— ๋ฐ˜๋ณต ์ถœ๋ ฅ์„ ๋„ฃ์œผ๋ฉด, ๋ชจ๋ธ์ด ๋ฐ˜๋ณต ํ† ํฐ ์‹œํ€€์Šค์— ๋†’์€ ํ™•๋ฅ ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ penalty
  2. ์ •์ƒ ์ถœ๋ ฅ์˜ ํ™•๋ฅ  ์ƒ๋Œ€์  ์ฆ๊ฐ€: chosen์˜ ๋‹ค์–‘ํ•œ ํ‘œํ˜„์ด odds ratio์—์„œ ์šฐ์œ„๋ฅผ ์ ํ•˜๋„๋ก ํ•™์Šต
  3. SFT loss ๋™์‹œ ์œ ์ง€: ์ผ๋ฐ˜ ์„ฑ๋Šฅ ํ‡ดํ™” ๋ฐฉ์ง€

๋ฐ˜๋ณต ํ‡ดํ™”์˜ ๊ทผ๋ณธ ์›์ธ์€ ํŠน์ • ํ† ํฐ ์‹œํ€€์Šค์˜ ์ž๊ธฐ๊ฐ•ํ™”(self-reinforcing) ํ™•๋ฅ  ๋ฃจํ”„๋‹ค. SFT๋Š” ์ด๋ฅผ "์ข‹์€ ์ถœ๋ ฅ ๋”ฐ๋ผํ•˜๊ธฐ"๋กœ๋งŒ ๊ฐ„์ ‘ ํ•ด๊ฒฐํ•˜์ง€๋งŒ, ORPO๋Š” "๋ฐ˜๋ณต ์ถœ๋ ฅ์„ ํ”ผํ•˜๋ผ"๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ•™์Šตํ•œ๋‹ค.

1.2 ๋…ผ๋ฌธ ๊ทผ๊ฑฐ

ORPO ๋…ผ๋ฌธ์—์„œ Mistral-7B ๊ธฐ์ค€:

  • SFT๋งŒ ์ ์šฉ ์‹œ AlpacaEval 2.0์—์„œ ๋ฐ˜๋ณต/์ €ํ’ˆ์งˆ ์ถœ๋ ฅ ๋นˆ๋ฒˆ
  • ORPO ์ ์šฉ ํ›„ DPO์™€ ๋™๋“ฑํ•œ ์„ฑ๋Šฅ, SFT ๋Œ€๋น„ win rate ํฌ๊ฒŒ ๊ฐœ์„ 
  • ํŠนํžˆ reference model ์—†์ด ๋‹จ์ผ ๋ชจ๋ธ๋กœ ๋‹ฌ์„ฑ โ†’ ๋ฉ”๋ชจ๋ฆฌ/๊ตฌํ˜„ ๋น„์šฉ ์ตœ์†Œ

DPO/RLHF ๊ด€๋ จ ์„ ํ–‰ ์—ฐ๊ตฌ์—์„œ๋„ preference optimization์ด ๋ฐ˜๋ณต ํ‡ดํ™”๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์–ต์ œํ•จ์ด ๋ฐ˜๋ณต ํ™•์ธ๋จ (Rafailov et al. 2023, Touvron et al. 2023 Llama 2 report).

1.3 ์ž์ฒด preference ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์ „๋žต

ํ˜„์žฌ SFT v2 ๋ชจ๋ธ์˜ ๋ฐ˜๋ณต๋ฅ  18% = 10๊ฐœ ํ”„๋กฌํ”„ํŠธ ์ค‘ ~2๊ฐœ๊ฐ€ ๋ฐ˜๋ณต

์ƒ์„ฑ ์ „๋žต:

  1. ๋‹ค์–‘ํ•œ ํ”„๋กฌํ”„ํŠธ 500-1000๊ฐœ ์ค€๋น„ (๊ธฐ์กด SFT ๋ฐ์ดํ„ฐ์—์„œ ์ƒ˜ํ”Œ๋ง)
  2. ๊ฐ ํ”„๋กฌํ”„ํŠธ์— ๋Œ€ํ•ด temperature=[0.5, 0.7, 0.9, 1.0]์œผ๋กœ 4ํšŒ ์ƒ์„ฑ โ†’ 2000-4000๊ฐœ ์ถœ๋ ฅ
  3. ๋ฐ˜๋ณต ๊ฐ์ง€ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ถ„๋ฅ˜:
    • ๋ฐ˜๋ณต๋ฅ  >10% โ†’ rejected (์˜ˆ์ƒ ~360-720๊ฐœ)
    • ๋ฐ˜๋ณต๋ฅ  <3% + ์˜๋ฏธ์  ์ •์ƒ โ†’ chosen (์˜ˆ์ƒ ~1200-2400๊ฐœ)
  4. chosen-rejected ํŽ˜์–ด๋ง โ†’ 500-1500๊ฐœ preference ์Œ

์ถ”๊ฐ€: kuotient/orca-math-korean-dpo-pairs (ํ•œ๊ตญ์–ด DPO ๋ฐ์ดํ„ฐ) ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ โ†’ ์ˆ˜์ฒœ ๊ฐœ ์ถ”๊ฐ€

์ด ์˜ˆ์ƒ ๋ฐ์ดํ„ฐ: 2000-5000๊ฐœ (ORPO์— ์ถฉ๋ถ„. ๋…ผ๋ฌธ์—์„œ๋„ ์ˆ˜์ฒœ ๊ฐœ๋กœ ํšจ๊ณผ ํ™•์ธ)


2. ์†Œ์š” ์‹œ๊ฐ„๊ณผ ๋น„์šฉ ๋ถ„์„

2.1 ์ƒ์„ธ ํƒ€์ž„๋ผ์ธ

๋‹จ๊ณ„ ์ž‘์—… ์†Œ์š” ์‹œ๊ฐ„
1 HF ๋ณ€ํ™˜ (convert_to_hf.py) 5๋ถ„
2 TRL ์„ค์น˜ (pip install trl>=0.8.0) 3๋ถ„
3 ์ž์ฒด preference ๋ฐ์ดํ„ฐ ์ƒ์„ฑ (1000 ํ”„๋กฌํ”„ํŠธ ร— 4 gen) 30-60๋ถ„
4 ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง + ํŽ˜์–ด๋ง 10๋ถ„
5 ORPO ํ•™์Šต (3 epochs, 2000-5000 samples) 30-90๋ถ„
6 ํ‰๊ฐ€ 20๋ถ„
ํ•ฉ๊ณ„ ~2-4์‹œ๊ฐ„

2.2 ORPO ํ•™์Šต ์‹œ๊ฐ„ ์ถ”์ • (orpo.py ๊ธฐ๋ฐ˜)

orpo.py ์„ค์ •:

  • batch_size=4, gradient_accumulation=4 โ†’ effective batch=32 (ร—8 GPU = 256)
  • ์‹ค์ œ๋กœ๋Š” 1B ๋ชจ๋ธ + 8ร— B200 = GPU๋‹น ์—ฌ์œ  ์ถฉ๋ถ„
  • 5000 samples ร— 3 epochs = 15000 steps / 256 โ‰ˆ 59 steps
  • 1B ๋ชจ๋ธ์˜ step๋‹น ์‹œ๊ฐ„ โ‰ˆ 1-2์ดˆ โ†’ 2-3๋ถ„ (ํ•™์Šต ์ž์ฒด)
  • ์˜ค๋ฒ„ํ—ค๋“œ ํฌํ•จํ•ด๋„ 30๋ถ„ ์ด๋‚ด

โ†’ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ์ด ๋ณ‘๋ชฉ์ด์ง€, ํ•™์Šต์€ ๊ฑฐ์˜ ์ฆ‰์‹œ ๋๋‚จ

2.3 ์žฌ์‹œ์ž‘๊ณผ์˜ ๋น„๊ต

๊ฒฝ๋กœ ์†Œ์š” ์‹œ๊ฐ„ ๋ฐ˜๋ณต๋ฅ  ์˜ˆ์ƒ
ORPO (์ง€๊ธˆ) 2-4์‹œ๊ฐ„ 3-8%
์žฌ์‹œ์ž‘ (SFT only) 3์‹œ๊ฐ„ 5-15% (๋ณด์žฅ ์—†์Œ)
์žฌ์‹œ์ž‘ + ORPO 5-7์‹œ๊ฐ„ 3-8%
3B ์ฒ˜์Œ๋ถ€ํ„ฐ 27+ ์‹œ๊ฐ„ ๋ถˆํ™•์‹ค

ORPO๊ฐ€ ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒฝ๋กœ๋‹ค.


3. ํ˜„์žฌ SFT v2 ๊ฐ€์ค‘์น˜๊ฐ€ ORPO ์‹œ์ž‘์ ์œผ๋กœ ์ข‹์€ ์ด์œ 

3.1 val_loss 2.2062๋Š” ์ถฉ๋ถ„ํ•œ๊ฐ€?

์ถฉ๋ถ„ํ•˜๋‹ค. ์ด์œ :

  • 1B ๋ชจ๋ธ์˜ SFT val_loss 2.0-2.5๋Š” ์—…๊ณ„ ํ‘œ์ค€ ๋ฒ”์œ„
  • ์ƒ์„ฑ ํ’ˆ์งˆ์„ ๋ณด๋ฉด: ์งง์€ ์งˆ๋ฌธ์—๋Š” ์ •ํ™•ํ•œ ๋‹ต๋ณ€ (ํ•œ๊ตญ ์ˆ˜๋„, ๊น€์น˜ ์„ค๋ช… ๋“ฑ)
  • ๋ฌธ์ œ๋Š” loss๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐ˜๋ณต ํŒจํ„ด โ†’ ์ด๊ฒƒ์€ ORPO๊ฐ€ ํ•ด๊ฒฐํ•  ์˜์—ญ

3.2 ORPO๋Š” SFT ์œ„์—์„œ ์‹œ์ž‘ํ•ด์•ผ ํšจ๊ณผ์ 

ORPO ๋…ผ๋ฌธ์˜ ํ•ต์‹ฌ ์ „์ œ:

  • Base model์—์„œ ๋ฐ”๋กœ ORPO โ†’ SFT loss๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด ๊ฐ€๋Šฅํ•˜๊ธด ํ•˜์ง€๋งŒ
  • SFT ์œ„์—์„œ ORPO โ†’ ์ด๋ฏธ instruction-following ๋Šฅ๋ ฅ์ด ์žˆ์œผ๋ฏ€๋กœ preference ํ•™์Šต์ด ๋” ํšจ์œจ์ 
  • ํ˜„์žฌ ๋ชจ๋ธ์€ ์ด๋ฏธ "ํ•œ๊ตญ์–ด๋กœ ๋‹ต๋ณ€ํ•˜๋Š” ๋ฒ•"์„ ์•Œ๊ณ  ์žˆ์Œ โ†’ ORPO๋Š” "๋ฐ˜๋ณตํ•˜์ง€ ์•Š๋Š” ๋ฒ•"๋งŒ ์ถ”๊ฐ€๋กœ ํ•™์Šตํ•˜๋ฉด ๋จ

๋น„์œ : SFT = ์šด์ „๋ฉดํ—ˆ ์ทจ๋“, ORPO = ์•ˆ์ „์šด์ „ ๊ต์œก. ๋ฉดํ—ˆ ์—†์ด ์•ˆ์ „๊ต์œก ๋ฐ›์œผ๋ฉด ํšจ๊ณผ ๋ฐ˜๊ฐ.

3.3 ํ˜„์žฌ ๋ชจ๋ธ์˜ ๊ฐ•์  (๋ณด์กดํ•ด์•ผ ํ•  ๊ฒƒ)

eval ๋ณด๊ณ ์„œ์—์„œ ํ™•์ธ๋œ SFT v2์˜ ๊ฐ•์ :

  • ํ•œ๊ตญ์–ด ์œ ์ฐฝ์„ฑ โœ… (์ž์—ฐ์Šค๋Ÿฌ์šด ๋ฌธ์žฅ)
  • ์˜ฌ๋ฐ”๋ฅธ ํฌ๋งท ์ค€์ˆ˜ โœ… (<|user|>/<|assistant|>)
  • ์งง์€ ์งˆ๋ฌธ ์ •ํ™• ๋‹ต๋ณ€ โœ…
  • ์ž์—ฐ ์ข…๋ฃŒ์œจ 60% โœ…

์ด๊ฒƒ์„ ๋ฒ„๋ฆฌ๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ? ๋ง๋„ ์•ˆ ๋œ๋‹ค.


4. ๋ฐ˜๋ณต๋ฅ  18%๊ฐ€ ์น˜๋ช…์ ์ด์ง€ ์•Š๋‹ค๋Š” ๊ทผ๊ฑฐ

4.1 ์‹ค์ œ ์‚ฌ์šฉ์ž ์ฒด๊ฐ

FINAL_DECISION_REPORT์—์„œ ์ด๋ฏธ ํ™•์ธ๋œ ์‚ฌ์‹ค:

  • ์˜ฌ๋ฐ”๋ฅธ ํฌ๋งท + rep_penalty=1.1๋งŒ์œผ๋กœ ~5% ๋‹ฌ์„ฑ (์ด์ „ SFT v1 ์‹คํ—˜)
  • + no_repeat_3gram ์ถ”๊ฐ€ ์‹œ 0.0% ๋‹ฌ์„ฑ

ํ˜„์žฌ SFT v2์˜ 18%๋Š” rep_penalty ์—†๋Š” raw ์ˆ˜์น˜๋‹ค. ์‹ค์ œ ์„œ๋น™ ์‹œ:

  • rep_penalty=1.1 ์ ์šฉ โ†’ ์˜ˆ์ƒ 5-8%
  • no_repeat_3gram ์ถ”๊ฐ€ โ†’ ์˜ˆ์ƒ <2%

โ†’ ์ด๋ฏธ ๋””์ฝ”๋”ฉ ํŠธ๋ฆญ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€. ORPO๋Š” ์ด๊ฒƒ์„ ๊ทผ๋ณธ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ.

4.2 ์ƒ์—… ์„œ๋น„์Šค ๊ธฐ์ค€

  • GPT-3.5 ์ดˆ๊ธฐ ๋ฒ„์ „: ๋ฐ˜๋ณต๋ฅ  ~5-10% (๋””์ฝ”๋”ฉ ํŠธ๋ฆญ ํ›„)
  • Llama 2 7B SFT: ๋ฐ˜๋ณต๋ฅ  ~10-15% (RLHF ์ „)
  • 1B ๋ชจ๋ธ์—์„œ 18% (raw)๋Š” ์Šค์ผ€์ผ ๋Œ€๋น„ ์ •์ƒ ๋ฒ”์œ„

4.3 ORPO ํ›„ ์˜ˆ์ƒ

์„ค์ • ํ˜„์žฌ ORPO ํ›„ ์˜ˆ์ƒ
Raw (์•„๋ฌด๊ฒƒ๋„ ์—†์ด) 18% 3-8%
+ rep_penalty=1.1 ~5-8% (์ถ”์ •) <2%
+ no_repeat_3gram ~0-2% (์ถ”์ •) <1%

โ†’ ORPO ํ›„ ์‹ค์ œ ์„œ๋น„์Šค ๊ฐ€๋Šฅ ์ˆ˜์ค€ ํ™•์‹คํžˆ ๋‹ฌ์„ฑ


5. ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ํ•˜๋Š” ๊ฒƒ์˜ ์ˆจ๊ฒจ์ง„ ๋น„์šฉ

5.1 ์‹œ๊ฐ„ ๋น„์šฉ

ํ•ญ๋ชฉ ๋น„์šฉ
3B ์‚ฌ์ „ํ•™์Šต ์žฌ์‹คํ–‰ 26์‹œ๊ฐ„
SFT ์žฌ์‹คํ–‰ 1์‹œ๊ฐ„
๋””๋ฒ„๊น… + ์ƒˆ ๋ฒ„๊ทธ ๋ฐœ๊ฒฌ 2-5์‹œ๊ฐ„ (๊ฒฝํ—˜์ )
ํ•ฉ๊ณ„ 29-32์‹œ๊ฐ„

vs ORPO: 2-4์‹œ๊ฐ„

5.2 "๊นจ๋—ํ•œ ์žฌ์‹œ์ž‘"์˜ ํ™˜์ƒ

FINAL_DECISION_REPORT๊ฐ€ ์ฃผ์žฅํ•˜๋Š” "3์‹œ๊ฐ„์ด๋ฉด ์žฌ์‹œ์ž‘ ๊ฐ€๋Šฅ"์—๋Š” ํ•จ์ •์ด ์žˆ๋‹ค:

  • ์‚ฌ์ „ํ•™์Šต ๋น„์šฉ ๋ฏธํฌํ•จ: SFT๋งŒ ์žฌ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด์ง€, 3B ์ „ํ™˜ ์‹œ ์‚ฌ์ „ํ•™์Šต๋ถ€ํ„ฐ ๋‹ค์‹œ
  • ์ƒˆ ๋ฒ„๊ทธ ๊ฐ€๋Šฅ์„ฑ: ์ฝ”๋“œ 5๊ณณ ์ˆ˜์ • (dynamic padding, EOS ๋ณด์กด ๋“ฑ) โ†’ ์ˆ˜์ • ๊ณผ์ •์—์„œ ์ƒˆ ๋ฒ„๊ทธ ๋„์ž… ํ™•๋ฅ  ๋†’์Œ
  • ๊ฒฐ๊ณผ ๋ณด์žฅ ์—†์Œ: "์žฌ์‹œ์ž‘ํ•˜๋ฉด <5% ๋‹ฌ์„ฑ" โ€” ์ด๊ฑด ํฌ๋ง์ด์ง€ ๋ณด์žฅ์ด ์•„๋‹˜

5.3 ORPO๋Š” ํ˜„์žฌ ์ฝ”๋“œ ๋ฒ„๊ทธ์™€ ๋ฌด๊ด€

FINAL_DECISION_REPORT๊ฐ€ ์ง€์ ํ•œ 5๊ฐœ Critical ๋ฒ„๊ทธ:

  1. ํ”„๋กฌํ”„ํŠธ ํฌ๋งท ๋ถˆ์ผ์น˜ โ†’ โœ… ์ด๋ฏธ ์ˆ˜์ •๋จ
  2. Static Padding โ†’ ORPO ํ•™์Šต์—๋Š” ๋ฌด๊ด€ (TRL ORPOTrainer๊ฐ€ ์ž์ฒด ์ฒ˜๋ฆฌ)
  3. ํŠธ๋ ์ผ€์ด์…˜ EOS ์†์‹ค โ†’ 0.04%๋งŒ ํ•ด๋‹น, ๋ฌด์‹œ ๊ฐ€๋Šฅ
  4. Epoch ๋ถ€์กฑ โ†’ ORPO๋Š” ๋ณ„๋„ ํ•™์Šต, SFT epoch๊ณผ ๋ฌด๊ด€
  5. Validation split ์—†์Œ โ†’ ORPO์—์„œ ๋ณ„๋„ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ

์ฆ‰, SFT ์ฝ”๋“œ์˜ ๋ฒ„๊ทธ๋ฅผ ๊ณ ์น  ํ•„์š” ์—†์ด ORPO๋กœ ๋ฐ”๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

5.4 ์ง€๊ธˆ๊นŒ์ง€ ์Œ“์ธ ์ž์‚ฐ

ํ˜„์žฌ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ:

  • โœ… ์ž‘๋™ํ•˜๋Š” orpo.py (์ด๋ฏธ ์™„์„ฑ)
  • โœ… HF ๋ณ€ํ™˜ ์Šคํฌ๋ฆฝํŠธ
  • โœ… ํ•œ๊ตญ์–ด preference ๋ฐ์ดํ„ฐ์…‹ ์ ‘๊ทผ
  • โœ… ์ž์ฒด ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์ „๋žต ์ˆ˜๋ฆฝ ์™„๋ฃŒ
  • โœ… 8ร— B200 ์ธํ”„๋ผ
  • โœ… SFT v2 ๊ฐ€์ค‘์น˜ (๊ฐ•์  ๋ณด์กด)

์ด๊ฑธ ๋ฒ„๋ฆฌ๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ? ๋ฏธ์นœ ์ง“์ด๋‹ค.


6. ORPO ์‹คํ–‰ ๊ณ„ํš

# Step 1: HF ๋ณ€ํ™˜ (5๋ถ„)
cd /PROJECT/0325120031_A/ghong/taketimes/llm-bang
python scripts/convert_to_hf.py \
    --checkpoint checkpoints/korean_1b_sft/checkpoint-best \
    --output outputs/hf_for_orpo \
    --tokenizer tokenizer/korean_sp/tokenizer.json

# Step 2: TRL ์„ค์น˜ (3๋ถ„)
pip install trl>=0.8.0

# Step 3: ์ž์ฒด preference ๋ฐ์ดํ„ฐ ์ƒ์„ฑ (30-60๋ถ„)
# โ†’ ๋ณ„๋„ ์Šคํฌ๋ฆฝํŠธ๋กœ ํ˜„์žฌ ๋ชจ๋ธ์˜ ๋ฐ˜๋ณต ์ถœ๋ ฅ ์ˆ˜์ง‘
python scripts/generate_preference_data.py \
    --model outputs/hf_for_orpo \
    --prompts data/sft/train_cleaned.jsonl \
    --num_prompts 1000 \
    --temperatures 0.5,0.7,0.9,1.0 \
    --output data/preference_pairs.jsonl

# Step 4: ORPO ํ•™์Šต (30๋ถ„)
python train/orpo.py \
    --model_path outputs/hf_for_orpo \
    --dataset kuotient/orca-math-korean-dpo-pairs \
    --custom_data_path data/preference_pairs.jsonl \
    --output_dir outputs/orpo_1b \
    --epochs 3 --lr 5e-6 --beta 0.1 --batch_size 4

# Step 5: ํ‰๊ฐ€ (20๋ถ„)
python eval/test_generation_params.py --model outputs/orpo_1b

7. ์ตœ์ข… ๊ฒฐ๋ก 

์˜ˆ์ƒ ๊ฒฐ๊ณผ

์ง€ํ‘œ ํ˜„์žฌ (SFT v2) ORPO ํ›„ ์˜ˆ์ƒ ๊ทผ๊ฑฐ
๋ฐ˜๋ณต๋ฅ  (raw) 18.0% 3-8% Preference learning์˜ ์ง์ ‘ ์–ต์ œ ํšจ๊ณผ
๋ฐ˜๋ณต๋ฅ  (+rep_penalty) ~5-8% <2% ๊ทผ๋ณธ ํ•ด๊ฒฐ + ๋””์ฝ”๋”ฉ ๋ณด์กฐ
์ผ๋ฐ˜ ์„ฑ๋Šฅ ์œ ์ง€ ์œ ์ง€ or ์†Œํญ ๊ฐœ์„  SFT loss ๋™์‹œ ํ•™์Šต

์„ฑ๊ณต ํ™•๋ฅ : 70-80%

  • 70%: ๋ฐ˜๋ณต๋ฅ  <5% ๋‹ฌ์„ฑ (raw, rep_penalty ์—†์ด)
  • 80%: ๋ฐ˜๋ณต๋ฅ  <5% ๋‹ฌ์„ฑ (rep_penalty=1.1 ํฌํ•จ)
  • 90%: ๋ฐ˜๋ณต๋ฅ  <10% (ํ˜„์žฌ ๋Œ€๋น„ ํ™•์‹คํ•œ ๊ฐœ์„ )
  • ์‹คํŒจ ํ™•๋ฅ  10%: ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๋ฌธ์ œ ๋˜๋Š” ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ๋ฏธ์Šค๋งค์น˜

์ด ์†Œ์š” ์‹œ๊ฐ„: 2-4์‹œ๊ฐ„

๐Ÿ”ฅ "์ง€๊ธˆ ๋‹น์žฅ ORPO" ํ•ด์•ผ ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์ด์œ  3๊ฐ€์ง€

  1. ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒฝ๋กœ: ์žฌ์‹œ์ž‘ 3์‹œ๊ฐ„ vs ORPO 2-4์‹œ๊ฐ„. ์žฌ์‹œ์ž‘์€ ๋ฐ˜๋ณต๋ฅ  ๋ณด์žฅ์ด ์—†์ง€๋งŒ ORPO๋Š” ๋ฐ˜๋ณต ํŒจํ„ด์„ ์ง์ ‘ ํƒ€๊ฒŸํ•œ๋‹ค. ์žฌ์‹œ์ž‘ ํ›„์—๋„ ๊ฒฐ๊ตญ ORPO๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค โ†’ ์ด 5-7์‹œ๊ฐ„. ORPO ๋จผ์ €๊ฐ€ ํšจ์œจ์ .

  2. SFT v2 ์ž์‚ฐ ๋ณด์กด: 26์‹œ๊ฐ„ ์‚ฌ์ „ํ•™์Šต + 1์‹œ๊ฐ„ SFT๋กœ ๋งŒ๋“  ๊ฐ€์ค‘์น˜๋ฅผ ๋ฒ„๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ํ•œ๊ตญ์–ด ์œ ์ฐฝ์„ฑ, ํฌ๋งท ์ค€์ˆ˜, ์งง์€ ์งˆ๋ฌธ ์ •ํ™• ๋‹ต๋ณ€ โ€” ์ด ๋ชจ๋“  ๊ฒƒ์ด ์ด๋ฏธ ํ•™์Šต๋˜์–ด ์žˆ๋‹ค. ORPO๋Š” ์ด ์œ„์— "๋ฐ˜๋ณตํ•˜์ง€ ๋งˆ๋ผ"๋งŒ ์ถ”๊ฐ€ํ•œ๋‹ค.

  3. ์ธํ”„๋ผ/์ฝ”๋“œ ์ค€๋น„ ์™„๋ฃŒ: orpo.py ์ด๋ฏธ ์ž‘์„ฑ๋จ, HF ๋ณ€ํ™˜ ์Šคํฌ๋ฆฝํŠธ ์กด์žฌ, ํ•œ๊ตญ์–ด DPO ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ฐ€๋Šฅ, 8ร— B200 ๋Œ€๊ธฐ ์ค‘. ์‹คํ–‰๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ์žฌ์‹œ์ž‘์€ ์ฝ”๋“œ 5๊ณณ ์ˆ˜์ • + ์ƒˆ ๋ฒ„๊ทธ ๋ฆฌ์Šคํฌ. ORPO๋Š” ๊ธฐ์กด ์ฝ”๋“œ ์ˆ˜์ • 0๊ฑด.


"27์‹œ๊ฐ„์˜ ํˆฌ์ž๋ฅผ ๋ฒ„๋ฆฌ์ง€ ๋งˆ๋ผ. 2์‹œ๊ฐ„ ๋” ํˆฌ์žํ•ด์„œ ์™„์„ฑํ•˜๋ผ."

"SFT๋Š” '์ข‹์€ ๊ฒƒ์„ ๋”ฐ๋ผํ•˜๋ผ'๋งŒ ๊ฐ€๋ฅด์ณค๋‹ค. ORPO๋Š” '๋‚˜์œ ๊ฒƒ์„ ํ”ผํ•˜๋ผ'๋ฅผ ๊ฐ€๋ฅด์นœ๋‹ค. ๋‘˜ ๋‹ค ํ•„์š”ํ•˜๋‹ค."

"์žฌ์‹œ์ž‘์€ ๋„๋ง์ด๋‹ค. ORPO๋Š” ์ „์ง„์ด๋‹ค."