A 27B Model Fit on an 8 GB GPU. It Was Slow.
Qwen3.8-27B Q3_K_S loaded on an RTX 3070. VRAM used 7,435 of 8,192 MiB. Decode ran 2.07 tok/s. Fit on 8 GB is not a usable rate.
I wanted one fact from the 8 GB card I use as the sizing desk truth node. Would Qwen3.8-27B load at all? It did. Then it wrote 64 tokens at 2.07 tokens per second. That is a fit. It is not a model I would sit in front of.
Short answer: Fit and usable are different measurements. On 2026-08-15, Unsloth Qwen3.8-27B-GGUF:Q3_K_S used 7,435 of 8,192 MiB on an RTX 3070 and finished a 64-token generate in 47.042 seconds. Decode ran 2.07 tok/s. I would not put an interactive coding agent on that row.
Canonical URL: https://bmdpat.com/blog/qwen38-27b-q3ks-8gb-fit-2026

Did a 27B model actually fit on 8 GB?
Yes, at one quant, one context, and one output cap. The host was FLUARMN. The GPU was an NVIDIA GeForce RTX 3070 with 8,192 MiB. The runtime was Ollama 0.32.3. The artifact was hf.co/unsloth/Qwen3.8-27B-GGUF:Q3_K_S, 27.3B parameters, 13,331,322,630 bytes on disk.
I set num_ctx=2048 and num_predict=64. Temperature was 0. The prompt asked when a llama.cpp user should choose GPU-layer offload versus tensor splitting. The model consumed 86 prompt tokens and emitted 64 output tokens, which is the cap, not a finished answer.
VRAM during the run was 7,435 MiB used of 8,192 MiB. Ollama reported size_vram of 5,470,064,474 bytes. After an explicit stop, the card returned to 1,147 MiB used. That last number is why I still unload local models after a test. A fit that never leaves the card poisons the next measurement.
What speed did I get?
The Ollama generate fields, not a review site.
| Phase | Time | Rate |
|---|---|---|
| Load | 0.862 s | n/a |
| Prompt eval | 4.583 s | 18.77 tok/s |
| Decode | 30.913 s | 2.07 tok/s |
| Load + prompt | 5.446 s | n/a |
| Total Ollama | 46.710 s | n/a |
| Wall | 47.042 s | n/a |
2.07 tokens per second is about 0.48 seconds per token. That is not a typing-adjacent rate. Sixty-four tokens took 30.913 seconds of decode. The same wall-clock lesson showed up when I compared tokens per second to the real run time. A rate column can look tidy while the human still waits.
This run also hit the output cap. The 64 tokens are a ceiling, not proof the model finished the job. I treat a num_predict hit as truncated unless the row is a fixed-length rate test.
Why is fit not enough?
I already had a VRAM-before-download rule. Check VRAM fit before you pull the weights. This row is the next check. A model can land inside 8 GB and still be the wrong tool.
Q3_K_S is an aggressive quant. Context was 2,048, not a long agent window. Output was capped at 64 tokens. The 5090 leg never ran, because that host refused SSH during the pass. I am not inferring a 32 GB number from an 8 GB number.
If I published "27B runs on 8 GB" and stopped there, a reader would expect a usable desk. The receipt says otherwise. Fit answers "did it load." Usable answers "would I wait for this on a real task." Those are two rows.
What do I record from a fit test now?
Every first-party fit row carries the same fields I wrote down on 2026-08-15.
- Exact model tag and digest. This one was
1555ef967520ea544f80aef940e52bc430878d2ee164d4282d71cddc1e0de2d2. - Host, GPU, and total VRAM. Not "an 8 GB card." The 3070, 8,192 MiB.
- Runtime and version. Ollama 0.32.3 here.
num_ctx,num_predict, temperature, and the prompt itself.- Prompt tokens, output tokens, and whether output hit the cap.
- Load, prompt-eval, decode, and wall times, plus the two rates Ollama computed.
- VRAM during the run and VRAM after an explicit unload.
Skip field 7 and the next model inherits a dirty card. Skip field 5 and a truncated row looks complete. Skip the digest and you cannot prove which file you timed.
When would I use this 27B on 8 GB?
For a one-shot fit check. For a batch job I can leave overnight. Not for an interactive coding agent. Not for a writer I have to watch. Not as a 5090 substitute. The 5090 measurement is still missing, and this row does not stand in for it.
The useful product of the run is the bound. On this host, this quant, this context, and this cap, Qwen3.8-27B fits and crawls. That is enough to keep it out of the live desk until a faster card, a smaller quant path, or a shorter model proves a better rate.
Accompanying prompt
What the prompt does: This prompt scores a local LLM fit test so a loaded model is not treated as a usable model.
Copy/paste this prompt:
Copy-ready prompt
Paste the exact block into your coding agent.
No article chrome, no footnotes, no formatting drift.
This prompt and every other one we publish live in the free prompt library.
Copy the block above.
Get the next measured local AI run in the 5090 Reports email list.
Get the Local AI Field Kit
Four copy-ready tools now, then one evidence-backed Local AI Lab Note on Friday when there is something worth sharing.
Get the requested artifact now, then at most one evidence-backed Local AI Lab Note on Friday when there is something worth sharing. One-click unsubscribe. No sponsored placements. Privacy.
Patrick Hughes
Building BMD HODL — a one-person AI-operated holding company. Nashville, Tennessee. Twenty-Two agents.
More writing
- 4 min
My Local LLM Writer Failed Its Own Word-Count Gate
Gemma 4 26B wrote a 535-word draft against a 550-word floor. The gate blocked it, both rescue engines were down, and no bad post shipped.
- 5 min
Unload Local LLMs After Every Test
A local model test is not over when text appears. I unload the model, read idle VRAM, and record the result before I start another run.
- 5 min
How I Benchmark Local LLMs Before I Trust Them
A local LLM benchmark should end with a decision. I record task quality, tokens per second, VRAM, power, and failure state before I add a model.
- 5 min
How I Test a 30B Local Model Before I Load It
A 30B local model can fit on paper and still fail the job. This test plan checks memory, tool use, speed, and repeatability first.
- 5 min
When a 4B Local LLM Beats 26B on One Task
On one RTX 5090 workshop, a 4B model beat a 26B model on speed while both passed four code checks. Here is the model-selection rule I kept.