๐ 3B ํ๊ตญ์ด LLM ๋ง์คํฐ ํ๋
์์ฑ์ผ: 2026-02-27 04:27 KST
ํ๋ก์ ํธ: /PROJECT/0325120031_A/ghong/taketimes/llm-bang/
๊ฒฐ์ : 1B โ 3B ์ ํ (1B ๊ตฌ์กฐ์ ํ๊ณ ํ์ธ)
์ด ์์ ๊ธฐ๊ฐ: ~35์๊ฐ
0. ํํฉ ์์ฝ
1B์์ ํ์ธ๋ ๊ฒ
| ํญ๋ชฉ |
๊ฒฐ๊ณผ |
| ๋ฐ๋ณต๋ฅ (raw, ์ฌ๋ฐ๋ฅธ ํฌ๋งท) |
30.7% |
| ๋ฐ๋ณต๋ฅ (rep_penalty=1.1) |
18.0% |
| val_loss |
2.2062 |
| ์์ฐ ์ข
๋ฃ์จ |
60% |
| ์งง์ QA ํ์ง |
โ
์ํธ (์๋, ๊น์น ๋ฑ) |
| ๋ณต์กํ ์ง๋ฌธ ํ์ง |
โ ๋ฐ๋ณต ํดํ ์ฌ๊ฐ |
3B ์ ํ ๊ทผ๊ฑฐ
- ๋ฐ๋ณต๋ฅ 18%๋ 1B ๊ตฌ์กฐ์ ํ๊ณ โ d_model=2048, 24 layers๋ก๋ ๊ธด ์ํ์ค์์ hidden state ๋ถ๊ดด ๋ถ๊ฐํผ
- Scaling law ์์ธก: 3B๋ loss
7% ๊ฐ์ โ ๋ฐ๋ณต๋ฅ 58% ์์
- ORPO ์์ด๋ ๋ชฉํ ๋ฌ์ฑ ๊ฐ๋ฅ: 3B SFT๋ง์ผ๋ก <10%, +ORPO๋ก <3%
- ์ด ์์์๊ฐ ORPO ์คํจโ3B (39h) vs 3B ์งํ (30h) โ ์งํ์ด ๋น ๋ฆ
1. 3B ๋ชจ๋ธ ์ํคํ
์ฒ
| ํ๋ผ๋ฏธํฐ |
1B (ํ์ฌ) |
3B (๋ชฉํ) |
๋ณํ |
| d_model |
2048 |
3072 |
1.5ร |
| n_layers |
24 |
32 |
1.33ร |
| n_heads |
16 |
24 |
1.5ร |
| n_kv_heads (GQA) |
4 |
8 |
2ร (GQA 3:1) |
| d_ffn (SwiGLU) |
5472 |
8192 |
1.5ร |
| vocab_size |
64000 |
64000 |
๋์ผ |
| max_seq_len |
4096 |
4096 |
๋์ผ |
| rope_theta |
500000 |
500000 |
๋์ผ |
| ์ด ํ๋ผ๋ฏธํฐ |
1.19B |
~3.42B |
2.9ร |
ํ๋ผ๋ฏธํฐ ์ ์์ธ
Embedding: 64000 ร 3072 = 196.6M
Attention/layer: Q(3072ร3072) + K(3072ร1024) + V(3072ร1024) + O(3072ร3072) = 25.1M
FFN/layer: SwiGLU gate(3072ร8192) + up(3072ร8192) + down(8192ร3072) = 75.5M
Layer total: 25.1 + 75.5 = 100.6M ร 32 layers = 3,219M
LM Head: tied with embedding
์ด๊ณ: 196.6M + 3,219M โ 3.42B
GPU ๋ฉ๋ชจ๋ฆฌ ์์ (8ร B200 183GB)
๋ชจ๋ธ (FP8): 3.42 GB
Optimizer (FP32): 27.4 GB (DDP ๋ถ์ฐ โ ~3.4 GB/GPU)
Gradients (BF16): 6.84 GB (๋ถ์ฐ โ ~0.86 GB/GPU)
Activations (bs=4): ~15-25 GB (gradient checkpointing)
Per GPU ํฉ๊ณ: ~28 GB โ B200์ 15% โ ๋งค์ฐ ์ฌ์
Config ํ์ผ
model:
vocab_size: 64000
d_model: 3072
n_layers: 32
n_heads: 24
n_kv_heads: 8
d_ffn: 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
batch_size: 4
grad_accum_steps: 8
lr: 1.5e-4
min_lr: 1.5e-5
weight_decay: 0.1
warmup_steps: 2000
max_grad_norm: 1.0
log_interval: 10
save_interval: 500
eval_interval: 200
fp8_format: "MXFP8"
tokenizer:
vocab_size: 64000
type: sentencepiece_unigram
2. ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ
์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅ
| ์์ค |
ํฌ๊ธฐ |
ํ ํฐ ์ |
์ํ |
| 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 |
โ
ํ ํฐํ ์๋ฃ |
| ํฉ๊ณ (korean_train.bin) |
17.8 GB |
8.91B |
โ
์ฆ์ ์์ ๊ฐ๋ฅ |
์ถ๊ฐ ์ค๋น ํ์ (๋ณ๋ ฌ ํ ํฐํ)
| ์์ค |
ํฌ๊ธฐ |
์ถ์ ํ ํฐ |
์์
|
์์ ์์ |
| culturax_ko |
60 GB |
~30-40B |
parquetโํ ํฐํ |
4-6h |
| hplt_ko |
23 GB |
~12-15B |
ํ ํฐํ |
2-3h |
| cc100_ko |
14 GB |
~8-10B |
xzํด์ +ํ ํฐํ |
2h |
| oscar_ko |
9.2 GB |
~5-6B |
ํ ํฐํ |
1-2h |
| korean_textbooks |
6.4 GB |
~3-4B |
ํ ํฐํ |
1h |
| ํฉ๊ณ |
~123 GB |
~70-80B |
|
8-12h (๋ณ๋ ฌ) |
Chinchilla ๋ถ์
3.42B ร 20 = 68.4B tokens (์ต์ )
์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅ: 8.91B ร 4 epoch = 35.6B (์ต์ ์ 52%)
extra ํฌํจ ์: ~80-90B โ ์ถฉ๋ถ (131%)
๋ฐ์ดํฐ ํ์๋ผ์ธ
| ์์ |
ํ๋ |
| ์ง๊ธ |
korean_train.bin 8.91B๋ก ์ฌ์ ํ์ต ์์ (4 epoch) |
| ๋ณ๋ ฌ |
korean_extra ํ ํฐํ + MinHash ์ค๋ณต์ ๊ฑฐ + PPL ํํฐ ์งํ |
| Phase 2 |
์ ์ฒด 60-80B ํ ํฐ์ผ๋ก extended pretrain (์ ํ) |
SFT ๋ฐ์ดํฐ
| ํญ๋ชฉ |
๊ฐ |
| ํ์ฌ ํด๋ฆฐ ๋ฐ์ดํฐ |
~120-135K ์ํ (ํํฐ๋ง ํ) |
| Val split |
10% (~12-13K) |
| 3B์ ์ถฉ๋ถ? |
โ
(7B Alpaca๋ 52K๋ก ํ์ต) |
์ถ๊ฐ ๊ณ ํ์ง SFT ์์ค (์ ํ)
hPark/orca-ko (~200K)
maywell/synatra-orca (~300K)
HAERAE-HUB/qarv-instruct-100k (100K)
- ํํฐ๋ง ํ 200-300K ์ฌ์ฉ ๊ฐ๋ฅ
3. ์ฌ์ ํ์ต ๊ณํ
ํ์ดํผํ๋ผ๋ฏธํฐ
| ํ๋ผ๋ฏธํฐ |
๊ฐ |
๊ทผ๊ฑฐ |
| LR |
1.5e-4 |
3B ํ์ค (1B์ 3e-4 ๋๋น ๋ณด์์ ) |
| Min LR |
1.5e-5 |
LR์ 10% |
| Warmup |
2,000 steps |
~6% |
| Weight Decay |
0.1 |
Pretrain ํ์ค |
| Batch Size |
4/GPU ร 8GPU ร 8 grad_accum = 256 |
eff ~1M tok/step |
| Max Steps |
34,000 |
8.91B ร 4 epoch |
| Precision |
MXFP8 |
B200 ์ต์ ํ |
| Grad Clip |
1.0 |
ํ์ค |
์์ ์์ ์๊ฐ
1B ์ค์ธก: ~75,700 tok/s (๋จ์ผ B200)
3B ์์: ํ๋ผ๋ฏธํฐ 3ร โ throughput ~40-50% ๊ฐ์
BUT batch ์ต์ ํ + FP8 โ ๋ณด์
๋ณด์์ ์ถ์ :
8.91B ร 4 epoch = 35.6B tokens
์ฒ๋ฆฌ๋: ~400K tok/s (8ร B200, FP8, ์ต์ ๋ฐฐ์น)
์์: 35.6B / 400K = 89,000์ด โ 24.7์๊ฐ
๋๊ด์ ์ถ์ :
์ฒ๋ฆฌ๋: ~600K tok/s โ 16.5์๊ฐ
์ฑํ ์ถ์ : ~26์๊ฐ
๋ชจ๋ํฐ๋ง
tail -f checkpoints/korean_3b_fp8/train.log
tensorboard --logdir checkpoints/korean_3b_fp8/tensorboard --port 6007
watch -n 10 nvidia-smi
ํต์ฌ ๊ด์ฐฐ ์์น:
| ์์น |
์ ์ ๋ฒ์ |
๊ฒฝ๊ณ |
์ฆ์ ์ค๋จ |
| Train Loss |
์์ ~10, ์๋ ด ~3-4 |
์ ์ฒด 5000+ steps |
๋ฐ์ฐ (์์น) |
| GNorm |
0.5-2.0 |
>5.0 |
>50 |
| PPL |
ํ๊ฐ ์ถ์ธ |
์ ์ฒด |
์์น |
| GPU Util |
>90% |
<70% |
<50% (๋ณ๋ชฉ) |
| tok/s |
>300K |
<200K |
<100K |
์ฒดํฌํฌ์ธํธ ์ ๋ต
| Step |
ํ๋ |
| 500 |
Sanity check โ loss ํ๊ฐ ์ค? OOM ์๋? |
| 5,000 |
1 epoch ์๋ฃ โ PPL ์ธก์ , ํ๊ตญ์ด ํ
์คํธ perplexity <20? |
| 10,000 |
์ค๊ฐ์ โ loss ์ถ์ธ ํ์ธ, ๊ณผ์ ํฉ ์งํ? |
| 17,000 |
2 epoch โ PPL < 15? |
| 25,000 |
3 epoch โ PPL < 12? |
| 34,000 |
์ต์ข
โ PPL < 10 ๋ชฉํ |
๋์คํฌ: ์ฒดํฌํฌ์ธํธ 1๊ฐ ~27GB (๋ชจ๋ธ 7GB + optimizer 20GB) ร save_interval=500 โ 68๊ฐ = ~1.8TB
โ save_interval=2000์ผ๋ก ๋ณ๊ฒฝ ๊ถ์ฅ โ 17๊ฐ = ~460GB
4. SFT ๊ณํ
1B ๊ตํ ์ ๋ถ ์ ์ฉ
| ๊ตํ |
1B์์ ๋ฐ๊ฒฌ |
3B์ ์ ์ฉ |
| Dynamic padding ํ์ |
4096 ๊ณ ์ ์ผ๋ก 90% ๋ญ๋น |
โ
sft_dataset.py ์์ ์๋ฃ, ๊ทธ๋๋ก ์ฌ์ฉ |
| EOS ๋ณด์กด |
ํธ๋ ์ผ์ด์
์ EOS ์์ค |
โ
response_ids[-1] = eos_id ๊ฐ์ |
| Val split ํ์ |
๊ณผ์ ํฉ ๋ชจ๋ํฐ๋ง ๋ถ๊ฐํ์ |
โ
10% split |
| 3-4 epoch |
2 epoch์ underfitting |
โ
max_steps ๊ณ์ฐ |
| OpenOrca ๊ณผ๋ํ์ง ๋ฐฉ์ง |
5ร ๊ฐ์ค์น๋ก ๊ณผ์ ํฉ |
โ
2.0ร ์ดํ |
| ๋ฐ์ดํฐ ํ์ง ํํฐ |
</s> ๋ฆฌํฐ๋ด, Q/A ๋ง์ปค ์ค์ผ |
โ
ํํฐ ์คํฌ๋ฆฝํธ ์์ฑ |
| ์ฌ๋ฐ๋ฅธ ํฌ๋งท ํต์ผ |
ํ์ต/์ถ๋ก ํฌ๋งท ๋ถ์ผ์น |
โ
<|user|>/<|assistant|> ์ผ๊ด |
| Early stopping |
val_loss ์์นํด๋ ํ์ต ๊ณ์๋จ |
โ
patience=5 ๊ตฌํ |
| NEFTune alpha |
10.0์ ๊ณผ๋ |
โ
5.0์ผ๋ก ์กฐ์ |
ํ์ดํผํ๋ผ๋ฏธํฐ
| ํ๋ผ๋ฏธํฐ |
๊ฐ |
๊ทผ๊ฑฐ |
| LR |
2e-5 |
SFT ํ์ค (Alpaca, Vicuna ๋์ผ) |
| Warmup |
300 steps |
~3% |
| Max Steps |
10,000 |
~3-4 epoch (๋ฐ์ดํฐ ํฌ๊ธฐ ๋ฐ๋ผ ์กฐ์ ) |
| Batch Size |
4/GPU ร 2 grad_accum ร 8GPU = 64 |
SFT ํ์ค |
| Weight Decay |
0.01 |
SFT ํ์ค (pretrain 0.1๋ณด๋ค ๋ฎ๊ฒ) |
| NEFTune |
alpha=5.0 |
๊ณผ์ ํฉ ๋ฐฉ์ง |
| Eval Interval |
500 steps |
|
| Early Stopping |
patience=5 |
2,500 steps ๋ฌด๊ฐ์ ์ ์ค๋จ |
| Dropout |
0.05 |
๊ณผ์ ํฉ ๋ฐฉ์ง (1B์์ 0.0์ด์์) |
์คํ ๋ช
๋ น์ด
RUN_NAME=korean_3b_sft \
BASE_CHECKPOINT=checkpoints/korean_3b_fp8/checkpoint-BEST \
SFT_DATA=data/sft_v2/train.jsonl \
VAL_DATA=data/sft_v2/val.jsonl \
MAX_STEPS=10000 \
LR=2.0e-5 \
WARMUP_STEPS=300 \
bash scripts/launch_sft.sh
์์ ์๊ฐ: ~2์๊ฐ (3B๋ 1B ๋๋น ~2.5ร ๋๋ฆผ)
์ฑ๊ณต ๊ธฐ์ค
| ์งํ |
๋ชฉํ |
์คํจ ๊ธฐ์ค |
| Train Loss |
< 1.85 |
> 2.00 |
| Val Loss |
Train์ 1.1๋ฐฐ ์ด๋ด |
1.2๋ฐฐ ์ด๊ณผ |
| ๋ฐ๋ณต๋ฅ (raw) |
< 10% |
> 15% |
| ๋ฐ๋ณต๋ฅ (rep_penalty=1.1) |
< 3% |
> 8% |
| EOS ์ข
๋ฃ์จ |
> 80% |
< 60% |
5. ORPO ๊ณํ
ํ์ด๋ฐ: SFT ์๋ฃ ํ, ๋ฐ๋ณต๋ฅ >5%์ผ ๋๋ง
๋ฐ์ดํฐ
| ์์ค |
์ํ ์ |
์ ํ |
| maywell/ko_Ultrafeedback_binarized |
~60K |
์ผ๋ฐ ๋๋ฉ์ธ preference |
| kuotient/orca-math-korean-dpo-pairs |
์์ฒ |
์ํ ๋๋ฉ์ธ |
| ์์ฒด ์์ฑ (3B SFT ๋ชจ๋ธ๋ก) |
~2-5K |
๋ฐ๋ณต ํ๊ฒ preference |
์์ฒด ์์ฑ ๋ฐฉ๋ฒ:
- 3B SFT ๋ชจ๋ธ๋ก 1000 ํ๋กฌํํธ ร 4 temperature ์์ฑ
- ๋ฐ๋ณต ์ถ๋ ฅ โ rejected, ๊นจ๋ํ ์ถ๋ ฅ โ chosen
- 3B์์๋ ๋ฐ๋ณต๋ฅ ๋ฎ์ผ๋ฏ๋ก 1B๋ณด๋ค ํจ์ฌ ํธํฅ ์ ์
ํ์ดํผํ๋ผ๋ฏธํฐ
ORPOConfig(
learning_rate=5e-7,
num_train_epochs=1,
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
beta=0.1,
)
์์ ์๊ฐ: 1-2์๊ฐ
๋ชฉํ: ๋ฐ๋ณต๋ฅ <3% (raw), <1% (rep_penalty=1.1)
6. ํ๊ฐ ๊ณํ
๋ฒค์น๋งํฌ
| ๋ฒค์น๋งํฌ |
๋๊ตฌ |
1B ์์ |
3B ๋ชฉํ |
| ko_ifeval |
lm-eval-harness |
15-25% |
35-45% |
| ko_winogrande |
lm-eval-harness |
53-58% |
60-68% |
| KoBEST (5 tasks avg) |
lm-eval-harness |
55-60% |
65-75% |
| ๋ฐ๋ณต๋ฅ (raw) |
test_generation_params.py |
18% |
<8% |
| ๋ฐ๋ณต๋ฅ (+rep_penalty) |
test_generation_params.py |
~5-8% |
<3% |
์คํ ๋ช
๋ น์ด
lm_eval --model hf \
--model_args pretrained=checkpoints/korean_3b_sft/checkpoint-BEST,dtype=bfloat16 \
--tasks ko_ifeval --device cuda:0
lm_eval --model hf \
--model_args pretrained=checkpoints/korean_3b_sft/checkpoint-BEST,dtype=bfloat16 \
--tasks kobest_boolq,kobest_copa,kobest_wic,kobest_hellaswag,kobest_sentineg \
--device cuda:0
ํ๋จ ๊ธฐ์ค
[3B SFT ํ๊ฐ ๊ฒฐ๊ณผ]
โ
โโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ
โ
PASS โ ๏ธ PARTIAL โ FAIL
๋ฐ๋ณต๋ฅ <5% ๋ฐ๋ณต๋ฅ 5-10% ๋ฐ๋ณต๋ฅ >10%
ko_ifeval>35% ko_ifeval 25-35% ko_ifeval<25%
โ โ โ
โผ โผ โผ
๋ฐฐํฌ ์ค๋น ORPO ์ ์ฉ ์์ธ ๋ถ์
(Phase ๋ฐฐํฌ) (Phase 5) (๋ฐ์ดํฐ/์ํคํ
์ฒ ์ ๊ฒ)
7. ์ ์ฒด ํ์๋ผ์ธ
ํ๋์ ๋ณด๊ธฐ
Day 0 (์ง๊ธ, 04:30)
โโโ [04:30] Config ์์ฑ + sanity check 30๋ถ
โโโ [05:00] ๐ฅ ์ฌ์ ํ์ต ์์ โ ์ค๋ ๋ฐค ์์
โโโ [05:00] (๋ณ๋ ฌ) korean_extra ํ ํฐํ ์์ 8-12h
โ
Day 1 (๋ด์ผ)
โโโ [~07:00] ์ฌ์ ํ์ต ์งํ ์ค... (~26์๊ฐ)
โโโ [์ค๊ฐ] ์ฒดํฌํฌ์ธํธ PPL ํ์ธ
โ
Day 1.5
โโโ [~07:00+26h = Day 2 07:00] ์ฌ์ ํ์ต ์๋ฃ
โโโ [07:00] SFT ์์ 2์๊ฐ
โโโ [09:00] SFT ์๋ฃ โ ํ๊ฐ
โโโ [09:30] ๋ฐ๋ณต๋ฅ <5%? โ ๋ฐฐํฌ
โโโ [09:30] ๋ฐ๋ณต๋ฅ 5-10%? โ ORPO 1-2์๊ฐ
โโโ [11:30] ORPO ์๋ฃ โ ์ต์ข
ํ๊ฐ
โ
Day 2
โโโ ๋ฒค์น๋งํฌ ํ ์ค์ํธ 2์๊ฐ
โโโ HuggingFace ์
๋ก๋ 1์๊ฐ
โโโ vLLM ์๋น ํ
์คํธ 1์๊ฐ
โโโ ๐ ๋ฐฐํฌ ์๋ฃ
ํ ํ์
| ๋จ๊ณ |
์์ |
์์ |
์๋ฃ |
์์กด์ฑ |
| 0. Config + Sanity |
Day 0 04:30 |
30๋ถ |
05:00 |
์์ |
| 1. ์ฌ์ ํ์ต |
Day 0 05:00 |
26์๊ฐ |
Day 1 ~07:00 |
Config |
| (๋ณ๋ ฌ) Extra ํ ํฐํ |
Day 0 05:00 |
8-12์๊ฐ |
Day 0 ~17:00 |
์์ |
| 2. SFT |
Day 1 07:00 |
2์๊ฐ |
Day 1 09:00 |
์ฌ์ ํ์ต ์๋ฃ |
| 3. 1์ฐจ ํ๊ฐ |
Day 1 09:00 |
30๋ถ |
Day 1 09:30 |
SFT ์๋ฃ |
| 4. ORPO (์กฐ๊ฑด๋ถ) |
Day 1 09:30 |
1-2์๊ฐ |
Day 1 11:30 |
๋ฐ๋ณต๋ฅ >5% |
| 5. ํ ๋ฒค์น๋งํฌ |
Day 1 11:30 |
2์๊ฐ |
Day 1 13:30 |
|
| 6. ๋ฐฐํฌ |
Day 1 13:30 |
2์๊ฐ |
Day 1 15:30 |
๋ฒค์น๋งํฌ ํต๊ณผ |
8. ์์ฌ๊ฒฐ์ ํธ๋ฆฌ
Phase 1: ์ฌ์ ํ์ต ์ค (Step 5000, 10000, ...)
Loss ํ๊ฐ ์ค?
โโโ YES โ ๊ณ์
โโโ NO (์ ์ฒด 3000+ steps)
โโโ ๋ฐ์ดํฐ ํ์ง ๋ฌธ์ ? โ PPL ํํฐ ๊ฐํ + ์ฌ์์
โโโ LR ๋ฌธ์ ? โ LR ๋ฐ๊ฐ ํ resume
โโโ ๋ชจ๋ธ ์ํคํ
์ฒ? โ d_model/n_layers ์กฐ์ (์ตํ ์๋จ)
PPL (ํ๊ตญ์ด ํ
์คํธ)?
โโโ < 15 at 2 epoch โ ์ ์
โโโ 15-20 at 2 epoch โ ์ฃผ์ (๋ฐ์ดํฐ ๋ถ์กฑ?)
โโโ > 20 at 2 epoch โ ๋ฌธ์ (๋ฐ์ดํฐ ํ์ง or ํ์ดํผํ๋ผ๋ฏธํฐ)
OOM?
โโโ batch_size 4โ2, grad_accum 8โ16
โโโ gradient checkpointing ํ์ธ
Phase 2: SFT ํ
๋ฐ๋ณต๋ฅ (raw)?
โโโ < 5% โ โ
๋ฐฐํฌ ๊ฐ๋ฅ! (ORPO ๊ฑด๋๋)
โโโ 5-10% โ โ ๏ธ ORPO ์ ์ฉ
โโโ 10-15% โ ๐ SFT ํ์ดํผํ๋ผ๋ฏธํฐ ์กฐ์ ํ ์ฌ์๋
โโโ > 15% โ โ ์ฌ์ ํ์ต ํ์ง ๋ฌธ์ โ Phase 1 ์ฌ์ ๊ฒ
ko_ifeval?
โโโ > 35% โ โ
๋ชฉํ ๋ฌ์ฑ
โโโ 25-35% โ ๐ก ๋ฐ์ดํฐ augmentation ๊ณ ๋ ค
โโโ < 25% โ ๐ด 3B์์๋ ์ด๋ฌ๋ฉด ๋ฐ์ดํฐ ๋ฌธ์ ์ฌ๊ฐ
Phase 3: ORPO ํ
๋ฐ๋ณต๋ฅ ?
โโโ < 3% โ โ
์๋ฃ
โโโ 3-5% โ ๐ก ์๋น ์ rep_penalty=1.05๋ก ๋ณด์
โโโ > 5% โ ๐ด preference ๋ฐ์ดํฐ ์ฌ๊ฒํ
9. ์์ธ ๋์
| ์๋๋ฆฌ์ค |
ํ๋ฅ |
๋์ |
| OOM |
5% |
batch_size 4โ2, grad_accum 2ร |
| Loss ๋ฐ์ฐ |
5% |
LR ๋ฐ๊ฐ, grad_clip 0.5๋ก ๊ฐํ |
| GPU Hang / NCCL |
10% |
pkill torchrun โ latest checkpoint์์ resume |
| ๋์คํฌ ๋ถ์กฑ |
3% |
save_interval 2000โ5000, ์ค๋๋ ckpt ์ญ์ |
| ์ฌ์ ํ์ต ํ PPL >20 |
10% |
๋ฐ์ดํฐ ์ถ๊ฐ (korean_extra) + extended training |
| SFT ํ ๋ฐ๋ณต๋ฅ >15% |
10% |
๋ฐ์ดํฐ ํํฐ ์ฌ๊ฐํ + LR/epoch ์กฐ์ |
| ORPO ํ ํ์ง ํดํ |
15% |
ORPO LR ๋ฎ์ถ๊ธฐ (5e-7 โ 1e-7), beta ์กฐ์ |
| FP8 ์์น ๋ถ์์ |
5% |
BF16์ผ๋ก ํด๋ฐฑ (์๊ฐ 1.5ร ์ฆ๊ฐ) |
NCCL/GPU ๋ณต๊ตฌ ์คํฌ๋ฆฝํธ
pkill -f torchrun && sleep 5
LATEST=$(ls -d checkpoints/korean_3b_fp8/checkpoint-[0-9]* 2>/dev/null \
| sort -t- -k2 -n | tail -1)
bash scripts/run_pretrain.sh --config configs/korean_3b_fp8.yaml --resume "${LATEST}"
10. 1B์์ ๋ฐฐ์ด ๊ตํ ์ฒดํฌ๋ฆฌ์คํธ
ํ์ต ์ ํ์ ํ์ธ
ํ์ต ์ค ํ์ ๋ชจ๋ํฐ๋ง
ํ์ต ํ ํ์ ํ์ธ
์ ๋ ๋ฐ๋ณตํ์ง ๋ง ๊ฒ
- โ ํ์ต/์ถ๋ก ํฌ๋งท ๋ถ์ผ์น ์ํ๋ก ํ๊ฐํ์ง ๋ง ๊ฒ
- โ Val split ์์ด ํ์ตํ์ง ๋ง ๊ฒ
- โ ํน์ ์์ค 5ร ์ด์ ์
์ํ๋งํ์ง ๋ง ๊ฒ
- โ 2 epoch ๋ฏธ๋ง์ผ๋ก ํ์ตํ์ง ๋ง ๊ฒ
- โ Dynamic padding ๋ฏธ์๋ ์ํ๋ก ํ์ตํ์ง ๋ง ๊ฒ
- โ ๋ฐ๋ณต๋ฅ ์ธก์ ์์ด "loss ๋ฎ์ผ๋ OK" ํ๋จํ์ง ๋ง ๊ฒ
๐ฅ ์ค๋ ๋ฐค ์ง๊ธ ๋น์ฅ ์์ํ ์ฒซ ๋ฒ์งธ ๋ช
๋ น์ด
cd /PROJECT/0325120031_A/ghong/taketimes/llm-bang
cat > configs/korean_3b_fp8.yaml << 'YAML'
model:
vocab_size: 64000
d_model: 3072
n_layers: 32
n_heads: 24
n_kv_heads: 8
d_ffn: 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
batch_size: 4
grad_accum_steps: 8
lr: 1.5e-4
min_lr: 1.5e-5
weight_decay: 0.1
warmup_steps: 2000
max_grad_norm: 1.0
log_interval: 10
save_interval: 2000
eval_interval: 500
fp8_format: "MXFP8"
YAML
bash scripts/run_pretrain.sh --config configs/korean_3b_fp8.yaml
โก ๊ฐ์ฅ ์ค์ํ ํ๋จ ํฌ์ธํธ 3๊ฐ
1๏ธโฃ ์ฌ์ ํ์ต Step 5,000 (1 epoch ์๋ฃ) โ "๊ธฐ์ด ์ฒด๋ ฅ ํ์ธ"
- PPL < 20? โ ์ ์, ๊ณ์
- PPL > 20? โ ๋ฐ์ดํฐ ํ์ง or ํ์ดํผํ๋ผ๋ฏธํฐ ๋ฌธ์ . ์ฆ์ ์ง๋จ
2๏ธโฃ SFT ํ ๋ฐ๋ณต๋ฅ ์ธก์ โ "3B์ ์ง์ง ์ค๋ ฅ"
- <5%? โ ๐ ORPO ์์ด ๋ฐ๋ก ๋ฐฐํฌ. ๋์ฑ๊ณต
- 5-10%? โ ORPO 1๋ผ์ด๋๋ก ํด๊ฒฐ ๊ฐ๋ฅ
- >10%? โ ์ฌ์ ํ์ต ํ์ง ์ฌ๊ฒํ ํ์ (์ด ํ๋ฅ ์ ๋ฎ์)
3๏ธโฃ ko_ifeval ์ ์ โ "์ค์ฌ์ฉ ๊ฐ๋ฅ ์์ค?"
- >35%? โ 3B ํ๊ตญ์ด ๋ชจ๋ธ๋ก์ ๊ฒฝ์๋ ฅ ์์. ๋ฐฐํฌ
- 25-35%? โ ์ถ๊ฐ SFT ๋ฐ์ดํฐ๋ก ๊ฐ์ ์ฌ์ง ์์
- <25%? โ ์ฌ์ ํ์ต ๋ฐ์ดํฐ๊ฐ ๋ถ์กฑํ์ ๊ฐ๋ฅ์ฑ โ extended pretrain ๊ณ ๋ ค
"1B์์ ๋ฐฐ์ ๊ณ , 3B์์ ์ฆ๋ช
ํ๋ค."
์ด ๋ฌธ์๋ ๊ฐ Phase ์๋ฃ ์ ์ค์ธก ๊ฒฐ๊ณผ๋ก ์
๋ฐ์ดํธํ ๊ฒ.