<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[gpu.nz blog]]></title><description><![CDATA[gpu.nz blog]]></description><link>https://gpunz.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Fri, 23 Oct 2026 18:44:07 GMT</lastBuildDate><atom:link href="https://gpunz.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How much VRAM do open LLMs really need? Real GGUF sizes for 35 models (October 2026)]]></title><description><![CDATA[How much VRAM Qwen3, Llama, DeepSeek, Gemma and 30 other open models need: real GGUF file sizes, KV cache for 8K-128K context, GPU picks.]]></description><link>https://gpunz.hashnode.dev/how-much-vram-do-open-llms-really-need-real-gguf-sizes-for-35-models-october-2026</link><guid isPermaLink="true">https://gpunz.hashnode.dev/how-much-vram-do-open-llms-really-need-real-gguf-sizes-for-35-models-october-2026</guid><category><![CDATA[llm]]></category><category><![CDATA[AI]]></category><category><![CDATA[Machine Learning]]></category><category><![CDATA[GPU]]></category><dc:creator><![CDATA[Gosha]]></dc:creator><pubDate>Tue, 20 Oct 2026 16:02:58 GMT</pubDate><content:encoded><![CDATA[<p>"Parameters × bits ÷ 8" is the rule everyone quotes for how much GPU memory a model needs. It gets you in the right neighbourhood and then lets you down exactly where it matters: on the card that is 2 GB too small, or on the 32k-token chat that suddenly no longer fits.</p>
<p>So I stopped estimating and pulled the numbers from the source for 35 current open models:</p>
<ul>
<li><strong>Weights</strong>: the real size of the published file — GGUF builds by unsloth, ggml-org, bartowski and the model authors (Q4_K_M unless the model ships quantised natively, like GPT-OSS in MXFP4), read from the Hugging Face API.</li>
<li><strong>Context (KV) cache</strong>: computed from each model's own <code>config.json</code> — number of layers, KV heads and head size — including the architectures where the naive formula is wrong (more on that below).</li>
<li><strong>Runtime</strong>: CUDA context and buffers, about 0.75 GiB plus the logits buffer of a 512-token batch (it adds up for 256k-token vocabularies).</li>
</ul>
<p>All figures are GiB (1024³ bytes), the unit GPU memory is sold in, so they compare directly with "24 GB". Hugging Face lists decimal gigabytes, which is why its file sizes look ~7% larger.</p>
<h2>The table</h2>
<p>One GPU, one request, FP16 cache. "Smallest single card" is the smallest common card size where the total fits in 97.5% of the memory (the driver and CUDA take the rest).</p>
<table>
<thead>
<tr>
<th>Model</th>
<th>Params</th>
<th>Weights (format, GiB)</th>
<th>VRAM @ 8k ctx</th>
<th>VRAM @ 32k ctx</th>
<th>Smallest single card (8k)</th>
</tr>
</thead>
<tbody><tr>
<td>Qwen3.8 27B</td>
<td>27.78B</td>
<td>Q4_K_M 15.3</td>
<td>17.2</td>
<td>18.7</td>
<td>24 GB</td>
</tr>
<tr>
<td>Qwen3.5 9B</td>
<td>9.65B</td>
<td>Q4_K_M 5.3</td>
<td>6.8</td>
<td>7.6</td>
<td>8 GB</td>
</tr>
<tr>
<td>Qwen3.5 4B</td>
<td>4.66B</td>
<td>Q4_K_M 2.6</td>
<td>4.1</td>
<td>4.8</td>
<td>8 GB</td>
</tr>
<tr>
<td>Qwen3 8B</td>
<td>8.19B</td>
<td>Q4_K_M 4.7</td>
<td>6.8</td>
<td>10.2</td>
<td>8 GB</td>
</tr>
<tr>
<td>Qwen3 14B</td>
<td>14.77B</td>
<td>Q4_K_M 8.4</td>
<td>10.7</td>
<td>14.4</td>
<td>12 GB</td>
</tr>
<tr>
<td>Qwen3 32B</td>
<td>32.76B</td>
<td>Q4_K_M 18.4</td>
<td>21.4</td>
<td>27.4</td>
<td>24 GB</td>
</tr>
<tr>
<td>Qwen3 30B-A3B</td>
<td>30.53B (3.3B active)</td>
<td>Q4_K_M 17.3</td>
<td>19.1</td>
<td>21.3</td>
<td>24 GB</td>
</tr>
<tr>
<td>Qwen3 Coder 30B-A3B</td>
<td>30.53B (3.3B active)</td>
<td>Q4_K_M 17.3</td>
<td>19.1</td>
<td>21.3</td>
<td>24 GB</td>
</tr>
<tr>
<td>Qwen3 Next 80B-A3B</td>
<td>81.32B (3B active)</td>
<td>Q4_K_M 45.2</td>
<td>46.5</td>
<td>47.0</td>
<td>48 GB</td>
</tr>
<tr>
<td>Qwen3 235B-A22B</td>
<td>235.09B (22B active)</td>
<td>Q4_K_M 132.4</td>
<td>134.9</td>
<td>139.3</td>
<td>141 GB</td>
</tr>
<tr>
<td>Qwen3 Coder 480B-A35B</td>
<td>480.15B (35B active)</td>
<td>Q4_K_M 270.1</td>
<td>273.1</td>
<td>278.9</td>
<td>288 GB</td>
</tr>
<tr>
<td>Gemma 4 12B</td>
<td>11.96B</td>
<td>Q4_K_M 6.6</td>
<td>8.3</td>
<td>8.7</td>
<td>12 GB</td>
</tr>
<tr>
<td>Gemma 4 26B-A4B</td>
<td>25.81B (4B active)</td>
<td>Q4_K_M 15.8</td>
<td>17.4</td>
<td>17.9</td>
<td>24 GB</td>
</tr>
<tr>
<td>Gemma 4 31B</td>
<td>31.27B</td>
<td>Q4_K_M 17.1</td>
<td>19.7</td>
<td>21.6</td>
<td>24 GB</td>
</tr>
<tr>
<td>Gemma 3 27B</td>
<td>27.43B</td>
<td>Q4_K_M 15.4</td>
<td>17.7</td>
<td>19.6</td>
<td>24 GB</td>
</tr>
<tr>
<td>GPT-OSS 20B</td>
<td>20.91B (3.6B active)</td>
<td>MXFP4 11.3</td>
<td>12.6</td>
<td>13.2</td>
<td>16 GB</td>
</tr>
<tr>
<td>GPT-OSS 120B</td>
<td>116.83B (5.1B active)</td>
<td>MXFP4 59.0</td>
<td>60.5</td>
<td>61.3</td>
<td>80 GB</td>
</tr>
<tr>
<td>DeepSeek R1 671B</td>
<td>684.53B (37B active)</td>
<td>Q4_K_M 377.1</td>
<td>378.7</td>
<td>380.3</td>
<td>multi-GPU</td>
</tr>
<tr>
<td>DeepSeek V3.2</td>
<td>685.36B (37B active)</td>
<td>Q4_K_M 377.6</td>
<td>379.1</td>
<td>380.7</td>
<td>multi-GPU</td>
</tr>
<tr>
<td>DeepSeek V4 Flash</td>
<td>290.94B</td>
<td>UD-Q4_K_XL 144.4</td>
<td>145.5</td>
<td>145.8</td>
<td>180 GB</td>
</tr>
<tr>
<td>DeepSeek R1 Distill Qwen 32B</td>
<td>32.76B</td>
<td>Q4_K_M 18.5</td>
<td>21.5</td>
<td>27.5</td>
<td>24 GB</td>
</tr>
<tr>
<td>DeepSeek R1 0528 Qwen3 8B</td>
<td>8.19B</td>
<td>Q4_K_M 4.7</td>
<td>6.8</td>
<td>10.2</td>
<td>8 GB</td>
</tr>
<tr>
<td>Llama 3.1 8B</td>
<td>8.03B</td>
<td>Q4_K_M 4.6</td>
<td>6.6</td>
<td>9.6</td>
<td>8 GB</td>
</tr>
<tr>
<td>Llama 3.3 70B</td>
<td>70.55B</td>
<td>Q4_K_M 39.6</td>
<td>43.1</td>
<td>50.6</td>
<td>48 GB</td>
</tr>
<tr>
<td>Mistral Small 3.2 24B</td>
<td>24.01B</td>
<td>Q4_K_M 13.3</td>
<td>15.6</td>
<td>19.3</td>
<td>16 GB</td>
</tr>
<tr>
<td>Devstral Small 2 24B</td>
<td>24.01B</td>
<td>Q4_K_M 13.3</td>
<td>15.6</td>
<td>19.3</td>
<td>16 GB</td>
</tr>
<tr>
<td>Ministral 3 14B</td>
<td>13.95B</td>
<td>Q4_K_M 7.7</td>
<td>9.9</td>
<td>13.7</td>
<td>12 GB</td>
</tr>
<tr>
<td>Mistral Nemo 12B</td>
<td>12.25B</td>
<td>Q4_K_M 7.0</td>
<td>9.2</td>
<td>13.0</td>
<td>12 GB</td>
</tr>
<tr>
<td>GLM-4.7 Flash</td>
<td>31.22B (3B active)</td>
<td>Q4_K_M 17.1</td>
<td>18.5</td>
<td>19.8</td>
<td>24 GB</td>
</tr>
<tr>
<td>GLM-4.5 Air</td>
<td>110.47B (12B active)</td>
<td>Q4_K_M 68.0</td>
<td>70.4</td>
<td>74.8</td>
<td>80 GB</td>
</tr>
<tr>
<td>GLM-5.3 Flash</td>
<td>321.32B</td>
<td>UD-Q4_K_XL 186.0</td>
<td>187.3</td>
<td>187.6</td>
<td>288 GB</td>
</tr>
<tr>
<td>Kimi K2 1T</td>
<td>1026.47B (32B active)</td>
<td>Q4_K_M 578.6</td>
<td>580.2</td>
<td>581.8</td>
<td>multi-GPU</td>
</tr>
<tr>
<td>Hermes 4.3 36B</td>
<td>36.15B</td>
<td>Q4_K_M 20.3</td>
<td>23.3</td>
<td>29.3</td>
<td>24 GB</td>
</tr>
<tr>
<td>Phi-4 14B</td>
<td>14.66B</td>
<td>Q4_K_M 8.3</td>
<td>10.8</td>
<td>12.3</td>
<td>12 GB</td>
</tr>
<tr>
<td>Hunyuan Hy3</td>
<td>298.79B</td>
<td>FP8 279.3</td>
<td>282.8</td>
<td>290.3</td>
<td>multi-GPU</td>
</tr>
</tbody></table>
<h2>What surprised me</h2>
<p><strong>Hybrid and sliding-window attention change the picture.</strong> Qwen3 32B and Qwen3.8 27B are about the same size on disk, but going from an 8k to a 32k context costs Qwen3 32B <strong>+6 GiB</strong> and Qwen3.8 27B <strong>+1.5 GiB</strong>. Qwen3.8 keeps a KV cache on only 16 of its 64 layers; the other 48 are linear-attention layers with a fixed state per sequence. Gemma 4 does something similar with a 1024-token sliding window on 5 of every 6 layers. If you plan for long contexts, the architecture matters as much as the parameter count.</p>
<p><strong>MoE models need all of their weights in memory.</strong> Qwen3 30B-A3B uses 3.3B parameters per token, but all 30.5B have to be loaded: it needs the same 24 GB card as a dense 27B model. It just runs much faster on it. (llama.cpp can keep experts in system RAM with <code>--n-cpu-moe</code>, at a speed cost.)</p>
<p><strong>GPT-OSS is the best fit for its size class.</strong> GPT-OSS 20B ships in MXFP4 and fits a 16 GB card with room for context; GPT-OSS 120B fits a single 80 GB H100.</p>
<p><strong>70B still means 48 GB.</strong> Llama 3.3 70B in Q4_K_M is 43 GiB at 8k context: a 48 GB card, or two 24 GB cards with tensor parallelism. At 32k it no longer fits in 48 GB without a quantised KV cache.</p>
<p><strong>DeepSeek's MLA cache is tiny.</strong> DeepSeek V3.2 and R1 cache one 576-wide latent per token and layer instead of full keys and values: about 70 KB per token for the whole model. The weights are the problem there, not the context.</p>
<h2>The formula, if you want to check a model yourself</h2>
<pre><code class="language-text">weights   = file size of the quantisation you run (or params × bits ÷ 8)
kv_cache  = tokens × layers_with_full_attention × 2 × kv_heads × head_dim × 2 bytes
          + min(tokens, window) × sliding_layers × 2 × kv_heads × head_dim × 2 bytes
runtime   ≈ 0.75 GiB + 512 × vocab × 4 bytes
total     = weights + kv_cache × parallel_requests + runtime
</code></pre>
<p>A q8_0 KV cache (<code>-ctk q8_0 -ctv q8_0</code> in llama.cpp, <code>--kv-cache-dtype fp8</code> in vLLM) roughly halves the second line. vLLM preallocates most of the card for its cache by default (<code>--gpu-memory-utilization</code>), so <code>nvidia-smi</code> will always look full there; the numbers above are what the model needs, not what vLLM grabs.</p>
<h2>Calculator</h2>
<p>I turned this into a free calculator: pick a model (35 LLMs plus FLUX, Qwen-Image, Wan 2.2, HunyuanVideo and other image and video models), a quantisation, the context length and the number of parallel requests, and it shows the memory breakdown and the GPUs that fit: <strong><a href="https://gpu.nz/en/tools/vram">gpu.nz/en/tools/vram</a></strong>. Every model also has a page with the full quantisation table: <a href="https://gpu.nz/en/models">gpu.nz/en/models</a>.</p>
<p>Disclosure: I run gpu.nz, a per-minute GPU rental, so the calculator also lists hourly prices of the cards that fit. The numbers themselves don't depend on that — if you spot a model where they look wrong, tell me and I'll check it against the files.</p>
]]></content:encoded></item></channel></rss>