BLOG · GUIDE · 15 JUNE 2026

How much VRAM an LLM needs: formulas and tables

IN BRIEF
  • Weights are one multiplication: parameters × bytes per format. 70B in FP8 = 70 GB; in INT4 = 35 GB
  • A 128K context on Llama 3 70B adds another 40 GB, for a single user
  • Llama 2 7B (old-style attention) eats 512 KB per token; Llama 3 70B with GQA only 320 KB
  • The KV cache gets the leftovers: ~90% of card memory minus weights minus 1–5 GB for CUDA graphs
  • Some FP8 profiles do not save memory at startup: weights load in BF16 first

What the memory budget is made of

NVIDIA’s NIM engine claims a gpu_memory_utilization share of the card (0.9 by default) and lays out, inside it: weights, overhead, peak activations and the KV cache. The cache is allocated greedily: “it expands to fill all remaining space”. So the number of concurrent users is not a setting. It is a remainder.

Weights: a single multiplication

Official formula: weight memory per card = parameters × bytes per parameter / TP (tensor-parallel card count). Bytes per parameter: 2 for BF16/FP16, 1 for FP8, 0.5 for INT4 and NVFP4 (real NVFP4 checkpoints land nearer 0.56 once the block scales and the unquantised embeddings are counted: NVIDIA’s Llama 3.3 70B FP4 file is 42.7 GB).

PARAMETERSFP16 / BF16FP8INT4 / NVFP4
7B14 GB7 GB3.5 GB
8B16 GB8 GB4 GB
13B26 GB13 GB6.5 GB
70B140 GB70 GB35 GB
120B240 GB120 GB60 GB
405B810 GB405 GB202.5 GB

KV cache, and why a 7B eats more than a 70B

The second half of the bill: the model stores keys and values for every token it has read. Formula: 2 × layers × KV heads × head dimension × bytes per value, per token (KV heads, not attention heads: Llama 3 70B has 64 attention heads but only 8 KV heads); volume grows linearly with sequence length and with parallel requests.

MODEL, ATTENTIONPER TOKEN4K32K128K
Llama 2 7B, FP16, MHA512 KB2 GB16 GB64 GB
Llama 3 70B, GQA320 KB1.25 GB10 GB40 GB
Llama 3.1 8B, BF16, GQA128 KB0.5 GB4 GB16 GB

The counter-intuitive part: the 7B with old multi-head attention spends 512 KB per token, the 70B with grouped-query attention: 320 KB. Ten times the model, 38% less cache. “How much context fits” does not follow from parameter count. Add the tables up: a 70B in FP16 with a 128K context is 140 GB of weights + 40 GB of cache, 180 GB for one person.

The overhead you only see in logs

CUDA graph capture takes “1 to 5 GB depending on GPU architecture and model size” by NVIDIA’s own estimate. And a trap that never makes a slide: for some profiles “FP8 quantization happens on the fly, implying that BF16 weights must be loaded into memory first”. Eight bits save memory during inference, but startup demands BF16-sized room. Check the specific profile before you buy.

Card × model × context × users

Method: card capacity × 0.9, minus weights, minus ~2 GB for graphs and activations; divide the remainder by one session’s cache. These are memory ceilings; latency cuts them further, and if the seats are virtual desktops rather than one API, MIG and vGPU count differently.

8B-class model, FP8 weights (8 GB), FP16 KV cache at 128 KB/token (an FP8 cache halves it and doubles every count). Concurrent sessions:

CARDFREE FOR CACHE8K32K128K
RTX PRO 4500, 32 GB18.8 GB1841
RTX PRO 5000, 48 GB33.2 GB3382
RTX PRO 5000, 72 GB54.8 GB54133
RTX PRO 6000, 96 GB76.4 GB76194
H200 NVL, 141 GB116.9 GB116297

70B-class model with GQA, cache 320 KB/token:

CARDWEIGHTS8K32K128K
RTX PRO 4500, 32 GBINT4– does not fit –
RTX PRO 5000, 48 GBINT42
RTX PRO 5000, 72 GBINT4112
RTX PRO 6000, 96 GBINT41941
RTX PRO 6000, 96 GBFP851
H200 NVL, 141 GBINT43582
H200 NVL, 141 GBFP82151

Look at the 48 GB row: the card technically “holds” a 70B at four bits, but only 6.2 GB survive the weights: two sessions of 8K tokens, and a single 32K context does not fit at all.

What real measurements add

Arithmetic gives the memory ceiling; latency rules the experience. NVIDIA’s own NIM benchmarking numbers (NIM 1.8.0) for Llama 3.1 8B on one H100 80 GB:

PRECISION, IN/OUTUSERSFIRST TOKENTHROUGHPUT
FP8, 200/2002000.47 s13,348 tok/s
FP8, 1,000/1,0002501.9 s11,528 tok/s
FP8, 20,000/2,000250279 s1,338 tok/s
BF16, 1,000/1,0002505.4 s7,435 tok/s

At a 20,000-token input the first token takes well over four minutes: the service is technically alive, and nobody will use it. The most direct lever is prompt length. NIM’s own log hands you the number: cutting context to 4,096 freed 15.1 GB in the documented example.

Cache quantisation: claim vs measurement

NVIDIA’s NVFP4 KV cache in TensorRT-LLM cuts cache memory by up to half against FP8 and, in NVIDIA’s long-context and cache-reuse scenarios, improves time to first token by up to 3×, at a small accuracy cost (MMLU-Pro on Qwen3-480B: 78.2% BF16 → 77.4% NVFP4); it arrived first on the B200 class, so confirm support for your card. Format alone guarantees nothing: the same idea in llama.cpp (a q4_0 KV cache) on unified memory collapsed prompt speed from 282.7 to 21.3 tok/s in one owner’s test because that path had no fused kernels. Hardware-accelerated NVFP4 in TensorRT-LLM wins; software unpacking loses. The engine and the silicon deliver the benefit, not the format.

What we supply

Eurokommerz supplies the full ladder across the EU: RTX PRO 4500 (32 GB) for models up to 13B, RTX PRO 5000 (48 / 72 GB) for 8–13B with long context, RTX PRO 6000 (96 GB) for a 70B in FP8 on one card, and H200 NVL (141 GB HBM3e) for long-context 70B serving at scale.

FAQ

What do two cards buy over one?
Not one pool: without NVLink, two 96 GB cards are two pools with tensor parallelism over PCIe. The real win is keeping several specialised models resident at once.
We need memory for more agents, not bigger models. What then?
Read the tables down the context column: agentic workloads burn thousands of tokens per iteration, and the cache grows faster than anything else. A smaller model with longer context is often the better buy.
The model fits on paper but the engine reports OOM. Why?
Three usual suspects: the 10% reserve, CUDA graphs (1–5 GB), and FP8 profiles that load BF16 weights first.
Is a 70B 140 GB or 131 GB?
Both: 140 decimal GB ≈ 130.4 GiB, and Llama 3.x 70B carries slightly more than a round 70 billion parameters.
Can I calculate the cache for any model?
Yes, from its config file: layer count, KV-head count, head dimension, times two (keys and values), times bytes per value. For Llama 3.3 70B that is 2 × 80 × 8 × 128 × 2 bytes = 320 KiB per token in FP16.

Sizing a deployment? Tell us the model, the context length and the number of users. We will calculate the footprint and say where a single card ends and a server begins. We reply within one business day.

Request a quote
Request a quote

We reply within one business day

By sending this form you agree that we process your details to answer your enquiry – see our privacy policy.

request@eurokommerz.at  ·  +43 1 585 1405 50  ·  Jordangasse 7, 1010 Vienna