SIZING

VRAM and Throughput

Two calculators over the same model: one for safetensors weights at full precision, one for the GGUF quantizations llama.cpp ships. Both answer the questions that decide whether you can run something — will it fit, and how fast will it decode — across one card or several.

The Calculator

Pick a weight format, describe the model, choose a card. Every field is editable — the presets are starting points, not gospel.

Model

Everything that must be resident in memory.
MoE: parameters touched per token. Equals total for a dense model.

Safetensors precision

Context and KV cache

Multi-token prediction

0 disables MTP.
Share of drafted tokens the model keeps.

Hardware

Identical cards in the machine.
Tensor parallel shards every layer and adds bandwidth. A layer split does not.
Share of peak bandwidth a real engine reaches.
Total VRAM
 
weights KV cache overhead
Weights
KV cache
Activations and framework
Total
Estimated decode throughput
 

How the Estimate Works

Three formulas, none of them complicated. Knowing which one binds is the useful part.

Memory

Weights

Total parameters times bytes per parameter. For GGUF that byte count is fractional, because k-quants assign different widths per tensor — attention and embedding tensors usually keep more precision than the feed-forward bulk. All parameters count here, including every expert in a mixture, because they all have to be resident.

Memory

KV cache

Two tensors per layer, one key and one value, for every token of every sequence: 2 x layers x KV heads x head dim x bytes. The same formula as the KV cache page, and at long context it can exceed the weights outright.

Speed

Decode throughput

Decoding is bandwidth-bound: every token requires reading the active weights and the cache once. Tokens per second is roughly bandwidth divided by bytes read per token, scaled by the share of peak a real engine reaches. Only active parameters are read, which is why a mixture decodes like a small model while occupying memory like a large one.

Multi-GPU

Memory always pools. Bandwidth only sometimes does.

Two cards give you twice the VRAM either way, which is what lets a model fit at all. Whether they give you twice the speed depends entirely on how the model is split, and the two answers are far apart.

Tensor parallel shards every layer across the cards, so they read their shards simultaneously and bandwidth genuinely adds — minus the per-layer collective, which is why the estimate scales at roughly 90 percent for two cards and less beyond that. On PCIe without NVLink it is worse.

A pipeline or layer split — what llama.cpp does by default when you spread layers across devices — assigns whole layers to whole cards. For one sequence they run in turn, each idle while another works, so a token still waits on the same total bytes. You get the memory and none of the speed. Concurrent requests do benefit, because different cards can then be busy on different sequences.

Multi-token prediction changes the arithmetic, not the bandwidth. Extra prediction heads draft several tokens per step and the model verifies them in a single pass. A step costs about what it did before but yields more than one token when drafts are accepted, so throughput scales with 1 + drafts x acceptance rather than with memory speed. Acceptance is workload-dependent: predictable text accepts well, surprising text does not.

Where This Will Be Wrong

It is an estimate, not a benchmark. These are the places it drifts — worth reading before buying hardware on it.

AssumptionWhy it drifts
Decode is purely bandwidth-boundTrue for single-stream decode. Under large batches it moves toward compute-bound, and this will under-predict aggregate throughput.
Weights are read once per tokenCaches, fused kernels and reuse across a batch all reduce real traffic. The single-sequence case is the honest worst case.
Overhead is a rough allowanceActivations scale with batch and context, and every runtime has its own allocator behaviour and fragmentation.
Effective bits per weightThe k-quant figures are typical values. Real file size depends on vocabulary size and how large the embedding and output tensors are next to the body.
Uniform memory bandwidthUnified-memory machines share bandwidth with the CPU, and partial offload to system RAM collapses throughput far below anything shown here.
Cards split evenlyPooled VRAM assumes a balanced split, but whole layers cannot straddle two cards, so a real split leaves one card fuller than the others. Tensor-parallel scaling also depends on the interconnect — NVLink beats PCIe, and mixed cards run at the pace of the slowest.
Routing is freeMixture routing adds traffic and can stall on imbalance, so the active-parameter figure is an upper bound.
The GPU figures come from the Wikipedia list of Nvidia GPUs. Capacity and bandwidth drive both answers, and every card in the list satisfies bus width / 8 x memory speed = bandwidth, so the arithmetic is checkable rather than asserted. The DGX Spark is the one entry with no memory bus: 128 GB of unified LPDDR5X at 273 GB/s, which is why it holds models no discrete card can while decoding them slowly. Where a card offers several memory sizes — the 2060, the 3060, the 4060 Ti, the 5060 Ti and others — each variant is listed separately, because capacity and bandwidth do not always move together.

Next in Series

Serving a Model

Latency, batching, sizing & what it costs to run