# ๐Ÿ›ก๏ธ ์–ด๋ฒค์ ธ์Šค 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 ์‹คํ–‰ ๊ณ„ํš ```bash # 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๋Š” ์ „์ง„์ด๋‹ค."*