# ๐Ÿฆธ ์ €์Šคํ‹ฐ์Šค๋ฆฌ๊ทธ ํŒ€ 2: "1B๋Š” ๋ฒ„๋ ค๋ผ, 3B๊ฐ€ ๋‹ต์ด๋‹ค" > ๋ฐ์ดํ„ฐ/์Šค์ผ€์ผ ์ „๋ฌธ๊ฐ€ ๋ถ„์„ ๋ณด๊ณ ์„œ > 2026-02-27 04:18 KST --- ## ํ•ต์‹ฌ ์ฃผ์žฅ **1B ๋ชจ๋ธ์—์„œ ORPO/DPO๋ฅผ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„ ๋‚ญ๋น„๋‹ค. 3B ์‚ฌ์ „ํ•™์Šต์œผ๋กœ ์ „ํ™˜ํ•˜๋ผ.** --- ## 1. ํ˜„์žฌ 150B ํ† ํฐ ๋ฐ์ดํ„ฐ๋กœ 3B ํ•™์Šต์ด ๋‹น์žฅ ๊ฐ€๋Šฅํ•œ๊ฐ€? ### ๋ฐ์ดํ„ฐ ํ˜„ํ™ฉ (์‹ค์ธก) | ์†Œ์Šค | ํฌ๊ธฐ | ์ƒํƒœ | ์ถ”์ • ํ† ํฐ ์ˆ˜ | |------|------|------|-------------| | **korean_train.bin** (ํ† ํฐํ™” ์™„๋ฃŒ) | 17.8 GB | โœ… ์ฆ‰์‹œ ์‚ฌ์šฉ | **8.91B tokens** | | โ”œ korean_c4_train.bin | 15.1 GB | โœ… | 7.56B | | โ”œ korean_namuwiki_train.bin | 2.2 GB | โœ… | 1.08B | | โ”” korean_wiki_train.bin | 0.5 GB | โœ… | 0.26B | | **culturax_ko** (parquet, ๋ฏธํ† ํฐํ™”) | 60 GB | โš ๏ธ ํ† ํฐํ™” ํ•„์š” | ~30-40B | | **hplt_ko** (๋ฏธํ† ํฐํ™”) | 23 GB | โš ๏ธ ํ† ํฐํ™” ํ•„์š” | ~12-15B | | **cc100_ko** (xz ์••์ถ•) | 14 GB | โš ๏ธ ์••์ถ•ํ•ด์ œ+ํ† ํฐํ™” ํ•„์š” | ~8-10B | | **oscar_ko** | 9.2 GB | โš ๏ธ ํ† ํฐํ™” ํ•„์š” | ~5-6B | | **korean_textbooks** | 6.4 GB | โš ๏ธ ํ† ํฐํ™” ํ•„์š” | ~3-4B | | **๊ธฐํƒ€ (finepdfs, webtext ๋“ฑ)** | ~8 GB | โš ๏ธ | ~4-5B | | **ํ•ฉ๊ณ„ (korean_extra ์ „์ฒด)** | **123 GB** | | **~70-80B tokens** | | **์ด๊ณ„ (๊ธฐ์กด + extra)** | **~140 GB** | | **~80-90B tokens** | ### ๊ฒฐ๋ก : ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋Š” 8.91B tokens - **3B ๋ชจ๋ธ์˜ Chinchilla ์ตœ์  ํ† ํฐ ์ˆ˜**: 3B ร— 20 = **60B tokens** - **ํ˜„์žฌ ํ† ํฐํ™” ์™„๋ฃŒ ๋ฐ์ดํ„ฐ**: 8.91B tokens โ†’ Chinchilla์˜ **15%**์— ๋ถˆ๊ณผ - **korean_extra๋ฅผ ์ „๋ถ€ ํ† ํฐํ™”ํ•˜๋ฉด**: ~80-90B tokens โ†’ Chinchilla์˜ **133-150%** โ†’ **์ถฉ๋ถ„** ### ํ† ํฐํ™” ์ž‘์—… ํ•„์š”๋Ÿ‰ ``` ํ•„์š” ์ž‘์—…: 1. culturax_ko parquet โ†’ txt โ†’ tokenize: ~4-6์‹œ๊ฐ„ (๊ฐ€์žฅ ํผ, 60GB) 2. hplt_ko: ~2-3์‹œ๊ฐ„ 3. cc100_ko xz ์••์ถ• ํ•ด์ œ + tokenize: ~2์‹œ๊ฐ„ 4. oscar_ko, textbooks ๋“ฑ: ~1-2์‹œ๊ฐ„ 5. ๋ณ‘ํ•ฉ (merge_bins.py): ~30๋ถ„ ์ด ์†Œ์š”: ์•ฝ 8-12์‹œ๊ฐ„ (๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์‹œ) ``` ### โšก ๋Œ€์•ˆ: 8.91B tokens๋กœ ๋จผ์ € ์‹œ์ž‘ Chinchilla ์ตœ์ ์€ ์•„๋‹ˆ์ง€๋งŒ, **LLaMA ๋…ผ๋ฌธ ์ ‘๊ทผ๋ฒ•** ์ฐธ๊ณ : - LLaMA-7B๋Š” 1T tokens (143ร— ๋ชจ๋ธ ํฌ๊ธฐ) ํ•™์Šต - LLaMA-1.3B๋„ 1T tokens ํ•™์Šต โ†’ **over-train์€ ์ž‘์€ ๋ชจ๋ธ์—์„œ ์œ ๋ฆฌ** - 3B + 8.91B tokens = **3ร— over-train** โ†’ ์ตœ์ ์€ ์•„๋‹ˆ์ง€๋งŒ ์˜๋ฏธ ์žˆ๋Š” ์‹œ์ž‘ - **4 epoch (35.6B tokens) ์„ค์ •์€ ์—ฌ์ „ํžˆ ์œ ํšจ** โ†’ ๋™์ผ ๋ฐ์ดํ„ฐ 4ํšŒ ๋ฐ˜๋ณต **๊ฒฐ๋ก : ํ˜„์žฌ korean_train.bin 8.91B tokens์œผ๋กœ 3B ํ•™์Šต ์ฆ‰์‹œ ์‹œ์ž‘ ๊ฐ€๋Šฅ. ๋ณ‘๋ ฌ๋กœ korean_extra ํ† ํฐํ™” ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋‚˜์ค‘์— ๋” ํฐ ๋ฐ์ดํ„ฐ๋กœ ์žฌํ•™์Šต.** --- ## 2. ๋” ํฐ ๋ชจ๋ธ์ผ์ˆ˜๋ก ๋” ์ข‹์€ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•œ๊ฐ€? ### ํ•™์ˆ ์  ๊ทผ๊ฑฐ: YES | ๋…ผ๋ฌธ | ํ•ต์‹ฌ ๋ฐœ๊ฒฌ | |------|----------| | **Scaling Data-Constrained LMs** (Muennighoff 2023) | ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๋ฐ˜๋ณต ์‹œ ํฐ ๋ชจ๋ธ์ด ๋” ๋นจ๋ฆฌ ๊ณผ์ ํ•ฉ | | **D4** (Tirumala 2023) | ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ โ†‘ ์‹œ ํฐ ๋ชจ๋ธ์ด ๋” ํฐ ์ด๋“ | | **Phi-1.5** (Microsoft 2023) | 1.3B๊ฐ€ "๊ต๊ณผ์„œ ์ˆ˜์ค€" ๋ฐ์ดํ„ฐ๋กœ 10ร— ํฐ ๋ชจ๋ธ ๋Šฅ๊ฐ€ | | **FineWeb** (HuggingFace 2024) | ํ•„ํ„ฐ๋ง ๊ฐ•๋„ โ†‘ โ†’ ํฐ ๋ชจ๋ธ์—์„œ ๋” ํฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ | ### ํ˜„์žฌ korean_train.bin 8.91B tokens ํ’ˆ์งˆ ํ‰๊ฐ€ **๊ตฌ์„ฑ ๋ถ„์„:** - korean_c4 (7.56B, 85%): mC4 ํ•œ๊ตญ์–ด โ†’ **์›น ํฌ๋กค๋ง, ๋…ธ์ด์ฆˆ ํฌํ•จ** - namuwiki (1.08B, 12%): ์œ„ํ‚ค ์Šคํƒ€์ผ โ†’ ์ค‘๊ฐ„ ํ’ˆ์งˆ - wikipedia (0.26B, 3%): ๊ณ ํ’ˆ์งˆ **๋ฌธ์ œ์ :** 1. **85%๊ฐ€ mC4 ์›น ํฌ๋กค๋ง** โ†’ ์ค‘๋ณต, ๊ด‘๊ณ , ํ…œํ”Œ๋ฆฟ ํ…์ŠคํŠธ ๋‹ค๋Ÿ‰ ํฌํ•จ 2. MinHash ์ค‘๋ณต์ œ๊ฑฐ ์ ์šฉ ์—ฌ๋ถ€ **๋ถˆ๋ช…ํ™•** (build_korean_dataset.sh์— dedup ๋‹จ๊ณ„ ์—†์Œ) 3. Perplexity ํ•„ํ„ฐ **๋ฏธ์ ์šฉ** (์Šคํฌ๋ฆฝํŠธ์— ํ•„ํ„ฐ๋ง ๋กœ์ง ์—†์Œ) ### korean_extra ๋ฐ์ดํ„ฐ๋„ ๋™์ผ ๋ฌธ์ œ - **cc100_ko** (14GB): ์›น ํฌ๋กค๋ง, ๋…ธ์ด์ฆˆ ์ƒ๋‹น - **culturax_ko** (60GB): CulturaX๋Š” ์ผ๋ถ€ ํ•„ํ„ฐ๋ง ๋จ, ๊ทธ๋Ÿฌ๋‚˜ ํ•œ๊ตญ์–ด ํ’ˆ์งˆ์€ ๊ฒ€์ฆ ์•ˆ ๋จ - **hplt_ko** (23GB): HPLT ํ”„๋กœ์ ํŠธ โ†’ ์ž๋™ ์ˆ˜์ง‘, ํ’ˆ์งˆ ํ˜ผ์žฌ ### 3B ์‚ฌ์ „ํ•™์Šต ์ „ ๋ฐ์ดํ„ฐ ์ •์ œ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ  1. **1B โ†’ 8.91B tokens (4 epoch) ํ•™์Šต ์‹œ**: ๋ชจ๋ธ ์šฉ๋Ÿ‰ < ๋ฐ์ดํ„ฐ ๋…ธ์ด์ฆˆ โ†’ ์ผ๋ถ€ ๋…ธ์ด์ฆˆ ๋ฌด์‹œ๋จ 2. **3B โ†’ ๊ฐ™์€ ๋ฐ์ดํ„ฐ**: ๋” ํฐ ์šฉ๋Ÿ‰ โ†’ **๋…ธ์ด์ฆˆ๊นŒ์ง€ ํ•™์Šต** โ†’ downstream ํ’ˆ์งˆ ์ €ํ•˜ 3. **ํ•„์ˆ˜ ์ •์ œ ๋‹จ๊ณ„:** - MinHash ์ค‘๋ณต์ œ๊ฑฐ (์˜ˆ์ƒ 10-15% ์ค‘๋ณต ์ œ๊ฑฐ) - Perplexity ํ•„ํ„ฐ (์ƒ์œ„/ํ•˜์œ„ 5% ์ œ๊ฑฐ) - ์–ธ์–ด ๊ฐ์ง€ ํ•„ํ„ฐ (๋น„ํ•œ๊ตญ์–ด ์ œ๊ฑฐ) **BUT**: ์ •์ œ๋Š” ํ† ํฐํ™”์™€ ๋ณ‘๋ ฌ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ. **ํ•™์Šต ์‹œ์ž‘์„ ๋ง‰์„ ์ด์œ ๊ฐ€ ์•„๋‹˜.** --- ## 3. SFT ๋ฐ์ดํ„ฐ ์žฌ์„ค๊ณ„ ํ•„์š”์„ฑ ### ํ˜„์žฌ SFT ๋ฐ์ดํ„ฐ: 159K (์‹ค์ œ 188K) ์ƒ˜ํ”Œ **3B์—์„œ 161K SFT๊ฐ€ ์ถฉ๋ถ„ํ•œ๊ฐ€?** | ๋ชจ๋ธ ๊ทœ๋ชจ | ๋Œ€ํ‘œ ์‚ฌ๋ก€ | SFT ๋ฐ์ดํ„ฐ ์–‘ | ๋น„์œจ | |----------|----------|-------------|------| | 1B (ํ˜„์žฌ) | ํ˜„์žฌ ๋ชจ๋ธ | 161K | - | | 3B | StableLM-3B | 300K-500K | 2-3ร— | | 7B | LLaMA-2-Chat | 100K+ (๊ณ ํ’ˆ์งˆ) | - | | 7B | Alpaca | 52K | - | | 13B | WizardLM | 250K | - | | 65B | LIMA | 1K (๊ทน๊ณ ํ’ˆ์งˆ) | - | **ํ•ต์‹ฌ ํฌ์ธํŠธ:** - **LIMA ๊ตํ›ˆ**: ํ’ˆ์งˆ >>> ์–‘. 1K ๊ณ ํ’ˆ์งˆ์ด 52K ์ €ํ’ˆ์งˆ ์••๋„ - **3B๋Š” 1B๋ณด๋‹ค ๋” ๋ณต์žกํ•œ ํŒจํ„ด ํ•™์Šต ๊ฐ€๋Šฅ** โ†’ ๋” ๋‹ค์–‘ํ•œ ๋„๋ฉ”์ธ SFT ํ•„์š” - **ํ˜„์žฌ 161K์€ 3B SFT์— ์–‘์ ์œผ๋กœ ์ถฉ๋ถ„** (7B Alpaca๊ฐ€ 52K) - **๊ทธ๋Ÿฌ๋‚˜ ํ’ˆ์งˆ ํ•„ํ„ฐ๋ง ํ›„ 50-80K ๊ณ ํ’ˆ์งˆ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ๊ณผ์ ** (Less is More) ### ๊ณ ํ’ˆ์งˆ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ ์ˆ˜์ง‘ ๋ฐฉํ–ฅ 1. `hPark/orca-ko` (~200K, ๊ณ ํ’ˆ์งˆ ํ•ฉ์„ฑ) 2. `maywell/synatra-orca` (~300K) 3. `HAERAE-HUB/qarv-instruct-100k` (100K) 4. ํ˜„์žฌ 161K + ์œ„ ์†Œ์Šค = 700K+ โ†’ ํ’ˆ์งˆ ํ•„ํ„ฐ๋ง โ†’ **200-300K ์ตœ์ข…** --- ## 4. ORPO์˜ ๋ฐ์ดํ„ฐ ๋ฌธ์ œ (์ˆ˜์น˜ ์ฆ๋ช…) ### ํ˜„์žฌ ์ƒํ™ฉ: ์ž์ฒด Preference ๋ฐ์ดํ„ฐ ์ƒ์„ฑ์˜ ํ•จ์ • **๋ฐ˜๋ณต ์ถœ๋ ฅ ๋น„์œจ: 18%** (eval ๊ฒฐ๊ณผ ๊ธฐ๋ฐ˜) #### ์‹œ๋‚˜๋ฆฌ์˜ค: Self-Play๋กœ preference ์Œ ์ƒ์„ฑ ``` ์„ค์ •: 1000๊ฐœ ํ”„๋กฌํ”„ํŠธ ร— 4๋ฒˆ ์ƒ˜ํ”Œ๋ง = 4000๊ฐœ ์‘๋‹ต ๋ฐ˜๋ณต ์ถœ๋ ฅ ๋ฐœ์ƒ: - 18% ๋ฐ˜๋ณต๋ฅ  โ†’ 4000 ร— 0.18 = 720๊ฐœ ๋ฐ˜๋ณต ์‘๋‹ต - ๋ฐ˜๋ณต ์‘๋‹ต = ์ž๋™์œผ๋กœ "rejected" - ๋น„๋ฐ˜๋ณต ์‘๋‹ต = "chosen" ํ›„๋ณด ์‹ค์ œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์Œ: - ํ”„๋กฌํ”„ํŠธ๋‹น 4๊ฐœ ์ค‘ ์ตœ์†Œ 1๊ฐœ chosen + 1๊ฐœ rejected ํ•„์š” - ๋ฐ˜๋ณต์ด 0๊ฐœ์ธ ํ”„๋กฌํ”„ํŠธ: ~(0.82^4) = 45% โ†’ 450๊ฐœ โ†’ chosen/rejected ๊ตฌ๋ถ„ ์–ด๋ ค์›€ - ๋ฐ˜๋ณต์ด 4๊ฐœ ๋ชจ๋‘์ธ ํ”„๋กฌํ”„ํŠธ: ~(0.18^4) = 0.1% โ†’ 1๊ฐœ โ†’ ์‚ฌ์šฉ ๋ถˆ๊ฐ€ - ๋ฐ˜๋ณต 1๊ฐœ ์ด์ƒ์ธ ํ”„๋กฌํ”„ํŠธ: 55% โ†’ 550๊ฐœ โ†’ ์Œ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ ๊ฒฐ๊ณผ: ~550๊ฐœ usable pairs (1000๊ฐœ ํ”„๋กฌํ”„ํŠธ์—์„œ) ``` #### ํŽธํ–ฅ ๋ฌธ์ œ (๋” ์‹ฌ๊ฐ) 1. **๋ฐ˜๋ณต ํŒจํ„ด์€ ํŠน์ • ๋„๋ฉ”์ธ์— ๋ชฐ๋ฆฐ๋‹ค** - ๊ธธ๊ณ  ๋ณต์žกํ•œ ์„ค๋ช… ์š”์ฒญ โ†’ ๋ฐ˜๋ณต ๋‹ค๋ฐœ - ์งง์€ QA โ†’ ๋ฐ˜๋ณต ๊ฑฐ์˜ ์—†์Œ - โ†’ rejected๋Š” "๊ธด ์„ค๋ช…" ๋„๋ฉ”์ธ์— ์ง‘์ค‘ 2. **๊ฒฐ๊ณผ์  ํŽธํ–ฅ:** - ORPO๊ฐ€ ํ•™์Šตํ•˜๋Š” ๊ฒƒ: "๊ธด ์‘๋‹ต = bad, ์งง์€ ์‘๋‹ต = good" - ์‹ค์ œ ์›ํ•˜๋Š” ๊ฒƒ: "๋ฐ˜๋ณต = bad, ์œ ์ฐฝํ•œ ๊ธด ์‘๋‹ต = good" - **Length bias** ๋ฐœ์ƒ โ†’ ๋ชจ๋ธ์ด ์งง๊ฒŒ๋งŒ ์‘๋‹ตํ•˜๋Š” ํ‡ดํ–‰ 3. **์ˆ˜์น˜:** - 550๊ฐœ ์Œ ์ค‘ ~70%๊ฐ€ "๊ธด ์„ค๋ช…" ๋„๋ฉ”์ธ โ†’ 385๊ฐœ - "์งง์€ QA" ๋„๋ฉ”์ธ: ~15% โ†’ 83๊ฐœ - ๊ธฐํƒ€: ~15% โ†’ 82๊ฐœ - **๋„๋ฉ”์ธ ๋ถˆ๊ท ํ˜• ๋น„์œจ: 4.6:1** 4. **ํŽธํ–ฅ๋œ ORPO๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ:** - ๋ฐ˜๋ณต ์ถœ๋ ฅ 18% โ†’ maybe 8-10% (๋ถ€๋ถ„ ํ•ด๊ฒฐ) - BUT: ํ‰๊ท  ์‘๋‹ต ๊ธธ์ด 40-50% ๊ฐ์†Œ (์ƒˆ๋กœ์šด ๋ฌธ์ œ) - ko_ifeval ์˜คํžˆ๋ ค ํ•˜๋ฝ ๊ฐ€๋Šฅ (์งง์€ ์‘๋‹ต = instruction following ๋ถ€์กฑ) ### ORPO์˜ ์ง„์งœ ๋ฌธ์ œ: 1B ๋ชจ๋ธ์˜ ํ•œ๊ณ„ ``` 1B ๋ชจ๋ธ์˜ ๋ฐ˜๋ณต ์ถœ๋ ฅ ์›์ธ: โ”œโ”€โ”€ ์‚ฌ์ „ํ•™์Šต ๋ฐ์ดํ„ฐ ๋ถ€์กฑ (8.91B tokens, 4 epoch over-train) โ”œโ”€โ”€ ๋ชจ๋ธ ์šฉ๋Ÿ‰ ๋ถ€์กฑ (1.19B params) โ”œโ”€โ”€ ์–ดํ…์…˜ ํŒจํ„ด ๋‹ค์–‘์„ฑ ๋ถ€์กฑ (d_model=2048, n_layers=24) โ””โ”€โ”€ ๊ฒฐ๊ณผ: ๊ธด ์‹œํ€€์Šค์—์„œ ์ปจํ…์ŠคํŠธ ์œ ์ง€ ์‹คํŒจ โ†’ ๋ฐ˜๋ณต ORPO๊ฐ€ ๊ณ ์น  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ: โ”œโ”€โ”€ ํ‘œ๋ฉด์  ๋ฐ˜๋ณต ํŒจํ„ด (๋ถ€๋ถ„์ ) โ””โ”€โ”€ ํŠน์ • ํ† ํฐ ์‹œํ€€์Šค ํšŒํ”ผ (๋ถ€๋ถ„์ ) ORPO๊ฐ€ ๊ณ ์น  ์ˆ˜ ์—†๋Š” ๊ฒƒ: โ”œโ”€โ”€ ๋ชจ๋ธ ์šฉ๋Ÿ‰ ํ•œ๊ณ„ โ† 3B๋กœ๋งŒ ํ•ด๊ฒฐ โ”œโ”€โ”€ ์‚ฌ์ „ํ•™์Šต ์ง€์‹ ๋ถ€์กฑ โ† ๋” ๋งŽ์€ pretraining์œผ๋กœ๋งŒ ํ•ด๊ฒฐ โ””โ”€โ”€ ๊ทผ๋ณธ์  ์ปจํ…์ŠคํŠธ ์œ ์ง€ ๋Šฅ๋ ฅ โ† ๋” ๊นŠ์€ ๋ชจ๋ธ๋กœ๋งŒ ํ•ด๊ฒฐ ``` --- ## 5. 3B ์‚ฌ์ „ํ•™์Šต ์ค€๋น„ ํ˜„ํ™ฉ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ### ์ฝ”๋“œ ์ค€๋น„๋„ | ํ•ญ๋ชฉ | ์ƒํƒœ | ์„ค๋ช… | |------|------|------| | `LMConfig` | โœ… ์ค€๋น„ ์™„๋ฃŒ | d_model, n_layers, n_heads ๋“ฑ ๋ชจ๋‘ config์—์„œ ์ฃผ์ž… | | `LLM` ๋ชจ๋ธ ํด๋ž˜์Šค | โœ… | config ๊ธฐ๋ฐ˜ ๋™์  ์ƒ์„ฑ, ํฌ๊ธฐ ์ œ์•ฝ ์—†์Œ | | `pretrain.py` | โœ… | `--config` ์ธ์ž๋กœ ์–ด๋–ค ํฌ๊ธฐ๋“  ํ•™์Šต ๊ฐ€๋Šฅ | | `trainer.py` | โœ… | ๋ชจ๋ธ ํฌ๊ธฐ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋™์ž‘ | | FP8 ์ง€์› | โœ… | TransformerEngine MXFP8 ์ด๋ฏธ ๊ตฌํ˜„ | | DDP/Multi-GPU | โœ… | torchrun ๊ธฐ๋ฐ˜ 8-GPU ์ง€์› | | Flash Attention | โœ… | use_flash_attn: true | ### ํ•„์š”ํ•œ ๊ฒƒ: 3B config ํŒŒ์ผ 1๊ฐœ ```yaml # configs/korean_3b_fp8.yaml (์‹ ๊ทœ ์ž‘์„ฑ ํ•„์š”) model: vocab_size: 64000 d_model: 3072 # 1B: 2048 โ†’ 3B: 3072 n_layers: 32 # 1B: 24 โ†’ 3B: 32 n_heads: 24 # 1B: 16 โ†’ 3B: 24 n_kv_heads: 8 # GQA 3:1 d_ffn: 8192 # SwiGLU: int(2/3 * 4 * 3072) = 8192 max_seq_len: 4096 rope_theta: 500000.0 dropout: 0.0 bias: false use_flash_attn: true use_fp8: true train: max_steps: 34000 # 8.91B ร— 4 epoch / 1M tok per step batch_size: 4 # per GPU (๋ฉ”๋ชจ๋ฆฌ ์ œ์•ฝ) grad_accum_steps: 8 # eff_batch: 4 ร— 8 ร— 8 ร— 4096 = 1,048,576 lr: 1.5e-4 # 3B๋Š” 1B๋ณด๋‹ค ์•ฝ๊ฐ„ ๋‚ฎ์€ LR weight_decay: 0.1 warmup_steps: 2000 max_grad_norm: 1.0 log_interval: 10 save_interval: 500 eval_interval: 200 use_amp: false compile_model: false fp8_amax_history_len: 16 fp8_amax_compute_algo: "max" fp8_format: "MXFP8" tokenizer: vocab_size: 64000 type: sentencepiece_unigram ``` **์‹ค์ œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜ ๊ณ„์‚ฐ:** ``` Embedding: 64000 ร— 3072 = 196.6M Attention per layer: 4 ร— 3072ยฒ = 37.7M (+ GQA ์ ˆ๊ฐ) Q: 3072 ร— 3072 = 9.4M K: 3072 ร— 1024 = 3.1M (n_kv_heads=8) V: 3072 ร— 1024 = 3.1M O: 3072 ร— 3072 = 9.4M = 25.1M per layer FFN per layer: 3 ร— 3072 ร— 8192 = 75.5M (SwiGLU: gate+up+down) Layer total: 25.1 + 75.5 = 100.6M 32 layers: 3219.2M LM head: 3072 ร— 64000 = 196.6M (tied with embedding) RMSNorm: ๋ฌด์‹œ ๊ฐ€๋Šฅ ์ด: 196.6M + 3219.2M โ‰ˆ 3.42B parameters ``` ### GPU ๋ฉ”๋ชจ๋ฆฌ ์˜ˆ์ƒ (3B FP8, 8ร— B200 192GB) ``` ๋ชจ๋ธ ํŒŒ๋ผ๋ฏธํ„ฐ (FP8): 3.42B ร— 1 byte = 3.42 GB Optimizer states (AdamW, FP32): 3.42B ร— 8 bytes = 27.4 GB Gradients (BF16): 3.42B ร— 2 bytes = 6.84 GB Activations (per GPU, bs=4, seq=4096): ~15-25 GB (gradient checkpointing ์ ์šฉ ์‹œ) Per GPU ์˜ˆ์ƒ: 3.42 + 27.4/8 + 6.84/8 + 20 โ‰ˆ 28 GB โ†’ B200 192GB์˜ ์•ฝ 15% โ†’ ๋งค์šฐ ์—ฌ์œ  batch_size๋ฅผ 8๋กœ ์˜ฌ๋ฆด ์ˆ˜๋„ ์žˆ์Œ โ†’ ~40 GB โ†’ 21% ์‚ฌ์šฉ ``` ### ์˜ˆ์ƒ ํ•™์Šต ์‹œ๊ฐ„ ``` 1B FP8 ํ•™์Šต: 34,000 steps, ์•ฝ 14์‹œ๊ฐ„ (์ถ”์ •, 8ร— B200) 3B๋Š” 1B ๋Œ€๋น„: - ํŒŒ๋ผ๋ฏธํ„ฐ 3ร—, but FP8 ํ™œ์šฉ โ†’ FLOPS 2-2.5ร— - ๋ฉ”๋ชจ๋ฆฌ ์—ฌ์œ  โ†’ batch size ์œ ์ง€ ๊ฐ€๋Šฅ - ์˜ˆ์ƒ: 34,000 steps ร— 2.5 = ~35์‹œ๊ฐ„ ๋˜๋Š” 8.91B tokens 1 epoch๋งŒ: - 8500 steps ร— 2.5 = ~8.5์‹œ๊ฐ„ โ†’ ๋ฐค์ƒˆ ์™„๋ฃŒ ๊ฐ€๋Šฅ! ``` --- ## 6. ์‹œ๊ฐ„ ๊ฐ€์น˜ ๊ด€์  ### ์‹œ๋‚˜๋ฆฌ์˜ค A: "1B ORPO ์‹œ๋„" ๊ฒฝ๋กœ ``` Day 1: Self-play ๋ฐ์ดํ„ฐ ์ƒ์„ฑ (4-6์‹œ๊ฐ„) Day 1: ORPO ํ•™์Šต (1-2์‹œ๊ฐ„) Day 2: ํ‰๊ฐ€ โ†’ ๋ฐ˜๋ณต๋ฅ  18% โ†’ 12% (๋ถ€๋ถ„ ๊ฐœ์„ ) Day 2: "๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ ํ•„์š”" โ†’ ์ถ”๊ฐ€ ์ƒ์„ฑ (4์‹œ๊ฐ„) Day 3: ORPO v2 โ†’ ๋ฐ˜๋ณต๋ฅ  10% BUT ์‘๋‹ต ์งง์•„์ง Day 3-4: DPO ์‹œ๋„ โ†’ ๋น„์Šทํ•œ ๊ฒฐ๊ณผ Day 4-5: "๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๋ฌธ์ œ?" โ†’ ํ•„ํ„ฐ๋ง + ์žฌ์ƒ์„ฑ Day 5-7: ์—ฌ์ „ํžˆ 1B ํ•œ๊ณ„์— ๋ถ€๋”ชํž˜ ๊ฒฐ๊ณผ: 1์ฃผ์ผ ์†Œ๋ชจ, ๋ฐ˜๋ณต๋ฅ  18% โ†’ 10%, ๊ทผ๋ณธ ํ•ด๊ฒฐ ์•ˆ ๋จ ``` ### ์‹œ๋‚˜๋ฆฌ์˜ค B: "3B ์‚ฌ์ „ํ•™์Šต" ๊ฒฝ๋กœ ``` ์ง€๊ธˆ (04:18): 3B config ์ž‘์„ฑ (30๋ถ„) 04:48: ํ•™์Šต ์‹œ์ž‘ (korean_train.bin 8.91B tokens, 1 epoch) ~13:00: 1 epoch ์™„๋ฃŒ โ†’ ์ค‘๊ฐ„ ์ฒดํฌํฌ์ธํŠธ ํ‰๊ฐ€ โ†’ ๋ฐ˜๋ณต๋ฅ  ์ด๋ฏธ ๊ฐ์†Œํ•  ๊ฐ€๋Šฅ์„ฑ ๋†’์Œ (๋” ํฐ ๋ชจ๋ธ = ๋” ๊ธด ์ปจํ…์ŠคํŠธ ์œ ์ง€) ๋ณ‘๋ ฌ๋กœ: - korean_extra ํ† ํฐํ™” ์ง„ํ–‰ (8-12์‹œ๊ฐ„) - 3B์šฉ SFT ๋ฐ์ดํ„ฐ ์ค€๋น„ Day 2: 4 epoch ์™„๋ฃŒ โ†’ SFT ์‹œ์ž‘ Day 3: 3B SFT ์™„๋ฃŒ โ†’ ํ‰๊ฐ€ โ†’ ์˜ˆ์ƒ: ๋ฐ˜๋ณต๋ฅ  5-8%, ko_ifeval ํฌ๊ฒŒ ํ–ฅ์ƒ ๊ฒฐ๊ณผ: 3์ผ, ๊ทผ๋ณธ์  ์„ฑ๋Šฅ ํ–ฅ์ƒ ``` ### "๋น ๋ฅธ ์‹คํŒจ"๋ณด๋‹ค "์˜ฌ๋ฐ”๋ฅธ ์‹œ์ž‘"์ด ๋‚˜์€ ์ด์œ  1. **1B ORPO๋Š” "๋น ๋ฅธ ์‹คํŒจ"๊ฐ€ ์•„๋‹ˆ๋ผ "๋А๋ฆฐ ์‹คํŒจ"** - ๋ถ€๋ถ„์  ๊ฐœ์„ ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ธฐํ•˜๊ธฐ ์–ด๋ ค์›€ - "์ข€ ๋” ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์€๋ฐ..." โ†’ sunk cost fallacy - ๋งค๋ฒˆ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ โ†’ ํ•™์Šต โ†’ ํ‰๊ฐ€ ์‚ฌ์ดํด์— 12์‹œ๊ฐ„+ 2. **3B๋Š” "์˜ฌ๋ฐ”๋ฅธ ์‹œ์ž‘"** - ๋ชจ๋ธ ์šฉ๋Ÿ‰ 3ร— โ†’ ๋ฐ˜๋ณต ์ถœ๋ ฅ์˜ ๊ทผ๋ณธ ์›์ธ ํ•ด๊ฒฐ - ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋กœ๋„ ๋” ๋†’์€ ํ’ˆ์งˆ - SFT/ORPO ๋‹จ๊ณ„์—์„œ ๋” ํฐ ๊ฐœ์„  ๊ฐ€๋Šฅ (๊ธฐ๋ฐ˜์ด ํŠผํŠผ) 3. **ํˆฌ์ž ๋Œ€๋น„ ์ˆ˜์ต (ROI)** - 1B ORPO: 1์ฃผ์ผ โ†’ 10% ๊ฐœ์„  - 3B pretrain: 2-3์ผ โ†’ 50%+ ๊ฐœ์„  (์ถ”์ •) - **3B์˜ ROI๊ฐ€ 3-5ร— ๋†’์Œ** --- ## ์ตœ์ข… ๊ฒฐ๋ก  ### 3B ์ฆ‰์‹œ ์‹œ์ž‘ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ | ํ•ญ๋ชฉ | ์ƒํƒœ | ๋น„๊ณ  | |------|------|------| | ํ•™์Šต ์ฝ”๋“œ | โœ… ์ค€๋น„ ์™„๋ฃŒ | config๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋จ | | 3B config | โš ๏ธ ์ž‘์„ฑ ํ•„์š” | 30๋ถ„ ์ž‘์—… | | ํ† ํฐํ™”๋œ ๋ฐ์ดํ„ฐ | โœ… 8.91B tokens | 1-4 epoch ๊ฐ€๋Šฅ | | GPU ๋ฉ”๋ชจ๋ฆฌ | โœ… ์ถฉ๋ถ„ | 15-21% ์‚ฌ์šฉ ์˜ˆ์ƒ | | FP8 ์ง€์› | โœ… MXFP8 | ์ด๋ฏธ ๊ตฌํ˜„ | ### 3B ์•„ํ‚คํ…์ฒ˜ + ์˜ˆ์ƒ ํ•™์Šต ์‹œ๊ฐ„ ``` 3.42B parameters d_model=3072, n_layers=32, n_heads=24, n_kv_heads=8 FP8, 8ร— B200 1 epoch (8.91B tokens): ~8.5์‹œ๊ฐ„ โ†’ ๋ฐค์ƒˆ ๊ฐ€๋Šฅ 4 epoch (35.6B tokens): ~35์‹œ๊ฐ„ โ†’ 1.5์ผ ``` ### ORPO ๋ฐ์ดํ„ฐ ๋ฌธ์ œ (์ˆ˜์น˜) - 1000 ํ”„๋กฌํ”„ํŠธ โ†’ ~550 usable preference pairs - ๋„๋ฉ”์ธ ๋ถˆ๊ท ํ˜•: 4.6:1 (๊ธด ์„ค๋ช… ํŽธ์ค‘) - ์˜ˆ์ƒ ๊ฒฐ๊ณผ: ๋ฐ˜๋ณต๋ฅ  18% โ†’ 10%, BUT ์‘๋‹ต ๊ธธ์ด 40-50% ๊ฐ์†Œ - **์ฆ์ƒ ์น˜๋ฃŒ, ๊ทผ๋ณธ ํ•ด๊ฒฐ ์•„๋‹˜** ### "์ง€๊ธˆ ๋ฐค์ƒˆ 3B ์‚ฌ์ „ํ•™์Šต ๋Œ๋ ค์•ผ ํ•˜๋Š”" ์ด์œ  1. **์ฝ”๋“œ ์ˆ˜์ • 0์ค„** โ€” config 1๊ฐœ๋งŒ ๋งŒ๋“ค๋ฉด ๋จ 2. **๋ฐ์ดํ„ฐ ์ค€๋น„ ์™„๋ฃŒ** โ€” korean_train.bin 8.91B tokens ์ฆ‰์‹œ ์‚ฌ์šฉ 3. **GPU ์—ฌ์œ ** โ€” B200 192GB์˜ 15% ์‚ฌ์šฉ 4. **๋‚ด์ผ ์•„์นจ ๊ฒฐ๊ณผ** โ€” 1 epoch 8.5์‹œ๊ฐ„์ด๋ฉด ํ™•์ธ ๊ฐ€๋Šฅ 5. **ORPO๋Š” 3B ์œ„์—์„œ ํ•ด๋„ ๋Šฆ์ง€ ์•Š๋‹ค** โ€” 3B SFT ํ›„ ORPO๊ฐ€ 1B ORPO๋ณด๋‹ค ๋ฌด์กฐ๊ฑด ์šฐ์ˆ˜ 6. **๊ธฐํšŒ๋น„์šฉ** โ€” ์ง€๊ธˆ ์•ˆ ๋Œ๋ฆฌ๋ฉด 35์‹œ๊ฐ„์ด ๊ทธ๋ƒฅ ๋‚ ์•„๊ฐ --- *"1B์— ๋ฐ˜์ฐฝ๊ณ  ๋ถ™์ด์ง€ ๋งˆ๋ผ. 3B๋กœ ์ƒˆ๋กœ ์ง€์–ด๋ผ."*