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

๐Ÿฆธ ์ €์Šคํ‹ฐ์Šค๋ฆฌ๊ทธ ํŒ€ 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๊ฐœ

# 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๋กœ ์ƒˆ๋กœ ์ง€์–ด๋ผ."