Ga naar inhoud
Bronnen/Technische gids
Technische verdieping

Hoe LLM's werken: van tokens tot transformers

De complete technische gids over grote taalmodellen — van hoe ruwe tekst getallen wordt, via de transformer-architectuur en het attention-mechanisme, tot training, alignment, inferentie, RAG en productie-implementatie. Geen vaagheid; echte vergelijkingen en echte code.

11 secties
50 min leestijd
Codevoorbeelden
March 2026

1. Wat is een groot taalmodel?

Een groot taalmodel (LLM) is een neuraal netwerk dat is getraind om het volgende token in een tekstsequentie te voorspellen. Dat ene doel — voorspelling van het volgende token — blijkt buitengewoon krachtig: om goed te voorspellen moet het model grammatica, feiten, redeneerpatronen, codesyntax en veel meer leren.

Het woord „groot“ verwijst naar het aantal parameters (miljarden tot biljoenen geleerde gewichten) en de omvang van de trainingsdata (biljoenen tokens uit het web, boeken en code). Bij voldoende schaal vertonen modellen emergente capaciteiten — vermogens die niet aanwezig zijn in kleinere modellen en niet expliciet getraind zijn, zoals meerstapsrekenkunde, analoog redeneren en in-context-learning uit een handvol voorbeelden.

Architectonisch is elk groot LLM van vandaag een decoder-only transformer (GPT-familie, Llama, Mistral, Claude, Gemini). Het model neemt een sequentie van token-ID's als invoer en produceert een kansverdeling over het vocabulaire voor het volgende token. Generatie is autoregressief: het model sampelt een token, voegt het toe aan de sequentie en herhaalt.

De autoregressieve lus

graph LR
  A[Input Text] --> B[Tokenizer]
  B --> C[Token IDs]
  C --> D[Embedding Layer]
  D --> E[Transformer Blocks xN]
  E --> F[LM Head]
  F --> G[Logits over Vocabulary]
  G --> H[Softmax + Sampling]
  H --> I[Next Token]
  I -->|Autoregressive loop| C

Emergente vermogens

Capaciteiten die pas boven bepaalde schaaldrempels verschijnen — few-shot-learning, chain-of-thought-redeneren, instructies volgen — die niet expliciet getraind zijn.

In-context-learning

Het model past zijn gedrag aan op basis van voorbeelden in de prompt (few-shot) zonder enige gewichtsaanpassing. Het contextvenster is het enige „geheugen“ tijdens inferentie.

Kenniscompressie

De modelgewichten coderen een lossy compressie van het trainingscorpus. Feiten worden niet woordelijk opgeslagen — ze zijn verspreid over miljarden gewichten, en daarom treden hallucinaties op.

2. Tokenization

LLM's werken niet op karakters of woorden — ze werken op tokens, subwoordeenheden die worden geproduceerd door een tokenizer die op hetzelfde corpus is getraind. Inzicht in tokenization verklaart kosten, contextlengte en veel eigenaardigheden van modelgedrag.

Tokenization-algoritmen

BPE (Byte-Pair Encoding)

GPT-2, GPT-3, GPT-4o, Llama 4, Mistral Large 3

Voegt iteratief het meest frequente aangrenzende byte- of karakterpaar samen. Begint bij afzonderlijke bytes en verwerkt daardoor elke Unicode-tekst zonder onbekende tokens.

WordPiece

BERT, DistilBERT, ALBERT

Vergelijkbaar met BPE, maar de samenvoegingen worden gekozen om de waarschijnlijkheid van de trainingsdata onder een taalmodel te maximaliseren, in plaats van de ruwe frequentie.

SentencePiece (Unigram LM)

T5, Gemma, Qwen

Behandelt tokenization als een probabilistisch segmentatieprobleem. Taalonafhankelijk — werkt op ruwe tekst zonder voor-tokenization (spaties worden als gewone karakters behandeld).

Tokenization-voorbeelden

WoordGPT-4o-tokensAantal tokens
transformer
transformer
2
tokenization
tokenization
2
def calculate_loss(logits):
def calculate_loss(logits):
6
Üniversität
Üniversität
4
hello
hello
1
(3 spaces)
1

Vocabulairegrootte per model

ModelTokenizerVocab-grootteOpmerking
GPT-2BPE50,257Byte-level BPE
GPT-3 / GPT-3.5BPE (cl100k)100,277Gelijk aan GPT-4
GPT-4 / GPT-4oBPE (o200k)200,019Beter meertalig
Llama 3.x / 4.xBPE (tiktoken)128,256Verbeterd t.o.v. de 32k van Llama 2
Mistral v0.xBPE (SentencePiece)32,768Klein maar efficiënt
Gemma 2SentencePiece256,000Zeer groot meertalig vocabulaire
python
import tiktoken

# GPT-4o uses the o200k_base encoding
enc = tiktoken.get_encoding("o200k_base")

text = "Tokenization is the first step in every LLM pipeline."
tokens = enc.encode(text)
print(f"Token IDs: {tokens}")
# Token IDs: [5808, 2065, 374, 279, 1176, 3094, 304, 1475, 445, 11237, 15598, 13]
print(f"Token count: {len(tokens)}")  # 12
print(f"Decoded: {[enc.decode([t]) for t in tokens]}")
# ['Token', 'ization', ' is', ' the', ' first', ' step', ' in', ' every', ' L', 'LM', ' pipeline', '.']

# Cost estimation: GPT-4o input = $2.50 / 1M tokens
cost_per_token = 2.50 / 1_000_000
print(f"Cost for this sentence: ${cost_per_token * len(tokens):.8f}")
Kostenimplicatie: Eén token komt grofweg overeen met 3–4 karakters Engelse tekst. Code, niet-Latijnse schriften en getallen tokeniseren minder efficiënt — een Python-snippet kan 2× meer tokens gebruiken dan gelijkwaardig proza. Benchmark altijd uw werkelijke payloads om API-kosten in te schatten.

3. De transformer-architectuur

Geïntroduceerd in „Attention Is All You Need“ (Vaswani et al., 2017), verving de transformer recurrente netwerken door een volledig op attention gebaseerde architectuur. Elk groot LLM van vandaag bouwt op dit fundament.

Transformer-blok

graph TD
  A[Input Tokens] --> B[Token Embeddings]
  B --> C[+ Positional Encoding]
  C --> D[Multi-Head Self-Attention]
  D --> E[Add and Layer Norm]
  E --> F[Feed-Forward Network]
  F --> G[Add and Layer Norm]
  G --> H[Next Block or Output]

Multi-head self-attention

Het kerninzicht van de transformer: elk token kan tegelijkertijd aandacht besteden aan elk ander token in de sequentie. Uit een invoermatrix X produceren drie geleerde projecties queries (Q), keys (K) en values (V):

Attention(Q, K, V) = softmax(QKT / √dk) · V
  • Qwaarnaar dit token op zoek is
  • Kwat elk token over zichzelf adverteert
  • Vde feitelijke te aggregeren informatie
  • √d_kschaalfactor om verdwijnende gradiënten in de softmax te voorkomen

Multi-head attention voert H onafhankelijke attention-bewerkingen parallel uit, elk met verschillende geleerde projecties. Hierdoor kan het model gezamenlijk aandacht besteden aan informatie uit verschillende representatie-deelruimten. GPT-3 gebruikt 96 attention-heads; Llama 4 Maverick gebruikt grouped-query attention (GQA) voor efficiënte serving.

python
import torch
import torch.nn.functional as F

def scaled_dot_product_attention(Q, K, V, mask=None):
    """
    Q, K, V: (batch, heads, seq_len, head_dim)
    Returns: (batch, heads, seq_len, head_dim)
    """
    d_k = Q.size(-1)
    # Compute attention scores
    scores = torch.matmul(Q, K.transpose(-2, -1)) / (d_k ** 0.5)  # (batch, heads, seq, seq)

    # Apply causal mask (decoder: attend only to past tokens)
    if mask is not None:
        scores = scores.masked_fill(mask == 0, float('-inf'))

    # Softmax over key dimension
    attn_weights = F.softmax(scores, dim=-1)

    # Weighted sum of values
    return torch.matmul(attn_weights, V), attn_weights

Feed-forward-netwerk (FFN)

Elk transformer-blok bevat een MLP met 2 lagen die onafhankelijk op elke tokenpositie wordt toegepast. De verborgen dimensie is doorgaans 4× de modeldimensie (bijv. d_model=4096, d_ff=16384 voor een typisch model van de 8B-klasse). Moderne LLM's gebruiken SwiGLU-activatie (een gated variant van SiLU) die ReLU en GELU empirisch overtreft.

FFN-lagen slaan het grootste deel van de feitelijke kennis in een model op — onderzoek toont dat „kennisneuronen“ geconcentreerd in de FFN kunnen worden gelokaliseerd en chirurgisch bewerkt (zie ROME/MEMIT). Attention verzorgt routering en compositie; FFN-lagen verzorgen de opslag.

Layer Norm & residuverbindingen

Elke sublaag (attention, FFN) gebruikt een residuverbinding (output = x + sublayer(x)) en layer-normalisatie. Moderne LLM's gebruiken Pre-Norm (normaliseren vóór de sublaag) in plaats van Post-Norm voor trainingsstabiliteit, en RMSNorm (Root Mean Square-norm, zonder gemiddeldecentrering) voor efficiëntie.

Architectuurvarianten

TypeVoorbeeldenAttentionBest voor
Encoder-onlyBERT, RoBERTa, DeBERTaBidirectioneel (volledige attention)Classificatie, NER, embeddings
Decoder-onlyGPT-4o, Llama 4, Mistral Large 3, Claude Sonnet 4.6Causaal (van links naar rechts)Tekstgeneratie, chat, redeneren
Encoder-DecoderT5, FLAN-T5, BARTVolledige encoder + cross-attentionVertaling, samenvatting, seq2seq

4. Pretraining: een model leren voorspellen

Pretraining is de duurste fase — doorgaans meer dan 95 % van de totale rekenkracht. Het model ziet biljoenen tokens en leert het volgende te voorspellen. Dit eenvoudige doel produceert bij voldoende schaal de meeste capaciteiten die we met LLM's associëren.

Trainingsdoel: cross-entropy-verlies

Gegeven een sequentie van tokens [t₁, t₂, ..., tₙ] wordt het model getraind om de log-waarschijnlijkheid van elk token, gegeven alle voorafgaande tokens, te maximaliseren:

L = −(1/N) Σ log P(tᵢ | t₁, ..., tᵢ₋₁)

Elke voorwaartse doorloop verwerkt een volledige sequentie en produceert parallel op elke positie een verlies (teacher forcing). Tijdens inferentie worden tokens autoregressief gegenereerd, één voor één.

Chinchilla-schaalwetten

Hoffmann et al. (2022) toonden aan dat eerdere grote modellen (GPT-3, Gopher) ondergetraind waren — te veel parameters voor te weinig tokens. De optimale Chinchilla-verhouding is:

Optimale tokens ≈ 20× parameters

Een model met 7B parameters zou moeten trainen op ~140B tokens voor reken-optimale training. In de praktijk trainen modellen op veel meer (Llama 3.1 8B: 15T tokens; Llama 4-modellen: ~40T gesch.) omdat inferentiekosten ertoe doen — een kleiner maar meer getraind model is goedkoper om te serveren.

Belangrijke modellen in één oogopslag

ModelParametersTrainings-tokensJaar
GPT-2117M – 1.5B~10B2019
GPT-3175B~300B2020
Chinchilla70B1.4T2022
Llama 2 (historical)7B – 70B2T2023
Mistral 7B7.3B~8T (est.)2023
Llama 3.1 8B8B15T2024
Llama 3.1 405B405B15T2024
Llama 4 Scout~17B active (MoE)~40T (est.)2025
Llama 4 Maverick~17B active (MoE)~40T (est.)2025

Pretraining-data

Common Crawl

Web-crawl op petabyte-schaal, ruw en gefilterd. Vormt het grootste deel van de meeste pretraining-corpora. Vereist uitgebreide kwaliteitsfiltering (deduplicatie, taaldetectie, verwijdering van toxiciteit).

The Pile (EleutherAI)

Gecureerde dataset van 825 GB over 22 bronnen, waaronder GitHub, ArXiv, PubMed, FreeLaw, DM Mathematics. Open en reproduceerbaar.

RedPajama / DCLM

Open reproducties van de LLaMA-trainingsdata. DCLM (DataComp-LM, 2024) richt zich op rigoureuze datakwaliteits-ablaties om optimale filterpijplijnen te vinden.

Boeken & academisch

Books3, Gutenberg, ArXiv, S2ORC. Hoge signaal-ruisverhouding; cruciaal voor langvormig redeneren en feitelijke diepgang.

Gedistribueerde training

Dataparallelisme

Elke GPU houdt een modelreplica; batches worden over GPU's verdeeld. Gradiënten worden na elke achterwaartse doorloop gemiddeld (AllReduce). Standaard voor alle groottes.

Tensorparallelisme

Afzonderlijke gewichtsmatrices worden over GPU's verdeeld. Vereist een interconnect met hoge bandbreedte (NVLink). Gebruikt voor modellen die het VRAM van één GPU overschrijden.

Pijplijnparallelisme

Verschillende lagen toegewezen aan verschillende GPU's. Micro-batches stromen door de pijplijn. Efficiënt voor zeer diepe modellen; vereist zorgvuldige planning om bubbels te minimaliseren.

5. Alignment: RLHF, DPO & Constitutional AI

Een vooraf getraind basismodel is een krachtige maar onvoorspelbare voorspeller van het volgende token — het zet elke tekst voort, inclusief schadelijke inhoud. Alignment-training transformeert het tot een behulpzame, onschadelijke en eerlijke assistent.

Fase 1: Supervised fine-tuning (SFT)

Het basismodel wordt fijngeregeld op een dataset van (instructie, ideale respons)-paren, geschreven of gecureerd door menselijke annotatoren. Dit leert het model het formaat van het volgen van instructies. Het trainingsdoel is identiek aan pretraining (cross-entropy), maar de dataset is klein (tienduizenden voorbeelden) en van hoge kwaliteit. Na SFT kan het model instructies volgen maar kan het nog onwaar of schadelijk zijn.

De volledige RLHF-pijplijn

graph LR
  A[Pretrained LLM] --> B[SFT on Instruction Data]
  B --> C[SFT Model]
  C --> D[Generate Completions]
  D --> E[Human Preference Labels]
  E --> F[Train Reward Model]
  F --> G[RLHF with PPO]
  G --> H[Aligned LLM]

Reward-model: Menselijke annotatoren vergelijken paren van modelresponsen en labelen hun voorkeur. Een apart model wordt getraind om de door mensen geprefereerde respons voor een gegeven prompt te voorspellen. Dit scalaire reward-signaal vangt genuanceerde kwaliteitsoordelen die moeilijk als verliesfunctie te specificeren zijn.

PPO (Proximal Policy Optimisation): Het SFT-model (de „policy“) wordt geoptimaliseerd om de score van het reward-model te maximaliseren, terwijl een KL-divergentiestraf voorkomt dat het te ver van de SFT-baseline afdrijft (wat reward hacking zou veroorzaken). PPO is rekenkundig duur: het vereist vier modellen tegelijk in het geheugen.

DPO: Direct Preference Optimisation

Rafailov et al. (2023) toonden aan dat het RLHF-doel rechtstreeks op het policy-model kan worden geoptimaliseerd zonder apart reward-model of RL-lus. Gegeven paren van geprefereerde en afgewezen responsen herparametriseert DPO de reward als functie van de log-waarschijnlijkheden van het policy- en referentiemodel:

L_DPO = −E[log σ(β · log(π_θ(y_w|x) / π_ref(y_w|x)) − β · log(π_θ(y_l|x) / π_ref(y_l|x)))]

DPO is eenvoudiger, stabieler en goedkoper dan RLHF met PPO. De meeste open-source uitgelijnde modellen (Llama 4 Instruct, Mistral Instruct) gebruiken DPO of een variant (SimPO, IPO) voor de voorkeursalignmentfase.

MethodeReward-modelRL-lusStabiliteitGebruikt door
RLHF (PPO)JaJa (PPO)MatigInstructGPT, early ChatGPT
DPONeeNeeHoogLlama 4, Mistral, Zephyr
Constitutional AI (CAI)ZelfkritiekJa (RLAIF)HoogClaude (Anthropic)
GRPO / DAPOOp regels gebaseerdGroepsrelatiefHoogDeepSeek-R1, Qwen
Constitutional AI (CAI): De aanpak van Anthropic gebruikt een set natuurlijketaalprincipes (een „grondwet“) om het model te begeleiden bij het bekritiseren en herzien van zijn eigen uitvoer. Een apart AI-model — geen menselijke annotatoren — levert het voorkeurssignaal (RLAIF: RL uit AI-feedback), waardoor het proces schaalbaarder wordt. De grondwet is gepubliceerd en auditeerbaar.

6. Inferentie & sampling-strategieën

Bij elke generatiestap geeft het model een logit-vector van grootte |vocabulary| uit. De sampling-strategie bepaalt hoe één token uit deze verdeling wordt gekozen — en heeft een enorme impact op kwaliteit, diversiteit en coherentie van de uitvoer.

TemperatuurEffectToepassing
0.0 (Greedy)Kies altijd het token met de hoogste waarschijnlijkheid. Deterministisch.Classificatie, gestructureerde extractie, feitelijke Q&A
0.2 – 0.4Scherpere verdeling, volgt meestal het meest waarschijnlijke pad maar laat kleine variaties toe.Codegeneratie, samenvatting
0.6 – 0.8Gebalanceerd. Goede mix van coherentie en diversiteit.Algemene chat, instructies volgen (standaard voor de meeste modellen)
1.0Sampelt rechtstreeks uit de modelverdeling. Gevarieerder.Creatief schrijven, brainstormen
> 1.0Vlakt de verdeling af. Verhoogt willekeur en herhaling. Produceert vaak incoherente uitvoer.Zelden nuttig in productie

Top-p (nucleus-sampling)

Sorteer tokens op waarschijnlijkheid, neem de kleinste set waarvan de cumulatieve waarschijnlijkheid ≥ p, en sampel dan uit die set. Bij p=0,9 overweegt het model alleen tokens die samen 90 % van de waarschijnlijkheidsmassa uitmaken. Past de grootte van de kandidatenset dynamisch aan: bij zekerheid is de nucleus klein, bij onzekerheid breder.

Top-k-sampling

Kap de verdeling af tot de k meest waarschijnlijke tokens en sampel daar dan uit. Eenvoudiger dan top-p maar gebruikt een vaste k ongeacht de vorm van de verdeling. Top-p heeft over het algemeen de voorkeur; top-k is nuttig wanneer u strikte controle over de grootte van de kandidatenset nodig hebt.

python
from openai import OpenAI

client = OpenAI()

# Factual / structured output: low temperature, no top-p
factual = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "What is the capital of France?"}],
    temperature=0.0,
    max_tokens=50,
)

# Creative writing: higher temperature + nucleus sampling
creative = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Write a haiku about neural networks."}],
    temperature=0.9,
    top_p=0.95,
    max_tokens=100,
)

# Code generation: low temp, deterministic
code = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Write a Python quicksort function."}],
    temperature=0.2,
    max_tokens=300,
)
Beam search presteert ondermaats voor LLM's. Hoewel beam search optimaal is voor machinevertaling, produceert het repetitieve, generieke tekst voor open generatie. De reden: het maximaliseert waarschijnlijkheid in plaats van kwaliteit, en de sequentie met de hoogste waarschijnlijkheid is vaak een repetitieve lus. Gebruik temperatuur + top-p-sampling voor generatieve taken.

7. Contextvensters & positiecodering

Een transformer heeft geen inherent besef van tokenvolgorde — attention is permutatie-invariant. Positiecodering injecteert volgorde-informatie. De keuze van de coderingsmethode bepaalt hoe goed het model generaliseert naar sequenties die langer zijn dan zijn trainingslengte.

Absolute positie-embeddings

Een geleerde of vaste (sinusoïdale) vector wordt aan elk token-embedding op positie i toegevoegd. GPT-2 en BERT gebruiken geleerde absolute embeddings. Harde grens: het model kan niet generaliseren naar posities die het tijdens training nooit heeft gezien.

RoPE (Rotary Position Embeddings)

Codeert de positie door de Q- en K-vectoren in de complexe ruimte te roteren over een hoek evenredig met de positie. De attention-score hangt van nature af van de relatieve afstand tussen tokens. Gebruikt door Llama 4, Mistral Large 3, Qwen en de meeste moderne open-weight-modellen. Maakt context-uitbreidingstechnieken zoals YaRN en LongRoPE mogelijk.

KV-cache: inferentie praktisch maken

Tijdens autoregressieve generatie herberekent het model bij elke stap de attention voor elk token — naïef O(n²) per stap. De KV-cache slaat de key- en value-tensoren van alle voorafgaande tokens op. Bij elke nieuwe stap worden alleen de Q, K, V van het nieuwe token berekend en worden de gecachte K, V toegevoegd. Dit reduceert de generatie van O(n²) naar O(n) per nieuw token.

De KV-cache groeit lineair met de sequentielengte en batchgrootte. Voor een groot model (70B+) met een 128K-context kan één KV-cache-invoer >10 GB GPU-geheugen vereisen. Dit is het primaire geheugen-knelpunt bij LLM-serving, niet de modelgewichten.

Vergelijking van contextvensters

ModelContextvensterPositiecoderingEffectieve lengte*
GPT-4o128KGeleerd + RoPE (gesch.)128K
Claude Sonnet 4.6200KNiet bekendgemaakt~150K (praktisch)
Gemini 2.5 Pro1MNiet bekendgemaakt~500K (praktisch)
Llama 4 Maverick1MRoPE1M
Mistral Large 3128KSliding Window + RoPE128K
DeepSeek-R1128KRoPE128K

*Effectieve lengte: het venster waarover het model informatie betrouwbaar ophaalt. „Lost in the middle“-onderzoek toont dat de prestaties afnemen voor inhoud die in het midden van zeer lange contexten is geplaatst.

8. Retrieval-Augmented Generation (RAG)

RAG pakt twee fundamentele beperkingen van LLM's aan: hun kennis-afkapdatum en hun neiging tot hallucineren. In plaats van te vertrouwen op wat het model tijdens training heeft onthouden, haalt RAG ten tijde van de inferentie relevante documenten op en injecteert ze in de prompt.

graph LR
  A[User Query] --> B[Embed Query]
  B --> C[Vector Search]
  C --> D[Top-k Chunks]
  D --> E[Inject into Prompt]
  A --> E
  E --> F[LLM Generation]
  F --> G[Grounded Answer]

Naive RAG

Eenvoudig

Query embedden → top-k-gelijkenisscan → chunks aan de prompt toevoegen → genereren. Eenvoudig maar gevoelig voor irrelevante ophaling en contextoverbelasting.

Advanced RAG

Productie

Voegt query-herschrijving, re-ranking (cross-encoders), hypothetische document-embeddings (HyDE), recursieve ophaling en contextcompressie toe.

Modular RAG

Complex

Ontkoppelde pijplijn: routering, query-transformatie, ophaling, scoring, filtering en fusie kunnen elk onafhankelijk worden vervangen. Maximale flexibiliteit.

Chunking-strategieën

Vaste grootte

Splits elke N tokens met M-token-overlap. Snel maar kan midden in een zin afkappen. Goede uitgangsbasis.

Zin / alinea

Splits op zins- of alineagrenzen. Behoudt semantische eenheden maar de chunks variëren in grootte.

Semantisch (embedding-gebaseerd)

Groepeer zinnen met hoge embedding-gelijkenis tot coherente chunks. Beste ophaalkwaliteit; hoogste rekenkosten op indexeringsmoment.

Hiërarchisch

Indexeer op meerdere granulariteiten (document → sectie → alinea). Haal op het niveau op dat overeenkomt met de specificiteit van de query.

Vergelijking van vectordatabases

DatabaseImplementatieSchaalBest voor
pgvectorZelf gehost (Postgres-ext.)MiljoenenBestaande Postgres-gebruikers; eenvoudigere stack
QdrantZelf gehost / cloudMiljardenHoge prestaties, rijke filtering, open source
WeaviateZelf gehost / cloudMiljardenMultimodaal, hybride semantiek + trefwoord
PineconeVolledig beheerde cloudMiljardenBeheerde SaaS, minimale operatie
ChromaLokaal / zelf gehostMiljoenenPrototyping, lokale ontwikkeling

9. Open-source- vs. propriëtaire modellen

De kloof tussen open-weight- en propriëtaire frontiermodellen is dramatisch kleiner geworden. Llama 4 Maverick evenaart GPT-4o op veel benchmarks; DeepSeek-R1 overtreft o1 in wiskunde en coderen tegen een fractie van de trainingskosten. De keuze gaat steeds meer over het implementatiemodel, gegevensprivacy en de totale eigendomskosten.

ModelParametersContextLicentieMMLUBeste toepassing
Open Weight
Llama 4 Scout~17B active (MoE)1MLlama 4 Community License79.6Snel, lange context, op het apparaat
Llama 4 Maverick~17B active (MoE)1MLlama 4 Community License85.5Gebalanceerd qua capaciteit/kosten, lange context
Llama 4 Behemoth~288B active (MoE)128KLlama 4 Community License~92 (est.)Frontier-open-weight-taken
Mistral Large 3~123B128KMistral Research License84.0Meertalige onderneming
Qwen2.5 72B72B128KApache 2.086.0Code, wiskunde, meertalig
DeepSeek-R1671B MoE128KMIT90.8Redeneren, wiskunde, wetenschap
Gemma 2 27B27B8KGemma License75.2Onderzoek, fijnregeling
Phi-414B16KMIT84.8
Propriëtair
GPT-4o~200B est.128KProprietary88.7Algemene frontier, multimodaal
Claude Sonnet 4.6Undisclosed200KProprietary88.7Lange context, coderen, veiligheid
Gemini 2.5 ProUndisclosed1MProprietary85.9Zeer lange context, multimodaal, redeneren
o3 / o1Undisclosed200KProprietary~91+Complex redeneren, frontieronderzoek

Wanneer open gewichten zelf hosten

  • Data mag uw VPC niet verlaten (HIPAA, AVG, financieel)
  • Inferentie met hoog volume waar API-kosten de GPU-huur overtreffen
  • Noodzaak om op propriëtaire data fijn te regelen
  • Deterministisch, auditeerbaar modelgedrag vereist
  • Latentievereisten die niet via een API haalbaar zijn

Wanneer propriëtaire API's gebruiken

  • Absolute frontiercapaciteit vandaag nodig
  • Klein tot middelgroot volume waar operationele overhead duur is
  • Multimodale taken (vision, audio, video)
  • Snel prototyping vóór schaalbeslissingen
  • Geen ML-infrastructuurteam beschikbaar

10. Productie-implementatie

LLM's op schaal serveren vereist het oplossen van geheugen (VRAM is schaars), doorvoer (veel gelijktijdige gebruikers) en latentie (gebruikers willen snelle eerste tokens). Het ecosysteem heeft voor elke uitdaging krachtige oplossingen ontwikkeld.

Quantisatie: kleinere modellen, vergelijkbare kwaliteit

Het verlagen van de numerieke precisie van modelgewichten verkleint het VRAM en versnelt de berekening. Moderne technieken (GPTQ, AWQ, GGUF) passen quantisatie niet-uniform toe en beschermen de gevoeligste gewichten.

FormaatBits/gewichtRelatieve grootteKwaliteitsbehoudTooling
FP3232100%100 % (referentie)PyTorch default
FP16 / BF161650%~100 %Standard training/inference
INT8825%~99 %bitsandbytes, TensorRT-LLM
INT4 (GPTQ/AWQ)412.5%~95–98 %AutoGPTQ, AutoAWQ, llama.cpp
GGUF Q4_K_M~4.5~14%~96 %llama.cpp, Ollama
GGUF Q2_K~2.6~8%~88 %llama.cpp (CPU focus)

Inferentieservers

vLLM

GPU, hoge doorvoer

PagedAttention voor efficiënt KV-cache-beheer, continue batching, tensorparallelisme. De gouden standaard voor GPU-serving met hoge doorvoer. OpenAI-compatibele API.

TGI (Text Generation Inference)

GPU, Hugging Face

De productieserver van Hugging Face. Flash Attention 2, continue batching, speculatief decoderen. Drijft de Inference API aan.

Ollama

CPU + GPU, lokaal

Doodeenvoudige lokale serving via GGUF-modellen. Eén commando om elk model op te halen en uit te voeren. Niet ontworpen voor hoge gelijktijdigheid maar uitstekend voor ontwikkeling.

llama.cpp

CPU-focus

Pure C++-inferentie met GGUF-quantisatie. Draait op MacBook M-serie-CPU's en consument-GPU's. Drijft Ollama onder de motorkap aan.

PagedAttention & continue batching

vLLM's PagedAttention (Kwon et al., 2023) beheert het KV-cache-geheugen als virtueel geheugen in een besturingssysteem — door het op te splitsen in niet-aaneengesloten toegewezen pagina's van vaste grootte. Dit elimineert fragmentatie en verspilde reservering en maakt 2–24× meer doorvoer mogelijk dan HuggingFace Transformers bij gelijk GPU-geheugen.

Continue batching stelt nieuwe verzoeken in staat zich bij een lopende batch te voegen zodra een sequentie klaar is, in plaats van op de volledige batch te wachten. Dit verbetert de GPU-benutting bij workloads van variabele lengte drastisch.

bash
# Start a vLLM server for Llama 4 Scout Instruct
# Requires: pip install vllm, CUDA GPU with ≥16GB VRAM

python -m vllm.entrypoints.openai.api_server \
  --model meta-llama/Llama-4-Scout-17B-16E-Instruct \
  --tensor-parallel-size 1 \
  --max-model-len 32768 \
  --dtype bfloat16 \
  --port 8000

# The server exposes an OpenAI-compatible API:
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "meta-llama/Llama-4-Scout-17B-16E-Instruct",
    "messages": [{"role": "user", "content": "Explain attention mechanisms."}],
    "temperature": 0.7,
    "max_tokens": 512
  }'

11. LLM's evalueren

Evaluatie is een van de moeilijkste open problemen in LLM-onderzoek. Standaardbenchmarks meten specifieke capaciteiten maar correleren onvolmaakt met de bruikbaarheid in de praktijk. Een uitgebreide evaluatiestrategie combineert geautomatiseerde benchmarks, menselijke evaluatie en LLM-as-judge.

Standaardbenchmarks

BenchmarkMeetFormaatBeperking
MMLUBrede kennis (57 vakken)Meerkeuze met 4 optiesMeerkeuzeformaat; besmettingsrisico
HumanEvalPython-codegeneratieFunctievervollediging + unit-testsAlleen Python; smalle taakverdeling
GSM8KRekenwoordproblemen van de basisschoolVrijevorm-rekenkundeVerzadigd door frontiermodellen (>95 %)
HellaSwagGezond-verstand-NLIZinsvervollediging met 4 optiesVerzadigd; adversarieel maar gedateerd
MT-BenchInstructies volgen (meerdere beurten)LLM-as-judge (GPT-4)De GPT-4-jury heeft eigen vertekeningen
GPQA DiamondWetenschap op postdoctoraal niveauMeerkeuze met 4 opties door domeinexpertsKleine dataset; moeilijk te schalen
MATH-500WedstrijdwiskundeExacte antwoordovereenkomstFormaatgevoelig; oplossingen kunnen onthouden zijn

Benchmarkscores van modellen

ModelMMLUHumanEvalGSM8KMATH
GPT-4o88.790.296.076.6
Claude Sonnet 4.688.792.096.078.3
Gemini 2.5 Pro85.984.191.767.7
DeepSeek-R190.892.397.397.3
Llama 4 Maverick85.585.495.072.0
Llama 4 Scout79.677.089.058.0
Mistral Large 384.092.093.069.0
Llama 3.1 8B (2024)73.072.684.551.9

Het LLM-as-Judge-patroon

Voor open taken zonder referentieantwoorden kan een krachtig LLM responsen scoren met een gestructureerde rubriek. MT-Bench en Chatbot Arena gebruiken deze aanpak. Het belangrijkste risico is positievertekening (de jury verkiest antwoorden die als eerste verschijnen) en breedsprakigheidsvertekening (langere antwoorden scoren hoger ongeacht de kwaliteit).

python
from openai import OpenAI

client = OpenAI()

def llm_judge(question: str, answer: str, rubric: str) -> dict:
    prompt = f"""You are an expert evaluator. Score the following answer on a 1-10 scale.

Question: {question}

Answer: {answer}

Rubric: {rubric}

Respond with JSON: {{"score": <int>, "reasoning": "<str>", "strengths": ["..."], "weaknesses": ["..."]}}"""

    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": prompt}],
        response_format={"type": "json_object"},
        temperature=0.0,
    )
    import json
    return json.loads(response.choices[0].message.content)

result = llm_judge(
    question="Explain the attention mechanism in transformers.",
    answer="Attention computes a weighted sum of values...",
    rubric="Accuracy (4pt), Clarity (3pt), Completeness (3pt)",
)
print(f"Score: {result['score']}/10 — {result['reasoning']}")
Benchmarkbesmetting is reëel. Als de trainingsdata van een model benchmarkvragen en -antwoorden bevatten, worden zijn scores opgeblazen. Evalueer altijd op achtergehouden taken die representatief zijn voor uw werkelijke toepassing. Openbare ranglijsten zijn een startpunt, geen vervanging voor een domeinspecifieke evaluatie.

Klaar om met LLM's te bouwen?

Begrijpen hoe LLM's werken is het fundament — maar het juiste model, de juiste implementatiearchitectuur en de juiste evaluatiestrategie voor uw specifieke toepassing kiezen vereist praktische ervaring. Ons team heeft productie-LLM-systemen gebouwd over RAG, agents, fijnregeling en bedrijfsimplementatie. Boek een consult om uw project te bespreken.

Meer bronnen
Hoe LLM's werken: van tokens tot transformers — Complete gids | Hyperion Consulting