Förträning i praktiken
Kunna beskriva datablandning, skalningslagar och beräkningsbudget för förträning av en liten språkmodell.
Förkunskaper
Intuition
Förträning är att lära en modell språk från grunden — nästa-token-förutsägelse på hundratals miljarder tokens. Det är en annan verksamhet än finjustering: månader av GPU-tid, ett datateam, och beslut som inte går att ångra i efterhand.
De tre besluten som avgör resultatet:
- Datablandningen. Inte «all text vi kan hitta» utan viktade andelar: webbtext, kod, böcker, vetenskap, flerspråkigt. Kod i blandningen förbättrar resonemang även för modeller som inte ska skriva kod.
- Beräkningsbudgeten och hur den fördelas mellan modellstorlek och datamängd.
- Datakvaliteten — deduplicering, filtrering, och att testdata hålls utanför.
Formellt
Skalningslagar. Kaplan m.fl. (2020) visade att testförlusten följer en potenslag i parametrar N, data D och beräkning C. Hoffmann m.fl. (2022, «Chinchilla») korrigerade fördelningen: för en given budget ska N och D skalas proportionellt — ungefär 20 tokens per parameter.
Det betyder att GPT-3 (175 B parametrar, 300 B tokens) var kraftigt undertränad; en 70 B-modell på 1,4 T tokens presterade bättre till samma beräkningskostnad.
I dag tränas modeller ofta långt bortom Chinchilla-optimum (Llama 3: 8 B parametrar på 15 T tokens ≈ 1 875 tokens/parameter). Skälet är inferensekonomi: en mindre modell som tränats längre kostar mindre per anrop i all framtid, och den kostnaden dominerar totalen för en modell som används mycket.
Databearbetning i storleksordning:
| Steg | Effekt |
|---|---|
| Språkidentifiering och filtrering | −50–70 % av rå webbdata |
| Deduplicering (exakt + fuzzy/MinHash) | −20–30 %, förbättrar mätbart |
| Kvalitetsfiltrering (klassificerare, heuristik) | −30–50 % |
| Borttagning av benchmark-överlapp | litet i volym, avgörande för trovärdighet |
| PII-borttagning | krav, inte optimering |
FineWeb och Dolma visar att filtreringen ofta gör större skillnad än arkitekturvalet.
Kod
def chinchilla(budget_flops):
"""C ≈ 6ND och D ≈ 20N → N = sqrt(C / 120)"""
N = (budget_flops / 120) ** 0.5
return {"parametrar_B": round(N / 1e9, 2), "tokens_B": round(20 * N / 1e9, 1)}
for timmar, gpus in ((1_000, 8), (10_000, 64)):
flops = timmar * 3600 * gpus * 300e12 * 0.4 # H100 ~300 TFLOPs bf16, 40 % MFU
print(timmar, gpus, chinchilla(flops))
# 1000 8 {'parametrar_B': 0.29, 'tokens_B': 5.9}
# 10000 64 {'parametrar_B': 2.63, 'tokens_B': 52.5}
# Exempel på datablandning (viktade andelar, inte råa storlekar)
BLANDNING = {"webb_filtrerad": 0.55, "kod": 0.15, "bocker": 0.12,
"vetenskap": 0.08, "flersprakigt": 0.08, "samtal": 0.02}
assert abs(sum(BLANDNING.values()) - 1.0) < 1e-9
Räkneexemplet visar varför få tränar egna basmodeller: 10 000 GPU-timmar räcker till en 2,6 B-modell — betydligt sämre än öppna modeller du kan ladda ner gratis. Förträning lönar sig bara vid unik data eller unika krav.
Behärskning innebär
- Beskriver datablandning och beräkningsbudget för förträning
- Använder skalningslagar för att fördela budget
- Vet vad som skiljer förträning från finjustering
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- arXiv — Training Compute-Optimal Large Language Models (Chinchilla) — arXiv (öppen åtkomst; licens per artikel)
- arXiv — Scaling Laws for Neural Language Models — arXiv (öppen åtkomst; licens per artikel)
- arXiv — The FineWeb Datasets: Decanting the Web for the Finest Text Data at Scale — arXiv (öppen åtkomst; licens per artikel)