<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gary Nagra</title>
    <description>The latest articles on DEV Community by Gary Nagra (@vramneeded).</description>
    <link>https://dev.to/vramneeded</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4221475%2Fb36f183e-b9c5-46de-ae6a-a60954b416f3.png</url>
      <title>DEV Community: Gary Nagra</title>
      <link>https://dev.to/vramneeded</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vramneeded"/>
    <language>en</language>
    <item>
      <title>How much VRAM do popular LLMs really need at 4-bit and 8K context? Data from 26 models</title>
      <dc:creator>Gary Nagra</dc:creator>
      <pubDate>Mon, 02 Nov 2026 03:59:34 +0000</pubDate>
      <link>https://dev.to/vramneeded/how-much-vram-do-popular-llms-really-need-at-4-bit-and-8k-context-data-from-26-models-1lg3</link>
      <guid>https://dev.to/vramneeded/how-much-vram-do-popular-llms-really-need-at-4-bit-and-8k-context-data-from-26-models-1lg3</guid>
      <description>&lt;p&gt;"Will it fit on my card?" comes up constantly in local-LLM threads, and the usual answer is a rule of thumb like "about half a gigabyte per billion parameters at 4-bit." That rule is close enough for small dense models. For mixture-of-experts models, models with sliding-window attention, and long contexts it can be badly off.&lt;/p&gt;

&lt;p&gt;So instead of a rule of thumb, I put together real numbers. For 30 popular open-weight models I recorded the actual GGUF download sizes from Hugging Face and the KV-cache size per token, worked out from each model's &lt;code&gt;config.json&lt;/code&gt;. This post uses the 26 models that have both a 4-bit file and a sourced KV-cache figure.&lt;/p&gt;

&lt;p&gt;All the data is open (CC BY 4.0) at &lt;a href="https://huggingface.co/datasets/vramneeded/llm-vram-requirements" rel="noopener noreferrer"&gt;huggingface.co/datasets/vramneeded/llm-vram-requirements&lt;/a&gt;. It's the same data behind the comparison table on &lt;a href="https://vramneeded.com/compare/" rel="noopener noreferrer"&gt;vramneeded.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The method: weights + KV cache + overhead
&lt;/h2&gt;

&lt;p&gt;The memory a local model uses during inference comes from three parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Weights.&lt;/strong&gt; I use the actual GGUF file size, not params × bits. Real quant files mix precisions: embeddings and some tensors stay at higher precision, and MoE experts in some models stay in MXFP4. The file size captures all of that. Sizes are decimal (1 GB = 10⁹ bytes).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KV cache.&lt;/strong&gt; For every token in context, each attention layer stores a key and a value vector:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   KV bytes per token = layers × KV heads × head_dim × 2 (K and V) × 2 bytes (FP16)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I count only layers whose cache grows with context. Fixed-size state from sliding-window or linear-attention layers is left out, which is why some newer models have tiny KV numbers. Where I couldn't source the figure, the field is blank. I don't guess.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Overhead.&lt;/strong&gt; Runtime buffers, the CUDA context, compute scratch and so on. Instead of making up a fixed number, the fit rule simply leaves headroom: &lt;strong&gt;a model "fits" a GPU tier only if weights + KV cache come to at most 90% of the card's memory.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The settings used here are the Q4_K_M quant (or the closest 4-bit build where no Q4_K_M exists, noted below), an FP16 KV cache, and an &lt;strong&gt;8,192-token context&lt;/strong&gt;. The GPU tiers are 8, 12, 16, 24, 32, 40, 48, 64, 96 and 128 GB.&lt;/p&gt;

&lt;h2&gt;
  
  
  The table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Params&lt;/th&gt;
&lt;th&gt;4-bit weights (GB)&lt;/th&gt;
&lt;th&gt;KV @ 8K (GB)&lt;/th&gt;
&lt;th&gt;Weights + KV (GB)&lt;/th&gt;
&lt;th&gt;KV @ 32K (GB)&lt;/th&gt;
&lt;th&gt;Smallest tier that fits&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LFM3 1.7B&lt;/td&gt;
&lt;td&gt;1.7B&lt;/td&gt;
&lt;td&gt;1.10&lt;/td&gt;
&lt;td&gt;0.10&lt;/td&gt;
&lt;td&gt;1.20&lt;/td&gt;
&lt;td&gt;0.40&lt;/td&gt;
&lt;td&gt;8 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 3.2 3B Instruct&lt;/td&gt;
&lt;td&gt;3.2B&lt;/td&gt;
&lt;td&gt;2.02&lt;/td&gt;
&lt;td&gt;0.94&lt;/td&gt;
&lt;td&gt;2.96&lt;/td&gt;
&lt;td&gt;3.76&lt;/td&gt;
&lt;td&gt;8 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spark-X2.6 4B&lt;/td&gt;
&lt;td&gt;4.1B&lt;/td&gt;
&lt;td&gt;3.54&lt;/td&gt;
&lt;td&gt;0.30&lt;/td&gt;
&lt;td&gt;3.85&lt;/td&gt;
&lt;td&gt;1.21&lt;/td&gt;
&lt;td&gt;8 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen2.5 7B Instruct&lt;/td&gt;
&lt;td&gt;7.6B&lt;/td&gt;
&lt;td&gt;4.68&lt;/td&gt;
&lt;td&gt;0.47&lt;/td&gt;
&lt;td&gt;5.15&lt;/td&gt;
&lt;td&gt;1.88&lt;/td&gt;
&lt;td&gt;8 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral 7B Instruct v0.3&lt;/td&gt;
&lt;td&gt;7.2B&lt;/td&gt;
&lt;td&gt;4.37&lt;/td&gt;
&lt;td&gt;1.07&lt;/td&gt;
&lt;td&gt;5.45&lt;/td&gt;
&lt;td&gt;4.29&lt;/td&gt;
&lt;td&gt;8 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 3.1 8B Instruct&lt;/td&gt;
&lt;td&gt;8.0B&lt;/td&gt;
&lt;td&gt;4.92&lt;/td&gt;
&lt;td&gt;1.07&lt;/td&gt;
&lt;td&gt;5.99&lt;/td&gt;
&lt;td&gt;4.29&lt;/td&gt;
&lt;td&gt;8 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek-R1-0528-Qwen3-8B&lt;/td&gt;
&lt;td&gt;8.2B&lt;/td&gt;
&lt;td&gt;5.03&lt;/td&gt;
&lt;td&gt;1.21&lt;/td&gt;
&lt;td&gt;6.24&lt;/td&gt;
&lt;td&gt;4.83&lt;/td&gt;
&lt;td&gt;8 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3 14B&lt;/td&gt;
&lt;td&gt;14.8B&lt;/td&gt;
&lt;td&gt;9.00&lt;/td&gt;
&lt;td&gt;1.34&lt;/td&gt;
&lt;td&gt;10.34&lt;/td&gt;
&lt;td&gt;5.37&lt;/td&gt;
&lt;td&gt;12 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen2.5 14B Instruct&lt;/td&gt;
&lt;td&gt;14.8B&lt;/td&gt;
&lt;td&gt;8.99&lt;/td&gt;
&lt;td&gt;1.61&lt;/td&gt;
&lt;td&gt;10.60&lt;/td&gt;
&lt;td&gt;6.44&lt;/td&gt;
&lt;td&gt;12 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gpt-oss-20b&lt;/td&gt;
&lt;td&gt;20.9B&lt;/td&gt;
&lt;td&gt;11.67&lt;/td&gt;
&lt;td&gt;0.20&lt;/td&gt;
&lt;td&gt;11.87&lt;/td&gt;
&lt;td&gt;0.81&lt;/td&gt;
&lt;td&gt;16 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LFM2.5-24B-A2B&lt;/td&gt;
&lt;td&gt;24.0B&lt;/td&gt;
&lt;td&gt;14.53&lt;/td&gt;
&lt;td&gt;0.17&lt;/td&gt;
&lt;td&gt;14.69&lt;/td&gt;
&lt;td&gt;0.67&lt;/td&gt;
&lt;td&gt;24 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3.8 27B&lt;/td&gt;
&lt;td&gt;27.8B&lt;/td&gt;
&lt;td&gt;17.44&lt;/td&gt;
&lt;td&gt;0.54&lt;/td&gt;
&lt;td&gt;17.98&lt;/td&gt;
&lt;td&gt;2.15&lt;/td&gt;
&lt;td&gt;24 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3.8-35B-A3B (Empero Distill)&lt;/td&gt;
&lt;td&gt;35.1B&lt;/td&gt;
&lt;td&gt;21.71&lt;/td&gt;
&lt;td&gt;0.17&lt;/td&gt;
&lt;td&gt;21.88&lt;/td&gt;
&lt;td&gt;0.67&lt;/td&gt;
&lt;td&gt;32 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3 32B&lt;/td&gt;
&lt;td&gt;32.8B&lt;/td&gt;
&lt;td&gt;19.76&lt;/td&gt;
&lt;td&gt;2.15&lt;/td&gt;
&lt;td&gt;21.91&lt;/td&gt;
&lt;td&gt;8.59&lt;/td&gt;
&lt;td&gt;32 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen2.5 32B Instruct&lt;/td&gt;
&lt;td&gt;32.8B&lt;/td&gt;
&lt;td&gt;19.85&lt;/td&gt;
&lt;td&gt;2.15&lt;/td&gt;
&lt;td&gt;22.00&lt;/td&gt;
&lt;td&gt;8.59&lt;/td&gt;
&lt;td&gt;32 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3.6 35B-A3B&lt;/td&gt;
&lt;td&gt;36.0B&lt;/td&gt;
&lt;td&gt;22.29&lt;/td&gt;
&lt;td&gt;0.17&lt;/td&gt;
&lt;td&gt;22.45&lt;/td&gt;
&lt;td&gt;0.67&lt;/td&gt;
&lt;td&gt;32 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nanbeige4.3 33B&lt;/td&gt;
&lt;td&gt;33.1B&lt;/td&gt;
&lt;td&gt;20.79&lt;/td&gt;
&lt;td&gt;1.74&lt;/td&gt;
&lt;td&gt;22.53&lt;/td&gt;
&lt;td&gt;6.98&lt;/td&gt;
&lt;td&gt;32 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recursive Flint ¹&lt;/td&gt;
&lt;td&gt;39.8B&lt;/td&gt;
&lt;td&gt;25.05&lt;/td&gt;
&lt;td&gt;0.23&lt;/td&gt;
&lt;td&gt;25.29&lt;/td&gt;
&lt;td&gt;0.94&lt;/td&gt;
&lt;td&gt;32 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mixtral 8x7B Instruct v0.1&lt;/td&gt;
&lt;td&gt;46.7B&lt;/td&gt;
&lt;td&gt;26.44&lt;/td&gt;
&lt;td&gt;1.07&lt;/td&gt;
&lt;td&gt;27.52&lt;/td&gt;
&lt;td&gt;4.29&lt;/td&gt;
&lt;td&gt;32 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 3.1 70B Instruct&lt;/td&gt;
&lt;td&gt;70.6B&lt;/td&gt;
&lt;td&gt;42.52&lt;/td&gt;
&lt;td&gt;2.68&lt;/td&gt;
&lt;td&gt;45.20&lt;/td&gt;
&lt;td&gt;10.74&lt;/td&gt;
&lt;td&gt;64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 3.3 70B Instruct&lt;/td&gt;
&lt;td&gt;70.6B&lt;/td&gt;
&lt;td&gt;42.52&lt;/td&gt;
&lt;td&gt;2.68&lt;/td&gt;
&lt;td&gt;45.20&lt;/td&gt;
&lt;td&gt;10.74&lt;/td&gt;
&lt;td&gt;64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gpt-oss-120b&lt;/td&gt;
&lt;td&gt;116.8B&lt;/td&gt;
&lt;td&gt;62.84&lt;/td&gt;
&lt;td&gt;0.30&lt;/td&gt;
&lt;td&gt;63.14&lt;/td&gt;
&lt;td&gt;1.21&lt;/td&gt;
&lt;td&gt;96 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ornith-1.5-122B ¹&lt;/td&gt;
&lt;td&gt;125.1B&lt;/td&gt;
&lt;td&gt;79.71&lt;/td&gt;
&lt;td&gt;0.20&lt;/td&gt;
&lt;td&gt;79.92&lt;/td&gt;
&lt;td&gt;0.81&lt;/td&gt;
&lt;td&gt;96 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3.8 Flash Next&lt;/td&gt;
&lt;td&gt;180.0B&lt;/td&gt;
&lt;td&gt;119.60&lt;/td&gt;
&lt;td&gt;0.20&lt;/td&gt;
&lt;td&gt;119.80&lt;/td&gt;
&lt;td&gt;0.81&lt;/td&gt;
&lt;td&gt;over 128 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek-V4.1-Flash-1017 ¹&lt;/td&gt;
&lt;td&gt;763.2B&lt;/td&gt;
&lt;td&gt;500.71&lt;/td&gt;
&lt;td&gt;0.01&lt;/td&gt;
&lt;td&gt;500.71&lt;/td&gt;
&lt;td&gt;0.03&lt;/td&gt;
&lt;td&gt;over 128 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral Large 4&lt;/td&gt;
&lt;td&gt;1,049.4B&lt;/td&gt;
&lt;td&gt;634.80&lt;/td&gt;
&lt;td&gt;0.69&lt;/td&gt;
&lt;td&gt;635.49&lt;/td&gt;
&lt;td&gt;2.75&lt;/td&gt;
&lt;td&gt;over 128 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;¹ No Q4_K_M build is published, so the 4-bit column is Unsloth's UD-Q4_K_XL.&lt;/p&gt;

&lt;p&gt;Per-model notes from the dataset: gpt-oss keeps its MoE experts in MXFP4 in every GGUF, so its Q4_K_M, Q8_0 and BF16 files are close in size. For DeepSeek-V4.1-Flash-1017, keeping the Engram table on SSD brings UD-Q4_K_XL down to 297.9 GB of RAM/VRAM.&lt;/p&gt;

&lt;h2&gt;
  
  
  The chart: KV cache at 8K context
&lt;/h2&gt;

&lt;p&gt;The cache size per token varies a lot from model to model, and it matters more than people expect. Here is the KV cache at 8K context (FP16) for a selection of the models above:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Llama 3.1/3.3 70B   ███████████████████████████  2.68 GB
Qwen3 32B           ██████████████████████       2.15 GB
Qwen2.5 32B         ██████████████████████       2.15 GB
Nanbeige4.3 33B     █████████████████            1.74 GB
Qwen2.5 14B         ████████████████             1.61 GB
Qwen3 14B           █████████████                1.34 GB
Llama 3.1 8B        ███████████                  1.07 GB
Mixtral 8x7B        ███████████                  1.07 GB
Llama 3.2 3B        █████████                    0.94 GB
Qwen3.8 27B         █████                        0.54 GB
Qwen2.5 7B          █████                        0.47 GB
gpt-oss-120b        ███                          0.30 GB
gpt-oss-20b         ██                           0.20 GB
Qwen3.6 35B-A3B     ██                           0.17 GB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Takeaways
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. At 8K, the KV cache is a small slice for most models, but it grows linearly.&lt;/strong&gt; Llama 3.1 8B needs 1.07 GB of cache at 8K. At 32K that becomes 4.29 GB, almost as much as its 4.92 GB of weights. If you plan to use long contexts, budget for the cache rather than just the file size.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Architecture matters as much as parameter count.&lt;/strong&gt; Llama 3.2 3B has a 0.94 GB cache at 8K, while the 36B-parameter Qwen3.6 35B-A3B has 0.17 GB, because most of its layers don't keep a growing cache. The 3B model's cache is more than five times bigger. At 32K the gap is 3.76 GB vs 0.67 GB.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. 8 GB cards cover the whole 7–8B class at 4-bit and 8K.&lt;/strong&gt; All seven models from 1.7B to 8.2B fit under 90% of 8 GB, with the largest (DeepSeek-R1-0528-Qwen3-8B) at 6.24 GB.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. 12 GB is the 14B tier and 24 GB tops out around 27B dense.&lt;/strong&gt; Both 14B Qwen models land at about 10.3–10.6 GB. Qwen3.8 27B comes to 17.98 GB, under the 21.6 GB that 90% of 24 GB allows. The 32B-class models (about 21.9–22.5 GB) go just over that line, so in this rule they need the 32 GB tier. A shorter context or a quantized KV cache can bring them closer, but at 8K with FP16 cache they are over the line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. The 4-bit 70B still needs more than one consumer GPU.&lt;/strong&gt; Llama 3.1/3.3 70B at Q4_K_M plus 8K context comes to 45.20 GB, which is over 90% of 48 GB (43.2 GB). That puts it in the 64 GB tier here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. "Half a gigabyte per billion" is a floor, not a forecast.&lt;/strong&gt; The 4-bit files in this set range from 0.54 GB per billion parameters (gpt-oss-120b: 62.84 GB for 116.8B, with MXFP4 experts) to 0.86 GB per billion (Spark-X2.6 4B: 3.54 GB for 4.1B). Llama 3.1 8B is 0.61 (4.92 GB for 8.0B). Check the real file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use the data
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dataset:&lt;/strong&gt; &lt;a href="https://huggingface.co/datasets/vramneeded/llm-vram-requirements" rel="noopener noreferrer"&gt;vramneeded/llm-vram-requirements&lt;/a&gt; on Hugging Face. It includes &lt;code&gt;vram-models.csv&lt;/code&gt; (one row per model, with source links to the GGUF repo and &lt;code&gt;config.json&lt;/code&gt;), &lt;code&gt;quant-sizes.csv&lt;/code&gt; (514 quant sizes, not just Q4_K_M) and a cloud GPU price snapshot. Every row has its own checked date.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calculator and per-model pages:&lt;/strong&gt; &lt;a href="https://vramneeded.com/" rel="noopener noreferrer"&gt;vramneeded.com&lt;/a&gt; has the same numbers with a context-length slider and every quant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Badges:&lt;/strong&gt; if you publish a model or a model guide, there are free "fits on X GB" README badges at &lt;a href="https://vramneeded.com/badges/" rel="noopener noreferrer"&gt;vramneeded.com/badges/&lt;/a&gt;. They're built from the same 4-bit, 8K, 90%-headroom rule used in this post.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a number looks wrong, it may well be: repos get re-uploaded and configs change. Open an issue on the dataset with the source link and I'll fix it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Data: GGUF file sizes from Hugging Face (mostly bartowski's builds; each row names its repo) and KV cache figures from each model's config.json, checked 2026-10-23 to 2026-10-31. Weights + KV values in this post are computed from the dataset as &lt;code&gt;q4_k_m_bytes + kv_bytes_per_token_fp16 × 8192&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>machinelearning</category>
      <category>gpu</category>
    </item>
  </channel>
</rss>
