Hoeveel VRAM heb je nodig om een LLM te draaien?
We kunnen commissie verdienen als je via de links hieronder koopt. Meer informatie
Hoe modelgrootte, precisie, kwantisatie, contextlengte en batchgrootte het GPU-geheugen bepalen, met uitgewerkte schattingen.
Op deze pagina
Samenvatting
Voor inferentie is het geheugen dat je nodig hebt ruwweg de gewichten plus de KV-cache plus de runtime-overhead. Gewichten nemen het aantal parameters maal het aantal bytes per parameter in: ongeveer 2 GB per miljard parameters bij BF16, 1 GB bij FP8 en ruwweg 0.5 GB bij 4-bit. De KV-cache groeit met elk token in het geheugen, over alle gelijktijdige verzoeken heen, en bij de lange contexten die agents nodig hebben, wedijvert hij in omvang met de gewichten. Serving-frameworks geven niet de hele kaart aan het model, dus houd ruimte over voordat je een GPU kiest. Zonder GPU geldt dezelfde rekensom voor het systeem-RAM, met een lagere snelheid.
- Gewichten = parameters × bytes per parameter (2 bij BF16, 1 bij FP8, ongeveer 0.5 bij 4-bit).
- KV-cache per token = 2 × lagen × KV-heads × head-dimensie × bytes; vermenigvuldig met het aantal tokens dat tegelijk in het geheugen staat.
- Schattingen verschillen vooral in de contextlengte die ze aannemen; controleer die voordat je twee getallen vergelijkt.
- Mixture-of-experts-modellen moeten elke expert laden, ook al zijn er per token maar weinig actief.
- Volledig fine-tunen met Adam vraagt ongeveer 16 bytes per parameter, nog vóór activaties; adapters vragen veel minder.
1. De drie delen van GPU-geheugen
Een taalmodel serveren kost GPU-geheugen voor drie dingen: de gewichten, de KV-cache met de attention-keys en -values van elk token dat in behandeling is, en werkgeheugen voor activaties, de CUDA-context en het serving-framework zelf.
benodigd VRAM ≈ gewichten + KV-cache + runtime-overhead
De eerste twee volgen uit de modelkaart en je instellingen. De derde hangt af van de runtime, en daardoor is een kaart nooit volledig beschikbaar voor het model. vLLM laat de model-executor bijvoorbeeld een vast deel van het GPU-geheugen gebruiken, ingesteld met --gpu-memory-utilization, dat in de huidige documentatie standaard 0.92 is [1], en standaard legt het CUDA-graphs vast, die volgens vLLM “take up extra memory in the GPU” (extra GPU-geheugen innemen) [2].
2. Gewichten: parameters × precisie
Gewichten hebben één waarde per parameter nodig. Vermenigvuldig het aantal parameters met het aantal bytes per waarde: een miljard parameters in BF16 nemen ongeveer 2 GB in.
Geheugen per miljard parameters, per precisie
| Precisie | Bytes per parameter | GB per miljard parameters |
|---|---|---|
| FP32 | 4 | 4.0 |
| BF16 / FP16 | 2 | 2.0 |
| FP8 / INT8 | 1 | 1.0 |
| 4-bit (INT4, NF4, MXFP4) | 0.5 | 0.5 |
Qwen3-8B heeft 8.2 miljard parameters [3], dus de gewichten nemen ongeveer 16.4 GB in bij BF16, 8.2 GB bij FP8 en ruwweg 4.1 GB bij 4-bit. Gekwantiseerde formaten slaan naast de waarden ook schaalfactoren op, dus echte 4-bit-bestanden zijn iets groter dan een halve byte per parameter.
Mixture-of-experts-modellen laden elke expert
Een mixture-of-experts-model gebruikt per token maar een deel van zijn parameters, maar ze moeten allemaal in het geheugen staan. Qwen3-30B-A3B heeft in totaal 30.5 miljard parameters, waarvan er 3.3 miljard geactiveerd worden [4]: het rekent als een klein model, maar heeft ongeveer 61.0 GB nodig voor de gewichten in BF16. Het formaat telt net zo zwaar als het aantal: gpt-oss-120b van OpenAI heeft 117 miljard parameters, en omdat de expertgewichten in MXFP4 worden geleverd, draait het op één GPU van 80 GB, terwijl gpt-oss-20b binnen 16 GB draait [5].
Lagere precisie is niet gratis
In de woorden van vLLM nemen gekwantiseerde modellen “take less memory at the cost of lower precision” (minder geheugen in, ten koste van een lagere precisie) [2]. Bekijk de evaluaties van de modelmaker bij de precisie die je wilt draaien, of voer er zelf een uit op je eigen prompts.
3. KV-cache: contextlengte × gelijktijdige verzoeken
Voor elk token waaraan het model werkt, houdt elke laag per KV-head een key-vector en een value-vector bij. Het PagedAttention-artikel geeft het voorbeeld van OPT-13B, waar één token 800 KB inneemt: 2 (key en value) × 5,120 (verborgen dimensie) × 40 (lagen) × 2 bytes [6].
bytes per token = 2 × lagen × KV-heads × head-dimensie × bytes per waarde
Nieuwere modellen gebruiken grouped-query attention, met minder KV-heads dan query-heads, waardoor de cache kleiner wordt. Qwen3-8B heeft 32 query-heads maar 8 KV-heads [3]. Met het aantal lagen en de head-dimensie uit het configuratiebestand van elk model komt de cache bij BF16 als volgt uit:
KV-cache bij BF16, per aantal tokens in het geheugen
| Model | Lagen × KV-heads × head-dimensie | Per token | 8K tokens | 32K tokens | 128K tokens |
|---|---|---|---|---|---|
| Qwen3-8B [7] | 36 × 8 × 128 | 147,456 bytes | 1.2 GB | 4.8 GB | 19.3 GB |
| Qwen3-30B-A3B [8] | 48 × 4 × 128 | 98,304 bytes | 0.8 GB | 3.2 GB | 12.9 GB |
| Qwen2.5-72B-Instruct [9] | 80 × 8 × 128 | 327,680 bytes | 2.7 GB | 10.7 GB | 42.9 GB |
Het aantal tokens dat telt, is alles wat tegelijk in het geheugen staat: contextlengte × gelijktijdige verzoeken. Tien chats met elk 8K tokens hebben dezelfde cache nodig als één chat met 80K tokens. Daarom kan een model dat in een snelle test “past”, onder belasting toch zonder geheugen komen te zitten.
Twee instellingen maken de cache kleiner. vLLM schrijft dat de KV-cache in FP8 opslaan “can significantly reduce its memory footprint” (het geheugengebruik flink kan verkleinen), zodat er meer tokens in hetzelfde geheugen passen [11], en een grens aan de contextlengte (max_model_len) en de batchgrootte (max_num_seqs) beperkt hoeveel cache er kan worden aangevraagd [2].
4. Uitgewerkte schattingen voor drie open modellen
Gewichten plus een KV-cache van 32,768 tokens bij BF16 geven het geheugen waarmee je rekent, nog vóór de runtime-overhead:
Gewichten plus een BF16-KV-cache van 32,768 tokens, in GB
| Model | Gewichten BF16 | Gewichten FP8 | Gewichten 4-bit |
|---|---|---|---|
| Qwen3-8B | 21.2 | 13.0 | 8.9 |
| Qwen3-30B-A3B | 64.2 | 33.7 | 18.5 |
| Qwen2.5-72B-Instruct | 156.1 | 83.4 | 47.1 |
- Qwen3-8B heeft bij BF16 ongeveer 21.2 GB nodig: krap op een kaart van 24 GB zodra de overhead erbij komt, ruim op 48 GB, en ongeveer 13.0 GB met FP8-gewichten.
- Qwen3-30B-A3B rekent als een model van 3B, maar heeft bij BF16 ongeveer 64.2 GB nodig, omdat elke expert geladen blijft.
- Qwen2.5-72B-Instruct heeft bij BF16 ongeveer 156.1 GB nodig, meer dan twee GPU's van 80 GB met de standaardinstelling aan vLLM overlaten (147.2 GB). Met FP8-gewichten (83.4 GB) past het op één H200 van 141 GB of verdeeld over twee GPU's van 80 GB. Bij 4-bit past het alleen met een kleiner budget op een kaart van 48 GB: ongeveer 39.0 GB met 8K tokens.
Waarom schattingen voor hetzelfde model verschillen
Geheugencalculators zijn het zelden oneens over de gewichten. Ze verschillen in de context die ze aannemen, in de vraag of ze de KV-cache überhaupt meetellen, en in hoeveel van de kaart ze als bruikbaar beschouwen. Hetzelfde model en dezelfde precisie geven heel verschillende antwoorden:
Qwen3-8B bij BF16 onder vier gangbare aannames, in GB
| Aanname | Schatting |
|---|---|
| Gewichten plus een vaste marge van 20% | 19.7 |
| Gewichten plus een KV-cache van 32,768 tokens | 21.2 |
| Hetzelfde, gedeeld door een bruikbaar deel van 0.92 | 23.1 |
| Gewichten plus een KV-cache van 131,072 tokens | 35.7 |
Controleer, voordat je twee schattingen vergelijkt, de contextlengte en het aantal gelijktijdige verzoeken achter elk ervan. Om de rekensom voor je eigen model, precisie en context te maken, gebruik je de tool VRAM en modelgrootte.
5. Lange contexten: rekenen voor een agent met 64K tokens
Agents hebben lange contexten nodig, en de KV-cache groeit met elk token. Hermes Agent vereist bijvoorbeeld een model met een context van minstens 64,000 tokens en vraagt je een lokaal model op 64K in te stellen, bijvoorbeeld --ctx-size 65536 in llama.cpp [12]. Ollama gebruikt een contextvenster van 4,096 tokens, tenzij je het verhoogt met OLLAMA_CONTEXT_LENGTH of num_ctx [13], dus de standaardwaarde ligt ver onder wat zo'n agent nodig heeft.
Bij 65,536 tokens heeft Qwen3-8B ongeveer 26.1 GB nodig met gewichten en cache in BF16, meer dan een kaart van 24 GB kan bevatten. Met FP8-gewichten en een FP8-KV-cache komt het uit op ongeveer 13.0 GB. Het model ondersteunt standaard 32,768 tokens, dus een venster van 64K betekent ook dat je YaRN-schaling inschakelt zoals de modelkaart beschrijft [3].
Gelijktijdigheid vermenigvuldigt de cache opnieuw: in Ollama groeit het geheugen dat een model nodig heeft met het aantal parallelle verzoeken maal de contextlengte [13]. Reken op het aantal gesprekken dat de agent tegelijk voert, niet op één.
6. Als één GPU niet genoeg is
De eigen richtlijn van vLLM voor het kiezen van een indeling is kort:
- Past het model op één GPU, draai het dan op die GPU; gedistribueerde inferentie is dan waarschijnlijk niet nodig.
- Is het te groot voor één GPU maar past het op één node met meerdere GPU's, gebruik dan tensor parallelism.
- Is het te groot voor één node, combineer tensor parallelism dan met pipeline parallelism [14].
Tensor parallelism verdeelt het model over GPU's (tensor_parallel_size) [2], en die GPU's wisselen dan bij elke laag data uit. Daar telt de interconnect uit de GPU-cloudchecklist: GPU's die via NVLink verbonden zijn, kunnen dat veel beter aan dan kaarten die alleen via PCIe communiceren.
Probeer, voordat je GPU's toevoegt, eerst de goedkopere knoppen: kwantiseer de gewichten, sla de KV-cache op in FP8 en begrens de contextlengte en de gelijktijdigheid tot wat je toepassing nodig heeft.
7. Fine-tunen vraagt een ander budget
Trainen houdt veel meer vast dan de gewichten. Het ZeRO-artikel splitst training met gemengde precisie en de Adam-optimizer uit: 2 bytes per parameter voor FP16-gewichten, 2 voor gradiënten en 12 voor de FP32-kopie van de gewichten, momentum en variantie, in totaal 16 bytes. Een GPT-2 met 1.5 miljard parameters heeft daarom minstens 24 GB nodig, tegenover 3 GB voor alleen de FP16-gewichten [15]. Met dezelfde rekensom heeft volledig fine-tunen van Qwen3-8B ongeveer 131.2 GB nodig voor de modeltoestand, nog vóór activaties, en dat betekent meerdere GPU's en een gesharde optimizer.
Adapters veranderen het budget
Low-rank adapters trainen in plaats daarvan een klein aantal extra gewichten. Vergeleken met fine-tunen van GPT-3 175B met Adam melden de auteurs van LoRA 10,000 keer minder trainbare parameters en een 3 keer kleinere behoefte aan GPU-geheugen [16]. QLoRA combineert een 4-bit-basismodel met adapters en maakte het mogelijk een model van 65B te fine-tunen op één GPU van 48 GB [17].
8. Koppel de schatting aan een GPU
Met een schatting in de hand kies je het kleinste geheugenniveau dat ruimte laat voor overhead en pieken in het verkeer. De tabel toont elke GPU in onze catalogus die vandaag een gecontroleerde prijs heeft:
GPU's met een gecontroleerde prijs, op geheugen
| GPU | Geheugen | Bandbreedte | Providers | Laagste on-demand, per uur | Laagste serverless, per uur |
|---|---|---|---|---|---|
| T4 | 16 GB GDDR6 | 0.32 TB/s | 1 | Niet vermeld | $0.59≈ €0.527 (geschatte omrekening van $0.59) |
| V100 | 16 GB HBM2 | 0.90 TB/s | 2 | $0.79≈ €0.706 (geschatte omrekening van $0.79) | Niet vermeld |
| A10 | 24 GB GDDR6 | 0.60 TB/s | 3 | $0.867≈ €0.774 (geschatte omrekening van $0.867) | $1.03≈ €0.917 (geschatte omrekening van $1.03) |
| L4 | 24 GB GDDR6 | 0.30 TB/s | 3 | $0.855≈ €0.764 (geschatte omrekening van $0.855) | $0.80≈ €0.715 (geschatte omrekening van $0.80) |
| A100 | 40 GB HBM2 | 1.55 TB/s | 2 | $1.99≈ €1.78 (geschatte omrekening van $1.99) | $2.10≈ €1.88 (geschatte omrekening van $2.10) |
| L40 | 48 GB GDDR6 | 0.86 TB/s | 1 | $1.00≈ €0.893 (geschatte omrekening van $1.00) | Niet vermeld |
| L40S | 48 GB GDDR6 | 0.86 TB/s | 5 | $1.55≈ €1.38 (geschatte omrekening van $1.55) | $1.77≈ €1.58 (geschatte omrekening van $1.77) |
| RTX 6000 Ada Generation | 48 GB GDDR6 | 0.96 TB/s | 1 | $1.57≈ €1.40 (geschatte omrekening van $1.57) | Niet vermeld |
| RTX A6000 | 48 GB GDDR6 | 0.77 TB/s | 2 | $0.50≈ €0.447 (geschatte omrekening van $0.50) | Niet vermeld |
| A100 PCIe | 80 GB HBM2e | 1.94 TB/s | 1 | $1.35≈ €1.21 (geschatte omrekening van $1.35) | Niet vermeld |
| A100 SXM4 | 80 GB HBM2e | 2.04 TB/s | 3 | $1.60≈ €1.43 (geschatte omrekening van $1.60) | $2.50≈ €2.23 (geschatte omrekening van $2.50) |
| H100 PCIe | 80 GB HBM2e | 2.00 TB/s | 4 | $2.50≈ €2.23 (geschatte omrekening van $2.50) | $3.53≈ €3.16 (geschatte omrekening van $3.53) |
| H100 SXM | 80 GB HBM3 | 3.35 TB/s | 7 | $3.20≈ €2.86 (geschatte omrekening van $3.20) | $3.95≈ €3.53 (geschatte omrekening van $3.95) |
| GH200 Grace Hopper Superchip (96GB HBM3) | 96 GB HBM3 | 4.00 TB/s | 1 | $2.29≈ €2.05 (geschatte omrekening van $2.29) | Niet vermeld |
| RTX PRO 6000 Blackwell | 96 GB GDDR7 | Niet gecontroleerd | 1 | Niet vermeld | $3.03≈ €2.71 (geschatte omrekening van $3.03) |
| RTX PRO 6000 Blackwell Max-Q Workstation Edition | 96 GB GDDR7 | 1.79 TB/s | 1 | $2.74≈ €2.45 (geschatte omrekening van $2.74) | Niet vermeld |
| H200 SXM | 141 GB HBM3e | 4.80 TB/s | 5 | $3.99≈ €3.56 (geschatte omrekening van $3.99) | $4.54≈ €4.06 (geschatte omrekening van $4.54) |
| B200 SXM | 180 GB HBM3e | 7.70 TB/s | 5 | $6.00≈ €5.36 (geschatte omrekening van $6.00) | $6.25≈ €5.58 (geschatte omrekening van $6.25) |
| Instinct MI300X | 192 GB HBM3 | 5.30 TB/s | 1 | $2.59≈ €2.31 (geschatte omrekening van $2.59) | Niet vermeld |
Providers per niveau staan in de vergelijkingen voor inferentiehosting en GPU-cloud. Per geheugenniveau: RTX 4090-cloud (24 GB), L40S-hosting (48 GB) en H100-hosting (80 GB).
9. Een model draaien zonder GPU
Een model kan ook vanuit gewoon systeemgeheugen draaien. llama.cpp draait op x86-CPU's met AVX, AVX2, AVX512 en AMX, en de hybride CPU+GPU-modus bestaat om “partially accelerate models larger than the total VRAM capacity” (modellen die groter zijn dan het totale VRAM gedeeltelijk te versnellen) [18]. Ollama laat zien waar een geladen model staat: ollama ps meldt 100% GPU, 100% CPU (systeemgeheugen) of een verdeling tussen die twee [13].
De rekensom verandert niet: gewichten plus KV-cache moeten passen, nu in het RAM, naast het besturingssysteem en al het andere op de server. Op een machine met 16 GB heeft Qwen3-8B bij 4-bit met een cache van 32,768 tokens ongeveer 8.9 GB nodig en past het, terwijl Qwen3-30B-A3B bij 4-bit alleen voor de gewichten al ongeveer 15.3 GB nodig heeft en niet genoeg ruimte overlaat.
Reken erop dat genereren op alleen een CPU trager is dan op een GPU; dat verschil is wat de hybride modus hierboven gedeeltelijk dicht. Het past bij kleine modellen, weinig verkeer en agents op de achtergrond; test je model bij de contextlengte die je nodig hebt voordat je een plan kiest. CPU-servers worden vergeleken onder AI-VPS, en providers met Ollama-templates of -handleidingen onder Ollama-hosting.
Volgende stappen
Volgende stap: Bekijk welke GPU's passen bij je model, precisie en contextlengte.VRAM en modelgrootte
Bronnen
Feitelijke uitspraken over providers, modellen, software en wetgeving verwijzen naar deze bronnen: eerst primaire bronnen (officiële prijspagina's, documentatie, modelkaarten en wetteksten), bronnen van derden alleen waar nodig en duidelijk als zodanig aangeduid. Prijzen en specificaties in de tabellen komen uit de dataset van AIHostCompare; de eigen bronnen en controlemomenten van elke provider staan op zijn providerpagina, en de methodologie legt uit hoe we data controleren. Aanbevelingen en vuistregels zijn ons redactionele oordeel.