| # FRANKENSTALLM | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| > **ํ๊ตญ์ด 3B LLM์ 8ร NVIDIA B200 ์์์ ์ฒ์๋ถํฐ ์ง์ ๋ง๋ ๋ค.** | |
| > Frankenstein์ฒ๋ผ ์กฐ๊ฐ์ ์ด์ด ๋ถ์ด๊ณ , ์ฒ ๊ฐ์ฒ๋ผ ๋จ๋จํ๊ฒ ๋จ๋ จํ๋ค. | |
| GitHub: [`pathcosmos/FRANKENSTALLM`](https://github.com/pathcosmos/FRANKENSTALLM) | |
| --- | |
| ## ๋ชฉ์ฐจ | |
| 1. [์ ์ด ํ๋ก์ ํธ์ธ๊ฐ](#1-์-์ด-ํ๋ก์ ํธ์ธ๊ฐ) | |
| 2. [ํ์ฌ ์ํ โ ํ๋์ ๋ณด๊ธฐ](#2-ํ์ฌ-์ํ--ํ๋์-๋ณด๊ธฐ) | |
| 3. [ํ๋์จ์ด ํ๊ฒฝ](#3-ํ๋์จ์ด-ํ๊ฒฝ) | |
| 4. [ํ๋ก์ ํธ ๊ตฌ์กฐ](#4-ํ๋ก์ ํธ-๊ตฌ์กฐ) | |
| 5. [ํ๋ก์ ํธ ์ฌ์ ํ์๋ผ์ธ](#5-ํ๋ก์ ํธ-์ฌ์ -ํ์๋ผ์ธ) | |
| 6. [๋ชจ๋ธ ์ํคํ ์ฒ](#6-๋ชจ๋ธ-์ํคํ ์ฒ) | |
| 7. [ํ์ต ๋ฐ์ดํฐ](#7-ํ์ต-๋ฐ์ดํฐ) | |
| 8. [ํ์ต ์ค์ ๋ฐ ์ต์ ํ](#8-ํ์ต-์ค์ -๋ฐ-์ต์ ํ) | |
| 9. [์คํ ๊ฒฐ๊ณผ โ 1B ๋ฒ ์ด์ค๋ผ์ธ](#9-์คํ-๊ฒฐ๊ณผ--1b-๋ฒ ์ด์ค๋ผ์ธ) | |
| 10. [์คํ ๊ฒฐ๊ณผ โ 3B Base ์ข ํฉ ํ๊ฐ (v2)](#10-์คํ-๊ฒฐ๊ณผ--3b-base-์ข ํฉ-ํ๊ฐ-v2) | |
| - [10.1 ํ์ต ์ปค๋ธ](#101-ํ์ต-์ปค๋ธ) | |
| - [10.2 PPL (Perplexity) โ 19๊ฐ ๋ฐ์ดํฐ์ ](#102-ppl-perplexity--19๊ฐ-๋ฐ์ดํฐ์ ) | |
| - [10.3 ํ๊ตญ์ด ๋ฒค์น๋งํฌ](#103-ํ๊ตญ์ด-๋ฒค์น๋งํฌ) | |
| - [10.4 ์์ด ๋ฒค์น๋งํฌ](#104-์์ด-๋ฒค์น๋งํฌ) | |
| - [10.5 Calibration](#105-calibration) | |
| - [10.6 0-shot vs 5-shot ๋น๊ต](#106-0-shot-vs-5-shot-๋น๊ต) | |
| - [10.7 ์ฐธ๊ณ ๋ชจ๋ธ ๋น๊ต](#107-์ฐธ๊ณ -๋ชจ๋ธ-๋น๊ต) | |
| - [10.8 ์์ฑ ํ์ง ๋ฐ ํ๋ผ๋ฏธํฐ ๊ทธ๋ฆฌ๋ ์์น](#108-์์ฑ-ํ์ง-๋ฐ-ํ๋ผ๋ฏธํฐ-๊ทธ๋ฆฌ๋-์์น) | |
| - [10.9 ํ๊ฐ ํ์ดํ๋ผ์ธ](#109-ํ๊ฐ-ํ์ดํ๋ผ์ธ) | |
| 11. [์คํ ๊ฒฐ๊ณผ โ 3B SFT ์ข ํฉ ํ๊ฐ](#11-์คํ-๊ฒฐ๊ณผ--3b-sft-์ข ํฉ-ํ๊ฐ) | |
| - [11.1 SFT ํ์ต ๊ฒฐ๊ณผ](#111-sft-ํ์ต-๊ฒฐ๊ณผ) | |
| - [11.2 6์ฐจ์ ํ๊ฐ ์์ฝ](#112-6์ฐจ์-ํ๊ฐ-์์ฝ) | |
| - [11.3 Base vs SFT ๋น๊ต](#113-base-vs-sft-๋น๊ต) | |
| - [11.4 ์ฝ๋ ๊ฐ์ ์ฌํญ](#114-์ฝ๋-๊ฐ์ -์ฌํญ) | |
| - [11.5 ORPO ์งํ ํ์ ](#115-orpo-์งํ-ํ์ ) | |
| 12. [Phase 3 โ ORPO (์ ํธ๋ ์ ๋ ฌ)](#12-phase-3--orpo-์ ํธ๋-์ ๋ ฌ) | |
| - [12.1 ORPO ์ ํ ๋ฐฐ๊ฒฝ](#121-orpo-์ ํ-๋ฐฐ๊ฒฝ) | |
| - [12.2 ๋ฐ์ดํฐ](#122-๋ฐ์ดํฐ) | |
| - [12.3 HP Sweep ์ค๊ณ](#123-hp-sweep-์ค๊ณ-6-config) | |
| - [12.4 ์๋ ์ด๋ ฅ](#124-์๋-์ด๋ ฅ--5๋ฒ์-์คํจ) | |
| - [12.5 ์ค์ ๊ฒฐ๊ณผ](#125-์ค์-๊ฒฐ๊ณผ-์งํ-์ค) | |
| - [12.7 ORPO ๋ณธ ํ์ต](#127-orpo-๋ณธ-ํ์ต-์งํ-์ค-2026-03-09) | |
| - [12.8 ORPO ์ข ํฉ ํ๊ฐ ํ์ดํ๋ผ์ธ](#128-orpo-์ข ํฉ-ํ๊ฐ-ํ์ดํ๋ผ์ธ) | |
| 13. [์คํ ๋ฐฉ๋ฒ](#13-์คํ-๋ฐฉ๋ฒ) | |
| 14. [๋ก๋๋งต](#14-๋ก๋๋งต) | |
| 15. [์ฐธ๊ณ ๋ฌธ์](#15-์ฐธ๊ณ -๋ฌธ์) | |
| 16. [๊ธฐ์ ์คํ ์์ฝ](#16-๊ธฐ์ -์คํ-์์ฝ) | |
| 17. [๊ด๋ จ ํ๋ก์ ํธ](#๊ด๋ จ-ํ๋ก์ ํธ) | |
| 18. [๋ค์ ์ต์ ํ ๊ณํ](#18-๋ค์-์ต์ ํ-๊ณํ--mfu-335--47-๋ชฉํ) | |
| 19. [GPU ํ๋์จ์ด & ๋น์ฉ ๋ถ์](#19-gpu-ํ๋์จ์ด--๋น์ฉ-๋ถ์--3b--60b-ํ๋ฆฌํธ๋ ์ธ) | |
| --- | |
| ## 1. ์ ์ด ํ๋ก์ ํธ์ธ๊ฐ | |
| ํ๊ตญ์ด LLM ์ํ๊ณ๋ ๋น ๋ฅด๊ฒ ์ฑ์ฅํ๊ณ ์๋ค. ๊ทธ๋ฌ๋ ๋๋ถ๋ถ์ ๊ณต๊ฐ ๋ชจ๋ธ์ ์์ด ๊ธฐ๋ฐ ์ฌ์ ํ์ต ์์ ํ๊ตญ์ด ํ์ธํ๋์ ์น์ ํํ๊ฑฐ๋, ํ์ต ๊ณผ์ ์ด ๊ณต๊ฐ๋์ง ์์ ์ฌํ์ด ๋ถ๊ฐ๋ฅํ๋ค. | |
| ์ด ํ๋ก์ ํธ๋ ๋ค๋ฅด๋ค. | |
| - **์ฒ์๋ถํฐ(from scratch)**: ํ ํฌ๋์ด์ ํ์ต๋ถํฐ ํ๋ฆฌํธ๋ ์ธ, SFT, ์ ํธ๋ ์ ๋ ฌ๊น์ง ๋ชจ๋ ๋จ๊ณ๋ฅผ ์ง์ ๊ตฌํํ๋ค. | |
| - **์์ ๊ณต๊ฐ ๋น๋ ๋ก๊ทธ**: ์ฑ๊ณต๋ง ๊ธฐ๋กํ์ง ์๋๋ค. ๋ฒ๊ทธ, ์คํจ, ํ๋จ ์ฐฉ์ค, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ธ ๋ถ์๊น์ง ๋ชจ๋ ๊ธฐ๋กํ๋ค. | |
| - **์ค์ฉ์ ์ธ ๊ท๋ชจ**: ํ์ ๋ ผ๋ฌธ์ฉ ์ฅ๋๊ฐ ๋ชจ๋ธ(125M)๋ ์๋๊ณ , ์ฐ๊ตฌ์๊ฐ ์๋๋ฉด ์ฌํ ๋ถ๊ฐ๋ฅํ 70B๋ ์๋, **3B ๊ท๋ชจ**์ ์ค์ฉ์ ํ๊ตญ์ด ๋ชจ๋ธ์ด ๋ชฉํ๋ค. | |
| - **B200 ์ต์ ํ**: NVIDIA B200์ FP8 Tensor Core, NVLink 5.0, FlashAttention-2๋ฅผ ์ต๋ํ ํ์ฉํ๋ค. ์ต์ ํ๋์จ์ด๋ฅผ ์ต๋๋ก ์ฅ์ด์ง๋ ๊ณผ์ ์์ฒด๊ฐ ํ์ต์ด๋ค. | |
| ์ด README๋ ์์ฑ๋ ๊ฒฐ๊ณผ๋ฌผ์ ๋ฐํ๊ฐ ์๋๋ผ, **ํ์ฌ ์งํ ์ค์ธ ๋น๋์ ๋ก๊ทธ**๋ค. | |
| --- | |
| ## 2. ํ์ฌ ์ํ โ ํ๋์ ๋ณด๊ธฐ | |
| ``` | |
| 2026-03-09 ๊ธฐ์ค | |
| ``` | |
| | ๋จ๊ณ | ์ํ | ์ธ๋ถ ๋ด์ฉ | | |
| |------|------|-----------| | |
| | Phase 0: ๊ธฐ๋ฐ ๊ตฌ์ถ | โ ์๋ฃ | OOM ์์ , GQA FA ์ต์ ํ, NCCL NVLS, ํ์ดํ๋ผ์ธ ์ค๋น | | |
| | Phase 1: 3B Pretrain | โ ์๋ฃ | 57,000 steps, loss 1.466, ~63์๊ฐ | | |
| | Phase 2: SFT | โ ์๋ฃ | 25,500 steps (early stop), val_loss 1.8851, ~15.5์๊ฐ | | |
| | Phase 2.5: SFT ํ๊ฐ | โ ์๋ฃ | 6์ฐจ์ ํ๊ฐ 4/6 PASS, ORPO ์งํ ๊ฒฐ์ | | |
| | Phase 3: ORPO Sweep | โ ์๋ฃ | 6-config sweep ์๋ฃ, best: lr=1.2e-5, beta=0.25 | | |
| | **Phase 3: ORPO ๋ณธ ํ์ต** | **๐ ์งํ ์ค** | **630K pairs, 2 epochs, ~9,840 steps, ~4.8์๊ฐ** | | |
| | Phase 4: ๋ฐฐํฌ | ๐ ๋๊ธฐ | GGUF ๋ณํ โ Ollama ์๋น | | |
| ### Phase 2 (SFT) ์ต์ข ๊ฒฐ๊ณผ | |
| | ํญ๋ชฉ | ๊ฐ | | |
| |------|-----| | |
| | ์ต์ข step | **25,500 / 33,000** (77.3%, early stopping) | | |
| | **Val loss (best)** | **1.8851** (step 23,000) | | |
| | ํ์ต ์๊ฐ | **~15์๊ฐ 41๋ถ** (2026-03-05 22:15 ~ 2026-03-06 13:56) | | |
| | VRAM ์ฌ์ฉ | **24.2GB** / 183GB per GPU (13.2%) | | |
| | Base ๋ชจ๋ธ | checkpoint-0057000 (pretrain loss 1.466) | | |
| | SFT ๋ฐ์ดํฐ | **2,439,397 samples** (24๊ฐ ์์ค, 7.48 GB) | | |
| | ์ฌ๊ณ | 0๊ฑด (OOM, NCCL, NaN ์์) | | |
| **SFT Val Loss ์ ์ฒด ์ถ์ด**: | |
| ``` | |
| Step 500: 2.073 | |
| Step 2,000: 1.956 (-0.117) | |
| Step 5,000: 1.911 (-0.045) | |
| Step 10,000: 1.892 (-0.019) | |
| Step 15,000: 1.886 (-0.006) | |
| Step 20,000: 1.885 (-0.001) | |
| Step 23,000: 1.8851 โ BEST | |
| Step 25,500: 1.8851 โ Early Stop (patience 5/5) | |
| ``` | |
| ### SFT 6์ฐจ์ ํ๊ฐ ์์ฝ | |
| | ์ฐจ์ | ๊ฒฐ๊ณผ | ํต์ฌ ์์น | | |
| |------|------|-----------| | |
| | Perplexity (์ง์ ๋ณด์กด) | **PASS** | forgetting 0.9% | | |
| | ์์ฑ ํ์ง | **FAIL** | Greedy ๋ฐ๋ณต๋ฅ 72.97% | | |
| | ํ๊ตญ์ด ๋ฒค์น๋งํฌ | **FAIL** | KoBEST ํ๊ท 43.26% | | |
| | ์์ด ๋ฒค์น๋งํฌ | **PASS** | ์ ํ์คํฌ ํํ ์ด๊ณผ | | |
| | Calibration | **PASS** | Top-1 68.59% | | |
| | SFT Chat ๋ฅ๋ ฅ | **PASS** | EOS ์ข ๋ฃ์จ 60% (Base 0%) | | |
| > **ํ์ : ORPO ์งํ** โ ์ง์ ๋ณด์กด ์ฐ์(0.9%), ๋ฐ๋ณต๋ฅ ์ ์ ํธ๋ ์ ๋ ฌ๋ก ํด๊ฒฐ. | |
| > ์์ธ: `reports/2026-03-06_3B_SFT_COMPLETION_AND_EVAL_SUMMARY.md` | |
| --- | |
| ## 3. ํ๋์จ์ด ํ๊ฒฝ | |
| ### GPU | |
| | ํญ๋ชฉ | ์ฌ์ | | |
| |------|------| | |
| | ๋ชจ๋ธ | 8ร NVIDIA B200 | | |
| | VRAM | 183GB HBM3e per GPU (~1.47TB ํฉ๊ณ) | | |
| | FP8 Tensor Core | 2,250 TFLOPS/GPU (์ด 18,000 TFLOPS) | | |
| | BF16 | 1,125 TFLOPS/GPU | | |
| | HBM3e ๋์ญํญ | ~7.67 TB/s per GPU | | |
| | ์ธํฐ์ปค๋ฅํธ | NVLink 5.0 (900 GB/s bidirectional per GPU) | | |
| | ํ ํด๋ก์ง | NVSwitch โ ๋ชจ๋ GPUโGPU ๋จ์ผ ํ All-to-All Mesh | | |
| | ์ ๋ ฅ | 940W ์ค์ธก / 1000W cap | | |
| B200์ FP8 ๋ค์ดํฐ๋ธ ์ง์ ๋ชจ๋ธ์ด๋ค. `torch.float8_e4m3fn` ์ TransformerEngine์ MXFP8 ๋ ์ํผ์ ๊ฒฐํฉํด ํ์ตํ๋ค. BF16 ๋๋น ์ฐ์ฐ๋์ด ์ด๋ก ์ 2๋ฐฐ์ด๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ํจ์จ๋ ํฅ์๋๋ค. | |
| ### CPU ๋ฐ ์์คํ ๋ฉ๋ชจ๋ฆฌ | |
| | ํญ๋ชฉ | ์ฌ์ | | |
| |------|------| | |
| | CPU | 2ร AMD EPYC 9365 (Turin / Zen 5) | | |
| | ๋ฌผ๋ฆฌ ์ฝ์ด | 72๊ฐ (36์ฝ์ด ร 2์์ผ) | | |
| | NUMA ๊ตฌ์ฑ | 2๋ ธ๋: node0 (core 0-35) / node1 (core 36-71) | | |
| | GPUโNUMA ๋งคํ | GPU 0-3 โ NUMA node 0, GPU 4-7 โ NUMA node 1 | | |
| | RAM | 2.21TB DDR5 (~2.03TB ์ฌ์ ) | | |
| | L3 ์บ์ | 384MB (12 CCX ร 32MB) | | |
| **NUMA ์ฃผ์**: ์ด๊ธฐ DDP ๋ฐ์นญ ์ 5/8 rank๊ฐ ์๋ชป๋ NUMA ๋ ธ๋์์ ์คํ๋๋ ๋ฌธ์ ๋ฐ์. 69%์ DataLoader worker๊ฐ ํฌ๋ก์ค-NUMA์๋ค. NUMA affinity ์ต์ ํ๋ ๋ฏธ์ ์ฉ ์ํ(๋ก๋๋งต ํญ๋ชฉ). | |
| ### ์คํ ๋ฆฌ์ง | |
| | ๊ฒฝ๋ก | ์ฉ๋ | ์ฌ์ ๊ณต๊ฐ | | |
| |------|------|-----------| | |
| | `/PROJECT/0325120031_A/ghong/taketimes/llm-bang/` | ๋ฉ์ธ ์์ (์ฒดํฌํฌ์ธํธ, ๋ฐ์ดํฐ) | 2.2TB | | |
| | `/home/ghong/` | ์๊ท๋ชจ ์ฝ๋ | 5GB (์ ํ) | | |
| > **์ฃผ์**: ์ฒดํฌํฌ์ธํธ(์์ญ GB), ํ์ต ๋ฐ์ดํฐ(82GB+), ์ค๊ฐ ์ฐ์ถ๋ฌผ์ ๋ชจ๋ `/PROJECT/...` ๊ฒฝ๋ก์ ์ ์ฅํ๋ค. ํ ๋๋ ํ ๋ฆฌ ์ฉ๋ ์ด๊ณผ ์ํ. | |
| ### ์ํํธ์จ์ด ํ๊ฒฝ | |
| | ํจํค์ง | ๋ฒ์ | | |
| |--------|------| | |
| | PyTorch | `2.10.0a0+b4e4ee81d3.nv25.12` (NVIDIA ์ปค์คํ ) | | |
| | FlashAttention | 2.7.4.post1+25.12 | | |
| | TransformerEngine | 2.10.0 | | |
| | NCCL | 2.28.9 | | |
| | Triton | 3.5.1 | | |
| | CUDA | 13.1 | | |
| | Driver | 580.95.05 | | |
| > **๊ฒฝ๊ณ **: PyTorch๋ NVIDIA B200 ์ต์ ํ ์ปค์คํ ๋น๋๋ค. `pip install torch`๋ก ์ฌ์ค์นํ๋ฉด B200 ์ต์ ํ๊ฐ ๊นจ์ง๋ค. **์ ๋ ์ฌ์ค์น ๊ธ์ง.** | |
| --- | |
| ## 4. ํ๋ก์ ํธ ๊ตฌ์กฐ | |
| ``` | |
| llm-bang/ | |
| โโโ CLAUDE.md # Claude Code ๊ฐ์ด๋ | |
| โโโ README.md # ์ด ํ์ผ | |
| โโโ PROGRESS.md # ์งํ ๊ธฐ๋ก (๋ ์ง๋ณ ๋ก๊ทธ) | |
| โโโ Modelfile.3b # Ollama ๋ชจ๋ธ ํ์ผ | |
| โ | |
| โโโ configs/ | |
| โ โโโ korean_3b_fp8.yaml # 3B FP8 ํ์ต ์ค์ (ํ์ฌ ์ฌ์ฉ ์ค) | |
| โ โโโ 3b_pretrain.yaml # 3B ํ๋ฆฌํธ๋ ์ธ ์ค์ (๋์ฒด) | |
| โ โโโ korean_1b_fp8.yaml # 1B FP8 ์ค์ (์์นด์ด๋ธ) | |
| โ โโโ korean_3b_sft.yaml # 3B SFT v1 ์ค์ (์๋ฃ) | |
| โ โโโ korean_3b_sft_v2.yaml # 3B SFT v2 ์ค์ (lr=5e-5, data mixing) | |
| โ โโโ korean_3b_orpo.yaml # 3B ORPO ์ค์ (lr=5e-6, beta=0.1) | |
| โ โโโ hybrid_3b.yaml # Hybrid 3B (Mamba-2 + Attention) | |
| โ โโโ small_fp8.yaml # 125M FP8 ๊ฒ์ฆ์ฉ | |
| โ โโโ medium.yaml # ์คํ ๋ชจ๋ธ ์ค์ | |
| โ โโโ small.yaml # ์ํ ๋ชจ๋ธ ์ค์ | |
| โ | |
| โโโ data/ | |
| โ โโโ 3b_train.bin # ํ๋ฆฌํธ๋ ์ธ ํ์ต ๋ฐ์ดํฐ (82GB, 41.12B tokens) | |
| โ โโโ 3b_val.bin # ๊ฒ์ฆ ๋ฐ์ดํฐ (151MB) | |
| โ โโโ cc100_ko_train.bin # CC100 ํ๊ตญ์ด (4.5GB) | |
| โ โโโ cosmo_auto_math_text_train.bin # ์ํ ํ ์คํธ (2.6GB) | |
| โ โโโ build scripts, __init__.py | |
| โ | |
| โโโ model/ | |
| โ โโโ attention.py # GQA FlashAttention (Phase 0 ์ต์ ํ ์ ์ฉ) | |
| โ โโโ transformer.py # ํธ๋์คํฌ๋จธ ๋ฉ์ธ ์ํคํ ์ฒ | |
| โ โโโ config.py # ๋ชจ๋ธ ์ค์ dataclass | |
| โ โโโ layers.py # ์ปค์คํ ๋ ์ด์ด (RMSNorm, SwiGLU ๋ฑ) | |
| โ | |
| โโโ train/ | |
| โ โโโ pretrain.py # ํ๋ฆฌํธ๋ ์ธ ์คํฌ๋ฆฝํธ (DDP ์ต์ ํ) | |
| โ โโโ sft.py # SFT ํ์ต | |
| โ โโโ orpo.py # ORPO ํ์ต | |
| โ โโโ trainer.py # ํตํฉ ํธ๋ ์ด๋ (loss sync ์ต์ ํ) | |
| โ โโโ utils.py # ์ ํธ๋ฆฌํฐ (NCCL 7200s timeout ๋ฑ) | |
| โ | |
| โโโ scripts/ | |
| โ โโโ launch_3b_pretrain.sh # 3B ํ๋ฆฌํธ๋ ์ธ ๋ฐ์ฒ (NCCL ํ๊ฒฝ๋ณ์ ํฌํจ) | |
| โ โโโ launch_3b_sft.sh # 3B SFT v1 ๋ฐ์ฒ | |
| โ โโโ launch_3b_sft_v2.sh # 3B SFT v2 ๋ฐ์ฒ (data mixing) | |
| โ โโโ launch_3b_orpo.sh # 3B ORPO ๋ฐ์ฒ | |
| โ โโโ monitor_3b.sh # ์ค์๊ฐ ํ์ต ๋ชจ๋ํฐ | |
| โ โโโ training_watchdog.sh # ์์น๋ (10๋ถ ๊ฐ๊ฒฉ, ํฌ๋ก ) | |
| โ โโโ convert_3b_gguf.sh # GGUF ๋ณํ ์คํฌ๋ฆฝํธ | |
| โ โโโ deploy_3b_ollama.sh # Ollama ๋ฐฐํฌ | |
| โ โโโ quality_gate.sh # ๋ฐฐํฌ ์ ํ์ง ๊ฒ์ดํธ | |
| โ โโโ telegram_notify.py # ํ ๋ ๊ทธ๋จ ์๋ฆผ (urllib ์ฌ์ฉ, curl ์ฐจ๋จ) | |
| โ โโโ hourly_status.sh # 1์๊ฐ ๊ฐ๊ฒฉ ์ํ ๋ฆฌํฌํธ | |
| โ | |
| โโโ eval/ | |
| โ โโโ debate/ | |
| โ โ โโโ justice_league_3b_case.md # 3B ์ ํ ๋ ผ์ฆ (์ ์คํฐ์ค๋ฆฌ๊ทธ ๋ฉํฐ์์ด์ ํธ) | |
| โ โโโ decision/ | |
| โ โ โโโ FINAL_DECISION_REPORT.md # SFT ์ฌ์์ ํ๊ฒฐ๋ฌธ | |
| โ โโโ plan/ | |
| โ โ โโโ 3B_MASTER_PLAN.md # 3B ๋ง์คํฐ ํ๋ | |
| โ โโโ tasks/ # ๋ชจ๋ํ๋ ํ๊ฐ ํ์คํฌ | |
| โ โ โโโ task_runner.py # 8-GPU ๋ณ๋ ฌ ํ์คํฌ ์คํ๊ธฐ | |
| โ โ โโโ ppl_task.py # Perplexity ํ๊ฐ ํ์คํฌ | |
| โ โ โโโ lm_eval_task.py # lm-evaluation-harness ๋ํผ | |
| โ โ โโโ calibration_task.py # Calibration ๋ถ์ | |
| โ โ โโโ generation_task.py # ์์ฑ ํ์ง + ํ๋ผ๋ฏธํฐ ๊ทธ๋ฆฌ๋ ์์น | |
| โ โ โโโ token_nll_task.py # Token NLL ๋ถํฌ ๋ถ์ | |
| โ โโโ outputs/ # ํ๊ฐ ๊ฒฐ๊ณผ (์๋ ์์ฑ, .gitignore) | |
| โ โโโ full_eval_pipeline.py # v2 ์ข ํฉ ํ๊ฐ ํ์ดํ๋ผ์ธ (8-GPU ๋ณ๋ ฌ) | |
| โ โโโ sft_eval_pipeline.py # SFT 6์ฐจ์ ํ๊ฐ ํ์ดํ๋ผ์ธ | |
| โ โโโ reeval_pipeline.py # ์ฌํ๊ฐ ํ์ดํ๋ผ์ธ (0+5-shot ์ฐ์) | |
| โ โโโ report_generator.py # ๋งํฌ๋ค์ด ๋ฆฌํฌํธ ์๋ ์์ฑ | |
| โ โโโ comprehensive_eval.py # v1 ์ข ํฉ ํ๊ฐ (๋ ๊ฑฐ์) | |
| โ โโโ test_generation_params.py # ์์ฑ ํ๋ผ๋ฏธํฐ ํ์ | |
| โ | |
| โโโ tokenizer/ | |
| โ โโโ korean_sp/ # SentencePiece 64K ๋ชจ๋ธ ํ์ผ | |
| โ โโโ tokenizer.json # HuggingFace ํฌ๋งท (2.4MB) | |
| โ โโโ train_sp_tokenizer.py # ํ ํฌ๋์ด์ ํ์ต ์คํฌ๋ฆฝํธ | |
| โ โโโ convert_sp_to_hf.py # SentencePiece โ HF ๋ณํ | |
| โ | |
| โโโ checkpoints/ # ๋ชจ๋ธ ์ฒดํฌํฌ์ธํธ (๋์ฉ๋, .gitignore) | |
| โ | |
| โโโ docs/ | |
| โ โโโ PROJECT_HISTORY.md # ํ๋ก์ ํธ ์ ์ฒด ์ฌ์ ์์ธ ๊ธฐ๋ก | |
| โ โโโ 3B_WORKPLAN.md # 3B ์์ ๊ณํ | |
| โ | |
| โโโ reports/ | |
| โโโ 2026-03-02_0200_FRANKENSTALLM_phase0_optimization_report.md | |
| โโโ 2026-03-05_3B_BASE_EVALUATION_REPORT.md | |
| โโโ 2026-03-05_3B_SFT_PROGRESS_REPORT.md # SFT ํ์ต ๋ณด๊ณ ์ (Phase 2) | |
| โโโ 2026-03-05_3B_NEXT_STEPS_REFERENCE.md | |
| โโโ 2026-03-05_NEMOTRON_NANO_FEASIBILITY_STUDY.md | |
| โโโ 2026-03-05_PPL_EVALUATION.md | |
| โโโ 2026-03-05_BENCHMARK_RESULTS.md | |
| โโโ 2026-03-05_GENERATION_QUALITY.md | |
| โโโ 2026-03-06_3B_SFT_EVAL_PLAN.md # SFT 6์ฐจ์ ํ๊ฐ ๊ณํ์ | |
| โโโ 2026-03-06_3B_SFT_EVALUATION_REPORT.md # SFT 6์ฐจ์ ํ๊ฐ ๊ฒฐ๊ณผ | |
| โโโ 2026-03-06_3B_SFT_COMPLETION_AND_EVAL_SUMMARY.md # SFT ์๋ฃ + ์ฝ๋ ๊ฐ์ ์ข ํฉ | |
| ``` | |
| --- | |
| ## 5. ํ๋ก์ ํธ ์ฌ์ ํ์๋ผ์ธ | |
| ์ด ์น์ ์ด ์ด README์ ํต์ฌ์ด๋ค. ๊ฒฐ๊ณผ๋ง์ด ์๋๋ผ **์** ๊ทธ๋ฐ ๊ฒฐ์ ์ ๋ด๋ ธ๋์ง, **์ด๋์** ์คํจํ๋์ง๋ฅผ ์์งํ๊ฒ ๊ธฐ๋กํ๋ค. | |
| --- | |
| ### Day 1 (Feb 25) โ ์ฒซ ๋ถ์จ: 125M FP8 ๊ฒ์ฆ | |
| ํ๋ก์ ํธ์ ์์์ ์์ ์๋ฌธ์์ ์ถ๋ฐํ๋ค. B200์์ FP8์ด ์ค์ ๋ก ์์ ์ ์ผ๋ก ํ์ต๋๋๊ฐ? | |
| TransformerEngine์ MXFP8 ๋ ์ํผ๋ฅผ 125M ์ํ ๋ชจ๋ธ์ ์ ์ฉํด ๊ฒ์ฆํ๋ค. ๊ฒฐ๋ก ์ **์์ ์ ์ผ๋ก ๋์ํ๋ค**. loss ์๋ ด๋ ์ ์์ด์๊ณ , VRAM ํจ์จ๋ BF16 ๋๋น ํ์ฐํ ๊ฐ์ ์ด ์์๋ค. ์ด ๊ฒ์ฆ์ด ์ ์ฒด ํ์ดํ๋ผ์ธ์ ์ฒซ ๋ฒ์งธ ๋ น์ ์ ํธ์๋ค. | |
| ๊ฐ์ ๋ , ์ธํ๋ผ ์ธํ ๋ ์๋ฃํ๋ค. DDP 8-GPU ํ๊ฒฝ, NCCL ํ๊ฒฝ๋ณ์, ์ฒดํฌํฌ์ธํธ ์ ์ฅ ๊ฒฝ๋ก, ํ ๋ ๊ทธ๋จ ์๋ฆผ ์์คํ ์ ์ด์์ด ์ด๋ ๊ฐ์ถฐ์ก๋ค. | |
| --- | |
| ### Day 1~2 (Feb 25~26) โ 1B ํ๋ฆฌํธ๋ ์ธ: 34K ์คํ , PPL 5.67 | |
| 125M ๊ฒ์ฆ ์งํ 1B ๋ชจ๋ธ ํ๋ฆฌํธ๋ ์ธ์ ๋์ ํ๋ค. | |
| - **์ํคํ ์ฒ**: d_model=2048, 24 layers, GQA 4:1, SwiGLU, RoPE | |
| - **๋ฐ์ดํฐ**: C4 Korean ๊ธฐ๋ฐ | |
| - **ํ์ต**: 34,000 ์คํ , FP8, 8ร B200 DDP | |
| ์ต์ข ๊ฒฐ๊ณผ: | |
| - **Loss: 1.904** | |
| - **PPL (C4 Korean): 5.67** | |
| ์์น๋ง ๋ณด๋ฉด ๊ทธ๋ญ์ ๋ญ ๊ด์ฐฎ๋ค. ๊ทธ๋ฌ๋ ์ค์ ํ ์คํธ ์์ฑ์ ์์ผ๋ณด๋ฉด ๋ฌธ์ ๊ฐ ๋ณด์๋ค. ๋ฐ๋ณต ํจํด, ์ด์ํ ๋ฌธ์ฅ ๊ตฌ์กฐ, ๋งฅ๋ฝ ์ดํ. ํ๋ฆฌํธ๋ ์ธ ๋ชจ๋ธ์ด๋ ๋น์ฐํ๋ค. ์ด์ SFT ์ฐจ๋ก์๋ค. | |
| --- | |
| ### Day 2 (Feb 26) โ SFT v1: 0.0์ด๋ผ๋ ์ฌ์ | |
| SFT๋ฅผ ๋๋ ธ๋ค. ํ์ต์ด ์์๋์๋ง์ loss๊ฐ ๋น ๋ฅด๊ฒ ๋จ์ด์ง๊ธฐ ์์ํ๋ค. ์ฒ์์ ์ข์ ์ ํธ๋ผ๊ณ ์๊ฐํ๋ค. | |
| ๊ทธ๋ฐ๋ฐ loss๊ฐ **0.0**์ด ๋๋ค. | |
| val loss๋ 0.0. ์์ฑ ๊ฒฐ๊ณผ๋ ์์ ํ ์ฐ๋ ๊ธฐ์๋ค. | |
| ์์ธ์ ์ฐพ์๋ค: **label off-by-one ๋ฒ๊ทธ**. ์ ๋ ฅ ํ ํฐ๊ณผ ๋ ์ด๋ธ ํ ํฐ์ด ํ ์นธ์ฉ ๋ฐ๋ ค ์์๋ค. ๋ชจ๋ธ์ด ์ค์ ๋ก ๋ค์ ํ ํฐ์ ์์ธกํ๋ ๊ฒ์ด ์๋๋ผ, ์ด๋ฏธ ์๊ณ ์๋ ์ ๋ต์ ๋ง์ถ๋ ๊ตฌ์กฐ๊ฐ ๋ผ ์์๋ค. loss๊ฐ 0์ด ๋ ๊ฑด "์๋ฒฝํ ํ์ต"์ด ์๋๋ผ **๋ฐ์ดํฐ ๋์(label leakage)** ์๋ค. | |
| ํ๋ฃจ๋ฅผ ๋ ๋ ธ๋ค. | |
| --- | |
| ### Day 3 (Feb 27) โ 5๊ฐ์ง ๋ฒ๊ทธ, ๋ฃจํธ ์ฝ์ฆ ๋ถ์ | |
| ์คํจ๋ฅผ ๋ถ์ํ๊ธฐ ์ํด **5-์์ด์ ํธ ๋ฃจํธ ์ฝ์ฆ ๋ถ์**์ ์ํํ๋ค. ๊ฒฐ๋ก ์ ๋ฒ๊ทธ ํ๋๊ฐ ์๋์๋ค. SFT ํ์ดํ๋ผ์ธ ์ ์ฒด์ ๋ฌธ์ ๊ฐ ์์๋ค. | |
| ๋ฐ๊ฒฌ๋ 5๊ฐ์ง ํต์ฌ ๋ฒ๊ทธ: | |
| | ๋ฒ๊ทธ | ์ฆ์ | ์ํฅ | | |
| |------|------|------| | |
| | Static padding (no packing) | ์งง์ ์ํ๋ max_len์ผ๋ก ํจ๋ฉ | GPU ๋ญ๋น, ํ์ต ๋นํจ์จ | | |
| | EOS ํ ํฐ ์ ๋จ | ์๋ต ๋์ EOS๊ฐ ์์ | ๋ชจ๋ธ์ด "๋ฌธ์ฅ ๋"์ ๋ชป ๋ฐฐ์ | | |
| | ๋จ์ผ ์ํญ | ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ๋ง ๋ด | ์ธ๋ํผํ | | |
| | ๊ฒ์ฆ ๋ถ๋ฆฌ ์์ | val_loss ์ธก์ ๋ถ๊ฐ | ์ค๋ฒํผํ ๊ฐ์ง ๋ถ๊ฐ | | |
| | ๋ฐ์ดํฐ ํ์ง | ๋ ธ์ด์ฆ, ์ค๋ณต, ๋ถ๊ท ํ | ๋ฐ๋ณต ์์ฑ ํจํด ์ ๋ | | |
| ํนํ EOS ์ ๋จ ๋ฒ๊ทธ๋ subtleํ๋ค. ๋ชจ๋ธ์ด ์๋ต์ ๋ง์น๋ ์์ ์ ๋ฐฐ์ฐ์ง ๋ชปํ๋ฉด, ์์ฑ ์ ๋์์์ด ๊ฐ์ ํจํด์ ๋ฐ๋ณตํ๊ฑฐ๋ ์๋ฏธ ์๋ ํ ํฐ์ ์ด์ด๋ถ์ธ๋ค. 18% ๋ฐ๋ณต๋ฅ ์ ์์ธ ์ค ํ๋์๋ค. | |
| --- | |
| ### Day 3 (Feb 27) โ SFT v2: ์ฑ๊ณต์ด์ง๋ง 18% ๋ฐ๋ณต | |
| 5๊ฐ์ง ๋ฒ๊ทธ๋ฅผ ๋ชจ๋ ์์ ํ๊ณ SFT v2๋ฅผ ๋๋ ธ๋ค. | |
| - **val_loss: 2.2062** โ ํฉ๋ฆฌ์ ์์ค | |
| - **๋ฐ๋ณต๋ฅ : 18%** (rep_penalty=1.1 ์ ์ฉ ํ) | |
| ์์ฑ ํ์ง์ v1์ ๋นํด ํ์ฐํ ๊ฐ์ ๋๋ค. ํ์ง๋ง 18% ๋ฐ๋ณต๋ฅ ์ ์ฌ์ ํ ๋๋ค. `rep_penalty`๋ฅผ ๋์ด๋ฉด ๋ฐ๋ณต์ ์ค์ง๋ง ์์ฑ ๋ค์์ฑ๋ ์ค๊ณ ์ด์ํด์ง๋ค. ๋์ฝ๋ฉ ํ๋ผ๋ฏธํฐ๋ก ํด๊ฒฐํ๊ธฐ์ ๊ตฌ์กฐ์ ํ๊ณ๊ฐ ์๋ค. | |
| kobest_copa ๊ธฐ์ค 0.646. ๊ด์ฐฎ์ ์์น์ด์ง๋ง ๋ชฉํ์๋ ๋ฏธ์น์ง ๋ชปํ๋ค. | |
| --- | |
| ### Day 3 (Feb 27) โ "์ ์คํฐ์ค๋ฆฌ๊ทธ vs ์ด๋ฒค์ ์ค": 3B ์ ํ ๊ฒฐ์ | |
| ๋ฐ๋ณต๋ฅ 18%๋ฅผ ๋๊ณ ํ ๋ด๋ถ ํ ๋ก ์ด ๋ฒ์ด์ก๋ค. ํต์ฌ ์ง๋ฌธ์ ํ๋์๋ค: | |
| > **ORPO๋ก ๋ฐ๋ณต์ ์ก์ ์ ์๋๊ฐ, ์๋๋ฉด 3B๋ก ๊ฐ์ผ ํ๋๊ฐ?** | |
| ์ด ์ง๋ฌธ์ ๋ตํ๊ธฐ ์ํด **๋ฉํฐ์์ด์ ํธ ํ ๋ก **์ ์ํํ๋ค (์ฝ๋๋ช : "์ ์คํฐ์ค๋ฆฌ๊ทธ vs ์ด๋ฒค์ ์ค"). ๊ฐ ์์ด์ ํธ๊ฐ ๋ค๋ฅธ ์ ์ฅ์ ๋งก์ ๋ ผ์ฆํ๋ค. | |
| ํ ๋ก ์ ํต์ฌ ๋ฐ๊ฒฌ: | |
| 1. **18% ๋ฐ๋ณต์ 1B ํ๋ผ๋ฏธํฐ์ ๊ตฌ์กฐ์ ํ๊ณ**๋ค. 1B ๋ชจ๋ธ์ ์ฅ๊ฑฐ๋ฆฌ ์์กด์ฑ(long-range dependency)์ ์ถฉ๋ถํ ํฌ์ฐฉํ์ง ๋ชปํ๋ค. ORPO ๊ฐ์ ์ ํธ๋ ์ ๋ ฌ์ ๋ฐ๋ณต์ ์ค์ด๋ ๋ฐ ์ผ๋ถ ๋์์ด ๋์ง๋ง, ๊ทผ๋ณธ ์์ธ(ํ๋ผ๋ฏธํฐ ๋ถ์กฑ)์ ํด๊ฒฐํ์ง๋ ๋ชปํ๋ค. | |
| 2. **์ค์ผ์ผ๋ง ๋ฒ์น ๋ถ์**: Chinchilla ๋ฒ์น๊ณผ ์คํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก 3B ๋ชจ๋ธ์ ๋์ผ ๋ฐ์ดํฐ์์ ๋ฐ๋ณต๋ฅ ์ 5~8%๊น์ง ๋ฎ์ถ ์ ์๋ค๋ ์ถ์ ์ด ๋์๋ค. | |
| 3. **๋น์ฉ-ํธ์ต ๋ถ์**: ORPO๋ฅผ 1B์ ํฌ์ํ๋ ๊ฒ๋ณด๋ค 3B ํ๋ฆฌํธ๋ ์ธ์ ํฌ์ํ๋ ๊ฒ์ด ์ต์ข ๋ชจ๋ธ ํ์ง ์ธก๋ฉด์์ ์ฐ์ํ๋ค. | |
| **๊ฒฐ๋ก : 3B ์ ํ**. 1B๋ ์์นด์ด๋ธํ๊ณ 3B ํ๋ฆฌํธ๋ ์ธ์ ์์ํ๋ค. | |
| ์ด ๊ฒฐ์ ์ `eval/debate/justice_league_3b_case.md`์ ์ ์ฒด ๋ ผ์ฆ๊ณผ ํจ๊ป ๊ธฐ๋ก๋ผ ์๋ค. | |
| --- | |
| ### Day 3 (Feb 27) โ 640GB+ ๋ฐ์ดํฐ ์กฐ๋ฆฝ | |
| 3B ์ ํ์ด ๊ฒฐ์ ๋์๋ง์ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ๊ฐ๋ํ๋ค. 1B์ ๋นํด ํจ์ฌ ๋ง์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ค (Chinchilla ์ต์ ๋น์จ: 3B ๋ชจ๋ธ ร 20 = 60B tokens). | |
| ์ต์ข ์ ์ผ๋ก ์กฐ๋ฆฝํ ๋ฐ์ดํฐ: | |
| - **์ด ํ ํฐ**: 41.12B tokens (์ต์ข ์ด์ง ํ์ผ) | |
| - **์์ ๋ฐ์ดํฐ**: 640GB+ ๋ค๊ตญ์ด ํ ์คํธ | |
| - **์์ค**: C4 Korean, ๋๋ฌด์ํค, Wikipedia Korean, korean_extra ๋ฐ์ดํฐ์ | |
| ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ(ํ ํฌ๋์ด์ฆ, ์ ํ, ์ด์ง ๋ณํ)๊ฐ ์๋ฃ๋ `data/3b_train.bin`์ 82GB๋ค. ๊ฒ์ฆ์ `data/3b_val.bin`์ 151MB. | |
| --- | |
| ### Mar 2 โ Phase 0: OOM ๊ฒฉํด ๋ฐ ์ต์ ํ | |
| 3B ํ์ต์ ์ฒ์ ์์ํ์ OOM(Out of Memory)์ด ๋ฐ์ํ๋ค. 183GB VRAM์ธ๋ฐ 3B ๋ชจ๋ธ์ด OOM์ด ๋๋ค๋ ๊ฒ ์ด์ํ์ง๋ง, ์์ธ์ ์์๋ค. | |
| **GQA FlashAttention ๊ตฌํ ๋ฌธ์ **์๋ค. GQA(Grouped-Query Attention)์์ KV ์บ์๋ฅผ expandํ๋ ๋ฐฉ์์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ถํ์ํ๊ฒ ๋ณต์ฌํ๊ณ ์์๋ค. FlashAttention์ native GQA support๋ฅผ ์ ๋๋ก ํ์ฉํ์ง ์์ ๊ฒ์ด๋ค. | |
| Phase 0์์ ์ํํ ์ต์ ํ ๋ชฉ๋ก: | |
| | ์ต์ ํ | ๋ฐฉ๋ฒ | ํจ๊ณผ | | |
| |--------|------|------| | |
| | GQA FA Native | `flash_attn_varlen_func` native GQA ๊ฒฝ๋ก ์ฌ์ฉ | VRAM 60.4GB โ 48.3GB (**-20%**) | | |
| | DDP ์ต์ ํ | `gradient_as_bucket_view=True` | GPU-CPU ๋๊ธฐํ ์ค๋ฒํค๋ -87.5% | | |
| | NCCL NVLS | Ring+Tree ํ ํด๋ก์ง, NVLS ํ์ฑํ | AllReduce ํจ์จ ๊ฐ์ | | |
| | ๋ฐฐ์น ํฌ๊ธฐ ๋ถ์ | GPU 2,4,6์ NCCL relay node ์ญํ ํ์ | bs=5 ์ต์ , bs=6 ์ํ ํ์ | | |
| | SIGHUP ๋ฐฉ์ด | nohup+setsid + Python signal handler + emergency ckpt | 3์ค ๋ณดํธ | | |
| | ๋ชจ๋ํฐ๋ง | Telegram Bot (B200Bot) + cron | 10๋ถ ์์น๋ , 1์๊ฐ ์ํ ๋ฆฌํฌํธ | | |
| **torch.compile ํ ์คํธ**: ํจ๊ณผ ์์(1.00x). ์์ธ์ TransformerEngine์ opaque kernel์ด graph break๋ฅผ ์ ๋ฐํ๊ณ , `/tmp` ๋๋ ํ ๋ฆฌ์ noexec ํ๋๊ทธ๊ฐ ๊ฑธ๋ ค ์์ด ์ปดํ์ผ๋ kernel ์บ์๊ฐ ์ฐ์ด์ง ์์๋ค. ์๊ฐ ๋ญ๋น๋ฅผ ํ ์ ์ด์ง๋ง, "ํจ๊ณผ ์๋ค"๋ ๊ฒ์ ์ค์ธก์ผ๋ก ํ์ธํ ๊ฒ๋ ์ฑ๊ณผ๋ค. | |
| **bs=5์ ์ด์ **: NCCL ring topology์์ GPU 2, 4, 6์ด relay node ์ญํ ์ ๋งก๋๋ค. ์ด GPU๋ค์ ๋ค๋ฅธ GPU๋ณด๋ค ์ฝ 11GB๋ฅผ ๋ ์ฌ์ฉํ๋ค. bs=5์์๋ ์ฌ์ ๊ฐ ์์ง๋ง, bs=6์ผ๋ก ์ฌ๋ฆฌ๋ฉด ์ด relay GPU๋ค์ด 183GB ๊ฒฝ๊ณ์ ๋๋ฌด ๊ฐ๊น์์ง๋ค. ์์ ๋ง์ง์ ์ํด bs=5๋ฅผ ์ ์งํ๋ค. | |
| --- | |
| ### Mar 2~Mar 5 โ Phase 1: 3B ํ๋ฆฌํธ๋ ์ธ ์๋ฃ | |
| Phase 0 ์ต์ ํ๊ฐ ์๋ฃ๋ ํ Phase 1์ด ์์๋๋ค. | |
| ์ด๊ธฐ ์งํ (step 3150): | |
| - Loss: 2.38 | |
| - ์ฒ๋ฆฌ ์๋: 36K tok/s per rank | |
| - ์์คํ ์ ์ฒด: ~292K tok/s (8 GPU) | |
| - MFU: ~33.5% | |
| MFU 33.5%๋ ์ฒ์์๋ ๋ฎ์ ๋ณด์ผ ์ ์๋ค. ํ์ง๋ง TE MXFP8๊ฐ ์ด๋ฏธ ์ต์ ํ๋ ์ํ์์ ๋์จ ์์น๋ค. ์ด๋ก ์ ํผํฌ(18,000 TFLOPS) ๋๋น ์คํจ์จ์ด๋ค. ์ถ๊ฐ ์ต์ ํ ์ฌ์ง๋ก QKV fusion (+8~12%), NUMA affinity (+4~9%), FA2 native RoPE (+3~5%)๊ฐ ๋จ์์๋ค. | |
| **Phase 1 ์๋ฃ (2026-03-05)**: | |
| - **57,000 steps ์๋ฃ**, ์ต์ข loss **1.466** | |
| - 41.12B ํ ํฐ ์ฒ๋ฆฌ, ์ด ํ์ต ์๊ฐ ์ฝ 63์๊ฐ | |
| - ๋ฌด์ฌ๊ณ ์๋ฃ (SIGHUP, OOM, NCCL ์ด์ ์์) | |
| ์ข ํฉ ํ๊ฐ ๊ฒฐ๊ณผ ์์ฝ (v2 ์ฌํ๊ฐ ๋ฐ์): | |
| | ํญ๋ชฉ | ๊ฒฐ๊ณผ | | |
| |------|------| | |
| | PPL (ํตํฉ ๊ฒ์ฆ์ ) | 5.2263 (์ด๊ธฐ v1 ํ๊ฐ: 5.709) | | |
| | PPL (C4 Korean) | 5.717 | | |
| | KoBEST ํ๊ท (5ํ์คํฌ) | 43.69% | | |
| | MMLU-KO ํ๊ท (6์นดํ ๊ณ ๋ฆฌ) | 22.75% | | |
| | HAE-RAE | 19.71% | | |
| | winogrande / piqa | 50.59% / 52.50% | | |
| | Calibration Top-1 | 68.75% | | |
| | Greedy 3-gram ๋ฐ๋ณต๋ฅ | 60.99% (SFT ํ ๊ฐ์ ์์ ) | | |
| | ์ต์ ์์ฑ ํ๋ผ๋ฏธํฐ | temp=0.7, rep_penalty=1.3 โ ๋ฐ๋ณต๋ฅ 0% | | |
| **SFT ์งํ ๊ฒฐ์ **: loss 1.466์ ๊ฑด๊ฐํ ํ์ต ์๋ฃ ์๊ทธ๋. PPL/๋ฐ๋ณต๋ฅ /๋ฒค์น๋งํฌ ๋ชจ๋ SFT๊ฐ ํด๊ฒฐํ ์์ญ. ๋ชจ๋ธ ๊ตฌ์กฐ ๋ฌธ์ ์งํ ์์. โ Phase 2 SFT ์งํ. | |
| --- | |
| ### Mar 5~ โ Phase 2: 3B SFT ์์ โ 2.44M ์ํ, val_loss 1.956 | |
| Phase 1 ์๋ฃ ์งํ, ๋๊ท๋ชจ SFT ๋ฐ์ดํฐ๋ฅผ ์ค๋นํ๊ณ ํ์ต์ ์์ํ๋ค. | |
| **๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ**: | |
| - **24๊ฐ ์์ค**์์ 6.59M raw samples ์์ง | |
| - `prepare_sft_combined.sh`: ํฌ๋งท ํต์ผ(6๊ฐ์ง ํฌ๋งท โ messages), MD5 ์ค๋ณต ์ ๊ฑฐ, 98:2 split | |
| - `filter_sft_v2.py`: 5๋จ๊ณ ํ์ง ํํฐ (EOS strip, QA marker ์ ๊ฑฐ, ๊ธธ์ด ํํฐ, 4-gram ๋ฐ๋ณต ํํฐ) | |
| - ์ต์ข : **2,439,397 train + 49,801 val** (7.48 GB) | |
| ๋ฐ์ดํฐ ๊ตฌ์ฑ์ ์ถ๋ก /CoT(38%), ํ๊ตญ์ด ์ง์(22.5%), ์์ด ๋ค๋ชฉ์ (16%), ์ํ(12%), ๋ํ/์ฝ๋(11.5%)๋ก ๊ท ํ์ ๋ง์ท๋ค. 1B SFT์ 161K์์ **15๋ฐฐ ํ๋**ํ ๊ท๋ชจ๋ค. | |
| **SFT ์ค๊ณ โ 1B ์คํจ์์ ๋ฐฐ์ด ๊ตํ ๋ฐ์**: | |
| | 1B ๊ตํ | 3B SFT ์ ์ฉ | | |
| |---------|-------------| | |
| | Label off-by-one โ loss=0 | Loss masking ๊ฒ์ฆ (prompt=-1, response๋ง ํ์ต) | | |
| | EOS ์ ๋จ โ ์ข ๋ฃ ๋ถ๊ฐ | Chat template `<\|user\|>...<\|assistant\|>...</s>` EOS ํฌํจ | | |
| | Static padding โ GPU ๋ญ๋น | Dynamic padding (64-token ์ ๋ ฌ) | | |
| | ๊ฒ์ฆ ์์ โ ์ค๋ฒํผํ ๋ฏธ๊ฐ์ง | 49,801 val samples, 500 step ๊ฐ๊ฒฉ eval | | |
| | ๋ฐ์ดํฐ ๋ ธ์ด์ฆ | 5๋จ๊ณ ํ์ง ํํฐ (1B์๋ ์์์) | | |
| | ๋ฐ๋ณต๋ฅ 18% | **NEFTune alpha=5.0** ์ถ๊ฐ (์๋ฒ ๋ฉ ๋ ธ์ด์ฆ ์ฃผ์ ) | | |
| **ํ์ต ์ค์ **: | |
| - LR: **1e-5** (pretrain์ 1/15 โ catastrophic forgetting ๋ฐฉ์ง) | |
| - Effective batch: 2 ร 8 GPU ร 4 accum = 64 sequences | |
| - 33,000 steps (~3.3 epochs) | |
| - MXFP8, gradient checkpointing, NCCL Ring+Tree | |
| **์ด๊ธฐ ๊ฒฐ๊ณผ** (step 2,000, 6%): | |
| - Val loss: 2.073 โ 2.004 โ 1.975 โ **1.956** (๋จ์กฐ ๊ฐ์) | |
| - Train-Val ๊ฐญ ~0.1 (์ค๋ฒํผํ ์งํ ์์) | |
| - VRAM 24.2 GB (13.2%) โ pretrain์ ์ ๋ฐ, ๋งค์ฐ ์์ | |
| - Grad norm 1.0 ์ผ์ (ํ์ต๋ฅ ์ ์ ) | |
| ์์ธ ๋ณด๊ณ ์: `reports/2026-03-05_3B_SFT_PROGRESS_REPORT.md` | |
| --- | |
| ### Mar 6 โ Phase 2 ์๋ฃ: SFT Early Stopping (val_loss 1.8851) | |
| SFT๋ 33,000 steps ์ค **25,500 steps**์์ early stopping์ผ๋ก ์ข ๋ฃ๋์๋ค. Val loss๋ step 23,000์์ 1.8851์ ๋๋ฌํ ๋ค, 5ํ ์ฐ์ ๊ฐ์ ์์ด ํ์ต์ด ์๋ ์ค๋จ๋์๋ค. | |
| **์ด ํ์ต ์๊ฐ**: ~15์๊ฐ 41๋ถ (2026-03-05 22:15 ~ 2026-03-06 13:56) | |
| ์ด ๊ฒฐ๊ณผ๋ LR 1e-5์ cosine decay๊ฐ step 20K ์ดํ ์ฌ์ค์ 0์ ์๋ ดํ ๊ฒ๊ณผ ์ผ์นํ๋ค. ๋ชจ๋ธ์ ์ฃผ์ด์ง LR schedule ํ์์ ํ์ต ๊ฐ๋ฅํ ๋งํผ ์์ ํ ํ์ตํ๋ค. | |
| --- | |
| ### Mar 6 โ SFT 6์ฐจ์ ์ข ํฉ ํ๊ฐ: 4/6 PASS โ ORPO ๊ฒฐ์ | |
| SFT ์ฒดํฌํฌ์ธํธ(`checkpoint-best`, step 23000)์ ๋ํด 6์ฐจ์ ์ข ํฉ ํ๊ฐ๋ฅผ ์ํํ๋ค. 49๋ถ 27์ด ์์. | |
| **ํต์ฌ ๊ฒฐ๊ณผ**: | |
| - **Perplexity**: forgetting 0.9% (19๊ฐ ๋ฐ์ดํฐ์ ์ ์ฒด PASS) โ ์ง์ ๋ณด์กด ์ฐ์ | |
| - **๋ฐ๋ณต๋ฅ **: greedy 72.97% (Base 60.99%๋ณด๋ค **์ ํ**) โ FAIL | |
| - **EOS ์ข ๋ฃ์จ**: 0% โ 60% โ ๊ฐ์ ๋์ง๋ง ๋ชฉํ(90%) ๋ฏธ๋ฌ | |
| - **KoBEST**: 43.26% (Base 43.69%์ ๊ฑฐ์ ๋์ผ) โ FAIL | |
| - **MMLU-KO**: 22.75% โ 26.00% (+3.2pp) โ ๋ถ๋ถ ๊ฐ์ | |
| - **Calibration**: Top-1 68.59% โ PASS | |
| **๊ฒฐ์ **: greedy ๋ฐ๋ณต๋ฅ 72.97%๋ SFT๋ง์ผ๋ก ํด๊ฒฐ ๋ถ๊ฐ. ๊ทธ๋ฌ๋ `rep_penalty=1.2` ์ ์ฉ ์ ๋ฐ๋ณต๋ฅ 0%๊ฐ ๋ฌ์ฑ๋๋ฏ๋ก, ORPO(์ ํธ๋ ์ ๋ ฌ)๋ก ์ด ํ๋์ ๋ด์ฌํํ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅธ ๊ฒฝ๋ก๋ค. | |
| --- | |
| ### Mar 6 โ ์ฝ๋ ๊ฐ์ ๋ฐ ORPO ์ค๋น | |
| SFT ํ๊ฐ์ ๋ณํํ์ฌ ๋ค์์ ์ฝ๋ ๊ฐ์ ๋ฐ Phase 3 ์ค๋น๋ฅผ ์๋ฃํ๋ค: | |
| | ๋ณ๊ฒฝ | ๋ด์ฉ | ์ํฅ | | |
| |------|------|------| | |
| | `train/sft.py` +238์ค | MixingDataLoader (SFT+pretrain ์ธํฐ๋ฆฌ๋น), DDP rank 0 ํ ํฌ๋์ด์ง | forgetting ๋ฐฉ์ง, ๋ฉ๋ชจ๋ฆฌ 8๋ฐฐ ์ ๊ฐ | | |
| | `train/trainer.py` +17์ค | DDP early stopping broadcast (hang ๋ฐฉ์ง), patience 5โ10 | DDP ์์ ์ฑ | | |
| | `train/orpo.py` +30์ค | YAML config ์ง์, 3B ๊ธฐ๋ณธ๊ฐ | ORPO ์คํ ์ค๋น | | |
| | `eval/report_generator.py` +831์ค | Base vs SFT ๋น๊ต ๋ณด๊ณ ์ ์๋ ์์ฑ | ํ๊ฐ ์๋ํ | | |
| | `eval/sft_eval_pipeline.py` ์ ๊ท | SFT 6์ฐจ์ ํ๊ฐ ํ์ดํ๋ผ์ธ | ์ข ํฉ ํ๊ฐ | | |
| | `eval/tasks/generation_task.py` +75์ค | Chat template, ๋ค์์ฑ ๋ฉํธ๋ฆญ | SFT ํ๊ฐ | | |
| | `configs/korean_3b_sft_v2.yaml` ์ ๊ท | SFT v2 ์ค์ (lr=5e-5, data mixing 70/30) | ๋ฐฑ์ ๊ฒฝ๋ก | | |
| | `configs/korean_3b_orpo.yaml` ์ ๊ท | ORPO ์ค์ (lr=5e-6, beta=0.1) | Phase 3 | | |
| ์์ธ: `reports/2026-03-06_3B_SFT_COMPLETION_AND_EVAL_SUMMARY.md` | |
| --- | |
| ## 6. ๋ชจ๋ธ ์ํคํ ์ฒ | |
| ### 1B (์์นด์ด๋ธ) | |
| | ํญ๋ชฉ | ๊ฐ | | |
| |------|-----| | |
| | vocab_size | 64,000 | | |
| | d_model | 2,048 | | |
| | n_layers | 24 | | |
| | n_heads | 16 | | |
| | n_kv_heads | 4 (GQA 4:1) | | |
| | d_ffn | 5,461 (SwiGLU) | | |
| | ํ๋ผ๋ฏธํฐ ์ | ~1.19B | | |
| | context | 2,048 | | |
| | rope_theta | 500,000 | | |
| ### 3B (ํ์ฌ) | |
| | ํญ๋ชฉ | ๊ฐ | | |
| |------|-----| | |
| | vocab_size | 64,000 | | |
| | d_model | 3,072 | | |
| | n_layers | 28 | | |
| | n_heads | 24 | | |
| | n_kv_heads | 8 (GQA 3:1) | | |
| | d_ffn | 8,192 (SwiGLU) | | |
| | ํ๋ผ๋ฏธํฐ ์ | ~3.0B | | |
| | context | 2,048 | | |
| | rope_theta | 500,000 | | |
| ### ๊ณตํต ์ค๊ณ ์์น | |
| | ์ปดํฌ๋ํธ | ์ ํ | ์ด์ | | |
| |----------|------|------| | |
| | ์ ๊ทํ | Pre-norm RMSNorm | Post-norm๋ณด๋ค ํ์ต ์์ ์ | | |
| | ํ์ฑํ | SwiGLU FFN | Llama ๊ณ์ด์์ ๊ฒ์ฆ๋ ์ ํ | | |
| | ์์น ์ธ์ฝ๋ฉ | RoPE (ฮธ=500K) | ๊ธด ์ปจํ ์คํธ ํ์ฅ ๊ฐ๋ฅ์ฑ | | |
| | ์ดํ ์ | GQA (Grouped-Query Attention) | KV ์บ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ฐ | | |
| | ๊ตฌํ | FlashAttention-2 | IO-aware, VRAM ํจ์จ | | |
| | ์ ๋ฐ๋ | FP8 (MXFP8 via TransformerEngine) | B200 ์ต์ ํ์ฉ | | |
| ### GQA ๋น์จ ์ ํ ๊ทผ๊ฑฐ | |
| 1B๋ GQA 4:1 (head 16๊ฐ, kv_head 4๊ฐ), 3B๋ GQA 3:1 (head 24๊ฐ, kv_head 8๊ฐ)์ ์ ํํ๋ค. 3B์์ ๋น์จ์ ๋ค์ ์ํํ ์ด์ ๋, ํ๋ผ๋ฏธํฐ ์๊ฐ ๋์ด๋๋ฉด์ ์ดํ ์ ํ์ง์ ๋ค์ ํฌ์ํ๋ ๊ฒ์ด 3B ๊ท๋ชจ์์๋ ์ํด๋ผ๋ ํ๋จ์ด์๋ค. Mistral 7B (GQA 8:1)์ Llama 3 (GQA 8:1)๋ฅผ ์ฐธ๊ณ ํ๋ค. | |
| ### rope_theta=500,000์ ์๋ฏธ | |
| ํ์ค RoPE์ ฮธ=10,000์์ 500,000์ผ๋ก ๋๋ฆฐ ๊ฒ์ ๊ธด ์ปจํ ์คํธ์์ ์ฃผํ์ ๊ฐ์ญ์ ์ค์ด๊ธฐ ์ํด์๋ค. Code Llama, Llama 3 ๋ฑ์ด ์ฑํํ ๋ฐฉ์์ด๋ค. ํ์ฌ max_seq_len=2048์ด๋ฏ๋ก ๋น์ฅ ํจ๊ณผ๋ฅผ ๋ณด๊ธฐ๋ ์ด๋ ต์ง๋ง, ํฅํ ์ปจํ ์คํธ ํ์ฅ ํ์ธํ๋์ ์ํ ๊ธฐ๋ฐ์ด๋ค. | |
| --- | |
| ## 7. ํ์ต ๋ฐ์ดํฐ | |
| ### 7.1 ํ ํฌ๋์ด์ | |
| | ํญ๋ชฉ | ๊ฐ | | |
| |------|-----| | |
| | ์ข ๋ฅ | SentencePiece Unigram | | |
| | ์ดํ ํฌ๊ธฐ | 64,000 | | |
| | ํ๊ตญ์ด ๋ฌธ์ ์ปค๋ฒ๋ฆฌ์ง | 99.95% | | |
| | ์์น | `tokenizer/korean_sp/` | | |
| | HF ํฌ๋งท | `tokenizer/tokenizer.json` (2.4MB) | | |
| 64K ์ดํ๋ 32K(๋๋ฌด ์์, ํ๊ตญ์ด ์๋ธ์๋ ๋จํธํ ์ฌํจ)์ 128K(๋๋ฌด ํผ, ์๋ฒ ๋ฉ ๋ ์ด์ด ์ค๋ฒํค๋ ์ฆ๊ฐ) ์ฌ์ด์ ๊ท ํ์ด๋ค. Llama 3(128K)์ GPT-4(100K)๊ฐ ํฐ ์ดํ๋ฅผ ์ฌ์ฉํ๋ ์ถ์ธ์ง๋ง, 3B ๋ชจ๋ธ์์ 128K ์ดํ๋ ์๋ฒ ๋ฉ ๋ ์ด์ด๋ง์ผ๋ก๋ ํ๋ผ๋ฏธํฐ ๋น์ค์ด ์ง๋์น๊ฒ ์ปค์ง๋ค. | |
| ### 7.2 ํ๋ฆฌํธ๋ ์ธ ๋ฐ์ดํฐ โ ์ ์ฒด ๊ตฌ์ฑ | |
| ์ต์ข ํ์ต ํ์ผ: `data/3b_train.bin` (77GB, ~38.5B tokens) + `data/3b_val.bin` (145MB) | |
| Chinchilla ๋ฒ์น ๊ธฐ์ค: 3B ร 20 = **60B ํ ํฐ**์ด ์ต์ ์ด๋ค. ํ์ฌ 38.5B ํ ํฐ์ 57,000 ์คํ (batch 5 ร accum 8 ร seq 2048 ร 8 GPU)์ผ๋ก ๋ฐ๋ณต ์๋นํ๋ฉฐ, ์ฒ์ 3B ํ์ต์ผ๋ก์ ํฉ๋ฆฌ์ ์ธ ๋ฒ์๋ค. | |
| #### ํ๊ตญ์ด โ ์นํฌ๋กค (Web Crawl) | |
| | ๋ฐ์ดํฐ์ | HuggingFace ID | ํ ํฐํ ํ์ผ | ํฌ๊ธฐ | ์ถ์ ํ ํฐ | ์ค๋ช | | |
| |----------|---------------|------------|------|----------|------| | |
| | C4 Korean | `allenai/c4` (ko subset) | `korean_c4_train.bin` | 15GB | ~7.5B | Google C4 ํ๊ตญ์ด ํํฐ๋ง, ๋๊ท๋ชจ ํด๋ฆฐ ์น ํ ์คํธ | | |
| | CC-100 Korean | `cc100` (ko subset) | `cc100_ko_train.bin` | 4.3GB | ~2.15B | Common Crawl ๊ธฐ๋ฐ ๋จ์ผ์ธ์ด ์ฝํผ์ค | | |
| | HPLT Korean | `HPLT/hplt_monolingual_v2` (ko) | `hplt_ko_train.bin` | 15GB | ~7.5B | High Performance Language Technologies ์น ๋ฐ์ดํฐ | | |
| #### ํ๊ตญ์ด โ ๋ฐฑ๊ณผ์ฌ์ (Encyclopedia) | |
| | ๋ฐ์ดํฐ์ | HuggingFace ID | ํ ํฐํ ํ์ผ | ํฌ๊ธฐ | ์ถ์ ํ ํฐ | ์ค๋ช | | |
| |----------|---------------|------------|------|----------|------| | |
| | ์ํค๋ฐฑ๊ณผ ํ๊ตญ์ด | `wikimedia/wikipedia` (20231101.ko) | `wikipedia_ko_train.bin` | 566MB | ~283M | ํ๊ตญ์ด ์ํค๋ฐฑ๊ณผ ์ ์ฒด, ๊ตฌ์กฐํ๋ ๋ฌธ์ด์ฒด | | |
| | ์ํค๋ฐฑ๊ณผ ํ๊ตญ์ด (v2) | `wikimedia/wikipedia` (ko) | `korean_wiki_train.bin` | 500MB | ~250M | ์ํค๋ฐฑ๊ณผ ๋ณ๋ ๋ฒ์ | | |
| | ๋๋ฌด์ํค | `heegyu/namuwiki-extracted` | `korean_namuwiki_train.bin` | 2.1GB | ~1.05B | ๋๋ฌด์ํค ์ถ์ถ๋ณธ, ์๋ธ์ปฌ์ฒยท์์ฌ ํ๋ถ | | |
| | ๋๋ฌด์ํค 2023b | `heegyu/namuwiki-extracted` (2023b) | `namuwiki_2023b_train.bin` | 2.5GB | ~1.25B | 2023๋ ์ ๋ฐ์ดํธ ์ค๋ ์ท | | |
| #### ์์ด/๋ค๊ตญ์ด โ ๊ต์ก (Educational) | |
| | ๋ฐ์ดํฐ์ | HuggingFace ID | ํ ํฐํ ํ์ผ | ํฌ๊ธฐ | ์ถ์ ํ ํฐ | ์ค๋ช | | |
| |----------|---------------|------------|------|----------|------| | |
| | Cosmopedia Stories | `HuggingFaceTB/cosmopedia` | `cosmo_stories_train.bin` | 5.9GB | ~2.95B | ํฉ์ฑ ๊ต์ก์ฉ ์คํ ๋ฆฌ | | |
| | Cosmopedia Web v2 | `HuggingFaceTB/cosmopedia` | `cosmo_web_v2_train.bin` | 2.7GB | ~1.35B | ์น ๊ธฐ๋ฐ ๊ต์ก ํ ์คํธ | | |
| | Cosmopedia Stanford | `HuggingFaceTB/cosmopedia` | `cosmo_stanford_train.bin` | 2.1GB | ~1.05B | Stanford ๊ฐ์ ๊ธฐ๋ฐ | | |
| | Cosmopedia WikiHow | `HuggingFaceTB/cosmopedia` | `cosmo_wikihow_train.bin` | 382MB | ~191M | WikiHow ๊ฐ์ด๋ | | |
| | Cosmopedia OpenStax | `HuggingFaceTB/cosmopedia` | `cosmo_openstax_train.bin` | 224MB | ~112M | ์คํ ๊ต๊ณผ์ | | |
| | Cosmopedia Khan Academy | `HuggingFaceTB/cosmopedia` | `cosmo_khanacademy_train.bin` | 46MB | ~23M | ์นธ ์์นด๋ฐ๋ฏธ | | |
| #### ์์ด/๋ค๊ตญ์ด โ ์ํยท๊ณผํ (Math & Science) | |
| | ๋ฐ์ดํฐ์ | HuggingFace ID | ํ ํฐํ ํ์ผ | ํฌ๊ธฐ | ์ถ์ ํ ํฐ | ์ค๋ช | | |
| |----------|---------------|------------|------|----------|------| | |
| | Open Web Math | `open-web-math/open-web-math` | `open_web_math_train.bin` | 4.8GB | ~2.4B | ์น์์ ์ถ์ถํ ์ํ ํ ์คํธ | | |
| | MathPile | `GAIR/MathPile` | `mathpile_train.bin` | 2.9GB | ~1.45B | ์ํ ๊ต๊ณผ์ยท๋ ผ๋ฌธยทํฌ๋ผ | | |
| | Cosmopedia AutoMath | `HuggingFaceTB/cosmopedia` | `cosmo_auto_math_text_train.bin` | 2.5GB | ~1.25B | ํฉ์ฑ ์ํ ๋ฌธ์ ยทํ์ด | | |
| #### ํ๊ตญ์ด โ ํผํฉ (Legacy Merged) | |
| | ๋ฐ์ดํฐ์ | ํ ํฐํ ํ์ผ | ํฌ๊ธฐ | ์ถ์ ํ ํฐ | ์ค๋ช | | |
| |----------|------------|------|----------|------| | |
| | ์ด๊ธฐ ํผํฉ (C4+๋๋ฌด+์ํค) | `korean_train.bin` | 17GB | ~8.5B | 1B ํ์ต์ ์ฌ์ฉ๋ ์๋ณธ ํผํฉ ๋ฐ์ดํฐ | | |
| | 125M ๊ฒ์ฆ์ฉ | `train.bin` | 1.2GB | ~600M | ์ต์ด FP8 ๊ฒ์ฆ์ ์ฌ์ฉ | | |
| #### ๋ฏธ์ฌ์ฉ ์์ง ๋ฐ์ดํฐ (korean_extra/ โ 640GB+) | |
| `data/korean_extra/` ์ 39๊ฐ ์๋ธ๋๋ ํ ๋ฆฌ๋ก ์์ง๋์์ผ๋, ํ ํฐํยท๋ณํฉ์ ์ผ๋ถ๋ง ์๋ฃ๋ ๋๊ท๋ชจ ์์ ๋ฐ์ดํฐ: | |
| | ๋ถ๋ฅ | ๋ฐ์ดํฐ์ | ์ค๋ช | ๋น๊ณ | | |
| |------|----------|------|------| | |
| | ์นํฌ๋กค | CulturaX Korean | ๋๊ท๋ชจ ๋ค๊ตญ์ด ์น ์ฝํผ์ค ํ๊ตญ์ด | ~50B+ tokens | | |
| | ์นํฌ๋กค | FineWeb2 Educational Korean | ๊ต์ก์ ํ์ง ํํฐ๋ง ์น ๋ฐ์ดํฐ | 234GB raw | | |
| | ์นํฌ๋กค | Korean Web Collection | KORMo ์น ์ปฌ๋ ์ | 175GB raw | | |
| | ์นํฌ๋กค | OSCAR Korean | ๋ค๊ตญ์ด ์น ์ฝํผ์ค ํ๊ตญ์ด | | | |
| | ๊ต์ก | Korean Textbooks | ํ๊ตญ์ด ๊ต๊ณผ์ ํ ์คํธ | 45๊ฐ ์๋ธ์นดํ ๊ณ ๋ฆฌ | | |
| | ๊ต์ก | FinePDFs Educational Korean | PDF ๊ธฐ๋ฐ ๊ต์ก ์๋ฃ | | | |
| | ๋ฒ๋ฅ | Korean Law | ํ๊ตญ ๋ฒ๋ฅ ํ ์คํธ | 15GB | | |
| | ๋ด์ค | Korean News Archive | ํ๊ตญ์ด ๋ด์ค ์์นด์ด๋ธ | | | |
| | ๊ณต๊ฐ์ฝํผ์ค | Korean Public Corpus | KORMo ๊ณต๊ฐ ์ฝํผ์ค | 26GB | | |
| | ์ฝ๋ | Code Pretrain | ํ๋ก๊ทธ๋๋ฐ ์ฝ๋ | | | |
| | ํ์ | Academic Pretrain | ํ์ ๋ ผ๋ฌธยท๋ฆฌํฌํธ | | | |
| | ๋ฒ์ฉ | SlimPajama | RedPajama ๊ฒฝ๋ ๋ฒ์ | | | |
| > ์ด ๋ฐ์ดํฐ๋ Extended Pretrain (80-100B tokens) ๋จ๊ณ์์ ํ์ฉ ์์ ์ด๋ค. | |
| #### ํ๋ฆฌํธ๋ ์ธ ๋ฐ์ดํฐ ๋ถ์ผ๋ณ ๋น์จ | |
| ``` | |
| โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| โ 3b_train.bin ํ ํฐ ๊ตฌ์ฑ (~38.5B) โ | |
| โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค | |
| โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ ํ๊ตญ์ด ์นํฌ๋กค 44.7% โ | |
| โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ ํผํฉ ๋ ๊ฑฐ์ 22.1% โ | |
| โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ ๊ต์ก (EN) 14.7% โ | |
| โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ ์ํยท๊ณผํ 13.2% โ | |
| โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ ๋ฐฑ๊ณผ์ฌ์ (KO) 5.3% โ | |
| โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| ``` | |
| ### 7.3 SFT ๋ฐ์ดํฐ โ 2.44M ์ํ (ํ์ฌ ํ์ต ์ค) | |
| **24๊ฐ ์์ค**์์ 6.59M raw โ ํตํฉยท์ค๋ณต ์ ๊ฑฐ โ ํ์ง ํํฐ๋ง โ **2,439,397 train + 49,801 val** | |
| #### ์ฃผ์ SFT ์์ค (์์ 12, ์ ์ฒด์ 96%) | |
| | # | ๋ฐ์ดํฐ์ | ์ํ ์ | ํฌ๊ธฐ | ๋๋ฉ์ธ | | |
| |---|---------|---------|------|--------| | |
| | 1 | reasoning_r1_1.4m | 1,400,000 | 14.77 GB | ์ถ๋ก (CoT) | | |
| | 2 | openhermes_2.5 | 1,001,551 | 1.82 GB | ์์ด ๋ค๋ชฉ์ | | |
| | 3 | AI-MO_NuminaMath-CoT | 859,494 | 2.51 GB | ์ํ CoT | | |
| | 4 | korean_instruction_mix | 515,911 | 1.39 GB | ํ๊ตญ์ด ํผํฉ | | |
| | 5 | lemon-mint_smol-koreantalk | 460,281 | 5.23 GB | ํ๊ตญ์ด ๋ํ | | |
| | 6 | open_korean_instructions | 375,159 | 0.73 GB | ํ๊ตญ์ด ์ง์ | | |
| | 7 | magpie_reasoning_v2 | 249,922 | 3.99 GB | ์ถ๋ก (์์ด) | | |
| | 8 | magpie_reasoning_ko | 224,929 | 3.19 GB | ์ถ๋ก (ํ๊ตญ์ด) | | |
| | 9 | ultrachat_200k | 207,865 | 1.34 GB | ๋ํ | | |
| | 10 | kuotient_orca-math-ko | 193,789 | 0.61 GB | ์ํ (ํ๊ตญ์ด) | | |
| | 11 | data/sft/train.jsonl (์๋ณธ) | 161,848 | 0.27 GB | ์๋ณธ SFT | | |
| | 12 | kullm_v2 | 152,630 | 0.42 GB | ํ๊ตญ์ด ์ง์ | | |
| ๊ธฐํ 12๊ฐ ์์ค: DeepMath-103K, Evol-Instruct-Code-80k-ko, ShareGPT-74k-ko, evol-instruct-korean, alpaca-gpt4-korean, ko_wikidata_QA, Ko.WizardLM, KOR-OpenOrca-Platypus-v3, korean-writing-style-instruct, ko_lima, koalpaca_v1_1a, OpenAssistant_oasst1_ko | |
| #### ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ | |
| ``` | |
| 24๊ฐ ์์ค (6.59M raw) | |
| โ prepare_sft_combined.sh (ํฌ๋งท ํต์ผ, MD5 ์ค๋ณต ์ ๊ฑฐ, 98:2 split) | |
| ํตํฉ: 2,559,492 train + 52,234 val (7.95 GB) | |
| โ filter_sft_v2.py (5๋จ๊ณ: EOS strip, QA marker ์ ๊ฑฐ, ๊ธธ์ด 50~20K, 4-gram ๋ฐ๋ณต >30% ์ ๊ฑฐ) | |
| ์ต์ข : 2,439,397 train + 49,801 val (7.63 GB) โ ์ ๊ฑฐ์จ 4.69% | |
| ``` | |
| #### ๋๋ฉ์ธ ๋น์จ | |
| ``` | |
| ์ถ๋ก /CoT 38.0% โโโโโโโโโโโโโโโโโโโโโโโโ | |
| ํ๊ตญ์ด ์ง์ 22.5% โโโโโโโโโโโโโโ | |
| ์์ด ๋ค๋ชฉ์ 16.0% โโโโโโโโโโ | |
| ์ํ 12.0% โโโโโโโโ | |
| ๋ํ/์ฝ๋/๊ธฐํ 11.5% โโโโโโโ | |
| ``` | |
| ### 7.4 ์ ํธ๋ ๋ฐ์ดํฐ (ORPO์ฉ) โ 795K ์ | |
| ์ด **795,468 preference pairs** (7.9GB, `data/preference/combined_preference.jsonl`) | |
| | HuggingFace ID | ํฌ๊ธฐ | ๋ถ์ผ | ํฌ๋งท | | |
| |---------------|------|------|------| | |
| | `nayohan/preference-collection-ko-full` | 4.9GB | ๋ฒ์ฉ ์ ํธ๋ ํ๊ฐ | instruction + response_A/B + preference | | |
| | `heegyu/orca-math-korean-preference-cleaned` | 1.6GB | ์ํ ์ถ๋ก | prompt + chosen + rejected | | |
| | `kuotient/orca-math-korean-dpo-pairs` | 750MB | ์ํ DPO | prompt + chosen + rejected | | |
| | `maywell/ko_Ultrafeedback_binarized` | 394MB | ํผ๋๋ฐฑ ๊ธฐ๋ฐ ์ ๋ ฌ | prompt + winning/losing response | | |
| | `tellang/yeji-preference-ko-v1` | 171MB | ๋ฒ์ฉ ์ ํธ๋ | prompt + chosen + rejected | | |
| | `jojo0217/korean_rlhf_dataset` | 137MB | RLHF ์ | prompt + chosen + rejected | | |
| | `lemon-mint/korean-realqa-reasoning-v01-preference` | 58MB | QA ์ถ๋ก | prompt + chosen + rejected | | |
| **ํํฐ๋ง ๊ธฐ์ค**: ์ต์ ๊ธธ์ด 20์, EOS ์ ๊ฑฐ, ํฌ๋งท ์ ๊ทํ ํ ํตํฉ | |
| > ORPO๋ Phase 3์์ ๋ฐ๋ณต๋ฅ ์ด 5% ์ด๊ณผํ ๊ฒฝ์ฐ์๋ง ์คํํ๋ค. 3B ๋ชจ๋ธ์ด 1B์ ๊ตฌ์กฐ์ ๋ฐ๋ณต ๋ฌธ์ ๋ฅผ ์ค์ค๋ก ํด๊ฒฐํ๋ค๋ฉด ORPO ์์ด ๋ฐฐํฌํ ์ ์๋ค. | |
| ### 7.5 ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ์์ฝ | |
| ``` | |
| [HuggingFace / ์น ์์ง] | |
| โ | |
| โผ | |
| โโโโ ์์ ์์ง โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| โ korean_extra/ (39๊ฐ ๋๋ ํ ๋ฆฌ, 640GB+) โ | |
| โ sft_extra/ (27๊ฐ ๋๋ ํ ๋ฆฌ, 1.08M ์ํ) โ | |
| โ preference/ (7๊ฐ JSONL, 795K ์) โ | |
| โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| โ | |
| โผ | |
| โโโโ ํ ํฐํ (SentencePiece 64K) โโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| โ tokenize_extra.py โ ์๋ ํฌ๋งท ๊ฐ์ง (Arrow/Parquet/JSONL) โ | |
| โ 8 workers ๋ณ๋ ฌ ์ฒ๋ฆฌ, uint16 memmap (.bin) ์ถ๋ ฅ โ | |
| โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| โ | |
| โผ | |
| โโโโ ์ต์ข ๋ณํฉ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| โ Pretrain: 3b_train.bin (77GB, ~38.5B tokens) โ | |
| โ SFT: sft_combined/train_filtered.jsonl (7.48GB, 2.44M ์ํ) โ | |
| โ ORPO: preference/combined_preference.jsonl (7.9GB) โ | |
| โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| ``` | |
| --- | |
| ## 8. ํ์ต ์ค์ ๋ฐ ์ต์ ํ | |
| ### ํ์ฌ ํ์ต ์ค์ (`configs/korean_3b_fp8.yaml`) | |
| ```yaml | |
| model: | |
| vocab_size: 64000 | |
| d_model: 3072 | |
| n_layers: 28 | |
| n_heads: 24 | |
| n_kv_heads: 8 | |
| d_ffn: 8192 | |
| max_seq_len: 2048 | |
| rope_theta: 500000.0 | |
| training: | |
| batch_size: 5 | |
| gradient_accumulation_steps: 8 | |
| learning_rate: 1.5e-4 | |
| min_lr: 1.5e-5 | |
| warmup_steps: 2000 | |
| max_steps: 57000 | |
| weight_decay: 0.1 | |
| grad_clip: 1.0 | |
| optimizer: adamw | |
| scheduler: cosine | |
| fp8: | |
| enabled: true | |
| recipe: "mxfp8" | |
| use_transformer_engine: true | |
| distributed: | |
| strategy: ddp | |
| gradient_as_bucket_view: true | |
| find_unused_parameters: false | |
| nccl: | |
| timeout_seconds: 7200 | |
| nvls_enabled: true | |
| ``` | |
| ์ ํจ ๋ฐฐ์น ํฌ๊ธฐ = `batch_size(5) ร grad_accum(8) ร num_gpus(8)` = **320** | |
| LR ์ค์ผ์ค: warmup 2000 ์คํ โ cosine decay โ min_lr=1.5e-5 (max_lr์ 10%) | |
| ### Phase 0์์ ๋ฐฐ์ด ์ต์ ํ ๊ตํ | |
| #### GQA FlashAttention Native | |
| ๊ฐ์ฅ ํฐ VRAM ์ ๊ฐ์ ๊ฐ์ ธ์จ ์ต์ ํ. ํต์ฌ์ FlashAttention์ด GQA๋ฅผ native๋ก ์ง์ํ๋ค๋ ์ ์ด๋ค. KV head๋ฅผ expandํ์ฌ MHA์ฒ๋ผ ์ฒ๋ฆฌํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ๊ฐ ๋ฐ์ํ์ง๋ง, native path๋ฅผ ์ฐ๋ฉด ๋ด๋ถ์์ ์ง์ ์ฒ๋ฆฌํ๋ค. | |
| ```python | |
| # Before (๋นํจ์จ์ ): KV expand โ MHA์ฒ๋ผ ์ฒ๋ฆฌ | |
| k = k.repeat_interleave(n_heads // n_kv_heads, dim=1) | |
| v = v.repeat_interleave(n_heads // n_kv_heads, dim=1) | |
| out = flash_attn_func(q, k, v) | |
| # After (native GQA): flash_attn์ด ๋ด๋ถ์์ GQA ์ฒ๋ฆฌ | |
| out = flash_attn_func(q, k, v) # q: [B, S, H, D], k/v: [B, S, Hkv, D] | |
| # VRAM 60.4GB โ 48.3GB (-20%) | |
| ``` | |
| #### DDP ์ต์ ํ | |
| ```python | |
| # gradient_as_bucket_view=True: gradient tensor๋ฅผ bucket ๋ฉ๋ชจ๋ฆฌ์ view๋ก ์ง์ ๋งคํ | |
| # โ ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ ์ ๊ฑฐ, GPU-CPU ๋๊ธฐํ ์ค๋ฒํค๋ -87.5% | |
| model = torch.nn.parallel.DistributedDataParallel( | |
| model, | |
| device_ids=[local_rank], | |
| gradient_as_bucket_view=True, | |
| find_unused_parameters=False, # ๋ชจ๋ ํ๋ผ๋ฏธํฐ๊ฐ ์ฌ์ฉ๋จ | |
| ) | |
| ``` | |
| **์ฃผ์**: `static_graph=True`๋ ์ฌ์ฉํ์ง ์๋๋ค. TransformerEngine์ `te.Linear`๊ฐ ์ผ๋ถ ์ผ์ด์ค์์ dynamic graph๋ฅผ ์๊ตฌํ๋๋ฐ, static_graph๋ฅผ ์ผ๋ฉด ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. | |
| #### NCCL NVLS | |
| ```bash | |
| export NCCL_ALGO=NVLSTree # NVLink SHARP (NVLS) ํ์ฑํ | |
| export NCCL_PROTO=Simple | |
| export NCCL_P2P_DISABLE=0 | |
| export NCCL_TIMEOUT=7200 # ๊ธด backward์ ๋๋นํ ํ์์์ ์ฌ์ | |
| ``` | |
| NVSwitch๊ฐ All-to-All single hop์ ์ง์ํ๋ฏ๋ก Ring topology๋ณด๋ค NVLSTree๊ฐ ํจ์จ์ ์ด๋ค. | |
| #### SIGHUP 3์ค ๋ฐฉ์ด | |
| ์ฅ์๊ฐ ํ์ต์์ ์ธ์ ์ฐ๊ฒฐ ๋๊น(SIGHUP)์ ์น๋ช ์ ์ด๋ค. 3์ค ๋ณดํธ๋ฅผ ๊ตฌ์ถํ๋ค: | |
| ```bash | |
| # 1์ค: nohup + setsid (์ ์ธ์ ๊ทธ๋ฃน) | |
| nohup setsid torchrun --nproc_per_node=8 train/pretrain.py ... & | |
| # 2์ค: Python signal handler (Python ๋ ๋ฒจ SIGHUP ๋ฌด์) | |
| import signal | |
| signal.signal(signal.SIGHUP, signal.SIG_IGN) | |
| # 3์ค: emergency checkpoint (SIGTERM์๋ ์ฒดํฌํฌ์ธํธ ์ ์ฅ) | |
| def emergency_save(signum, frame): | |
| save_checkpoint(model, optimizer, step, "emergency") | |
| sys.exit(0) | |
| signal.signal(signal.SIGTERM, emergency_save) | |
| ``` | |
| #### torch.compile โ ํ ์คํธ ๊ฒฐ๊ณผ: ํจ๊ณผ ์์ | |
| `torch.compile`์ ์ ์ฉํด speedup์ ๊ธฐ๋ํ์ง๋ง ์ค์ธก ๊ฒฐ๊ณผ **1.00x (ํจ๊ณผ ์์)**์ด์๋ค. ๋ ๊ฐ์ง ์ด์ : | |
| 1. TransformerEngine์ kernel์ด opaqueํ์ฌ graph break๊ฐ ๋ฐ์ํ๋ค. `torch.compile`์ Python ์ฐ์ฐ ๊ทธ๋ํ๋ฅผ ์ต์ ํํ๋๋ฐ, TE kernel์ ๊ทธ ๊ทธ๋ํ ๋ฐ์ ์๋ค. | |
| 2. `/tmp` ๋๋ ํ ๋ฆฌ์ `noexec` ๋ง์ดํธ ํ๋๊ทธ๊ฐ ์์ด ์ปดํ์ผ๋ kernel์ ์บ์ํ์ง ๋ชปํ๋ค. | |
| **๊ตํ**: "์ผ๋จ ์จ๋ณด์"๋ณด๋ค "์ ํจ๊ณผ๊ฐ ์๋์ง ๋จผ์ ์ดํดํ์"๊ฐ ์ค์ํ๋ค. | |
| ### ๋ชจ๋ํฐ๋ง ์์คํ | |
| ``` | |
| ํ ๋ ๊ทธ๋จ ์๋ฆผ ์์คํ | |
| โโโ B200Bot (token ์ค์ ๋จ) | |
| โโโ training_watchdog.sh โ 10๋ถ ๊ฐ๊ฒฉ cron | |
| โ โโโ loss ์ด์, ํ๋ก์ธ์ค ์ข ๋ฃ ๊ฐ์ง โ ์ฆ์ ์๋ฆผ | |
| โโโ hourly_status.sh โ 1์๊ฐ ๊ฐ๊ฒฉ cron | |
| โโโ step, loss, ์๋, VRAM, eta โ ์ ๊ธฐ ๋ฆฌํฌํธ | |
| ``` | |
| ```python | |
| # curl์ด ์ฐจ๋จ๋ผ ์์ด urllib ์ฌ์ฉ | |
| import urllib.request, json | |
| def send_telegram(message): | |
| url = f"https://api.telegram.org/bot{TOKEN}/sendMessage" | |
| data = json.dumps({"chat_id": CHAT_ID, "text": message}).encode() | |
| req = urllib.request.Request(url, data=data, | |
| headers={"Content-Type": "application/json"}) | |
| urllib.request.urlopen(req) | |
| ``` | |
| --- | |
| ## 9. ์คํ ๊ฒฐ๊ณผ โ 1B ๋ฒ ์ด์ค๋ผ์ธ | |
| 1B ๋ชจ๋ธ์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ ์งํ๊ฒ ๊ธฐ๋กํ๋ค. ์ฑ๊ณต๊ณผ ์คํจ ๋ชจ๋. | |
| ### ํ๋ฆฌํธ๋ ์ธ ๊ฒฐ๊ณผ | |
| | ์งํ | ๊ฐ | | |
| |------|-----| | |
| | ์ต์ข Loss | 1.904 | | |
| | PPL (C4 Korean) | 5.67 | | |
| | ํ์ต ์คํ | 34,000 | | |
| | ํ์ต ์๊ฐ | ~2์ผ | | |
| ### SFT v1 ๊ฒฐ๊ณผ โ ์คํจ | |
| | ์งํ | ๊ฐ | | |
| |------|-----| | |
| | val_loss | 0.0 (๋น์ ์) | | |
| | ์์ธ | label off-by-one ๋ฒ๊ทธ (๋ฐ์ดํฐ ๋์) | | |
| | ๊ฒฐ๋ก | ์ ๋ฉด ํ๊ธฐ | | |
| ### SFT v2 ๊ฒฐ๊ณผ โ ๋ถ๋ถ ์ฑ๊ณต | |
| | ์งํ | ๊ฐ | | |
| |------|-----| | |
| | val_loss | 2.2062 | | |
| | ๋ฐ๋ณต๋ฅ | 18% (rep_penalty=1.1 ์ ์ฉ) | | |
| | kobest_copa | 0.646 | | |
| | ๊ฒฐ๋ก | ๊ธฐ๋ฅํ์ง๋ง ๊ตฌ์กฐ์ ํ๊ณ ์กด์ฌ | | |
| ### 3B ๊ธฐ๋ ๋ชฉํ์น (์ค์ผ์ผ๋ง ๋ฒ์น ๊ธฐ๋ฐ ์์ธก) | |
| | ๋ฒค์น๋งํฌ | 1B ํ์ฌ | 3B ๋ชฉํ | | |
| |----------|---------|---------| | |
| | kobest_copa | 0.646 | >0.72 | | |
| | kobest_hellaswag | ~0.42 | >0.52 | | |
| | ๋ฐ๋ณต๋ฅ | 18% | <5% | | |
| | PPL (C4 Korean) | 5.67 | <4.5 | | |
| 1B์์ 3B๋ก์ ์ค์ผ์ผ์ ์ ๋จ์ํ ํ๋ผ๋ฏธํฐ๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ด ์๋๋ค. ๋ชจ๋ธ์ด ๋ ๊ธด ๋งฅ๋ฝ์ ๊ธฐ์ตํ๊ณ , ๋ ๋ค์ํ ํจํด์ ํ์ตํ ์ ์์ด์ผ ๋ฐ๋ณต๋ฅ ์ด ๊ตฌ์กฐ์ ์ผ๋ก ๋ฎ์์ง๋ค. 3B ๋ชฉํ์น๋ Chinchilla ์ค์ผ์ผ๋ง ๊ณก์ ๊ณผ ์ ์ฌ ๊ท๋ชจ ๋ชจ๋ธ๋ค์ ๋ฒค์น๋งํฌ๋ฅผ ์ฐธ๊ณ ํ ์์ธก๊ฐ์ด๋ค. | |
| --- | |
| ## 10. ์คํ ๊ฒฐ๊ณผ โ 3B Base ์ข ํฉ ํ๊ฐ (v2) | |
| 3B ์ฌ์ ํ์ต ์๋ฃ ํ checkpoint-0057000 ๊ธฐ์ค์ผ๋ก ์ํํ ์ข ํฉ ํ๊ฐ. | |
| v2 ์ฌํ๊ฐ๋ 8-GPU ๋ณ๋ ฌ ํ์ดํ๋ผ์ธ์ผ๋ก 13+ ๋ฒค์น๋งํฌ, 0/5-shot ๋น๊ต, calibration, ์ฐธ๊ณ ๋ชจ๋ธ ๋น๊ต๋ฅผ ํฌํจํ๋ค. | |
| ์ด ์์ ์๊ฐ 256.6์ด. | |
| > **v1 โ v2 ๋ณ๊ฒฝ์ **: v1(์ด๊ธฐ ํ๊ฐ)์์๋ PPL 3๊ฐ ๋ฐ์ดํฐ์ + belebele/MMLU 2๊ฐ ๋ฒค์น๋งํฌ๋ง ์ธก์ ํ๋ค. v2๋ PPL 19๊ฐ ๋ฐ์ดํฐ์ , KoBEST 5๊ฐ, HAE-RAE ์ ์ฒด, MMLU-KO 6์นดํ ๊ณ ๋ฆฌ, MMLU-EN 61๊ณผ๋ชฉ, ์์ด 5๋ ๋ฒค์น๋งํฌ, Calibration, 0/5-shot ๋น๊ต, 12์กฐํฉ ํ๋ผ๋ฏธํฐ ๊ทธ๋ฆฌ๋ ์์น๋ฅผ ํฌํจํ๋ค. | |
| ### 10.1 ํ์ต ์ปค๋ธ | |
| | Step | Loss | LR | ๋น๊ณ | | |
| |------|------|----|------| | |
| | 10 | 11.657 | 1.50e-06 | ์ด๊ธฐ (warmup ์์) | | |
| | 500 | 5.047 | 7.50e-05 | warmup ์งํ | | |
| | 2,000 | 2.851 | 3.00e-04 | warmup ์๋ฃ, peak LR | | |
| | 10,000 | 2.057 | 2.86e-04 | ์์ ํ๊ฐ | | |
| | 30,000 | 1.789 | 1.61e-04 | ์ค๋ฐ, epoch 1 ์ง์ | | |
| | 57,000 | 1.466 | 3.00e-05 | ์ต์ข (cosine min) | | |
| > ์ฒ๋ฆฌ ์๋๋ ์ ๊ตฌ๊ฐ 36~38K tok/s๋ก ์์ . ์ด ํ์ต ์๊ฐ ์ฝ 63์๊ฐ. | |
| ### Base Model ๋ฐฑ์ | |
| | ํญ๋ชฉ | ๊ฐ | | |
| |------|-----| | |
| | ์๋ณธ ์ฒดํฌํฌ์ธํธ | `checkpoints/korean_3b_fp8_run1/checkpoint-0057000/` (34GB) | | |
| | ๋ฐฑ์ | `checkpoints/korean_3b_fp8_run1/checkpoint-0057000_BASE_BACKUP/` | | |
| | MD5 ๊ฒ์ฆ | `4f493d7bcc843727d32453bb3a4e6b7d` (์ผ์น ํ์ธ) | | |
| | HF ๋ณํ | `eval/outputs/hf_3b_base/` (11GB safetensors) | | |
| ### 10.2 PPL (Perplexity) โ 19๊ฐ ๋ฐ์ดํฐ์ | |
| **์ฃผ์ PPL (3b_val ํตํฉ): 5.2263** (์ด๊ธฐ v1 ํ๊ฐ: 5.709) | |
| | ๋ฐ์ดํฐ์ | PPL | Bits/Token | ํ๊ฐ ํ ํฐ | ์์ ์๊ฐ | | |
| |---------|-----|-----------|---------|---------| | |
| | korean_namuwiki | 25.88 | 4.694 | 6.5M | 63.7s | | |
| | cc100_ko | 21.78 | 4.445 | 13.6M | 133.2s | | |
| | namuwiki_2023b | 18.92 | 4.242 | 7.7M | 75.1s | | |
| | val | 18.30 | 4.194 | 9.1M | 89.4s | | |
| | korean_wiki | 11.84 | 3.565 | 1.6M | 15.5s | | |
| | wikipedia_ko | 10.71 | 3.420 | 1.8M | 17.4s | | |
| | korean | 7.02 | 2.811 | 53.5M | 521.6s | | |
| | open_web_math | 6.93 | 2.792 | 15.7M | 153.5s | | |
| | **korean_c4** | **5.72** | **2.515** | **45.4M** | **443.1s** | | |
| | **3b (ํตํฉ)** | **5.23** | **2.386** | **226.9M** | **2227.3s** | | |
| | cosmo_web_v2 | 4.17 | 2.059 | 8.6M | 84.6s | | |
| | cosmo_stories | 3.96 | 1.984 | 18.9M | 185.2s | | |
| | cosmo_openstax | 3.87 | 1.951 | 0.7M | 7.2s | | |
| | cosmo_stanford | 3.36 | 1.750 | 6.6M | 65.3s | | |
| | cosmo_wikihow | 3.31 | 1.727 | 1.2M | 11.8s | | |
| | cosmo_auto_math_text | 3.15 | 1.655 | 7.9M | 77.3s | | |
| | cosmo_khanacademy | 2.93 | 1.552 | 0.1M | 1.5s | | |
| | mathpile | 2.72 | 1.446 | 7.1M | 69.9s | | |
| | hplt_ko | 2.40 | 1.265 | 48.5M | 475.9s | | |
| > **ํด์**: in-distribution(ํ์ต์ ํฌํจ๋) ๋ฐ์ดํฐ(hplt_ko: 2.40, mathpile: 2.72)๊ฐ ๋ฎ๊ณ , OOD(ํ์ต ๋น์ค ๋ฎ์) ๋ฐ์ดํฐ(cc100_ko: 21.78, namuwiki: 25.88)๊ฐ ๋์ ๊ฒ์ ์์๋ ํจํด. korean_c4 5.72๋ v1์ 5.717๊ณผ ์ผ์นํ์ฌ ํ๊ฐ ์ฌํ์ฑ์ ํ์ธ. | |
| ### 10.3 ํ๊ตญ์ด ๋ฒค์น๋งํฌ | |
| #### KoBEST (0-shot) โ ํ๊ท 43.69% | |
| | ํ์คํฌ | Accuracy | F1 | | |
| |--------|----------|-----| | |
| | kobest_boolq | 50.28% | 0.3457 | | |
| | kobest_copa | 49.30% | 0.4921 | | |
| | kobest_hellaswag | 21.60% | 0.2153 | | |
| | kobest_sentineg | 48.61% | 0.4737 | | |
| | kobest_wic | 48.65% | 0.3286 | | |
| | **ํ๊ท ** | **43.69%** | | | |
| #### HAE-RAE (0-shot) โ ์ ์ฒด 19.71% | |
| | ์๋ธํ์คํฌ | Accuracy | | |
| |-----------|----------| | |
| | haerae_general_knowledge | 21.59% | | |
| | haerae_history | 23.40% | | |
| | haerae_loan_word | 21.30% | | |
| | haerae_rare_word | 18.77% | | |
| | haerae_standard_nomenclature | 13.73% | | |
| | **์ ์ฒด** | **19.71%** | | |
| #### MMLU-KO (0-shot) โ 6์นดํ ๊ณ ๋ฆฌ ํ๊ท 22.75% | |
| | ์นดํ ๊ณ ๋ฆฌ | Accuracy | | |
| |----------|----------| | |
| | medical | 30.56% | | |
| | humanities | 24.51% | | |
| | business | 24.14% | | |
| | social_sciences | 20.59% | | |
| | other | 19.64% | | |
| | stem | 19.57% | | |
| | **ํ๊ท ** | **22.75%** | | |
| > Base model์ instruction-following ์์ด 4์ง์ ๋ค ํ์ ๋ฒค์น๋งํฌ๋ฅผ ํ๋๋ก ์ต์ ํ๋์ง ์์. KoBEST boolq/copa/sentineg/wic๋ ~50% ์์ค์ผ๋ก 2์ง/4์ง์ ๋ค ๋๋ค ๊ธฐ์ค ๋ถ๊ทผ์ด๋ฉฐ, SFT ํ ํฅ์ ๊ธฐ๋. | |
| ### 10.4 ์์ด ๋ฒค์น๋งํฌ | |
| #### ์ฃผ์ ๋ฒค์น๋งํฌ (0-shot) | |
| | ํ์คํฌ | Accuracy | Acc (norm) | | |
| |--------|----------|-----------| | |
| | hellaswag | 26.00% | 26.15% | | |
| | arc_easy | 25.63% | 26.64% | | |
| | arc_challenge | 21.67% | 27.90% | | |
| | winogrande | 50.59% | โ | | |
| | piqa | 52.50% | 48.31% | | |
| > winogrande(50.59%)์ piqa(52.50%)๋ 2์ง์ ๋ค๋ก ๋๋ค ๊ธฐ์ค 50%์ ๊ทผ์ . hellaswag/arc๋ 4์ง์ ๋ค๋ก ๋๋ค ๊ธฐ์ค 25%. | |
| #### MMLU-EN (0-shot) โ 61๊ณผ๋ชฉ ํ๊ท 25.81% | |
| **์์ 10๊ฐ ๊ณผ๋ชฉ**: | |
| | ๊ณผ๋ชฉ | Accuracy | | |
| |------|----------| | |
| | college_physics | 37.25% | | |
| | college_computer_science | 34.00% | | |
| | high_school_statistics | 33.80% | | |
| | us_foreign_policy | 32.00% | | |
| | security_studies | 31.43% | | |
| | world_religions | 30.99% | | |
| | professional_medicine | 30.88% | | |
| | high_school_government_and_politics | 30.57% | | |
| | jurisprudence | 30.56% | | |
| | human_sexuality | 30.53% | | |
| **ํ์ 5๊ฐ ๊ณผ๋ชฉ**: | |
| | ๊ณผ๋ชฉ | Accuracy | | |
| |------|----------| | |
| | human_aging | 19.73% | | |
| | college_biology | 19.44% | | |
| | anatomy | 17.04% | | |
| | global_facts | 17.00% | | |
| | abstract_algebra | 15.00% | | |
| ### 10.5 Calibration | |
| | ๋ฉํธ๋ฆญ | ๊ฐ | | |
| |--------|-----| | |
| | Top-1 Accuracy | 68.75% | | |
| | Top-5 Accuracy | 81.64% | | |
| | Top-10 Accuracy | 85.93% | | |
| | Mean Correct Prob | 0.6152 | | |
| | Mean Entropy | 1.5682 | | |
| **Token NLL ๋ถํฌ**: | |
| | ํต๊ณ | ๊ฐ | | |
| |------|-----| | |
| | ํ๊ท NLL | 1.5561 | | |
| | ํ์คํธ์ฐจ | 2.4926 | | |
| | ์ค์๊ฐ | 0.1221 | | |
| | p95 | 7.0312 | | |
| | p99 | 10.3125 | | |
| | NLL > 5 ๋น์จ | 10.86% | | |
| | NLL > 10 ๋น์จ | 1.18% | | |
| > Top-1 68.75%๋ ๋ชจ๋ธ์ด ๊ฐ์ฅ ํ์ ํ๋ ์์ธก์ด ~69% ํ๋ฅ ๋ก ์ ํํ๋ค๋ ์๋ฏธ. ์ค์๊ฐ NLL 0.12 (โ e^0.12 = 1.13 PPL)๋ก ๋๋ถ๋ถ์ ํ ํฐ์ ๋งค์ฐ ๋์ ํ์ ๋๋ก ์์ธกํ๊ณ , ์์์ ๊ณ ๋์ด๋ ํ ํฐ์ด ํ๊ท NLL์ ๋์ด์ฌ๋ฆฌ๋ ์ ํ์ ์ธ ๋ถํฌ. | |
| ### 10.6 0-shot vs 5-shot ๋น๊ต | |
| 18๊ฐ ํ๊ตญ์ด ํ์คํฌ์์ 0-shot๊ณผ 5-shot ์ฑ๋ฅ์ ๋น๊ตํ๋ค. | |
| | ํ์คํฌ | 0-shot | 5-shot | ๋ณํ | | |
| |--------|--------|--------|------| | |
| | global_mmlu_ko | 22.75% | 26.75% | **+4.00pp** | | |
| | global_mmlu_ko_business | 24.14% | 31.03% | **+6.90pp** | | |
| | global_mmlu_ko_humanities | 24.51% | 28.43% | +3.92pp | | |
| | global_mmlu_ko_medical | 30.56% | 36.11% | **+5.56pp** | | |
| | global_mmlu_ko_other | 19.64% | 23.21% | +3.57pp | | |
| | global_mmlu_ko_social_sciences | 20.59% | 23.53% | +2.94pp | | |
| | global_mmlu_ko_stem | 19.57% | 21.74% | +2.17pp | | |
| | haerae | 19.71% | 20.26% | +0.55pp | | |
| | haerae_general_knowledge | 21.59% | 22.73% | +1.14pp | | |
| | haerae_history | 23.40% | 14.89% | -8.51pp | | |
| | haerae_loan_word | 21.30% | 24.26% | +2.96pp | | |
| | haerae_rare_word | 18.77% | 18.02% | -0.74pp | | |
| | haerae_standard_nomenclature | 13.73% | 25.49% | **+11.76pp** | | |
| | kobest_boolq | 50.28% | 50.21% | -0.07pp | | |
| | kobest_copa | 49.30% | 46.80% | -2.50pp | | |
| | kobest_hellaswag | 21.60% | 20.80% | -0.80pp | | |
| | kobest_sentineg | 48.61% | 47.86% | -0.76pp | | |
| | kobest_wic | 48.65% | 48.97% | +0.32pp | | |
| **ํ๊ท ๋ณํ: +1.80pp** | ๊ฐ์ : 12 | ํ๋ฝ: 6 | |
| > MMLU-KO๋ 5-shot์์ ์ผ๊ด๋๊ฒ ๊ฐ์ (+2~7pp)๋์ด in-context learning ๋ฅ๋ ฅ์ด ์๋ํจ์ ํ์ธ. KoBEST๋ ๊ฑฐ์ ๋ณ๋ ์๊ฑฐ๋ ์ํญ ํ๋ฝโ์ด๋ฏธ 0-shot์์ ํจํด ๋งค์นญ์ ์ํ๊ณ ์์ด few-shot ์์๊ฐ ์คํ๋ ค ๋ฐฉํด๊ฐ ๋๋ ํจํด. haerae_standard_nomenclature์ +11.76pp๋ ์ด ํ์คํฌ์ ํน์ํ ํฌ๋งท์ few-shot์์ ํ์ตํ ๊ฒฐ๊ณผ. | |
| ### 10.7 ์ฐธ๊ณ ๋ชจ๋ธ ๋น๊ต | |
| | ๋ชจ๋ธ | ํ๋ผ๋ฏธํฐ | MMLU-KO | MMLU-EN | KoBEST ํ๊ท | PPL | | |
| |------|---------|---------|---------|------------|-----| | |
| | **FRANKENSTALLM 3B** | **3B** | **22.75%** | **25.81%** | **43.69%** | **5.2263** | | |
| | Llama-3.2-3B | 3B | ~42% | ~58% | ~55% | โ | | |
| | Qwen2.5-3B | 3B | ~48% | ~65% | ~60% | โ | | |
| | EXAONE-3.5-2.4B | 2.4B | ~35% | ~50% | ~50% | โ | | |
| > ์ฐธ๊ณ ๋ชจ๋ธ๋ค์ ์์กฐ ํ ํฐ ๊ท๋ชจ์ ํ์ต ๋ฐ์ดํฐ์ ์์ฒ GPU-hour๋ฅผ ํฌ์ ํ ๊ฒฐ๊ณผ. FRANKENSTALLM 3B๋ 41.12B ํ ํฐ(Chinchilla ์ต์ ์ ~68%), 63์๊ฐ, 8 GPU๋ก ํ์ตํ ์ ์ ๊ฐ์ํด์ผ ํ๋ค. SFT + ํ์ฅ ํ๋ฆฌํธ๋ ์ธ(80-100B ํ ํฐ) ์ดํ ๊ฒฉ์ฐจ ์ถ์ ์์. | |
| ### 10.8 ์์ฑ ํ์ง ๋ฐ ํ๋ผ๋ฏธํฐ ๊ทธ๋ฆฌ๋ ์์น | |
| #### ๋ฐ๋ณต๋ฅ ์์ฝ | |
| | ์ค์ | 3-gram ๋ฐ๋ณต๋ฅ | 4-gram ๋ฐ๋ณต๋ฅ | | |
| |------|--------------|--------------| | |
| | greedy (temp=0.0) | 60.99% | 57.02% | | |
| | temp=0.5 | 60.12% | 58.68% | | |
| | temp=0.7 | 47.69% | 43.40% | | |
| | temp=1.0 | 3.58% | 2.81% | | |
| > ์ด๊ธฐ v1 ํ๊ฐ์ greedy 71.1% ๋ฐ๋ณต๋ฅ ์ `no_repeat_ngram_size=3` ์ ์ฉ ๊ธฐ์ค์ด์๋ค. v2์์๋ ๋ฏธ์ ์ฉ ๊ธฐ์ค(raw)์ผ๋ก ํต์ผํ์ฌ 60.99%๋ฅผ ๊ธฐ๋ก. | |
| #### 12์กฐํฉ ํ๋ผ๋ฏธํฐ ๊ทธ๋ฆฌ๋ ์์น ๊ฒฐ๊ณผ | |
| | ์ค์ | Temp | Rep Pen | 3-gram | 4-gram | ๋น๊ณ | | |
| |------|------|---------|--------|--------|------| | |
| | **t0.7_rep1.3** | **0.70** | **1.30** | **0.00%** | **0.00%** | **์ต์ ** | | |
| | t0.9_rep1.2 | 0.90 | 1.20 | 0.00% | 0.00% | ์ฐจ์ | | |
| | t0.7_rep1.2 | 0.70 | 1.20 | 0.88% | 0.00% | | | |
| | t0.9_rep1.1 | 0.90 | 1.10 | 0.94% | 0.13% | | | |
| | t1.0_rep1.1 | 1.00 | 1.10 | 1.21% | 0.48% | | | |
| | t0.5_rep1.1 | 0.50 | 1.10 | 1.92% | 1.19% | | | |
| | t1.0 | 1.00 | 1.00 | 3.58% | 2.81% | | | |
| | t0.9 | 0.90 | 1.00 | 8.39% | 4.64% | | | |
| | t0.7_rep1.1 | 0.70 | 1.10 | 8.51% | 5.51% | | | |
| | t0.7 | 0.70 | 1.00 | 47.69% | 43.40% | | | |
| | t0.5 | 0.50 | 1.00 | 60.12% | 58.68% | | | |
| | greedy | 0.00 | 1.00 | 60.99% | 57.02% | | | |
| #### ๊ถ์ฅ ์ถ๋ก ํ๋ผ๋ฏธํฐ (base ์คํ์ฉ) | |
| ```python | |
| # v2 ๊ทธ๋ฆฌ๋ ์์น ์ต์ ๊ฐ | |
| temp=0.7, repetition_penalty=1.3 | |
| # ๋๋ (๋ ๋ค์ํ ์์ฑ) | |
| temp=0.9, repetition_penalty=1.2 | |
| ``` | |
| > ์ด๊ธฐ v1 ๊ถ์ฅ๊ฐ(`temp=0.9, top_p=0.9, no_repeat_ngram=3, repetition_penalty=1.1`)์์ `repetition_penalty=1.3`์ผ๋ก ์ํฅ ์กฐ์ . `no_repeat_ngram_size`๋ ๊ทธ๋ฆฌ๋ ์์น์์ `repetition_penalty`๋ง์ผ๋ก ์ถฉ๋ถํ ๋ฐ๋ณต ์ ๊ฑฐ๊ฐ ๊ฐ๋ฅํจ์ ํ์ธํ์ฌ ๋ถํ์. | |
| ### 10.9 ํ๊ฐ ํ์ดํ๋ผ์ธ | |
| v2 ์ฌํ๊ฐ๋ ๋ชจ๋ํ๋ 8-GPU ๋ณ๋ ฌ ํ์ดํ๋ผ์ธ(`eval/reeval_pipeline.py`)์ผ๋ก ์ํ๋์๋ค. | |
| #### ์ํคํ ์ฒ | |
| ``` | |
| reeval_pipeline.py | |
| โโโ ๋ชจ๋ธ 1ํ ๋ก๋ (GPU 0์ HF ๋ชจ๋ธ) | |
| โโโ Phase 1: PPL ํ๊ฐ (19๊ฐ ๋ฐ์ดํฐ์ , ์์ฐจ) | |
| โโโ Phase 2: Calibration + Token NLL | |
| โโโ Phase 3: ์์ฑ ํ์ง + ํ๋ผ๋ฏธํฐ ๊ทธ๋ฆฌ๋ ์์น (12์กฐํฉ) | |
| โโโ Phase 4: lm-evaluation-harness (0-shot, 8-GPU ๋ณ๋ ฌ) | |
| โโโ Phase 5: lm-evaluation-harness (5-shot, 8-GPU ๋ณ๋ ฌ) | |
| โโโ Phase 6: ๋ฆฌํฌํธ ์๋ ์์ฑ (5๊ฐ ๊ฐ๋ณ + 1๊ฐ ์ข ํฉ) | |
| ``` | |
| #### Pipeline Mode | |
| ๋ชจ๋ธ์ 1ํ ๋ก๋ํ์ฌ 0-shot๊ณผ 5-shot์ ์ฐ์ ์คํํ๋ค. ๊ธฐ์กด ๋ฐฉ์(๋ณ๋ ํ๋ก์ธ์ค 2ํ)์ ๋นํด ๋ชจ๋ธ ๋ก๋ฉ ์๊ฐ์ ์ ๋ฐ์ผ๋ก ์ค์ธ๋ค. | |
| #### GPU๋ณ ํ์คํฌ ๋ถ๋ฐฐ | |
| | GPU | 0-shot ํ์คํฌ | 5-shot ํ์คํฌ | | |
| |-----|--------------|--------------| | |
| | 0 | kobest_boolq, kobest_copa, kobest_hellaswag | ๋์ผ | | |
| | 1 | kobest_sentineg, kobest_wic | ๋์ผ | | |
| | 2 | haerae (์ ์ฒด + 5๊ฐ ์๋ธ) | ๋์ผ | | |
| | 3 | global_mmlu_ko (6์นดํ ๊ณ ๋ฆฌ) | ๋์ผ | | |
| | 4 | hellaswag, arc_easy | ๋์ผ | | |
| | 5 | arc_challenge, winogrande | ๋์ผ | | |
| | 6 | piqa, global_mmlu_en (61๊ณผ๋ชฉ) | ๋์ผ | | |
| | 7 | (์๋น โ PPL/calibration ์ ๋ด) | โ | | |
| NUMA affinity ์ ์ฉ: GPU 0-3์ NUMA node 0 (cores 0-35), GPU 4-7์ NUMA node 1 (cores 36-71). | |
| **์ด ์์ ์๊ฐ: 256.6์ด** (๋ชจ๋ธ ๋ก๋ ํฌํจ) | |
| ### SFT ์งํ ํ๋จ | |
| **๊ฒฐ๋ก : SFT ์งํ** โ loss 1.466 ๊ฑด๊ฐํ ์๋ฃ ์๊ทธ๋, ๊ตฌ์กฐ ๋ฌธ์ ์์. โ **Phase 2 SFT ์์ (2026-03-05)** | |
| ์์ธ ๋ณด๊ณ ์: | |
| - v2 ์ข ํฉ: `eval/outputs/3b_reeval_20260305_1451/reports/` (5๊ฐ ๊ฐ๋ณ ๋ฆฌํฌํธ + ์ข ํฉ) | |
| - v1 ๋ ๊ฑฐ์: `reports/2026-03-05_3B_BASE_EVALUATION_REPORT.md` | |
| --- | |
| ## 11. ์คํ ๊ฒฐ๊ณผ โ 3B SFT ์ข ํฉ ํ๊ฐ | |
| Phase 2 SFT๊ฐ early stopping์ผ๋ก ์๋ฃ๋ ํ ์ํํ 6์ฐจ์ ์ข ํฉ ํ๊ฐ. | |
| ### 11.1 SFT ํ์ต ๊ฒฐ๊ณผ | |
| | ํญ๋ชฉ | ๊ฐ | | |
| |------|-----| | |
| | ์ต์ข Step | 25,500 / 33,000 (77.3%, early stopping) | | |
| | Best val_loss | **1.8851** (step 23,000) | | |
| | ํ์ต ์๊ฐ | ~15์๊ฐ 41๋ถ | | |
| | ๋ฐ์ดํฐ | 24๊ฐ ์์ค โ 2,439,397 samples (7.48 GB) | | |
| | ์ค์ | LR=1e-5, eff_batch=64, NEFTune alpha=5.0 | | |
| **Val Loss ์ถ์ด**: | |
| ``` | |
| Step 500: 2.0732 (warmup ์๋ฃ) | |
| Step 2,000: 1.9558 (๊ธ์ ํ๊ฐ) | |
| Step 5,000: 1.9107 (์์ ์๋ ด) | |
| Step 10,000: 1.8917 (๋ฏธ์ธ ๊ฐ์) | |
| Step 15,000: 1.8864 (plateau ์ง์ ) | |
| Step 20,000: 1.8853 (๋ณ๋ < 0.001) | |
| Step 23,000: 1.8851 โ BEST (early stopping ๊ธฐ์ค์ ) | |
| Step 25,500: Early Stop (patience 5/5 ์์ง) | |
| ``` | |
| ### 11.2 6์ฐจ์ ํ๊ฐ ์์ฝ | |
| | # | ์ฐจ์ | ๊ฒฐ๊ณผ | ํต์ฌ ์์น | | |
| |---|------|------|-----------| | |
| | 1 | Perplexity (์ง์ ๋ณด์กด) | **PASS** | ์ต๋ forgetting 0.9%, 19๊ฐ ๋ฐ์ดํฐ์ ์ ์ฒด PASS | | |
| | 2 | ์์ฑ ํ์ง | **FAIL** | Greedy ๋ฐ๋ณต๋ฅ 72.97% (๋ชฉํ <5%), EOS 60% (๋ชฉํ >90%) | | |
| | 3 | ํ๊ตญ์ด ๋ฒค์น๋งํฌ | **FAIL** | KoBEST ํ๊ท 43.26% (๋ชฉํ >55%) | | |
| | 4 | ์์ด ๋ฒค์น๋งํฌ | **PASS** | hellaswag 26.1%, winogrande 50.8%, piqa 52.6% (์ ํญ๋ชฉ ํํ ์ด๊ณผ) | | |
| | 5 | Calibration | **PASS** | Top-1 68.59%, Top-5 81.55%, Entropy 1.54 | | |
| | 6 | SFT Chat ๋ฅ๋ ฅ | **PASS** | EOS ์ข ๋ฃ์จ 0%โ60%, Chat template ์๋ต | | |
| ### 11.3 Base vs SFT ๋น๊ต | |
| | ์งํ | Base | SFT | ๋ณํ | ํ์ | | |
| |------|------|-----|------|------| | |
| | PPL (ํตํฉ) | 5.2263 | 5.2529 | +0.5% forgetting | PASS | | |
| | Greedy 3-gram ๋ฐ๋ณต๋ฅ | 60.99% | 72.97% | +12pp (์ ํ) | FAIL | | |
| | EOS ์ข ๋ฃ์จ | 0% | 60% | +60pp (๋ํญ ๊ฐ์ ) | ๋ถ๋ถ PASS | | |
| | KoBEST ํ๊ท | 43.69% | 43.26% | -0.4pp | FAIL | | |
| | MMLU-KO | 22.75% | 26.00% | +3.2pp | ๋ถ๋ถ ๊ฐ์ | | |
| | ์์ด ๋ฒค์น๋งํฌ | โ | โ | ยฑ0.3pp ์ด๋ด | PASS (์ ์ง) | | |
| | Calibration Top-1 | 68.75% | 68.59% | -0.2pp | PASS (์ ์ง) | | |
| **Repetition ํ๋ผ๋ฏธํฐ ๊ฒ์** (ํฌ๋ง์ ): | |
| | ์ค์ | ๋ฐ๋ณต๋ฅ | EOS Rate | | |
| |------|--------|----------| | |
| | t0.7_rep1.2 | **0.00%** | **100%** | | |
| | t1.0_rep1.1 | **0.00%** | **100%** | | |
| | greedy (raw) | 72.97% | 60% | | |
| > rep_penalty 1.1~1.3 ์ ์ฉ ์ ๋ฐ๋ณต๋ฅ 0% ๋ฌ์ฑ โ ๋ชจ๋ธ์ด ๋ฐ๋ณตํ์ง ์๋ ๋ฅ๋ ฅ ์์ฒด๋ ๋ณด์ . ORPO๋ก ๋ด์ฌํ ๊ฐ๋ฅ. | |
| ### 11.4 ์ฝ๋ ๊ฐ์ ์ฌํญ | |
| ์ด๋ฒ Phase์์ ์ํํ ์ฃผ์ ์ฝ๋ ๋ณ๊ฒฝ: | |
| | ํ์ผ | ๋ณ๊ฒฝ | ์ค ์ | ๋ชฉ์ | | |
| |------|------|-------|------| | |
| | `train/sft.py` | MixingDataLoader, DDP rank 0 ํ ํฌ๋์ด์ง | +238 | SFT+pretrain ์ธํฐ๋ฆฌ๋น, ๋ฉ๋ชจ๋ฆฌ 8๋ฐฐ ์ ๊ฐ | | |
| | `train/trainer.py` | DDP early stop broadcast | +17 | DDP hang ๋ฐฉ์ง, patience 5โ10 | | |
| | `train/orpo.py` | YAML config, 3B ๊ธฐ๋ณธ๊ฐ | +30 | ORPO ์คํ ์ค๋น | | |
| | `eval/report_generator.py` | SFT ๋น๊ต ๋ณด๊ณ ์ ์๋ ์์ฑ | +831 | ํ๊ฐ ์๋ํ | | |
| | `eval/sft_eval_pipeline.py` | 6์ฐจ์ ํ๊ฐ ํ์ดํ๋ผ์ธ | ์ ๊ท | SFT ์ข ํฉ ํ๊ฐ | | |
| | `eval/tasks/generation_task.py` | Chat template, diversity metrics | +75 | SFT ํ๊ฐ ์ง์ | | |
| ### 11.5 ORPO ์งํ ํ์ | |
| **ํ์ : Phase 3 ORPO ์งํ** | |
| | ๊ทผ๊ฑฐ | ์์ธ | | |
| |------|------| | |
| | ์ง์ ๋ณด์กด ์ํธ | forgetting 0.9% โ SFT๊ฐ base ์ง์์ ํ๊ดดํ์ง ์์ | | |
| | ๋ฐ๋ณต ๋ฏธํด๊ฒฐ | greedy 72.97% โ ์ ํธ๋ ์ ๋ ฌ์ด ์ง์ ์ ํด๊ฒฐ ๊ฒฝ๋ก | | |
| | ํฌ๋ง์ ์ ํธ | rep_penalty ์ ์ฉ ์ 0% โ ORPO๊ฐ ๋ด์ฌํ ๊ฐ๋ฅ | | |
| | ๋ฐ์ดํฐ ์ค๋น ์๋ฃ | 795,468 preference pairs (7.9 GB) | | |
| | ์ฝ๋/์ค์ ์๋น | `train/orpo.py` + `configs/korean_3b_orpo.yaml` | | |
| **ORPO ํ ํ์ ๊ธฐ์ค**: | |
| - ๋ฐ๋ณต๋ฅ < 5% AND KoBEST > 50% โ GGUF + Ollama ๋ฐฐํฌ | |
| - ๋ฐ๋ณต๋ฅ 5~15% โ ํ์ดํผํ๋ผ๋ฏธํฐ ์กฐ์ ํ ์ฌ์๋ | |
| - ๋ฐ๋ณต๋ฅ > 15% โ SFT v2 (lr=5e-5, data mixing) ํ ์ฌ๋์ | |
| ์์ธ: `reports/2026-03-06_3B_SFT_COMPLETION_AND_EVAL_SUMMARY.md` | |
| --- | |
| ## 12. Phase 3 โ ORPO (์ ํธ๋ ์ ๋ ฌ) | |
| ### 12.1 ORPO ์ ํ ๋ฐฐ๊ฒฝ | |
| SFT 6์ฐจ์ ํ๊ฐ์์ greedy ๋ฐ๋ณต๋ฅ 72.97%, EOS ์ข ๋ฃ์จ 0%๋ผ๋ ์น๋ช ์ ๋ฌธ์ ๊ฐ ๋ฐ๊ฒฌ๋๋ค. SFT๋ "์ข์ ์๋ต๋ง ๋ชจ๋ฐฉ"ํ๋ ํ์ต์ด๋ฏ๋ก, "๋์ ์๋ต์ ์ต์ "ํ๋ ์ ํธ๊ฐ ์๋ค. ๋ฐ๋ณต ๋ฌธ์ ํด๊ฒฐ์๋ preference optimization์ด ํ์์ ์ด๋ค. | |
| **ORPO vs DPO**: | |
| | ํญ๋ชฉ | ORPO | DPO | | |
| |------|------|-----| | |
| | Reference model | ๋ถํ์ | ํ์ (VRAM 2๋ฐฐ) | | |
| | ๊ตฌํ ๋ณต์ก๋ | ๋ฎ์ | ์ค๊ฐ | | |
| | ๋ฉ๋ชจ๋ฆฌ ํจ์จ | ๋์ (3B 1๊ฐ๋ง ๋ก๋) | ๋ฎ์ (3B 2๊ฐ ๋ก๋) | | |
| | ํ์ต ์์ ์ฑ | ์ค๊ฐ | ๋์ | | |
| ORPO๋ฅผ 1์ฐจ ์ ํ, DPO๋ฅผ Plan B๋ก ์ค์ ํ๋ค. | |
| ### 12.2 ๋ฐ์ดํฐ | |
| - **์๋ณธ**: 683,181 preference pairs (7๊ฐ ์์ค ํตํฉ) | |
| - **ํํฐ ํ**: ~630,000 pairs (NaN ๋ฐฉ์ง ํํฐ ์ ์ฉ) | |
| - **Eval split**: 5% (~31,500 pairs, seed=42) | |
| - **Effective batch**: 4 ร 8 GPU ร 4 accum = 128 | |
| ### 12.3 HP Sweep ์ค๊ณ (6-Config) | |
| 3๊ฐ ์ถ(beta, LR, max_length)์ ์ค์ฌ์ถ ๊ณ ์ ๋ฐฉ์์ผ๋ก 6๊ฐ ์กฐํฉ ์ ์ : | |
| | Run | Name | Beta | LR | Max Length | ๋ชฉ์ | | |
| |-----|------|------|----|-----------|------| | |
| | 1 | baseline_b015 | 0.15 | 8e-6 | 1536 | ์ฝํ beta ๋ฒ ์ด์ค๋ผ์ธ | | |
| | 2 | baseline_b025 | 0.25 | 8e-6 | 1536 | ์ค๊ฐ beta ๋ฒ ์ด์ค๋ผ์ธ | | |
| | 3 | strong_b035 | 0.35 | 8e-6 | 1536 | ๊ฐํ beta โ ์ ๊ทน์ ๋ฐ๋ณต ์ต์ | | |
| | 4 | fast_lr12e6 | 0.25 | 1.2e-5 | 1536 | ๋์ LR โ ๋น ๋ฅธ ์๋ ด | | |
| | 5 | conserv_lr5e6 | 0.25 | 5e-6 | 1536 | ๋ณด์์ LR โ ์์ ์ฑ | | |
| | 6 | short_1024 | 0.25 | 8e-6 | 1024 | ์งง์ max_length โ VRAM ์ ์ฝ | | |
| ๊ฐ 200 steps, eval_steps=100, 8รB200 DDP. | |
| ### 12.4 ์๋ ์ด๋ ฅ โ 5๋ฒ์ ์คํจ | |
| | # | ๋ฌธ์ | ์์ธ | ์์ | | |
| |---|------|------|------| | |
| | 1 | NCCL Timeout | ํ ํฌ๋์ด์ง 30๋ถ > timeout 1800s | ddp_timeout=7200, num_proc=64 | | |
| | 2 | Config ์ถฉ๋ | save_steps โ eval_steps ๋ฐฐ์ | --no_load_best --save_steps 200 | | |
| | 3 | ํฌํธ ์ถฉ๋ + QKV ๋๋ฝ | ์ข๋น ํ๋ก์ธ์ค + fused QKV ๋ฏธ๋ถ๋ฆฌ | pkill + QKV split ๋ก์ง | | |
| | 4 | TRL NaN ๋ฒ๊ทธ | tokenize_row ์์ชฝ response ๋์ ์๋ฆผ | 3์ค ํจ์น (clamp, truncation) | | |
| | 5 | Tokenizer ํธํ | zip(strict=True) + ํ๊ตญ์ด merge ops | TRL ์์ค 8๊ฑด ํจ์น | | |
| ๊ฐ์ฅ ์ฌ๊ฐํ๋ ๊ฒ์ TRL NaN ๋ฒ๊ทธ๋ก, 0 response tokens โ log(0) = -inf โ NaN ์ ํ ์ฒด์ธ์ ์ผ์ผ์ผฐ๋ค. ์์ธ: `reports/2026-03-08_ORPO_TRAINING_JOURNEY.md` | |
| ### 12.5 ์ค์ ์ต์ข ๊ฒฐ๊ณผ | |
| | Run | Name | Beta | LR | MaxLen | Train Loss | Eval Loss | Margin | Status | | |
| |-----|------|------|----|--------|-----------|-----------|--------|--------| | |
| | 1 | baseline_b015 | 0.15 | 8e-6 | 1536 | 1.811 | 1.827 | 0.004 | โ | | |
| | 2 | baseline_b025 | 0.25 | 8e-6 | 1536 | 1.890 | 1.906 | 0.009 | โ | | |
| | 3 | strong_b035 | 0.35 | 8e-6 | 1536 | 2.055 | 1.985 | 0.007 | โ | | |
| | **4** | **fast_lr12e6** | **0.25** | **1.2e-5** | **1536** | **1.917** | **1.862** | **0.009** | **๐ Best** | | |
| | 5 | conserv_lr5e6 | 0.25 | 5e-6 | 1536 | 1.833 | 1.910 | 0.004 | โ | | |
| | 6 | short_1024 | 0.25 | 8e-6 | 1024 | 1.664 | 1.695 | 0.007 | โ | | |
| **Best config: Run 4** (eval_loss 1.862 ์ต์ , margin 0.009 ์ต๊ณ , ๋น ๋ฅธ ์๋ ด). | |
| ### 12.6 Throughput ๋ฒค์น๋งํฌ โ ๋ณธ ํ์ต ์ค์ | |
| ๋ณธ ํ์ต ์ batch/grad_accum ์กฐํฉ์ throughput์ ์ธก์ ํ์ฌ ์ต์ ์ค์ ์ ๊ฒฐ์ : | |
| | batch_size | grad_accum | eff_batch | Throughput | ๋น๊ณ | | |
| |-----------|-----------|----------|-----------|------| | |
| | **4** | **4** | **128** | **80.63 samples/s** | **์ ์ ** | | |
| | 2 | 8 | 128 | 73.14 samples/s | ๊ธฐ์กด ์ค์ | | |
| | 8 | 2 | 128 | OOM | | | |
| ### 12.7 ORPO ๋ณธ ํ์ต (์งํ ์ค, 2026-03-09) | |
| | ํ๋ผ๋ฏธํฐ | ๊ฐ | | |
| |---------|-----| | |
| | Beta / LR | 0.25 / 1.2e-5 (Sweep Run 4) | | |
| | Batch / Accum / Eff | 4 / 4 / 128 (๋ฒค์น๋งํฌ ์ต์ ) | | |
| | Max length | 1536 | | |
| | Epochs | 2 (~9,840 steps) | | |
| | GPU VRAM | ~52GB / 183GB (28%) | | |
| | ์๋ | ~1.75 s/step | | |
| | ์์ ์๊ฐ | ~4.8์๊ฐ | | |
| **ํ์ต ์งํ ์ถ์ด (step ~1,660 ๊ธฐ์ค)**: | |
| | Step | Eval Loss | Pref Accuracy | Reward Margin | NLL Loss | | |
| |-----:|----------:|--------------:|--------------:|---------:| | |
| | ~1,000 | 1.791 | 66.8% | 0.107 | 1.647 | | |
| | ~2,000 | 1.713 | 70.1% | 0.293 | 1.591 | | |
| | ~3,000 | 1.681 | 71.9% | 0.372 | 1.567 | | |
| - Train loss: 2.34 โ **1.68** (-0.66) | |
| - rewards/accuracies: 0.43 โ **0.74** (chosen/rejected ๊ตฌ๋ถ ๋ฅ๋ ฅ ๊ธ์์น) | |
| - rewards/margins: -0.005 โ **0.387** (preference signal ํ์ต ํ์ธ) | |
| - ์๋ ~1.76 s/step, GPU 92~100% utilization, ์์ ์ ์งํ ์ค | |
| **ํ์ต ์๋ฃ ํ ์๋ ํ๊ฐ**: `scripts/orpo_eval_watchdog.sh` ๊ฐ ํ์ต ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํ๋ฉฐ, ์๋ฃ ์ ์๋์ผ๋ก 10์ฐจ์ ์ข ํฉ ํ๊ฐ ํ์ดํ๋ผ์ธ ์คํ | |
| ### 12.8 ORPO ์ข ํฉ ํ๊ฐ ํ์ดํ๋ผ์ธ | |
| SFT v2 ํ๊ฐ์ 6์ฐจ์์ ORPO ๊ณ ์ 4์ฐจ์์ ์ถ๊ฐํ **10์ฐจ์ ์ข ํฉ ํ๊ฐ**. | |
| ํ์ต ์๋ฃ ์ `eval/orpo_eval_pipeline.py`๊ฐ ์๋ ์คํ๋์ด Base vs SFT vs ORPO 3-way ๋น๊ต ๋ณด๊ณ ์๋ฅผ ์์ฑํ๋ค. | |
| **ํ๊ฐ ๊ตฌ์กฐ**: | |
| | Phase | ๋ด์ฉ | GPU | ์์ ์๊ฐ | | |
| |-------|------|-----|----------| | |
| | Pre-phase | train.log์์ ํ์ต ๊ณก์ ์ถ์ถ | - | ~1์ด | | |
| | Phase 1 | ๋ด๋ถ ํ๊ฐ (PPL 19์ , Calibration, Generation, Repetition Grid) | 8 GPU ๋ณ๋ ฌ | ~30๋ถ | | |
| | Phase 2 | ๋ฒค์น๋งํฌ (KoBEST, HAE-RAE, MMLU-KO/EN, hellaswag, arc, piqa) | 8 GPU ๋ณ๋ ฌ | ~1์๊ฐ | | |
| | Phase 3 | 3-way ๋น๊ต ๋ณด๊ณ ์ ์๋ ์์ฑ | - | ~10์ด | | |
| **10์ฐจ์ ํ๊ฐ ํญ๋ชฉ**: | |
| | # | ์ฐจ์ | ๊ธฐ์ค | SFT v2 ๊ฒฐ๊ณผ | ORPO ๋ชฉํ | | |
| |---|------|------|------------|----------| | |
| | 1 | ์ง์ ๋ณด์กด (PPL) | forgetting < 15% | 0.9% | < 5% | | |
| | 2 | ์์ฑ ํ์ง | greedy ๋ฐ๋ณต๋ฅ < 5%, EOS > 90% | **72.97% / 60%** | **< 5% / > 90%** | | |
| | 3 | ํ๊ตญ์ด ๋ฒค์น๋งํฌ | KoBEST ํ๊ท > 55% | 43.26% | โฅ 43% | | |
| | 4 | ์์ด ๋ฒค์น๋งํฌ | ํํ ์ด๊ณผ | PASS | ์ ์ง | | |
| | 5 | Calibration | Top-1 โฅ 65% | 68.59% | โฅ 65% | | |
| | 6 | Chat ๋ฅ๋ ฅ | EOS ์ข ๋ฃ์จ | 60% | > 90% | | |
| | 7 | Preference Accuracy | > 65% | โ | > 65% | | |
| | 8 | Reward Margins | > 0.1 | โ | > 0.1 | | |
| | 9 | ๋ฐ๋ณต ํ๋ผ๋ฏธํฐ ๋ฏผ๊ฐ๋ | rep_penalty=1.0์์๋ < 5% | โ | PASS | | |
| | 10 | SFTโORPO ๊ฐ์ | ๋ฐ๋ณต๋ฅ โ + EOSโ | โ | PASS | | |
| **ํต์ฌ ํ์ผ**: | |
| - `eval/orpo_eval_pipeline.py` โ ORPO ํ๊ฐ ์ค์ผ์คํธ๋ ์ดํฐ | |
| - `eval/report_generator.py` โ 3-way ๋น๊ต ๋ณด๊ณ ์ ์์ฑ๊ธฐ (`generate_three_way_report()`) | |
| - `scripts/orpo_eval_watchdog.sh` โ ํ์ต ์๋ฃ ๊ฐ์ง + ์๋ ํ๊ฐ ์คํ | |
| **๋ฐฐํฌ ๊ธฐ์ค**: greedy ๋ฐ๋ณต๋ฅ < 5% AND EOS > 90% AND forgetting < 5% AND KoBEST โฅ 43% โ **DEPLOY** | |
| --- | |
| ## 13. ์คํ ๋ฐฉ๋ฒ | |
| ### ์ฌ์ ์๊ตฌ์ฌํญ | |
| ```bash | |
| # PyTorch๋ ์ฌ์ค์น ๊ธ์ง (NVIDIA ์ปค์คํ ๋น๋) | |
| # ์๋ ํจํค์ง๋ง ์ถ๊ฐ ์ค์น | |
| pip install transformers accelerate peft trl deepspeed \ | |
| bitsandbytes sentencepiece wandb | |
| ``` | |
| ### 3B ํ๋ฆฌํธ๋ ์ธ | |
| ```bash | |
| # NCCL ํ๊ฒฝ๋ณ์์ ํจ๊ป 8-GPU ํ์ต ์คํ | |
| bash scripts/launch_3b_pretrain.sh | |
| # ์๋ ์คํ (์ง์ ์ ์ด) | |
| torchrun --nproc_per_node=8 \ | |
| --master_port=29500 \ | |
| train/pretrain.py \ | |
| --config configs/korean_3b_fp8.yaml | |
| ``` | |
| ### SFT | |
| ```bash | |
| bash scripts/launch_3b_sft.sh | |
| # ๋๋ ์ง์ ์คํ | |
| torchrun --nproc_per_node=8 \ | |
| train/sft.py \ | |
| --config configs/korean_3b_sft.yaml \ | |
| --pretrain_ckpt checkpoints/3b_pretrain_best.pt | |
| ``` | |
| ### ORPO (์ ํธ๋ ์ ๋ ฌ) | |
| ```bash | |
| # ORPO ํ์ต | |
| bash scripts/launch_3b_orpo.sh | |
| # ํ์ต ์๋ฃ ํ ์๋ ํ๊ฐ (watchdog) | |
| nohup bash scripts/orpo_eval_watchdog.sh \ | |
| > checkpoints/korean_3b_orpo_v1/watchdog.log 2>&1 & | |
| ``` | |
| ### ํ๊ฐ | |
| ```bash | |
| # Base ๋ชจ๋ธ ์ ์ฒด ํ๊ฐ (8 GPU ๋ณ๋ ฌ) | |
| python eval/full_eval_pipeline.py | |
| # SFT ๋ชจ๋ธ ํ๊ฐ (Base vs SFT 2-way ๋น๊ต) | |
| python eval/sft_eval_pipeline.py --skip-phase0 \ | |
| --hf-model-path eval/outputs/hf_3b_sft_best | |
| # ORPO ๋ชจ๋ธ ํ๊ฐ (Base vs SFT vs ORPO 3-way ๋น๊ต) | |
| python eval/orpo_eval_pipeline.py # ์๋์ผ๋ก ์ต์ checkpoint ๊ฐ์ง | |
| python eval/orpo_eval_pipeline.py --dry-run # ์คํ ๊ณํ๋ง ํ์ธ | |
| # ๋น ๋ฅธ ํ๊ฐ (kobest_copa + PPL) | |
| bash scripts/run_eval_quick.sh | |
| # ์์ฑ ํ๋ผ๋ฏธํฐ ํ์ | |
| python eval/test_generation_params.py \ | |
| --checkpoint checkpoints/3b_best.pt | |
| ``` | |
| ### ๋ฐฐํฌ | |
| ```bash | |
| # Step 1: GGUF ๋ณํ (llama.cpp ํฌ๋งท) | |
| bash scripts/convert_3b_gguf.sh | |
| # Step 2: Ollama ๋ชจ๋ธ ๋ฑ๋ก ๋ฐ ์๋น | |
| bash scripts/deploy_3b_ollama.sh | |
| # Ollama๋ก ํ ์คํธ | |
| ollama run frankenstallm-3b "ํ๊ตญ์ ์ฒ ๊ฐ ์ฐ์ ์ ๋ํด ์ค๋ช ํด์ค." | |
| ``` | |
| ### ํ์ต ๋ชจ๋ํฐ๋ง | |
| ```bash | |
| # ์ค์๊ฐ ๋ชจ๋ํฐ (tail -f ๋ฐฉ์) | |
| bash scripts/monitor_3b.sh | |
| # ํ๋ก์ธ์ค ์ํ ํ์ธ | |
| ps aux | grep pretrain | |
| # GPU ์ํ | |
| nvidia-smi --query-gpu=index,name,memory.used,memory.total,utilization.gpu \ | |
| --format=csv -l 5 | |
| ``` | |
| ### ๋จ์ผ GPU ํ ์คํธ (๊ฐ๋ฐ/๋๋ฒ๊ทธ) | |
| ```bash | |
| python train/pretrain.py \ | |
| --config configs/korean_3b_fp8.yaml \ | |
| --device cuda:0 \ | |
| --max_steps 100 \ | |
| --debug | |
| ``` | |
| --- | |
| ## 14. ๋ก๋๋งต | |
| ### ๋จ๊ธฐ (2026๋ 3์) | |
| | ํญ๋ชฉ | ์ํ | ๋น๊ณ | | |
| |------|------|------| | |
| | Phase 1 (3B Pretrain) ์๋ฃ | โ ์๋ฃ | 57K steps, loss 1.466, 2026-03-05 | | |
| | Phase 2 (SFT) ์๋ฃ | โ ์๋ฃ | 25.5K steps, val_loss 1.8851, 2026-03-06 | | |
| | SFT 6์ฐจ์ ํ๊ฐ | โ ์๋ฃ | 4/6 PASS, ORPO ํ์ | | |
| | Phase 3 (ORPO Sweep) | โ ์๋ฃ | 6-config sweep ์๋ฃ, best config ์ ์ | | |
| | **Phase 3 (ORPO ๋ณธ ํ์ต)** | **๐ ์งํ ์ค** | **lr=1.2e-5, beta=0.25, 2 epochs, ~9,840 steps** | | |
| | Phase 3.5 (ORPO ์ข ํฉ ํ๊ฐ) | ๐ ๋๊ธฐ | 10์ฐจ์ ํ๊ฐ (6 ๊ธฐ๋ณธ + 4 ORPO ๊ณ ์ ), 3-way ๋น๊ต ๋ณด๊ณ ์ | | |
| | GGUF ๋ณํ + Ollama ๋ฐฐํฌ | ๐ ๋๊ธฐ | Phase 4 (ORPO ํ๊ฐ PASS ์) | | |
| ### ์ค๊ธฐ (2026๋ 2๋ถ๊ธฐ) | |
| | ํญ๋ชฉ | ๋น๊ณ | | |
| |------|------| | |
| | ํ์ฅ ํ๋ฆฌํธ๋ ์ธ (80~100B ํ ํฐ) | Chinchilla ์ต์ ์ ๋ฌ์ฑ | | |
| | QKV Fusion | +8~12% MFU ๊ธฐ๋ | | |
| | NUMA Affinity ์ค์ | +4~9% ์์ | | |
| | FA2 native RoPE | +3~5% ์์ | | |
| | Context length ํ์ฅ (4096) | RoPE ฮธ=500K ๊ธฐ๋ฐ | | |
| ### ์ฅ๊ธฐ (2026๋ ํ๋ฐ๊ธฐ) | |
| | ํญ๋ชฉ | ๋น๊ณ | | |
| |------|------| | |
| | 7B ์คํ | FSDP ์ ๋ต ํ์ | | |
| | vLLM serving | PagedAttention ๊ธฐ๋ฐ ์ถ๋ก ์๋ฒ | | |
| | ๋๋ฉ์ธ ํนํ ํ์ธํ๋ | ์ฒ ๊ฐ/์ ์กฐ์ ๋๋ฉ์ธ | | |
| | ๊ณต๊ฐ ๋ฐฐํฌ | HuggingFace Hub ์ ๋ก๋ | | |
| ### ์๋ ค์ง ๋ฏธ์ ์ฉ ์ต์ ํ | |
| Phase 0 ๋ถ์์์ ๋ฐ๊ฒฌํ์ง๋ง ์์ง ์ ์ฉํ์ง ์์ ์ต์ ํ๋ค: | |
| | ์ต์ ํ | ์์ ํจ๊ณผ | ๊ตฌํ ๋ณต์ก๋ | | |
| |--------|-----------|-------------| | |
| | QKV Fusion | +8~12% MFU | ์ค๊ฐ | | |
| | NUMA Affinity | +4~9% | ๋ฎ์ | | |
| | FA2 Native RoPE | +3~5% | ๋ฎ์ | | |
| | HugePages | +1~3% (TLB ์ต์ ํ) | ๋ฎ์ (sysctl) | | |
| ์ด ์ต์ ํ๋ค์ ๋ชจ๋ ์ ์ฉํ๋ฉด ํ์ฌ 33.5% MFU์์ 45~50%๊น์ง ๋๋ฌํ ๊ฐ๋ฅ์ฑ์ด ์๋ค. | |
| --- | |
| ## 15. ์ฐธ๊ณ ๋ฌธ์ | |
| | ๋ฌธ์ | ์์น | ๋ด์ฉ | | |
| |------|------|------| | |
| | ํ๋ก์ ํธ ์ ์ฒด ์ฌ์ | `docs/PROJECT_HISTORY.md` | ์ผ๋ณ ์์ธ ์งํ ๊ธฐ๋ก | | |
| | 3B ์์ ๊ณํ | `docs/3B_WORKPLAN.md` | 3B ๋จ๊ณ๋ณ ์์ ๊ณํ ์์ธ | | |
| | ์ ์คํฐ์ค๋ฆฌ๊ทธ ๋ ผ์ฆ | `eval/debate/justice_league_3b_case.md` | 1Bโ3B ์ ํ ๋ฉํฐ์์ด์ ํธ ํ ๋ก ์ ๋ฌธ | | |
| | SFT ์ฌ์์ ํ๊ฒฐ | `eval/decision/FINAL_DECISION_REPORT.md` | SFT v1 ์คํจ โ v2 ์ค๊ณ ํ๊ฒฐ๋ฌธ | | |
| | 3B ๋ง์คํฐ ํ๋ | `eval/plan/3B_MASTER_PLAN.md` | ์ ์ฒด ํ์ต ํ์ดํ๋ผ์ธ ๋ง์คํฐ ํ๋ | | |
| | Phase 0 ์ต์ ํ ๋ณด๊ณ ์ | `reports/2026-03-02_0200_FRANKENSTALLM_phase0_optimization_report.md` | VRAM/MFU ์ต์ ํ ์ ์ฒด ๋ณด๊ณ | | |
| | 3B Base ํ๊ฐ ๋ณด๊ณ ์ (v1) | `reports/2026-03-05_3B_BASE_EVALUATION_REPORT.md` | ์ด๊ธฐ PPL/๋ฒค์น๋งํฌ/๋ฐ๋ณต๋ฅ ํ๊ฐ | | |
| | PPL ํ๊ฐ ๋ณด๊ณ ์ (v1) | `reports/2026-03-05_PPL_EVALUATION.md` | 4๊ฐ ๊ฒ์ฆ์ PPL ์์ธ | | |
| | ๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ (v1) | `reports/2026-03-05_BENCHMARK_RESULTS.md` | belebele, MMLU ์์ธ | | |
| | ์์ฑ ํ์ง ๋ถ์ (v1) | `reports/2026-03-05_GENERATION_QUALITY.md` | ๋ฐ๋ณต๋ฅ , ๋์ฝ๋ฉ ํ๋ผ๋ฏธํฐ | | |
| | SFT ํ์ต ๋ณด๊ณ ์ | `reports/2026-03-05_3B_SFT_PROGRESS_REPORT.md` | Phase 2 SFT ํ์ต ๊ณผ์ ๊ธฐ๋ก | | |
| | **SFT ์๋ฃ ์ข ํฉ ๋ณด๊ณ ์** | `reports/2026-03-06_3B_SFT_COMPLETION_AND_EVAL_SUMMARY.md` | **SFT ์๋ฃ + ํ๊ฐ + ์ฝ๋ ๊ฐ์ + ORPO ๊ฒฐ์ (์ต์ )** | | |
| | SFT ํ๊ฐ ๊ณํ์ | `reports/2026-03-06_3B_SFT_EVAL_PLAN.md` | 6์ฐจ์ ํ๊ฐ ์ค๊ณ | | |
| | SFT ํ๊ฐ ๊ฒฐ๊ณผ | `reports/2026-03-06_3B_SFT_EVALUATION_REPORT.md` | 6์ฐจ์ ํ๊ฐ ์์ธ ๊ฒฐ๊ณผ | | |
| | 3B ํ์ ๋จ๊ณ ์ฐธ์กฐ | `reports/2026-03-05_3B_NEXT_STEPS_REFERENCE.md` | SFT ํ ๋ฐฉํฅ์ฑ | | |
| | Nemotron Nano ํ๋น์ฑ | `reports/2026-03-05_NEMOTRON_NANO_FEASIBILITY_STUDY.md` | Hybrid ์ํคํ ์ฒ ๊ฒํ | | |
| | **v2 ์ข ํฉ ํ๊ฐ ๋ฆฌํฌํธ** | `eval/outputs/3b_reeval_20260305_1451/full_eval_report.md` | **13+ ๋ฒค์น๋งํฌ ์ข ํฉ** | | |
| | v2 PPL ๋ฆฌํฌํธ | `eval/outputs/3b_reeval_20260305_1451/reports/01_perplexity_report.md` | 19๊ฐ ๋ฐ์ดํฐ์ PPL ์์ธ | | |
| | v2 Calibration ๋ฆฌํฌํธ | `eval/outputs/3b_reeval_20260305_1451/reports/02_calibration_report.md` | Top-K ์ ํ๋, NLL ๋ถํฌ | | |
| | v2 ์์ฑ ํ์ง ๋ฆฌํฌํธ | `eval/outputs/3b_reeval_20260305_1451/reports/03_generation_quality.md` | 12์กฐํฉ ํ๋ผ๋ฏธํฐ ๊ทธ๋ฆฌ๋ ์์น | | |
| | v2 ๋ฒค์น๋งํฌ ๋ฆฌํฌํธ | `eval/outputs/3b_reeval_20260305_1451/reports/04_benchmark_report.md` | KoBEST, HAE-RAE, MMLU, 0/5-shot | | |
| | ์งํ ๊ธฐ๋ก | `PROGRESS.md` | ๋ ์ง๋ณ ์ฒดํฌํฌ์ธํธ, ์งํ, ๊ฒฐ์ ๋ก๊ทธ | | |
| | **ORPO ๋ถ์ ๋ฐ ๊ณํ** | `reports/2026-03-07_ORPO_ANALYSIS_AND_PLAN.md` | **ORPO ์งํ ๊ทผ๊ฑฐ, HP ์ค๊ณ, ์คํ ์ ์ฐจ** | | |
| | **ORPO Sweep ๋๋ฒ๊ทธ** | `reports/2026-03-08_ORPO_SWEEP_DEBUG_REPORT.md` | **QKV ๋ฒ๊ทธ, NCCL timeout, TRL ํจ์น ์์ธ** | | |
| | **ORPO ํ์ต ์ฌ์ ** | `reports/2026-03-08_ORPO_TRAINING_JOURNEY.md` | **ORPO ์ ์ฒด ๊ณผ์ : 5๋ฒ์ ์คํจ์ HP sweep (์ต์ )** | | |
| --- | |
| ## 16. ๊ธฐ์ ์คํ ์์ฝ | |
| | ์์ญ | ๊ธฐ์ | ๋ฒ์ | | |
| |------|------|------| | |
| | ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ | PyTorch (NVIDIA ์ปค์คํ ๋น๋) | nv25.12 | | |
| | ์ดํ ์ | FlashAttention-2 | 2.7.4.post1+25.12 | | |
| | FP8 / ํผํฉ ์ ๋ฐ๋ | TransformerEngine (MXFP8) | 2.10.0 | | |
| | ๋ถ์ฐ ํ์ต | DDP + NCCL (NVLS) | NCCL 2.28.9 | | |
| | ์ปค๋ ์ปดํ์ผ | Triton | 3.5.1 | | |
| | ํ ํฌ๋์ด์ | SentencePiece Unigram 64K | - | | |
| | ๋ชจ๋ํฐ๋ง | Telegram Bot (B200Bot) + cron watchdog | - | | |
| | ์ถ๋ก ์๋น | GGUF + Ollama | - | | |
| | GPU | 8ร NVIDIA B200 (NVLink 5.0, NVSwitch) | CUDA 13.1 | | |
| | CPU | 2ร AMD EPYC 9365 (Zen 5) | - | | |
| --- | |
| ## ๊ด๋ จ ํ๋ก์ ํธ | |
| ### [EVAFRILL-Mo](https://github.com/pathcosmos/EVAFRILL-Mo) | |
| **ํ์ด๋ธ๋ฆฌ๋ Mamba-2 + Transformer ์ธ์ด ๋ชจ๋ธ** โ FRANKENSTALLM์ ์๋งค ํ๋ก์ ํธ. | |
| NVIDIA [Nemotron-H](https://arxiv.org/abs/2504.03624) ์ํคํ ์ฒ์์ ์๊ฐ์ ๋ฐ์ ๋ฐ๋ฐ๋ฅ๋ถํฐ ์ง์ ๊ตฌํํ 3B ํ์ด๋ธ๋ฆฌ๋ ๋ชจ๋ธ์ด๋ค. FRANKENSTALLM์ด ์์ Transformer ๊ธฐ๋ฐ์ด๋ผ๋ฉด, EVAFRILL-Mo๋ **Mamba-2 SSM + ํฌ์ Transformer ์ดํ ์ ** ํ์ด๋ธ๋ฆฌ๋ ๊ตฌ์กฐ๋ฅผ ์ฑํํ๋ค. | |
| | ํญ๋ชฉ | FRANKENSTALLM | EVAFRILL-Mo | | |
| |------|:---:|:---:| | |
| | ์ํคํ ์ฒ | ์์ Transformer (28L) | Mamba-2 24L + Attention 2L | | |
| | ํ๋ผ๋ฏธํฐ | 3.17B | 2.94B | | |
| | ํต์ฌ ๊ธฐ์ | GQA, FP8, FlashAttention-2 | Selective Scan, SwiGLU FFN in Mamba, GQA | | |
| | ์ค๊ณ ์์น | ๊ฒ์ฆ๋ Transformer ์ํคํ ์ฒ | Nemotron-H ๋จํธํ ๋์ | | |
| | GPU | 8ร B200 | 7ร B200 | | |
| | ํ์ต ์ ๋ต | Chinchilla-optimal | Chinchilla 93% ๋ฌ์ฑ ๋ชฉํ | | |
| ๋ ํ๋ก์ ํธ๋ ๋์ผํ ํ ํฌ๋์ด์ (64K SentencePiece), ํ์ต ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ, DDP/FP8 ์ธํ๋ผ๋ฅผ ๊ณต์ ํ๋ค. "๊ฐ์ ์ฌ๋ฃ, ๋ค๋ฅธ ๋ ์ํผ"๋ก ์ํคํ ์ฒ ์ฐจ์ด๊ฐ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ๋น๊ต ์คํํ ์ ์๋ค. | |
| > *์ด๋ฆ์ ์ ๋: Bride **Eva** (ํ๋์ผ์ํ์ธ์ ์ ๋ถ) + **FRI**DAY (์์ด์ธ๋งจ AI ๋น์) + **LL**M + Nemotron์ **Mo*** | |
| --- | |
| ## 18. ๋ค์ ์ต์ ํ ๊ณํ โ MFU 33.5% โ 47% ๋ชฉํ | |
| > ์์ธ ๋ฌธ์: [`docs/NEXT_OPTIMIZATION_PLAN.md`](docs/NEXT_OPTIMIZATION_PLAN.md) | |
| ### ํ์ฌ ์ฑ๋ฅ ์ง๋จ | |
| Phase 1 ํ๋ฆฌํธ๋ ์ธ ์ค์ธก: | |
| - **57,000 steps**, ~38.5B tokens, **์ฝ 63์๊ฐ** | |
| - ์ฒ๋ฆฌ ์๋: 36~38K tok/s per rank โ ์ ์ฒด **~292K tok/s** (8GPU) | |
| - **MFU: ~33.5%** | |
| ### ํต์ฌ ๋ณ๋ชฉ: NUMA Misalignment | |
| ``` | |
| AMD EPYC 9365 ร 2์์ผ: | |
| GPU 0~3 โ NUMA node 0 (core 0-35) | |
| GPU 4~7 โ NUMA node 1 (core 36-71) | |
| ์ด๊ธฐ DDP ๋ฐ์นญ ์ 5/8 rank๊ฐ ์๋ชป๋ NUMA ๋ ธ๋์์ ์คํ. | |
| 69%์ DataLoader worker๊ฐ ํฌ๋ก์ค-NUMA โ ~2๋ฐฐ ์ง์ฐ ๋ฐ์. | |
| ``` | |
| ### ์ต์ ํ ํญ๋ชฉ๋ณ ์์ ํจ๊ณผ | |
| | ์ต์ ํ | ์์ MFU ๊ฐ์ | ๋์ด๋ | | |
| |--------|-------------|--------| | |
| | NUMA affinity ๊ณ ์ | +4~9% | ๋ฎ์ (launch script ์์ ) | | |
| | QKV fusion (TransformerEngine) | +8~12% | ์ค๊ฐ (๋ชจ๋ธ ์ฝ๋ ์์ ) | | |
| | FA2 native RoPE | +3~5% | ์ค๊ฐ (FA2 ๋ฒ์ ์์กด) | | |
| | NCCL ํ๊ฒฝ๋ณ์ ํ๋ | +1~2% | ๋ฎ์ (ํ ์ค ์ถ๊ฐ) | | |
| ### ์ต์ ํ ์ ํ ์์ ๋น๊ต | |
| | ํญ๋ชฉ | ํ์ฌ | ์ต์ ํ ํ | | |
| |------|------|----------| | |
| | MFU | 33.5% | ~45~47% | | |
| | ์ฒ๋ฆฌ์๋ | 292K tok/s | ~390~410K tok/s | | |
| | 50B ํ ํฐ ํ์ต | ~47์๊ฐ | ~34~36์๊ฐ | | |
| ### ์ฆ์ ์ ์ฉ ๊ฐ๋ฅํ ์ฝ๋ | |
| **NUMA affinity (launch script):** | |
| ```bash | |
| numactl --cpunodebind=0 --membind=0 torchrun \ | |
| --nproc_per_node=4 --node_rank=0 train/pretrain.py ... & | |
| numactl --cpunodebind=1 --membind=1 torchrun \ | |
| --nproc_per_node=4 --node_rank=1 train/pretrain.py ... & | |
| ``` | |
| **NCCL ํ๊ฒฝ๋ณ์:** | |
| ```bash | |
| export NCCL_MIN_NCHANNELS=4 | |
| export NCCL_SOCKET_NTHREADS=4 | |
| export CUDA_DEVICE_MAX_CONNECTIONS=1 | |
| ``` | |
| > Phase 3 ORPO ์๋ฃ ํ, ๋ค์ ํ๋ฆฌํธ๋ ์ธ ๋ฐ ์ ์ NUMA affinity๋ฅผ ๋จผ์ ์ ์ฉํ๋ฉด ํ์ต ์๊ฐ์ ~30% ๋จ์ถํ ์ ์๋ค. | |
| --- | |
| ## 19. GPU ํ๋์จ์ด & ๋น์ฉ ๋ถ์ โ 3B ร 60B ํ๋ฆฌํธ๋ ์ธ | |
| > ์์ธ ๋ฌธ์: [`docs/GPU_COST_ANALYSIS.md`](docs/GPU_COST_ANALYSIS.md) | |
| ### ์ค์ธก ๊ธฐ์ค ๋ฒ ์ด์ค๋ผ์ธ | |
| ``` | |
| FRANKENSTALLM Phase 1 ์ค์ธก: | |
| B200 ร 8, MFU 33.5%, 292K tok/s | |
| 38.5B ํ ํฐ โ 63์๊ฐ | |
| 60B ํ ํฐ ํ์ฐ โ ์ฝ 98์๊ฐ | |
| ``` | |
| ### ํด๋ผ์ฐ๋ ๊ฐ์ฑ๋น Top 3 (60B ํ ํฐ, ์ต์ ํ ํ) | |
| | ์์ | ๊ตฌ์ฑ | ์์์๊ฐ | ์ด ๋น์ฉ | | |
| |------|------|---------|--------| | |
| | 1 | H100ร8 Cudo | 44.8hr | **$645** (~93๋ง์) | | |
| | 2 | H100ร8 Vast.ai | 44.8hr | $670 (~97๋ง์) | | |
| | 3 | H100ร8 RunPod | 44.8hr | $713 (~103๋ง์) | | |
| > B200 Blackwell์ด ๋น ๋ฅด์ง๋ง, ํด๋ผ์ฐ๋ ๋จ๊ฐ๊ฐ H100์ 3๋ฐฐ โ **H100์ด ์ด๋น์ฉ 4.3๋ฐฐ ์ ๋ ด** | |
| ### ๊ฐ์ธ GPU ๊ตฌ์ฑ ์ถ์ฒ | |
| | ๊ตฌ์ฑ | VRAM | NVLink | ๊ฐ๊ฒฉ | ์ถ์ฒ๋ | | |
| |------|------|--------|------|--------| | |
| | A6000 Ada ร 2 ์ค๊ณ | 96GB (ํตํฉ) | โ | ~1,000๋ง์ | โญโญโญโญโญ | | |
| | L40S ร 2 | 96GB (ํตํฉ) | โ | ~1,400๋ง์ | โญโญโญโญ | | |
| | RTX Pro 6000 Blackwell | 96GB (๋จ์ผ) | โ | ~1,200๋ง์ | โญโญโญ | | |
| > ์๋น์์ฉ GPU(RTX 5090/4090)๋ NVLink ๋ฏธ์ง์. 80GB+ ํตํฉ ๋ฉ๋ชจ๋ฆฌ ํ์ ์ ์ ๋ฌธ๊ฐ์ฉ ํ์. | |
| ### ์ถ์ฒ ์ ๋ต: ๋ก์ปฌ + ํด๋ผ์ฐ๋ ํ์ด๋ธ๋ฆฌ๋ | |
| ``` | |
| [๋ก์ปฌ] RTX 4090 ร 4 (880๋ง์) โ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ, ์คํ, SFT/ORPO | |
| [ํด๋ผ์ฐ๋] H100ร8 (๋ฐ๋น ~103๋ง์) โ ๋ณธ ํ๋ฆฌํธ๋ ์ธ๋ง | |
| ``` | |
| --- | |
| ## ๋ง์น๋ฉฐ | |
| ์ด ํ๋ก์ ํธ์ ๋ชจํ ๋ ํ๋๋ค: | |
| > **"๋งํ๋ ๊ฒ๋ ๊ธฐ๋กํ๋ค."** | |
| SFT v1์ loss=0.0 ์คํจ, torch.compile์ด ํจ๊ณผ ์์๋ ๊ฒ, 18% ๋ฐ๋ณต๋ฅ ์ ์ข์ โ ์ด ๋ชจ๋ ๊ฒ์ด ๊ธฐ๋ก์ ๋จ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ Phase 3 ORPO์์๋ ๊ทธ ์ ํต์ ์ด์ด์ง๋ค. **5๋ฒ์ ์คํจ** โ NCCL timeout, config ์ถฉ๋, QKV ๋ณํ ๋ฒ๊ทธ, ํฌํธ ์ถฉ๋, TRL NaN ๋ฒ๊ทธ โ ๋ฅผ ๊ฑฐ์ณ ๋ง์นจ๋ด 6-config HP sweep์ด ๋์๊ฐ๊ณ ์๋ค. | |
| Frankenstein์ด ์กฐ๊ฐ๋ค์ ์ด์ด ๋ถ์ฌ ์๋ช ์ ๋ง๋ค์๋ฏ, ์ฐ๋ฆฌ๋ ๋ค์ํ ์์ค์ ๋ฐ์ดํฐ์ ๊ธฐ์ ์ ์ด์ด ๋ถ์ฌ ํ๊ตญ์ด๋ฅผ ์ดํดํ๊ณ ๋งํ๋ ๋ชจ๋ธ์ ๋ง๋ค์ด๊ฐ๊ณ ์๋ค. ์์ง ์์ฑ๋์ง ์์์ง๋ง, ๊ทธ ๊ณผ์ ์์ฒด๊ฐ ์ด ํ๋ก์ ํธ์ ๊ฐ์น๋ค. | |
| Phase 1 ํ๋ฆฌํธ๋ ์ธ์ 57,000 steps, loss 1.466์ผ๋ก ์๋ฃ๋๋ค. Phase 2 SFT๋ 25,500 steps์์ early stopping (val_loss 1.8851). 6์ฐจ์ ์ข ํฉ ํ๊ฐ์์ 4/6์ ํต๊ณผํ๋ค. | |
| **์ข์ ์์**: ์ง์ ๋ณด์กด์ด ๊ฑฐ์ ์๋ฒฝํ๋ค (forgetting 0.9%). SFT๊ฐ base ๋ชจ๋ธ์ ์ง์์ ํ๊ดดํ์ง ์์๋ค. EOS ์ข ๋ฃ์จ์ 0%์์ 60%๋ก ์ฌ๋ผ๊ฐ๋ค. MMLU-KO๋ +3.2pp ๊ฐ์ ๋์๋ค. | |
| **์์ฌ์ด ์์**: greedy ๋ฐ๋ณต๋ฅ 72.97%. SFT๋ง์ผ๋ก๋ ๋ฐ๋ณต ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์๋ค. ์คํ๋ ค ์ ํ๋์๋ค (Base 60.99% โ SFT 72.97%). ํ์ง๋ง `rep_penalty=1.2`๋ง ์ ์ฉํ๋ฉด ๋ฐ๋ณต๋ฅ 0%๊ฐ ๋ฌ์ฑ๋๋ค. ๋ชจ๋ธ์ ๋ฐ๋ณตํ์ง ์๋ ๋ฅ๋ ฅ์ ๊ฐ์ง๊ณ ์๋ค. ๋ค๋ง ๊ทธ๊ฒ์ "๊ธฐ๋ณธ ํ๋"์ผ๋ก ํ์ตํ์ง ๋ชปํ์ ๋ฟ์ด๋ค. | |
| **ํ์ฌ**: Phase 3 ORPO ๋ณธ ํ์ต์ด ์งํ ์ค์ด๋ค. 6-config HP sweep์ ๋ชจ๋ ์๋ฃํ๊ณ , eval_loss ๊ธฐ์ค ์ต์ config (lr=1.2e-5, beta=0.25)๋ฅผ ์ ์ ํ๋ค. Throughput ๋ฒค์น๋งํฌ๋ก batch_size=4, grad_accum=4 ์กฐํฉ์ด 80.63 samples/s๋ก ์ต์ ์์ ํ์ธํ๊ณ , 8รB200 ์ ์ฒด GPU๋ก ๋ณธ ํ์ต์ ์์ํ๋ค. ~9,840 steps, ์์ ~4.8์๊ฐ. ํ์ต ์๋ฃ ์ watchdog์ด ์๋์ผ๋ก 10์ฐจ์ ์ข ํฉ ํ๊ฐ(Base vs SFT vs ORPO 3-way ๋น๊ต)๋ฅผ ์คํํ๋ค. | |
| > **ORPO๊ฐ greedy ๋ฐ๋ณต๋ฅ ์ 5% ๋ฏธ๋ง์ผ๋ก ๋์ด๋ด๋ฆด ์ ์๋๊ฐ?** | |
| ๊ทธ ๋ต์ด ๊ณง ๋์จ๋ค. ํ์ต์ด ๋๋๋ฉด 6์ฐจ์ ์ฌํ๊ฐ๋ฅผ ์ํํ๊ณ , ํต๊ณผํ๋ฉด GGUF๋ก ๋ณํ๋์ด Ollama ์์์ ๋์๊ฐ๊ฒ ๋๋ค. ํ๊ตญ์ด๋ฅผ ์ดํดํ๊ณ ๋งํ๋ 3B ๋ชจ๋ธ, ์ฒ์๋ถํฐ ๋ง๋ ๊ฒ. | |
| --- | |
| *์ต์ข ์ ๋ฐ์ดํธ: 2026-03-09* | |
| *ํ์ฌ ์ํ: Phase 3 ORPO ๋ณธ ํ์ต ์งํ ์ค (lr=1.2e-5, beta=0.25, step ~1,660/9,840, 17%) โ ํ์ต ์๋ฃ ์ 10์ฐจ์ ์ข ํฉ ํ๊ฐ ์๋ ์คํ ๋๊ธฐ* | |