• autoresearch๋Š” LLM ์—์ด์ „ํŠธ๊ฐ€ ์ž์œจ์ ์œผ๋กœ ML ์—ฐ๊ตฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ (by Andrej Karpathy)
  • ์‚ฌ๋žŒ์ด ์ž๋Š” ๋™์•ˆ GPU 1๋Œ€๋กœ ์ˆ˜์‹ญ~์ˆ˜๋ฐฑ ๊ฐœ์˜ ์‹คํ—˜์„ ์ž๋™ ๋ฐ˜๋ณตํ•˜๋Š” ์•ผ๊ฐ„ ์ž์œจ ์—ฐ๊ตฌ ์‹œ์Šคํ…œ
  • ์ฝ”๋“œ ์ˆ˜์ • โ†’ ํ•™์Šต โ†’ ํ‰๊ฐ€ โ†’ ์ˆ˜์šฉ/๊ฑฐ๋ถ€์˜ ์‹คํ—˜ ๋ฃจํ”„๋ฅผ AI๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์šด์˜ํ•˜๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„

ํ•ด๋‹น ๊ฐœ๋…์ด ํ•„์š”ํ•œ ์ด์œ 

  • ๊ธฐ์กด ML ์—ฐ๊ตฌ๋Š” ์—ฐ๊ตฌ์ž๊ฐ€ ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ , ํ•™์Šต์„ ์‹คํ–‰ํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ์ˆ˜๋™ ๋ฐ˜๋ณต ์ž‘์—…์— ๋ง‰๋Œ€ํ•œ ์‹œ๊ฐ„์ด ์†Œ์š”๋จ
  • 5๋ถ„์งœ๋ฆฌ ์‹คํ—˜ ํ•˜๋‚˜๋ฅผ ์œ„ํ•ด ์ฝ”๋“œ ์ˆ˜์ • โ†’ ์‹คํ–‰ โ†’ ๋Œ€๊ธฐ โ†’ ๋ถ„์„์˜ ์ „์ฒด ์‚ฌ์ดํด์— ์—ฐ๊ตฌ์ž์˜ ์ฃผ์˜๋ ฅ์ด ๋ฌถ์ž„
  • ๋ฐค ์‹œ๊ฐ„ ๋“ฑ ์œ ํœด GPU ์‹œ๊ฐ„์„ ํ™œ์šฉํ•˜์—ฌ ์—ฐ๊ตฌ ์ƒ์‚ฐ์„ฑ์„ ๊ทน์ ์œผ๋กœ ๋†’์ผ ์ˆ˜ ์žˆ์Œ

AS-IS

sequenceDiagram
    autonumber
    participant R as ์—ฐ๊ตฌ์ž
    participant C as ์ฝ”๋“œ (train.py)
    participant G as GPU

    R->>C: ์ฝ”๋“œ ์ˆ˜์ • (์•„ํ‚คํ…์ฒ˜/ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ)
    R->>G: ํ•™์Šต ์‹คํ–‰
    G-->>R: ๊ฒฐ๊ณผ ๋Œ€๊ธฐ (5๋ถ„~์ˆ˜์‹œ๊ฐ„)
    R->>R: ๊ฒฐ๊ณผ ๋ถ„์„ ๋ฐ ํŒ๋‹จ
    R->>C: ๋‹ค์Œ ์‹คํ—˜์„ ์œ„ํ•œ ์ฝ”๋“œ ์ˆ˜์ •
    Note over R,G: ์—ฐ๊ตฌ์ž๊ฐ€ ๋ชจ๋“  ๋‹จ๊ณ„์— ๊ด€์—ฌ โ†’ ๋ณ‘๋ชฉ

TO-BE

sequenceDiagram
    autonumber
    participant H as ์—ฐ๊ตฌ์ž
    participant A as LLM Agent
    participant C as train.py
    participant G as GPU

    H->>A: program.md ์ž‘์„ฑ (์—ฐ๊ตฌ ๋ฐฉํ–ฅ ์ง€์‹œ)
    loop ์ž์œจ ์‹คํ—˜ ๋ฃจํ”„ (๋ฌดํ•œ ๋ฐ˜๋ณต)
        A->>C: ์ฝ”๋“œ ์ˆ˜์ •
        A->>A: git commit (autoresearch/tag)
        A->>G: uv run train.py (5๋ถ„ ๊ณ ์ •)
        G-->>A: val_bpb ๊ฒฐ๊ณผ
        alt ๊ฐœ์„ ๋จ
            A->>A: ๋ณ€๊ฒฝ ์œ ์ง€, results.tsv ๊ธฐ๋ก
        else ์•…ํ™”๋จ
            A->>A: git reset์œผ๋กœ ๋˜๋Œ๋ฆผ
        end
    end
    H->>A: (๋‹ค์Œ ๋‚  ์•„์นจ) ๊ฒฐ๊ณผ ํ™•์ธ
    Note over H,G: ์—ฐ๊ตฌ์ž๋Š” ์ž๊ณ  ์žˆ๊ณ , Agent๊ฐ€ ๋ฐค์ƒˆ ์‹คํ—˜

3๊ฐ€์ง€ ํ•ต์‹ฌ ํŒŒ์ผ ๊ตฌ์กฐ

autoresearch์˜ ์ „์ฒด ์‹œ์Šคํ…œ์€ ๋”ฑ 3๊ฐœ์˜ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ด ๊ทน๋‹จ์ ์ธ ๋‹จ์ˆœํ•จ์ด ํ•ต์‹ฌ ์„ค๊ณ„ ์ฒ ํ•™์ด๋‹ค.

program.md โ€” ์—ฐ๊ตฌ ์ง€์‹œ์„œ

์‚ฌ๋žŒ์ด ์ž‘์„ฑํ•˜๋Š” ๋งˆํฌ๋‹ค์šด ํ˜•์‹์˜ ์—ฐ๊ตฌ ๊ณ„ํš์„œ. LLM ์—์ด์ „ํŠธ๊ฐ€ ์ด ํŒŒ์ผ์„ ์ฝ๊ณ  ์—ฐ๊ตฌ ๋ฐฉํ–ฅ์„ ์ดํ•ดํ•œ๋‹ค.

  • ๋ฌด์—‡์„ ์ตœ์ ํ™”ํ• ์ง€ (val_bpb ์ตœ์†Œํ™”)
  • ์–ด๋–ค ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ (train.py๋งŒ)
  • ์–ด๋–ค ํŒŒ์ผ์„ ์ ˆ๋Œ€ ์ˆ˜์ •ํ•˜๋ฉด ์•ˆ ๋˜๋Š”์ง€ (prepare.py, pyproject.toml)
  • ์‹คํ—˜ ๊ฒฐ๊ณผ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ธฐ๋กํ• ์ง€ (results.tsv)

ํ•ต์‹ฌ ์ง€์‹œ: โ€œDo NOT pause to ask the human if you should continueโ€ฆ The loop runs until the human interrupts you, period.โ€

train.py โ€” ์œ ์ผํ•œ ์ˆ˜์ • ๋Œ€์ƒ

์—์ด์ „ํŠธ๊ฐ€ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ํŒŒ์ผ. GPT ๋ชจ๋ธ ์ •์˜, ์˜ตํ‹ฐ๋งˆ์ด์ €, ํ•™์Šต ๋ฃจํ”„๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•œ๋‹ค.

๊ตฌ์„ฑ ์š”์†Œ์„ธ๋ถ€ ์‚ฌํ•ญ
๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜Transformer, 8-layer, Sliding Window Attention (SSSL ํŒจํ„ด)
์–ดํ…์…˜Flash Attention v3 + Rotary Embeddings
ํ™œ์„ฑํ™” ํ•จ์ˆ˜ReLU-squared: F.relu(x).square()
์˜ตํ‹ฐ๋งˆ์ด์ €MuonAdamW (Muon + AdamW ํ•˜์ด๋ธŒ๋ฆฌ๋“œ)
์‹œํ€€์Šค ๊ธธ์ด2048 tokens
์–ดํœ˜ ํฌ๊ธฐ32,768 tokens (train) / 8,192 (tokenizer)
ํ•™์Šต ์ •๋ฐ€๋„bfloat16 mixed precision
์ปดํŒŒ์ผtorch.compile(dynamic=False)

prepare.py โ€” ๋ถˆ๋ณ€์˜ ์ธํ”„๋ผ

๋ฐ์ดํ„ฐ ์ค€๋น„์™€ ํ‰๊ฐ€ ํ•จ์ˆ˜๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์ ˆ๋Œ€ ์ˆ˜์ • ๋ถˆ๊ฐ€ ํŒŒ์ผ.

  • ๋ฐ์ดํ„ฐ์…‹: climbmix-400b-shuffle (HuggingFace)
  • BPE ํ† ํฌ๋‚˜์ด์ € ํ•™์Šต (rustbpe ๊ธฐ๋ฐ˜, GPT-4 ์Šคํƒ€์ผ ์ •๊ทœ์‹)
  • evaluate_bpb() ํ•จ์ˆ˜ ์ œ๊ณต โ€” ๋ชจ๋“  ์‹คํ—˜์˜ ํ‰๊ฐ€ ๊ธฐ์ค€

์ž์œจ ์‹คํ—˜ ๋ฃจํ”„์˜ ์ž‘๋™ ์›๋ฆฌ

์—์ด์ „ํŠธ๋Š” ๋‹ค์Œ 6๋‹จ๊ณ„๋ฅผ ์‚ฌ๋žŒ์˜ ๊ฐœ์ž… ์—†์ด ๋ฌดํ•œ ๋ฐ˜๋ณตํ•œ๋‹ค:

1. program.md ์ฝ๊ธฐ โ†’ ์—ฐ๊ตฌ ๋ฐฉํ–ฅ ํŒŒ์•…
2. train.py ์ˆ˜์ • โ†’ ์•„ํ‚คํ…์ฒ˜/ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ๋ณ€๊ฒฝ
3. git commit โ†’ autoresearch/<tag> ๋ธŒ๋žœ์น˜์— ๊ธฐ๋ก
4. uv run train.py โ†’ 5๋ถ„ ๊ณ ์ • ํ•™์Šต ์‹คํ–‰
5. grep "val_bpb" run.log โ†’ ๊ฒฐ๊ณผ ์ถ”์ถœ
6. ํŒ๋‹จ โ†’ ๊ฐœ์„ ์ด๋ฉด ์œ ์ง€, ์•…ํ™”๋ฉด git reset

์‹œ๊ฐ„๋‹น ์•ฝ 12๊ฐœ, ํ•˜๋ฃป๋ฐค์— ์•ฝ 100๊ฐœ์˜ ์‹คํ—˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

5๋ถ„ ๊ณ ์ • ์‹œ๊ฐ„ ์˜ˆ์‚ฐ์˜ ์„ค๊ณ„ ์˜๋„

๋ชจ๋“  ์‹คํ—˜์ด ์ •ํ™•ํžˆ 300์ดˆ(5๋ถ„)์˜ wall-clock time์œผ๋กœ ์ œํ•œ๋œ๋‹ค. ์ด๋Š” ๋‹จ์ˆœํ•œ ํŽธ์˜๊ฐ€ ์•„๋‹ˆ๋ผ ํ•ต์‹ฌ ์„ค๊ณ„ ๊ฒฐ์ •์ด๋‹ค.

  • ๊ณต์ •ํ•œ ๋น„๊ต: ์•„ํ‚คํ…์ฒ˜ A์™€ B๊ฐ€ ๋™์ผํ•œ ์‹œ๊ฐ„ ์•ˆ์—์„œ ์–ด๋–ค val_bpb๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š”์ง€ ๋น„๊ต ๊ฐ€๋Šฅ
  • ํ”Œ๋žซํผ ์ตœ์ ํ™”: ๊ณ ์ • ์‹œ๊ฐ„์ด๋ฏ€๋กœ ํ•ด๋‹น GPU์—์„œ ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ชจ๋ธ ํฌ๊ธฐ/๊ตฌ์กฐ๋ฅผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํƒ์ƒ‰
  • ๋น ๋ฅธ ๋ฐ˜๋ณต: 5๋ถ„์ด๋ฉด ์ถฉ๋ถ„ํžˆ ์˜๋ฏธ ์žˆ๋Š” ํ•™์Šต์ด ๊ฐ€๋Šฅํ•˜๋ฉด์„œ๋„ ํ•˜๋ฃป๋ฐค์— ์ˆ˜๋ฐฑ ํšŒ ๋ฐ˜๋ณต ๊ฐ€๋Šฅ
  • ์ง„ํ–‰๋ฅ  ๊ธฐ๋ฐ˜ ์Šค์ผ€์ค„๋ง: progress = total_training_time / TIME_BUDGET๋กœ LR warmup/warmdown์„ ์‹œ๊ฐ„ ๋น„์œจ๋กœ ์ œ์–ด

val_bpb โ€” ๋‹จ์ผ ํ‰๊ฐ€ ์ง€ํ‘œ

Validation bits per byte. ๋ชจ๋ธ์ด ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ๋ฅผ ์–ผ๋งˆ๋‚˜ ์ž˜ ์••์ถ•ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ง€ํ‘œ.

  • ํฌ๋กœ์Šค์—”ํŠธ๋กœํ”ผ ์†์‹ค์„ bits-per-byte ๋‹จ์œ„๋กœ ๋ณ€ํ™˜
  • ์–ดํœ˜ ํฌ๊ธฐ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ๊ณต์ • ๋น„๊ต ๊ฐ€๋Šฅ (32K vocab vs 8K vocab ๋น„๊ต ๊ฐ€๋Šฅ)
  • ๋‚ฎ์„์ˆ˜๋ก ์ข‹๋‹ค โ€” ๋ชจ๋ธ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์˜๋ฏธ
  • ๋ชจ๋“  ์‹คํ—˜์˜ ์œ ์ผํ•œ ์„ฑ๊ณต/์‹คํŒจ ํŒ๋‹จ ๊ธฐ์ค€

๋‹จ์ˆœํ•จ ์šฐ์„  ์›์น™

program.md์— ๋ช…์‹œ๋œ ํ•ต์‹ฌ ์ฒ ํ•™: โ€œ๋™์ผํ•œ 0.001 val_bpb ๊ฐœ์„ ์ด๋ผ๋„, ์ฝ”๋“œ๋ฅผ ์‚ญ์ œํ•ด์„œ ์–ป์—ˆ๋‹ค๋ฉด ์œ ์ง€ํ•˜๊ณ , 20์ค„์„ ์ถ”๊ฐ€ํ•ด์„œ ์–ป์—ˆ๋‹ค๋ฉด ๋ฒ„๋ฆฐ๋‹ค.โ€

  • ์—์ด์ „ํŠธ์˜ ์ฝ”๋“œ ์ˆ˜์ •์€ ๋‹จ์ผ ํŒŒ์ผ(train.py)๋กœ ์ œํ•œ
  • diff๊ฐ€ ๋ฆฌ๋ทฐ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์œผ๋กœ ์œ ์ง€๋จ
  • ๋ณต์žกํ•œ ๋ถ„์‚ฐ ํ•™์Šต, config ์‹œ์Šคํ…œ, ์™ธ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ ์—†์Œ
  • ์˜์กด์„ฑ ์ตœ์†Œํ™”๋กœ ์—์ด์ „ํŠธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์™„์ „ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ

MuonAdamW ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์˜ตํ‹ฐ๋งˆ์ด์ €

train.py์˜ ๊ธฐ๋ณธ ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” Muon๊ณผ AdamW ๋‘ ๊ฐ€์ง€ ์ „๋žต์„ ๊ฒฐํ•ฉํ•œ๋‹ค:

ํŒŒ๋ผ๋ฏธํ„ฐ ์œ ํ˜•์˜ตํ‹ฐ๋งˆ์ด์ €Learning Rate
Embedding ๋ ˆ์ด์–ดAdamW0.6
Unembedding (lm_head)AdamW0.004
๋ ˆ์ด์–ด๋ณ„ ์Šค์นผ๋ผAdamW0.5
2D ํ–‰๋ ฌ (์–ดํ…์…˜/MLP)Muonorthogonalization ๊ธฐ๋ฐ˜

Muon์€ Newton-Schulz ์ง๊ตํ™”์™€ NorMuon ๋ถ„์‚ฐ ๊ฐ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, Cautious weight decay (๊ทธ๋ž˜๋””์–ธํŠธ์™€ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ณฑ์ด โ‰ฅ 0์ผ ๋•Œ๋งŒ ์ ์šฉ)๋ฅผ ๋„์ž…ํ•œ๋‹ค.

์ฐธ๊ณ  ๋ฌธ์„œ