Een taalmodel bestaat uit een stapel lagen. llama.cpp kan die lagen verdelen over je videokaart en je gewone processor, en de vlag -ngl (voluit --n-gpu-layers) bepaalt hoeveel er naar de GPU gaan. Dat ene getal maakt het verschil tussen een model dat vlot antwoordt en een model waar je koffie bij kunt zetten. Volgens de documentatie is het “max. number of layers to store in VRAM, either an exact number, ‘auto’, or ‘all’” (Bron: llama.cpp server README).
Dezelfde vlag werkt in llama-cli (chatten in de terminal) en llama-server (lokale API met web-interface) (Bron: llama.cpp cli README).
Stap 1: weet wat de drie soorten waarden doen
Je kunt -ngl op drie manieren invullen:
-ngl auto: llama.cpp schat zelf hoeveel lagen passen. Dit is de standaard.-ngl all: alle lagen gaan naar de GPU. Snelst, als het past.-ngl 20(of een ander getal): precies zoveel lagen op de GPU, de rest op de CPU.-ngl 0betekent geen GPU.
Een valkuil voor wie oudere handleidingen leest: in de huidige broncode is -1 de interne waarde voor auto en -2 die voor all (Bron: llama.cpp arg.cpp). Wie dus -ngl -1 intypt in de verwachting dat alles naar de GPU gaat, krijgt de automatische keuze. Het oude trucje met -ngl 99 of -ngl 999 werkt nog wel, want llama.cpp offloadt nooit meer lagen dan het model heeft. Maar all zegt wat je bedoelt.
Heeft je build geen GPU-ondersteuning, dan negeert llama.cpp de vlag en meldt het dat in een waarschuwing (Bron: llama.cpp arg.cpp). Een CUDA-build maak je met cmake -B build -DGGML_CUDA=ON (Bron: llama.cpp build-docs).
💡 Beginner-tip: Liever geen terminal? LM Studio zet dezelfde keuze in de interface onder GPU offload, en de command-line-tool
lms loadheeft er een--gpu-vlag voor met waarden van 0 tot 1,offofmax(Bron: LM Studio Docs). Hoe je daar een model kiest, lees je in onze gids Llama lokaal draaien met LM Studio.
Stap 2: reken grof uit wat er in je VRAM moet
Drie dingen nemen GPU-geheugen in: de modelgewichten, de KV-cache (het werkgeheugen voor je context) en wat buffers. De gewichten zijn ongeveer zo groot als het GGUF-bestand. Llama 3.1 8B Instruct in Q4_K_M is 4,92 GB (Bron: Hugging Face).
De KV-cache groeit met de context. Voor Llama 3.1 8B (32 lagen, 8 key-value-heads van 128 dimensies) (Bron: Hugging Face config) kost elk token in f16 2 × 32 × 8 × 128 × 2 bytes, oftewel 128 KB. Bij 8.192 tokens is dat 1 GB, bij 32.768 tokens 4 GB. Een 8 GB-kaart draagt dit model dus prima met korte context, maar met een lange context wordt het krap.
Een belangrijke default: -c staat op 0, wat betekent dat llama.cpp de contextlengte uit het model overneemt (Bron: llama.cpp server README). Bij moderne modellen kan dat zomaar 128.000 tokens zijn. Zonder hulp past dan bijna niets meer.
Stap 3: laat —fit het eerste werk doen
Die hulp heet --fit. De optie staat standaard aan en “adjust[s] unset arguments to fit in device memory” (Bron: llama.cpp server README). In de praktijk verkleint llama.cpp dan eerst de context (niet lager dan --fit-ctx, standaard 4096) en verdeelt het daarna de lagen, met per GPU een marge van standaard 1024 MiB vrij geheugen (--fit-target).
Het woord unset is belangrijk. Zet je zelf -ngl 40 of -c 32768, dan blijft --fit daar vanaf. Begin daarom zonder eigen waarden:
llama-server -m model-Q4_K_M.gguf
Wil je zien wat llama.cpp kiest, dan print de hulptool llama-fit-params de gevonden argumenten, zoals -c 4096 -ngl 48, die je daarna vastzet in je eigen startcommando (Bron: llama.cpp fit-params README). In de laadlog zie je bovendien een regel als offloaded 33/33 layers to GPU (Bron: llama.cpp llama-model.cpp).
Stap 4: zelf sturen als je het beter weet
Soms wil je meer context dan --fit kiest, en neem je daarvoor graag een tragere start op de koop toe. Zet dan de context vast en laat lagen vallen:
llama-server -m model-Q4_K_M.gguf -c 16384 -ngl 28
Loopt het vast op out of memory, verlaag -ngl dan in stappen van een paar lagen. Daarna pas grijp je naar een kleinere kwantisatie, want daar lever je kwaliteit voor in en bij context en lagen niet.
⚡ Gevorderden: Bij Mixture-of-Experts-modellen is
-nglniet je beste knop. Met--n-cpu-moe Nblijven de expert-gewichten van de eerste N lagen in het RAM, terwijl attention en de rest op de GPU blijven;--cpu-moedoet dat voor alle lagen (Bron: llama.cpp server README). Voor fijnere controle wijs je met-ot(--override-tensor) tensors per naampatroon toe, bijvoorbeeldblk\.30\.ffn_(up|down|gate)_exps=CPU. Meerdere GPU’s verdeel je met-ts 3,1en-sm layer(de standaard).
Hoe zit het met Ollama?
Ollama regelt de GPU-verdeling standaard zelf. De API heeft een optie num_gpu waarmee je het aantal lagen overschrijft, en de broncode zet die standaard op -1 voor “dynamisch bepalen” (Bron: Ollama api/types.go). Hoe je Ollama installeert, staat in Ollama installeren: een AI-model lokaal draaien; de API en scripting behandelen we in onze developers guide voor Ollama. Twijfel je welk model je überhaupt wilt draaien, kijk dan bij open-weight modellen lokaal draaien en download het veilig van Hugging Face. Voor de bredere uitleg over waarom lokale modellen interessant zijn, lees je Wat is Ollama? op hetlaatsteainieuws.nl.
Stand van zaken — bijgewerkt 2026-10-07
De uitleg hierboven blijft staan. De waarden hieronder veranderen met nieuwe llama.cpp-builds; controleer ze met llama-server --help.
| Onderwerp | Stand |
|---|---|
Standaard -ngl | auto |
Toegestane waarden -ngl | getal, auto, all |
Interne waarde -1 / -2 | auto / all |
--fit standaard | aan |
--fit-target standaard | 1024 MiB per GPU |
--fit-ctx standaard | 4096 tokens |
Standaard -c | 0 (overgenomen uit het model) |
| MoE-opties | --cpu-moe, --n-cpu-moe N, -ot |
| Programma’s | llama-cli, llama-server, llama-fit-params |
| Voorbeeld GGUF-grootte | Llama 3.1 8B Instruct Q4_K_M: 4,92 GB |
