{"id":1766,"date":"2026-07-15T08:15:00","date_gmt":"2026-07-15T08:15:00","guid":{"rendered":"https:\/\/nassimstudio.com\/blog\/?p=1766"},"modified":"2026-07-15T00:05:48","modified_gmt":"2026-07-15T00:05:48","slug":"local-ai-benchmark-32-runs-9-models-8gb-vram","status":"publish","type":"post","link":"https:\/\/nassimstudio.com\/blog\/local-ai-benchmark-32-runs-9-models-8gb-vram\/","title":{"rendered":"My Full Local AI Benchmark: 32 Runs, 9 Models, 8GB VRAM"},"content":{"rendered":"<p>Every &#8220;best local LLM&#8221; article in 2026 tells you what to download. None of them show you the actual numbers. They say &#8220;this model is fast&#8221; without telling you how fast on YOUR hardware, with YOUR quantization, at YOUR context length.<\/p>\n<p>I got tired of guessing. So I ran 32 benchmark tests across 9 different models on my RTX 3060 Ti, recorded every number that mattered, and compiled the full dataset here. No cherry-picking. No rounding up. Just raw performance data from an 8GB VRAM card that most developers actually own.<\/p>\n<p>If you&#8217;re trying to run local AI for coding on consumer hardware, this is the reference you wish existed.<\/p>\n<h2>My Hardware and Why It Matters<\/h2>\n<p>The specs that determine whether a local LLM runs well or runs at all:<\/p>\n<table>\n<tr>\n<td>Component<\/td>\n<td>Spec<\/td>\n<\/tr>\n<tr>\n<td>GPU<\/td>\n<td>NVIDIA RTX 3060 Ti &#8211; 8GB GDDR6<\/td>\n<\/tr>\n<tr>\n<td>CPU<\/td>\n<td>AMD Ryzen 7 5800X &#8211; 8 cores \/ 16 threads<\/td>\n<\/tr>\n<tr>\n<td>RAM<\/td>\n<td>32GB DDR4<\/td>\n<\/tr>\n<tr>\n<td>Storage<\/td>\n<td>NVMe SSD (model loading speed matters)<\/td>\n<\/tr>\n<tr>\n<td>OS<\/td>\n<td>Windows 11<\/td>\n<\/tr>\n<tr>\n<td>Inference engine<\/td>\n<td>[llama-cpp-turboquant](https:\/\/github.com\/TheTom\/llama-cpp-turboquant) (fork of llama.cpp with TurboQuant+ KV cache compression)<\/td>\n<\/tr>\n<\/table>\n<p>The RTX 3060 Ti is the most common mid-range GPU among developers. It&#8217;s not a 4090. It&#8217;s not a 3090 with 24GB of VRAM. It has 8GB, and that&#8217;s the hard ceiling. Every model, every quantization choice, every context window has to fit within that 8GB or it spills to system RAM and inference turns into a slideshow.<\/p>\n<p>This is why I tested everything on this specific card. If it works here, it works on most setups.<\/p>\n<h2>Why MoE Models Changed Everything on 8GB<\/h2>\n<p>Before I get into the numbers, you need to understand why some models punch way above their weight class on limited VRAM.<\/p>\n<p>Traditional dense models use all their parameters for every token. A 13B model activates all 13 billion parameters for every single token it generates. That means the entire model has to fit in VRAM.<\/p>\n<p>MoE (Mixture of Experts) models work differently. A 35B model like <a href=\"https:\/\/huggingface.co\/\" target=\"_blank\" rel=\"noopener\">Ornith<\/a> or <a href=\"https:\/\/huggingface.co\/\" target=\"_blank\" rel=\"noopener\">Qwen3.6 35B-A3B<\/a> only activates a fraction of its parameters per token &#8211; typically 3B out of 35B total. The model has 256 experts, picks 8 per token, and only those 8 fire.<\/p>\n<p>The result: you get the reasoning quality of a 35B model with the VRAM footprint closer to a 3B model. On 8GB VRAM, this is the unlock that makes everything else possible.<\/p>\n<h2>The 9 Models I Tested<\/h2>\n<p>I tested models across four categories: small fast workers, medium daily drivers, large reasoning models, and one failure. Here&#8217;s the lineup:<\/p>\n<h3>Small Fast Workers<\/h3>\n<p><strong>Gemma 4 E4B<\/strong> (Q4_K_M quantization)<\/p>\n<ul>\n<li>Google&#8217;s small MoE model &#8211; 4B active parameters<\/li>\n<li>Ran at 64k context, CUDA backend<\/li>\n<li>This was the speed champion of the entire benchmark<\/li>\n<\/ul>\n<p><strong>Qwen3-4B Thinking<\/strong> (Q4_1 quantization)<\/p>\n<ul>\n<li>Alibaba&#8217;s small thinking model<\/li>\n<li>Designed for reasoning tasks despite its size<\/li>\n<li>Good for simple planning tasks<\/li>\n<\/ul>\n<h3>Medium Daily Drivers<\/h3>\n<p><strong>Qwen2.5-Coder 7B<\/strong> (Q4_K_M quantization, 128k context)<\/p>\n<ul>\n<li>The dedicated coding model from Alibaba<\/li>\n<li>7B dense parameters &#8211; fits comfortably in VRAM<\/li>\n<li>This is what I reach for most coding tasks now<\/li>\n<\/ul>\n<p><strong>Qwen3.5 9B<\/strong> (Q4_K_M quantization)<\/p>\n<ul>\n<li>General-purpose model with vision capabilities<\/li>\n<li>Tested at 125k context &#8211; it worked but the context pressure was real<\/li>\n<\/ul>\n<h3>Large Reasoning Models<\/h3>\n<p><strong>Gemma 4 26B-A4B<\/strong> (Q4_K_M and UD-IQ4_NL quantizations)<\/p>\n<ul>\n<li>Google&#8217;s larger MoE &#8211; 26B total, 4B active per token<\/li>\n<li>Tested at both 4k and 64k context with different MoE layer offload counts<\/li>\n<li>Solid reasoning, slower generation<\/li>\n<\/ul>\n<p><strong>Qwen3-Coder 30B-A3B<\/strong> (IQ4_XS quantization)<\/p>\n<ul>\n<li>Alibaba&#8217;s large coding MoE &#8211; 30B total, 3B active<\/li>\n<li>Tested extensively with MoE layer offload from 20 to 41 layers<\/li>\n<li>Interesting but not the daily driver I hoped for<\/li>\n<\/ul>\n<p><strong>Qwen3.6 35B-A3B MTP<\/strong> (UD-IQ4_NL quantization)<\/p>\n<ul>\n<li>The most advanced Qwen model with multi-token prediction (MTP)<\/li>\n<li>Tested at 32k and 128k context<\/li>\n<li>MTP with draft-n=1 was the best 32k performer<\/li>\n<\/ul>\n<p><strong>Ornith-1.0-35B-MTP-APEX-I-Mini<\/strong> (UD-IQ4_NL quantization)<\/p>\n<ul>\n<li>Qwen3.5 MoE variant &#8211; 35B total, 3B active, 256 experts (8 active per token)<\/li>\n<li>The model I ultimately settled on<\/li>\n<li>Stable at 128k context with turbo2 KV cache compression<\/li>\n<\/ul>\n<h3>The Failure<\/h3>\n<p><strong>GLM-4.6V-Flash<\/strong> (Q4_K_M + mmproj)<\/p>\n<ul>\n<li>Zhipu&#8217;s multimodal model<\/li>\n<li>Tested three times, rejected every time &#8211; bad output quality despite decent speeds<\/li>\n<\/ul>\n<h2>The Full Benchmark Data<\/h2>\n<p>Every row is a real test run. No averaging, no estimates. The numbers are what the server reported.<\/p>\n<h3>Gemma 4 E4B<\/h3>\n<table>\n<tr>\n<td>Config<\/td>\n<td>Context<\/td>\n<td>Prompt t\/s<\/td>\n<td>Gen t\/s<\/td>\n<td>Draft Acceptance<\/td>\n<td>Verdict<\/td>\n<\/tr>\n<tr>\n<td>Q4_K_M, CUDA, q8 KV, 8 threads<\/td>\n<td>64k<\/td>\n<td>1664<\/td>\n<td>68.17<\/td>\n<td>&#8211;<\/td>\n<td>Keep<\/td>\n<\/tr>\n<tr>\n<td>Q4_K_M, CUDA, q8 KV, 8 threads<\/td>\n<td>64k<\/td>\n<td>2346<\/td>\n<td>62.37<\/td>\n<td>&#8211;<\/td>\n<td>Keep<\/td>\n<\/tr>\n<tr>\n<td>Q4_K_M, Vulkan, default slots<\/td>\n<td>4096<\/td>\n<td>2.98<\/td>\n<td>8.03<\/td>\n<td>&#8211;<\/td>\n<td>Reject config<\/td>\n<\/tr>\n<\/table>\n<p>The CUDA config hit 68 t\/s generation &#8211; the fastest result in the entire benchmark. Vulkan with auto slots was unusable at 8 t\/s. Lesson: always use CUDA, never Vulkan for this model.<\/p>\n<h3>Qwen3-4B Thinking<\/h3>\n<table>\n<tr>\n<td>Config<\/td>\n<td>Context<\/td>\n<td>Prompt t\/s<\/td>\n<td>Gen t\/s<\/td>\n<td>Verdict<\/td>\n<\/tr>\n<tr>\n<td>Q4_1, CUDA, q4 KV<\/td>\n<td>64k<\/td>\n<td>&#8211;<\/td>\n<td>86.00<\/td>\n<td>Keep<\/td>\n<\/tr>\n<\/table>\n<p>Fast but limited use case. Good for quick planning, not detailed coding.<\/p>\n<h3>Qwen3.5 9B<\/h3>\n<table>\n<tr>\n<td>Config<\/td>\n<td>Context<\/td>\n<td>Prompt t\/s<\/td>\n<td>Gen t\/s<\/td>\n<td>Verdict<\/td>\n<\/tr>\n<tr>\n<td>Q4_K_M, CUDA, q4 KV<\/td>\n<td>125k<\/td>\n<td>&#8211;<\/td>\n<td>22.58<\/td>\n<td>Maybe<\/td>\n<\/tr>\n<\/table>\n<p>Works at massive context but the speed suffers. Not a daily worker.<\/p>\n<h3>Gemma 4 26B-A4B<\/h3>\n<table>\n<tr>\n<td>Config<\/td>\n<td>MoE layers<\/td>\n<td>Context<\/td>\n<td>Prompt t\/s<\/td>\n<td>Gen t\/s<\/td>\n<td>Verdict<\/td>\n<\/tr>\n<tr>\n<td>Q4_K_M, q8 KV<\/td>\n<td>auto<\/td>\n<td>4096<\/td>\n<td>19.40<\/td>\n<td>13.79<\/td>\n<td>Keep (baseline)<\/td>\n<\/tr>\n<tr>\n<td>Q4_K_M, q8 KV<\/td>\n<td>25<\/td>\n<td>64k<\/td>\n<td>40.13<\/td>\n<td>19.07<\/td>\n<td>Keep<\/td>\n<\/tr>\n<tr>\n<td>Q4_K_M, q8 KV<\/td>\n<td>24<\/td>\n<td>64k<\/td>\n<td>80.15<\/td>\n<td>19.28<\/td>\n<td>Keep<\/td>\n<\/tr>\n<tr>\n<td>Q4_K_M, q8 KV<\/td>\n<td>22<\/td>\n<td>64k<\/td>\n<td>84.38<\/td>\n<td>18.34<\/td>\n<td>Keep<\/td>\n<\/tr>\n<tr>\n<td>UD-IQ4_NL, q8 KV<\/td>\n<td>41<\/td>\n<td>72k<\/td>\n<td>43.59<\/td>\n<td>18.10<\/td>\n<td>Keep<\/td>\n<\/tr>\n<tr>\n<td>UD-IQ4_NL, q8 KV<\/td>\n<td>30<\/td>\n<td>72k<\/td>\n<td>360.74<\/td>\n<td>17.12<\/td>\n<td>Keep<\/td>\n<\/tr>\n<tr>\n<td>UD-IQ4_NL, q8 KV<\/td>\n<td>29<\/td>\n<td>72k<\/td>\n<td>381.51<\/td>\n<td>&#8211;<\/td>\n<td>Partial (truncated)<\/td>\n<\/tr>\n<\/table>\n<p>The Gemma 26B is a workhorse. Prompt processing is excellent at higher MoE layer counts. Generation stays around 17-19 t\/s regardless of config &#8211; consistent but not fast.<\/p>\n<h3>Qwen3-Coder 30B-A3B<\/h3>\n<table>\n<tr>\n<td>Config<\/td>\n<td>MoE layers<\/td>\n<td>Context<\/td>\n<td>Prompt t\/s<\/td>\n<td>Gen t\/s<\/td>\n<td>Verdict<\/td>\n<\/tr>\n<tr>\n<td>IQ4_XS, q8 KV<\/td>\n<td>20<\/td>\n<td>32k<\/td>\n<td>19.21<\/td>\n<td>14.71<\/td>\n<td>Maybe<\/td>\n<\/tr>\n<tr>\n<td>IQ4_XS, q8 KV<\/td>\n<td>25<\/td>\n<td>32k<\/td>\n<td>109.57<\/td>\n<td>9.97<\/td>\n<td>Maybe<\/td>\n<\/tr>\n<tr>\n<td>IQ4_XS, q8 KV<\/td>\n<td>30<\/td>\n<td>32k<\/td>\n<td>116.69<\/td>\n<td>12.66<\/td>\n<td>Maybe<\/td>\n<\/tr>\n<tr>\n<td>IQ4_XS, q8 KV<\/td>\n<td>36<\/td>\n<td>32k<\/td>\n<td>40.07<\/td>\n<td>19.62<\/td>\n<td>Keep<\/td>\n<\/tr>\n<tr>\n<td>IQ4_XS, q8 KV<\/td>\n<td>37<\/td>\n<td>32k<\/td>\n<td>361.89<\/td>\n<td>18.57<\/td>\n<td>Keep<\/td>\n<\/tr>\n<tr>\n<td>IQ4_XS, q8 KV<\/td>\n<td>40<\/td>\n<td>32k<\/td>\n<td>268.75<\/td>\n<td>17.76<\/td>\n<td>Keep<\/td>\n<\/tr>\n<tr>\n<td>IQ4_XS, q8 KV<\/td>\n<td>41<\/td>\n<td>72k<\/td>\n<td>39.32<\/td>\n<td>17.53<\/td>\n<td>Keep<\/td>\n<\/tr>\n<tr>\n<td>IQ4_XS, q8 KV<\/td>\n<td>37<\/td>\n<td>128k<\/td>\n<td>20.35<\/td>\n<td>16.71<\/td>\n<td>Maybe<\/td>\n<\/tr>\n<\/table>\n<p>The Qwen3-Coder 30B was my attempt at a dedicated local coding model. At 37 MoE layers it&#8217;s solid &#8211; 18.57 t\/s generation with 361 t\/s prompt processing. But at 128k context it drops to 16.71 t\/s. Compared to the Ornith model, it&#8217;s not competitive enough to justify the complexity.<\/p>\n<h3>Qwen3.6 35B-A3B MTP<\/h3>\n<p>This is where things got interesting. The Qwen3.6 has multi-token prediction (MTP) &#8211; it can draft multiple tokens ahead and speculative-decode them in parallel.<\/p>\n<table>\n<tr>\n<td>Config<\/td>\n<td>MoE layers<\/td>\n<td>MTP n<\/td>\n<td>Context<\/td>\n<td>Prompt t\/s<\/td>\n<td>Gen t\/s<\/td>\n<td>Draft Acceptance<\/td>\n<td>Verdict<\/td>\n<\/tr>\n<tr>\n<td>UD-IQ4_NL, q8 KV<\/td>\n<td>45<\/td>\n<td>2<\/td>\n<td>32k<\/td>\n<td>16.21<\/td>\n<td>25.05<\/td>\n<td>84.58%<\/td>\n<td>Keep<\/td>\n<\/tr>\n<tr>\n<td>UD-IQ4_NL, q8 KV<\/td>\n<td>45<\/td>\n<td>2<\/td>\n<td>32k<\/td>\n<td>52.29<\/td>\n<td>21.27<\/td>\n<td>60.01%<\/td>\n<td>Keep<\/td>\n<\/tr>\n<tr>\n<td>UD-IQ4_NL, q8 KV<\/td>\n<td>33<\/td>\n<td>2<\/td>\n<td>32k<\/td>\n<td>335.65<\/td>\n<td>26.24<\/td>\n<td>62.69%<\/td>\n<td>Keep<\/td>\n<\/tr>\n<tr>\n<td>UD-IQ4_NL, q8 KV<\/td>\n<td>33<\/td>\n<td>1<\/td>\n<td>32k<\/td>\n<td>361.67<\/td>\n<td>27.19<\/td>\n<td>74.82%<\/td>\n<td>Best 32k<\/td>\n<\/tr>\n<tr>\n<td>UD-IQ4_NL, q8 KV<\/td>\n<td>33<\/td>\n<td>4<\/td>\n<td>32k<\/td>\n<td>302.92<\/td>\n<td>~11-12<\/td>\n<td>&#8211;<\/td>\n<td>Reject (too aggressive)<\/td>\n<\/tr>\n<tr>\n<td>UD-IQ4_NL, q8 KV<\/td>\n<td>33<\/td>\n<td>3<\/td>\n<td>32k<\/td>\n<td>320.05<\/td>\n<td>~21-22<\/td>\n<td>&#8211;<\/td>\n<td>Partial<\/td>\n<\/tr>\n<tr>\n<td>UD-IQ4_NL, q8 KV<\/td>\n<td>37<\/td>\n<td>1<\/td>\n<td>128k<\/td>\n<td>346.39<\/td>\n<td>24.66<\/td>\n<td>73.28%<\/td>\n<td>Best 128k<\/td>\n<\/tr>\n<\/table>\n<p>The sweet spot was draft-n=1 &#8211; 27.19 t\/s generation with 74.82% draft acceptance at 32k context. Draft-n=4 was too aggressive and killed performance. Draft-n=2 was slightly faster acceptance (84%) but slower generation. n=1 is the winner.<\/p>\n<h3>Ornith-1.0-35B-MTP-APEX-I-Mini<\/h3>\n<p>The final model. The one I run daily now.<\/p>\n<table>\n<tr>\n<td>Config<\/td>\n<td>MoE layers<\/td>\n<td>Context<\/td>\n<td>Prompt t\/s<\/td>\n<td>Gen t\/s<\/td>\n<td>Draft Acceptance<\/td>\n<td>Verdict<\/td>\n<\/tr>\n<tr>\n<td>UD-IQ4_NL, q8 K + turbo2 V<\/td>\n<td>34<\/td>\n<td>128k<\/td>\n<td>670-720<\/td>\n<td>30-36<\/td>\n<td>62.7% &#8211; 90.3%<\/td>\n<td>Best overall<\/td>\n<\/tr>\n<\/table>\n<p>The Ornith model with turbo2 KV cache compression on the V side is the winner across the board. 30-36 t\/s generation at 128k context, prompt ingestion at 670-720 t\/s, and draft acceptance hitting 90%+ on optimized runs.<\/p>\n<p>The key was the TurboQuant+ asymmetric KV cache &#8211; q8_0 for Keys (preserving attention quality) and turbo2 for Values (aggressive compression where it&#8217;s safe). This freed enough VRAM to run the full model at 128k context without spilling to system RAM.<\/p>\n<h3>GLM-4.6V-Flash<\/h3>\n<table>\n<tr>\n<td>Config<\/td>\n<td>Context<\/td>\n<td>Gen t\/s<\/td>\n<td>Verdict<\/td>\n<\/tr>\n<tr>\n<td>Q4_K_M + mmproj, CUDA<\/td>\n<td>32k<\/td>\n<td>9.75<\/td>\n<td>Reject<\/td>\n<\/tr>\n<tr>\n<td>Q4_K_M + mmproj, CUDA<\/td>\n<td>32k<\/td>\n<td>12.31<\/td>\n<td>Reject<\/td>\n<\/tr>\n<tr>\n<td>Q4_K_M + mmproj, CUDA<\/td>\n<td>32k<\/td>\n<td>18.91<\/td>\n<td>Reject<\/td>\n<\/tr>\n<\/table>\n<p>Three attempts. All rejected. The model outputs garbled Chinese text despite being prompted in English, throws tokenizer warnings, and the quality never improved regardless of speed. Some models just don&#8217;t work &#8211; and that&#8217;s useful data too.<\/p>\n<h2>The Top 5 Results, Ranked<\/h2>\n<table>\n<tr>\n<td>Rank<\/td>\n<td>Model<\/td>\n<td>Speed (t\/s)<\/td>\n<td>Context<\/td>\n<td>Best Use Case<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td><strong>Ornith 35B-A3B<\/strong><\/td>\n<td>30-36<\/td>\n<td>128k<\/td>\n<td>Senior planner, hard coding tasks<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td><strong>Qwen3.6 35B MTP (n=1)<\/strong><\/td>\n<td>27.19<\/td>\n<td>32k<\/td>\n<td>Planning, code review<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td><strong>Gemma 4 E4B<\/strong><\/td>\n<td>68.17<\/td>\n<td>64k<\/td>\n<td>Fast general worker<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td><strong>Qwen2.5-Coder 7B<\/strong><\/td>\n<td>37.27<\/td>\n<td>128k<\/td>\n<td>Daily coding assistant<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td><strong>Gemma 4 26B-A4B<\/strong><\/td>\n<td>18-19<\/td>\n<td>72k<\/td>\n<td>Reasoning, analysis<\/td>\n<\/tr>\n<\/table>\n<h2>How I Use These Results Daily<\/h2>\n<p>I don&#8217;t run all 9 models. I run three, each assigned to a specific role:<\/p>\n<p><strong>Gemma 4 E4B<\/strong> &#8211; my fast worker. 68 t\/s for quick tasks: file summaries, simple refactors, generating boilerplate. It&#8217;s fast enough that I never wait.<\/p>\n<p><strong>Qwen2.5-Coder 7B<\/strong> &#8211; my daily coder. 37 t\/s with 128k context. It actually understands code structure, handles multi-file edits, and the context window is massive enough for entire codebases.<\/p>\n<p><strong>Ornith 35B-A3B<\/strong> &#8211; my senior planner. 30-36 t\/s at 128k context. I use this for architectural decisions, complex debugging, code review, and any task where I need the model to think deeply before answering.<\/p>\n<p>These three models cover every coding scenario I encounter. The total VRAM footprint stays within 8GB because only one model loads at a time, and the MoE architecture keeps the active parameter count low.<\/p>\n<h2>How to Reproduce These Benchmarks<\/h2>\n<p>If you want to run the same tests on your hardware, here&#8217;s the template command I used:<\/p>\n<pre style=\"background:#0f172a;color:#e2e8f0;padding:1.2rem 1.5rem;border-radius:8px;overflow-x:auto;line-height:1.6;font-size:14px;font-family:monospace;white-space:pre;margin:1.5rem 0;border:1px solid #1e293b\"><code>llama-server \\\n  -m Ornith-1.0-35B-MTP-APEX-I-Mini.gguf \\\n  --spec-type draft-mtp \\\n  --spec-draft-n-max 2 \\\n  -ngl 999 \\\n  -ncmoe 34 \\\n  -fa on \\\n  -ctk q8_0 \\\n  -ctv turbo2 \\\n  -c 128300 \\\n  -b 512 \\\n  -ub 2048 \\\n  --no-mmap \\\n  -t 5 \\\n  -np 1<\/code><\/pre>\n<p>Key flags explained:<\/p>\n<table>\n<tr>\n<td>Flag<\/td>\n<td>What it does<\/td>\n<\/tr>\n<tr>\n<td>`-ngl 999`<\/td>\n<td>Offload all layers to GPU<\/td>\n<\/tr>\n<tr>\n<td>`-ncmoe 34`<\/td>\n<td>Number of MoE expert layers on GPU<\/td>\n<\/tr>\n<tr>\n<td>`-ctk q8_0`<\/td>\n<td>KV cache Key quantization &#8211; q8_0 preserves attention quality<\/td>\n<\/tr>\n<tr>\n<td>`-ctv turbo2`<\/td>\n<td>KV cache Value quantization &#8211; aggressive compression, safe for V<\/td>\n<\/tr>\n<tr>\n<td>`-c 128300`<\/td>\n<td>Context size (~128k tokens)<\/td>\n<\/tr>\n<tr>\n<td>`-np 1`<\/td>\n<td>Single parallel slot &#8211; freed ~600MB+ VRAM vs auto(4)<\/td>\n<\/tr>\n<tr>\n<td>`&#8211;spec-type draft-mtp`<\/td>\n<td>Enable multi-token prediction speculative decoding<\/td>\n<\/tr>\n<tr>\n<td>`&#8211;spec-draft-n-max 2`<\/td>\n<td>Draft 2 tokens ahead (sweet spot for this model)<\/td>\n<\/tr>\n<\/table>\n<p>For my <a href=\"https:\/\/pi.dev\" target=\"_blank\" rel=\"noopener\">pi.dev<\/a> setup, I pair this server with these generation settings:<\/p>\n<pre style=\"background:#0f172a;color:#e2e8f0;padding:1.2rem 1.5rem;border-radius:8px;overflow-x:auto;line-height:1.6;font-size:14px;font-family:monospace;white-space:pre;margin:1.5rem 0;border:1px solid #1e293b\"><code>{\n  \"temperature\": 0.6,\n  \"top_p\": 0.95,\n  \"top_k\": 20,\n  \"repeat_penalty\": 1.02,\n  \"defaultThinkingLevel\": \"high\"\n}<\/code><\/pre>\n<p>The repeat penalty of 1.02 is light enough to prevent loops without killing the model&#8217;s creativity. Temperature 0.6 keeps outputs focused for coding tasks. And &#8220;high&#8221; thinking level lets the model reason through complex problems properly.<\/p>\n<h2>The Data Is the Point<\/h2>\n<p>I&#8217;m not going to tell you which model is &#8220;best&#8221; &#8211; your hardware, your workflow, your context needs are different from mine. What I will tell you is that most local AI content online is opinion without evidence.<\/p>\n<p>These 32 test runs are evidence. Use them as a starting point, run your own tests, and find what works on your specific setup. The numbers don&#8217;t lie, but they also don&#8217;t transfer between GPUs. Your 4070 will be different from my 3060 Ti. Your 16GB setup will open options my 8GB card doesn&#8217;t have.<\/p>\n<p>Start with the data. Make your own decision. And stop reading articles that tell you what to download without showing you why.<\/p>\n<p>If you found this useful, the full benchmark dataset is something I&#8217;ll keep updating as I test new models. The local AI space moves fast &#8211; what&#8217;s slow today might be fast tomorrow with a new quantization trick or a model architecture that fits better in 8GB.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Every &#8220;best local LLM&#8221; article in 2026 tells you what to download. None of them show you the actual numbers. They say &#8220;this model is fast&#8221; without telling you how fast on YOUR hardware, with YOUR quantization, at YOUR context length. I got tired of guessing. So I ran 32 benchmark tests across 9 different [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1785,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"","rank_math_description":"","rank_math_focus_keyword":"","rank_math_canonical_url":"","footnotes":""},"categories":[42],"tags":[],"class_list":["post-1766","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-llm"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/nassimstudio.com\/blog\/wp-json\/wp\/v2\/posts\/1766","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nassimstudio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nassimstudio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nassimstudio.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nassimstudio.com\/blog\/wp-json\/wp\/v2\/comments?post=1766"}],"version-history":[{"count":5,"href":"https:\/\/nassimstudio.com\/blog\/wp-json\/wp\/v2\/posts\/1766\/revisions"}],"predecessor-version":[{"id":1824,"href":"https:\/\/nassimstudio.com\/blog\/wp-json\/wp\/v2\/posts\/1766\/revisions\/1824"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nassimstudio.com\/blog\/wp-json\/wp\/v2\/media\/1785"}],"wp:attachment":[{"href":"https:\/\/nassimstudio.com\/blog\/wp-json\/wp\/v2\/media?parent=1766"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nassimstudio.com\/blog\/wp-json\/wp\/v2\/categories?post=1766"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nassimstudio.com\/blog\/wp-json\/wp\/v2\/tags?post=1766"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}