BLOG

Terug naar overzicht
Waarom Inferentie Zo Moeilijk Is: Van GGUF tot vLLM Uitgelegd
Klik om te vergroten
AI & Technologie

Waarom Inferentie Zo Moeilijk Is: Van GGUF tot vLLM Uitgelegd

Van mmap en quantization tot vLLM en SGLang: een uitgebreide gids over de complexiteit van LLM inferentie, loading strategieën en serving voor productie.

Waarom Inferentie Zo Moeilijk Is: Van GGUF tot vLLM Uitgelegd

Je downloadt een groot taalmodel en verwacht dat het gewoon werkt. Maar de werkelijkheid is complexer: efficient inferentie draaien vereist diep begrip van loading, quantization en serving strategieën. Caleb neemt je mee door het volledige landschap.

Het Fundamentele Probleem

Een modern LLM als Llama 3.1 70B heeft 70 miljard parameters. In FP32 (32-bit floating point) zijn dat 280 GB aan data — meer dan het werkgeheugen van vrijwel elke GPU.

De uitdaging: hoe laad je dit model efficiënt, hoe reduceer je de geheugenvoetafdruk, en hoe bedien je meerdere gebruikers tegelijkertijd zonder performance te verliezen?

Loading Strategieën

Standard Loading

Het simpelste geval: laad het volledige model in GPU VRAM. Werkt alleen als je genoeg VRAM hebt.

mmap (Memory-Mapped Files)

Een elegante oplossing: het model wordt niet volledig in RAM geladen, maar wordt on-demand gelezen van schijf via het operating system's virtual memory mechanisme.

Voordelen:

  • Het OS bepaalt wat in RAM blijft (de meest gebruikte parameters)
  • Meerdere processen kunnen hetzelfde model delen zonder extra geheugen
  • Start vrijwel onmiddellijk — geen lange laadtijd

Nadelen:

  • Afhankelijk van schijfsnelheid (NVMe essentieel)
  • Kan langzamer zijn dan volledige RAM-loading voor hot paths

Quantization: Kleiner Zonder Alles te Verliezen

Quantization reduceert de precisie van modelgewichten om geheugen te besparen.

Standard Quantization

Reduceer van FP32 (4 bytes) naar FP16 (2 bytes) of INT8 (1 byte). Eenvoudig maar kan kwaliteit beïnvloeden.

Vuistregel: FP16 is vrijwel verliesvrij. INT8 is acceptabel voor de meeste taken.

GGUF (GPT-Generated Unified Format)

Het format dat llama.cpp gebruikt. GGUF ondersteunt mixed-precision quantization — verschillende lagen van het model worden met verschillende precisie opgeslagen.

Kritieke lagen behouden hogere precisie. Minder kritieke lagen worden agressiever gekwantiseerd.

Resultaat: Een 7B model in Q4_K_M is ~4 GB in plaats van 28 GB, met minimaal kwaliteitsverlies.

AWQ (Activation-aware Weight Quantization)

Slimmer dan standard quantization: AWQ analyseert welke gewichten het meest bijdragen aan de output en beschermt die met hogere precisie.

Voordelen:

  • Betere kwaliteitsbehoud bij lage bit-widths
  • Speciaal effectief voor 4-bit quantization
  • Goede GPU-support

EXL2 (ExLlama v2)

Een format voor maximale snelheid op NVIDIA GPUs, met adaptieve quantization per laag. EXL2 kan per laag een andere bit-breedte gebruiken en optimaliseert de toewijzing gebaseerd op impact op kwaliteit.

FP8 en NVFP4

De nieuwste quantization formats voor moderne NVIDIA GPUs (H100, H200):

  • FP8: Betere kwaliteit dan INT8 omdat floating point de numerieke range beter behoudt
  • NVFP4: Uiterst gecomprimeerd met specifieke hardware-ondersteuning

Inference Engines Vergelijken

llama.cpp

  • Doelgroep: Consumenterhardware, CPU-based inference
  • Sterkten: Breed device support, mmap, CPU+GPU hybrid
  • Gebruik: Lokaal draaien van modellen

vLLM

  • Doelgroep: Production serving op GPU clusters
  • Sterkten: PagedAttention voor efficiënt KV-cache management, hoge throughput
  • Gebruik: Backend van AI API services

SGLang

  • Doelgroep: Complex multi-step inference
  • Sterkten: RadixAttention voor prefix caching, snelle structured output
  • Gebruik: Agent-gebaseerde applicaties

TensorRT-LLM

  • Doelgroep: NVIDIA GPU inference, maximale performance
  • Sterkten: Uiterst geoptimaliseerd voor NVIDIA hardware
  • Gebruik: High-performance productie deployments

TGI (Text Generation Inference)

  • Doelgroep: Hugging Face ecosystem
  • Sterkten: Eenvoudige deployment, goede compatibiliteit
  • Gebruik: Snelle deployment van Hugging Face modellen

Pre-fill vs. Decoding: De Twee Fases

Pre-fill (Prompt Processing)

Het model verwerkt de volledige input prompt in één keer. Compute-intensief maar kan geparallelliseerd worden.

Bottleneck: GPU compute (FLOPS)

Decoding (Token Generation)

Het model genereert één token per stap, inherent sequentieel.

Bottleneck: Memory bandwidth

Dit onderscheid is cruciaal voor serving: pre-fill kan gebatcht worden, decoding is moeilijker.

Concurrency en Scheduling

Continuous Batching: Voeg nieuwe requests toe zodra vorige klaar zijn. Hogere GPU-utilization.

PagedAttention (vLLM): Beheer KV-cache als OS virtual memory. Elimineert fragmentatie.

Prefix Caching (SGLang): Cache KV-states van herhaalde prefixes. Elimineer herberekening.

Conclusie

Er is geen universeel "beste" oplossing voor inferentie:

  • Lokaal gebruik: llama.cpp met GGUF
  • High-throughput serving: vLLM of SGLang
  • Maximum NVIDIA performance: TensorRT-LLM
  • Agent applications: SGLang

Naarmate modellen groter worden en inference democratischer, wordt dit kennisgebied steeds belangrijker — voor iedereen die serieus met AI werkt.

De hardware en software voor inference verbeteren snel — maar begrip van de trade-offs blijft essentieel.


Deze blogpost is gebaseerd op een video van Caleb Williams. Bekijk de originele video.

© 2026