← Back to the full write-up on hijoseromero.com
One model, Qwen 3.8-27B, five sizes. Full precision down to 2-bit, plus the exact build most
people get from a default ollama pull. Same four tests, thinking off, tools off, one shot each.
The BF16 result from the head-to-head showdown is the baseline.
| Thinking | Per the official Qwen 3.8 model card, "Qwen3.8 models operate in thinking mode by default." This ladder deliberately runs the model's OTHER official mode, non-thinking instruct, because at local speeds thinking multiplies every answer's time several-fold. Thinking mode got its own dedicated test at the card's official thinking settings: the thinking-dial results page. Verified off in every ladder output here: 0 thinking tokens. |
|---|---|
| Samplers | Identical for all five: the card's exact recommended instruct settings (temperature 0.7, top_p 0.8, top_k 20, presence 1.5). Ollama's shipped defaults (temperature 1.0, top_p 0.95, the card's THINKING settings, since thinking is its default) were overridden to match. |
| The Ollama caveat | Its fairest comparison is the matching Q4 (Unsloth) column, but they are not the same file: Ollama ships Q4_K_M (17 GB), Unsloth ships UD-Q4_K_XL (17.9 GB), different 4-bit quantization recipes. Where their outputs differ, the quant format itself can be the cause, not just the runtime. Differences are expected to be small; only clearly visible ones get called out. |
| Tools | Disabled everywhere. Unsloth: --disable-tools. Ollama: no tools sent, and it
executes nothing server-side. |
| Attempts | One prompt, one shot, no retries, seed 42, 60-minute limit per test. BF16's results are reused from the BF16 showdown run under this same protocol, not re-run. |
A model is just a giant list of numbers, ~27 billion of them here. Quantization only changes how carefully each number is written down. BF16 stores every number with 16 bits, like writing pi as 3.14159265: precise, and fat (55 GB). Q8 uses 8 bits per number (3.1416, you rounded, but barely). Q4 uses 4 bits (3.14, still basically pi). Q2 uses 2 bits ("3-ish", now you are gambling).
Best analogy: the same photo saved at different JPEG quality. RAW (BF16), high-quality JPEG (Q8, nobody can tell), normal JPEG (Q4, fine unless you zoom), and a meme reposted forty times (Q2, blocky, but you still know it is a cat). Rounding billions of numbers means billions of tiny errors; the question this page answers is whether those errors add up to anything you can actually see. Bonus: the "UD" in Unsloth's file names means dynamic, the important numbers keep more bits and the boring ones get squeezed hardest, which is why a good 4-bit beats a naive 4-bit.
| BF16 | Q8_0 | Q4 (Unsloth) | Q4_K_M (Ollama) | Q2 | |
|---|---|---|---|---|---|
| Model file on disk (the GGUF download) | 54.7 GB | 29 GB | 17.9 GB | 17 GB | 10.7 GB |
| Runtime | Unsloth | Unsloth | Unsloth | Ollama 0.32 | Unsloth |
| Thinking | OFF | OFF | OFF | OFF (think:false) | OFF |
| Thinking found in output | none ✓ | none ✓ | none ✓ | none ✓ | none ✓ |
| Generation speed | 8.8 tok/s | 16.8 tok/s | 20.2 tok/s | 18.8 tok/s | 27.9 tok/s |
| Whole exam took | ~58 min | ~28 min | ~24 min | ~27 min | ~17 min |
| Load time | 54.0 s | 34.0 s | 14.0 s | 6.5 s | 14.0 s |
| Peak memory in use during run | 71 GB | 48 GB | 39 GB | 33 GB | 32 GB |
Peak memory = total system RAM in use at the highest point of that model's run (sampled every 5s). This rig has unified memory, CPU and GPU share the same 128 GB pool, so there is no separate VRAM number, this is all of it. It includes the OS and background processes (~9 GB baseline) plus the model weights plus the inference context, which is why it runs higher than the file size.
All five ladder runs, instruct mode, thinking OFF: temperature 0.7 · top_p 0.8 · top_k 20 ·
presence_penalty 1.5 (exactly the
official card's recommended
non-thinking settings) · seed 42 · max output 20,000 tokens · one prompt, one shot, no retries ·
60-min limit per test · tools disabled everywhere (Unsloth: --disable-tools; Ollama: no tools sent,
Ollama executes nothing server-side). Unsloth legs disable thinking via
chat_template_kwargs: {"enable_thinking": false} with a 65,536-token context; the Ollama leg via the
native API's think: false with min_p 0, repeat_penalty 1 and a 32,768-token context. Note: Ollama ships
different sampler defaults (temperature 1.0, top_p 0.95); those were overridden to the settings above so the only
variable is the build and quant, not sampler luck. "Thinking found in output: none" means verified in the outputs,
not just configured. Thinking mode is not on this page at all; it gets its own video with the card's official
thinking settings.
Every token requires reading all the model's weights from memory. At full precision that is ~55 GB per token; this chip's memory bus peaks at 256 GB/s on paper (256-bit LPDDR5X-8000, ~215 GB/s measured in practice), which caps you in single-digit tok/s. Quantization shrinks the gigabytes each token has to read: half the bytes, roughly double the speed. That is the whole ladder: 55 GB → 9 tok/s, 29 GB → 17, 18 GB → 20, 11 GB → 28. The question this video answers is what quality each step down costs.
The yardstick: the average adult reads at ~240 words per minute, and a token is roughly three-quarters of a word, so ~5 tok/s is average human reading speed. Below that, you are waiting on the model. Above ~10 (a fast reader), the text outruns you. For one-shot code like this exam you do not read along at all, you wait for the whole file, so the column that matters is the last one.
| Speed | Feels like | This exam's ~8,000-token answer takes |
|---|---|---|
| ~5 tok/s | Average human reading speed (~240 wpm). The floor of usable. | ~25 min if you could type it at reading speed |
| 8.8 tok/s, BF16 | Just above reading pace. Fine for chat, painful for long code. | 15m 09s |
| 16.8 tok/s, Q8 | Well past any comfortable reading speed. Waiting, not reading. | 7m 56s |
| 18.8-20.2 tok/s, both Q4s | Same league as Q8, a notch quicker. | 6m 50s |
| 27.9 tok/s, Q2 | The daily-driver zone, same speed as my Qwen 3.6. | 4m 46s |
| ~70 tok/s, cloud (Opus) | The frontier-API experience, for scale. | 1m 54s |
My rig uses unified memory, but most people have a gaming card, so here is the fit math. Rule of thumb: you need the model file plus roughly 2-3 GB for the context cache and overhead, all inside VRAM, to get full GPU speed. What happens when it does not fit: Ollama and llama.cpp will not refuse, they split the model, putting as many layers as fit on the GPU and leaving the rest in system RAM for the CPU. Every token still has to pass through every layer, so the CPU-resident slice sets the pace, and even a small spill can cut your speed in half or worse. It still runs, it just quietly stops being fast. (Estimates below are fit math at a moderate context window, not cards I have tested; bigger contexts need more room.)
| Quant | File | VRAM wanted (file + ~2-3 GB) | Fits fully on (examples) |
|---|---|---|---|
| Q2 (10.7 GB) | 10.7 GB | ~13-14 GB | 16 GB cards: RTX 4060 Ti 16GB, 4070 Ti SUPER, 5070 Ti, 5080. Tight-to-no on 12 GB cards (4070, 3060 12GB) unless the context is small. |
| Both Q4s (17-17.9 GB) | 17-17.9 GB | ~20-21 GB | 24 GB cards: RTX 3090, 4090, RX 7900 XTX. Spills on 16 GB cards. |
| Q8 (29 GB) | 29 GB | ~32 GB | 32 GB cards only: RTX 5090. Everything below spills. |
| BF16 (54.7 GB) | 54.7 GB | ~58+ GB | No single consumer GPU. This is unified-memory (or multi-GPU) territory, which is exactly why this rig exists. |
The file only holds the model's weights. At runtime you also need: the KV cache, the model's working memory of everything in the current conversation, it grows with context length (a couple of GB at a moderate context, potentially much more at 32k-64k); compute buffers, scratch space for the math of each token; and the runtime's own overhead (a few hundred MB). That is why "fits" depends on how big a context you run, and why a model that barely fits will suddenly spill the day you paste a long document into it.
Once a model outgrows 24-32 GB there are exactly two options, and they trade in opposite directions. Pro GPUs keep the bandwidth (speed) and charge for it. Unified memory buys huge capacity cheaply per GB, but at a fraction of the bandwidth, and bandwidth is tok/s. Everything fits, it just runs slower per token. That trade is this whole channel's rig story.
| Tier | Memory | Bandwidth (approx) | The deal |
|---|---|---|---|
| Workstation GPUs (RTX 6000-class) | 48-96 GB VRAM | ~800-1,800 GB/s | Q8 and beyond at full GPU speed. Costs as much as a used car. |
| Datacenter GPUs (A100 / H100-class) | 80 GB+ HBM | ~2,000-3,300 GB/s | What the cloud APIs run on. You rent these, you do not buy them. |
| Unified-memory minis (this rig: GMKtec EVO-X2, Ryzen AI Max+ 395, 128 GB) | up to 128 GB shared | 256 GB/s spec, ~215 measured | BF16 FITS, at 8.8 tok/s. Capacity champion, bandwidth is the ceiling. |
| Apple silicon (M-series Max/Ultra) | up to 512 GB shared | ~550-800 GB/s | Same unified idea with more bandwidth, at Apple prices. |
Thinking is Qwen 3.8's default mode and it deserves its own honest test, so it got its own video: Q4 with thinking ON at the card's official thinking settings, across every position of the reasoning dial. It is not on this page because a proper thinking run must use the card's thinking samplers, and mixing thinking and instruct scores on one board would be junk science anyway. The full data lives on the thinking-dial results page.
| Every number in every table above: the raw per-run metrics | BF16 · Q8 · Q4 · Ollama Q4 · Q2 |
| The exact prompts, as plain text | Blockfall · Eruption · The Ledger · Blind Artist |
These are affiliate links. If you buy through them I may earn a small commission at no extra cost to you. As an Amazon Associate I earn from qualifying purchases.