LLM Deep Dive · part 3
[LLM Deep Dive] The Best Free Open-Source Model for a Single 24GB GPU? My Pick Is ThinkingCap-Qwen3.6-27B
❯ cat --toc
- In plain English: a free local model that thinks in fewer words
- What it is: three layers stacked on Qwen 3.6 27B
- ThinkingCap cuts thinking tokens ~50%, not decode speed
- On a slow local card, half the thinking tokens is half the wait
- The abliterated layer removes the refusal direction, not the intelligence
- MTP speculative decoding: a measured +40% on this dense 27B, and zero on a MoE
- The catch: a small quantization tax, and it's not a coding agent
- Takeaways
- Running it yourself on one card (optional — skip it and you've still got the point)
- Also in this series
TL;DR
Huihui-ThinkingCap-Qwen3.6-27B-abliterated is the free, uncensored local model I keep running 24/7 on one used 2080 Ti. The ThinkingCap finetune cuts a reasoning model's thinking tokens by roughly half on average (GSM8K 3,175 to 648) with answer quality essentially intact. That barely registers in the cloud. On a slow local card it's the whole game: my box decodes at ~38 tok/s with the model's built-in MTP speculative decoding on (a measured +40%), so 3,175 thinking tokens is an ~84-second wait and 648 is ~17 seconds, same answer. I run the Q4_K_S GGUF (~16 GB) at 192K context via a 4-bit KV cache with the model's built-in MTP speculative decode, landing near 21 GB on the 22 GB card.
In plain English: a free local model that thinks in fewer words
Modern reasoning models "think out loud" before they answer. They write a scratchpad, sometimes hundreds of words of it, then give you the answer. It's genuinely useful on hard problems. It's also wasteful: on an easy question the model can burn a few hundred words of scratchpad to arrive at "42."
ThinkingCap is a version of an open model that was taught to stop thinking once it has enough. Same answers, about half the scratchpad. The people who trained it measured this carefully, and the quality basically holds.
Here's why I care on my own hardware. My computer runs the model on a single old graphics card, which is slow. Every word the model writes costs me time. Cut the thinking in half and I wait half as long for the same answer. In a datacenter this is a rounding error. On a used card in my closet, it's the difference between waiting a minute and a half and waiting twenty seconds.
If you have a single 24GB card at home — a 3090, a 4090, or a modded 2080 Ti 22G like mine — and you want a free open-source model to run on it, you're spoiled for choice. But the one I actually keep running 24/7 is this 27B. It's free, it almost never refuses, and it's fast enough to actually use because it doesn't over-think. Of the free open-source models that fit that VRAM budget, it's the best balance of speed, quality, and being uncensored that I've found. Here's why.
What it is: three layers stacked on Qwen 3.6 27B
The model I run is Huihui-ThinkingCap-Qwen3.6-27B-abliterated, and it's the sum of three transformations stacked on Qwen's base model. Everything in the chain is Apache-2.0.
Qwen/Qwen3.6-27B— the official base, a multimodal 27B model.bottlecapai/ThinkingCap-Qwen3.6-27B— a popular efficient-thinking finetune (12K downloads, 487 likes) that cuts the model's thinking tokens with its answer quality broadly intact.huihui-ai/Huihui-ThinkingCap-Qwen3.6-27B-abliterated— the abliterated version, with the refusal direction removed from the weights.mradermacher/Huihui-ThinkingCap-Qwen3.6-27B-abliterated-i1-GGUF— the imatrix GGUF quantizations. I run the Q4_K_S build, about 16 GB on disk.
Each layer does one job. The base gives you the raw capability. ThinkingCap makes it efficient. Abliteration makes it stop refusing. The GGUF makes it fit on a consumer card. Two of those layers are the reason it earns a permanent seat instead of an API call, so they get a section each.

ThinkingCap cuts thinking tokens ~50%, not decode speed
Reasoning models emit a "thinking" block before the answer — an internal scratchpad the model reasons in before it commits. The failure mode ThinkingCap targets is over-thinking: hundreds of tokens of scratchpad on a question that needed twenty. It's a minimally-invasive finetune — curated problems, current best-practice training recipes — that teaches the model to stop once it has enough. On average it cuts thinking tokens by about half, and in the best cases by over 90%, with answer quality essentially preserved.
The table shows thinking-token counts; lower is better. Answer quality barely changes.
| Benchmark | Base thinking tokens | ThinkingCap | Reduction |
|---|---|---|---|
| GSM8K | 3,175 | 648 | 74.1% |
| GPQA-Diamond | 10,777 | 3,351 | 67.8% |
| MMLU-Pro | 3,455 | 1,290 | 53.7% |
Those percentages are ThinkingCap's reported average per-question reduction, not the ratio of the two column means. The number that keeps it honest: on GPQA-Diamond, cutting the thinking by two-thirds moved accuracy from 85.5% to 83.8%. So it isn't buying the token savings by getting dumber. It's cutting the part that was never load-bearing.

On a slow local card, half the thinking tokens is half the wait
This is the whole reason I run it, so let me be concrete. Your reasoning model's wait time is, roughly, the number of tokens it emits divided by how fast your card decodes. ThinkingCap doesn't touch the second number at all. It changes the first.
My box is one 2080 Ti running the Q4_K_S build with MTP on, and it decodes at a measured ~38 tok/s. Take the GSM8K row. The base model's 3,175 thinking tokens at 38 tok/s is about 84 seconds of waiting. ThinkingCap's 648 tokens is about 17 seconds. Same answer. The card is doing the exact same math per token at the exact same speed — the model just decided to write a fifth as much.
Here's a live query from the running server. I asked it a probability question: draw 3 balls without replacement from a bag of 12 red + 8 blue, all three red, give me the fraction and the decimal. It answered 11/57 ≈ 0.1930 — correct — in a clean block, 1,060 total tokens. That's what "fast enough to actually use" feels like on a single used card. Double the thinking and you're staring at a spinner.
In the cloud this doesn't matter. At hundreds of tokens per second the scratchpad is invisible and nobody optimizes for it. Flip to a slow local card and the calculus inverts: the tokens the model chooses to emit are the dominant cost, and cutting them is the single biggest lever you have that isn't "buy a faster GPU."

The abliterated layer removes the refusal direction, not the intelligence
The second finetune I lean on is the abliteration. huihui-ai's version removes the refusal direction from the weights, so the model doesn't self-censor. It's worth being precise about what that does and doesn't do: it doesn't make the model smarter or dumber, and it leaves ThinkingCap's efficiency untouched. It only removes the reflex to say no.

I want the uncensored version specifically because this is a seat in a multi-model debate council I run locally — for research, for drafting, and for the class of questions I don't want a model lecturing me about before it answers. A free local seat that reliably gives me its actual best guess is more useful in that role than one that occasionally declines.
Whether you want to run an uncensored model at all is your own call, and it should be a deliberate one. I'm describing the seat I chose, not making the choice for you.
MTP speculative decoding: a measured +40% on this dense 27B, and zero on a MoE
MTP isn't a spec-sheet feature here — I A/B'd it on this card. With speculative decoding off, the model decodes at about 27.6 tok/s. Turn on MTP (n=5, p=0.75) and it jumps to about 38.6 — a measured +40%, with draft acceptance around 90%. Same model, same card, 40% more speed for free, because the draft head ships inside the checkpoint (the GGUF carries one MTP layer and four nextn tensors); you never load a separate draft model.
The interesting part is where it doesn't help. I ran the same trick on a 295B MoE (Hy3) and got no net gain. The likely reason is architectural: a MoE can route consecutive tokens to different experts, so the tokens MTP guesses ahead may land on different weights and the batched verify has less to amortize. A dense 27B runs every token through the same weights, so speculation has a clean shot. I won't call dense-versus-MoE a universal law — speculative decoding on MoEs is an active research area — but across my two boxes it's the cleanest explanation for why the same head paid off here and not there.

The catch: a small quantization tax, and it's not a coding agent
Two things I'd want to know before giving this model a permanent seat.
There's a small compounding penalty. ThinkingCap at full precision already gives up a little on the hardest questions — GPQA-Diamond 85.5% to 83.8%. On top of that I run Q4_K_S and the abliterated weights, which are two more approximations. For daily chat, reasoning, and small tool calls it's invisible. But this stack will not beat a full-precision big model on the hardest knowledge questions, and you shouldn't ask it to. If you want less of that tax, run a Q5 or Q6 GGUF instead — you pay for it in VRAM.
27B is not a large-scale coding agent. Don't misread that — Chinese-language arithmetic, strict JSON schema, native tool-calls, and handing it a broken Python script to run and fix all pass my automated tests, and it perfectly recovers a needle from a 51K-token context. What it can't handle is large, multi-file, sustained agentic work in a real repo, which goes to bigger models in my fleet, not to this one. I benchmarked its bigger MoE sibling, Qwen 3.6 35B-A3B, at 48.33% on SWE-bench Lite (covered separately in Part 24) — but that's a different, bigger, hungrier model, not this one. ThinkingCap-27B's seat is "answer fast, don't refuse, always on." It is not "refactor my whole project."
Takeaways
Where the time went. I started by treating ThinkingCap as "a faster model." I measured tok/s, expecting the finetune to have sped up decoding, and found nothing special — the throughput is identical to the base model. That's the trap. The win isn't faster tokens, it's fewer tokens. Same speed per token, a fifth as many tokens, so a fifth of the wait. I spent longer than I should have looking for a speedup in the wrong place.
Reusable diagnostic. Pick a local model by "tokens emitted per answer" times "seconds per token," not by parameter count or tok/s alone. Everyone quotes those two, and they miss a whole axis: how much the model chooses to write. Efficient-thinking is a neglected third dimension of local model selection, and the slower your card, the more it dominates the other two.
The general principle. On your own machine, compute often isn't the bottleneck. It's the few hundred tokens the model decides to think. Optimize the token count and you optimize the wait — no new hardware required.
Running it yourself on one card (optional — skip it and you've still got the point)
The main points are above; this section is for anyone who wants to actually run it. I use mradermacher's i1-GGUF, the imatrix Q4_K_S build (~16 GB). Here's the real command under llama.cpp's llama-server — swap the host/IP for your own:
llama-server \
-m Huihui-ThinkingCap-Qwen3.6-27B-abliterated-i1-Q4_K_S.gguf \
--host 0.0.0.0 --port 8080 \
-ngl 99 \
-c 196608 \
-ctk q4_0 -ctv q4_0 \
-fa on \
--jinja \
--spec-type draft-mtp --spec-draft-n-max 5 --spec-draft-p-min 0.75
The flags that matter:
-ngl 99puts all layers on the GPU. A 27B at Q4_K_S fits with room to spare on 22 GB.-c 196608is a 192K context. It only fits because-ctk q4_0 -ctv q4_0compress the KV cache to 4-bit — at full precision that much context would blow past the card. (With MTP on, a single card tops out around 217K; the full native 256K needs MTP off, so I run production at 192K for margin.) The whole thing lands around 21 GB used on the 22 GB card.-fa onturns on flash attention;--jinjauses the model's chat template.--spec-type draft-mtp --spec-draft-n-max 5 --spec-draft-p-min 0.75turns on the built-in MTP speculative decoding from earlier — this is where the +40% comes from.
One Turing gotcha: the 2080 Ti is Turing architecture (sm_75), and prebuilt llama.cpp binaries don't always include that compute capability. If yours doesn't, the CUDA backend won't load, so you'll have to compile your own build with sm_75 in the arch list (a cuda75 build). This is the general rule for old cards: you can't dodge the compile step. Budget an evening for it once, then you're done.
Also in this series
- Part 1: What Quantization Algorithms Actually Do — from Q4_K_M to TurboQuant, the mechanism without the equations.
- Part 2: TurboQuant KV Cache Benchmark on GX10 — measured numbers for a 3-bit KV cache.
- Sibling: Where Qwen 3.6 35B Loses on SWE-bench Lite — this model's bigger MoE relative, put through a coding-agent benchmark.
FAQ
- What is Huihui-ThinkingCap-Qwen3.6-27B-abliterated, and why run it locally?
- It's a stack of three transformations on top of Qwen 3.6 27B, all Apache-2.0: ThinkingCap trims the model's thinking tokens by roughly half, and huihui-ai's abliteration removes the refusal direction so it won't self-censor. I run the imatrix Q4_K_S GGUF (~16 GB) 24/7 on one used 2080 Ti as a free, uncensored seat in my local model council — for research, drafting, and questions I don't want lectured at. Whether you want an uncensored model is your own call.
- How much faster is ThinkingCap on a local GPU if decode speed doesn't change?
- Decode speed is identical; the model just emits fewer tokens. On GSM8K the base model spends 3,175 thinking tokens and ThinkingCap spends 648 for the same correct answer. With its built-in MTP speculative decoding on, my single 2080 Ti decodes at about 38 tok/s (a measured +40% over the ~28 tok/s baseline), so that's roughly an 84-second wait versus a 17-second wait. In the cloud at hundreds of tok/s you'd never feel it. On a slow local card, fewer thinking tokens is the whole game.
- Can I run Qwen 3.6 27B on a single 2080 Ti (22GB)?
- Yes. I run the Q4_K_S GGUF (~16 GB) under llama.cpp's llama-server with all layers on the GPU, a 192K context that fits only because the KV cache is compressed to 4-bit (`-ctk q4_0 -ctv q4_0`), flash attention on, and the built-in MTP speculative-decode head for a little extra speed. It lands around 21 GB used on the 22 GB card. One catch: the 2080 Ti is Turing (sm_75), so you likely have to compile your own CUDA build.
Read next
- 2026-04-15[LLM Deep Dive] What Quantization Algorithms Actually Do: From Q4_K_M to TurboQuant
How does Q4_K_M fit a 14B model into 4 bits without ruining it? Not by 'cutting off 75%' — but through three layers: K-quant super-blocks, TurboQuant random rotation, and a 1-bit JL sign sketch. A mechanism walkthrough without the equations.
- 2026-03-30[Benchmark] TurboQuant on GX10: Is 3-bit KV Cache Compression Actually Lossless?
Real benchmark numbers for Google's TurboQuant on a GB10/SM121 (DGX Spark) — actual compression ratios, Qwen2.5-3B accuracy validation, and why Qwen3.5-35B's hybrid attention architecture makes things complicated.
- 2026-06-25[Just for Fun — Advanced] Quantizing the Draft Cache Backfired — A Counterintuitive Look at Qwen MTP (f16 ran 34% faster than q4)
Quantizing the main KV cache to q4 to save memory is fine. So I quantized the MTP draft cache too — it's just a little draft, surely a free win. It wasn't: q4 draft cache ran 29.6 tok/s, the un-quantized f16 ran 39.7, and f16 used less VRAM on top of that. The draft cache is one of the few places where quantizing is a net loss — here's the triple penalty.
- 2026-07-21[Junk-Tier Big Models #1] Running a 119B MoE at 74 tok/s on Three 2080 Tis
A US$1.6k junk EPYC + 3× 2080 Ti 22G box (66G VRAM) runs a quantized 119B MoE at 74 tok/s. Expert offload to RAM costs about 2.4× decode — plus a multi-card OOM gotcha.
Don't miss the next one
Subscribe, and you won't.
One-click unsubscribe anytime.