Qwen 3.8-27B on Four 3090s: What a Local Frontier Actually Looks Like

We run Qwen 3.8-27B in BF16 on 4×RTX 3090s. What changed over 3.6, how it stacks against Muse Glimmer-30B, GLM 5 and Gemma 4 31B, and where frontier models still win — with benchmarks and footage.

▮ WORK IN PROGRESS -- this research post is being developed in public. The content design below is approved; the full article and its interactive visualizations follow.

The machine this post was written on

Before the model, the box. Everything in this post — including the words you are reading — was produced by a model that lives on four second-generation consumer cards in the rack next to this desk.

The box is 4× RTX 3090: 96 GB of GDDR6X in total, no ECC, no NVLink, no enterprise support contract. It is the most common form of "big local memory" there is — the 3090 was always $1,500-ish, and four of them have been the de-facto prosumer standard for exactly the reason this post exists: they get you a full-precision 27-billion-parameter model with room to spare.

What runs on it is deliberately boring. The serving stack is our own configuration repo: vLLM 0.23.0 with FlashInfer, tensor-parallelism across all four cards, BF16 weights, FP8 KV cache, 262K context, and Multi-Token Prediction (MTP) speculative decoding with 3 draft tokens. The repo's readme puts the design philosophy in one line: one thing — serve a 27B Qwen in BF16 on 4× RTX 3090.

The 4x_RTX3090_qwen3.8-27b configuration repository readme showing serving flags, requirements, and benchmark tables
Our 4x_RTX3090_qwen3.8-27b repository — the complete recipe: install, systemd unit, launch flags, and measured throughput. Nothing inside is exotic.

Why the 27B class just crossed a line

For two years the honest rule was: 96 GB runs a 32B model quantized, or a 70B model heavily quantized. Full precision was the API's privilege. That rule quietly broke. The 27B skeleton is now served at BF16 — the model's native precision, zero quantization — at ~25 GB per card, while leaving the other 90+ GB for a 262K-token KV cache (even after the FP8 compression) and concurrency. In other words: "local" no longer implies a quality tax, at least for the dense frontier of 2026.

96 GB
VRAM, 4× 24 GB RTX 3090
BF16
Weights — model's native precision
FP8
KV cache only (the one concession)
262K
Context held in cache (1M via YaRN)

The one concession in the whole stack is the KV cache quantization, and even that is a memory decision, not a quality one: long-context agent sessions generate enormous KV tables, and FP8 KV halved their footprint for a precision difference that is below the model's own benchmark noise. If you are deciding between this box and the API, the math section is where the argument gets concrete.

What changed: 3.6 → 3.8

The easy part of the story: nothing. Same skeleton. 64 layers, 27B parameters, hidden dimension 5120, a hybrid of Gated DeltaNet linear attention (48 V / 16 QK heads) interleaved with full Gated Attention (24 Q / 4 KV heads), and the MTP head for speculative decoding. If you are already running 3.6, the weights slot into the same box, the same flags, the same memory footprint.

Qwen3.8-27B Hugging Face model card highlights section
The Qwen3.8-27B model card — the five headline changes. Note the last one: this is now a video-understanding model, not just an image model.

The delta that matters is in post-training and control surface. Five things, from the card:

  • reasoning_effort control. Thinking is on by default — but you can now dial the depth: xhigh, medium, low, or off per request. For an agent fleet this is the single most useful knob in the release: you stop paying xhigh-level tokens on trivial rewrites.
  • preserve_thinking, default on. Reasoning blocks from prior turns are retained, which the card points at directly: decision consistency across long agent runs, and better KV-cache reuse because the model stops re-deriving settled context. For a 262K-context box, that is a compounding efficiency win.
  • Broader harness compatibility. "More popular harnesses and dev tools" is understatement-grade corporate language for "our VS Code agent and OpenWebUI stopped fighting the formatting." Section two harnesses is the proof.
  • Native video understanding. The vision path went from images to hour-scale video, with a documented recipe to lift the frame-sampling ceiling for long clips.
  • The score jump. On Qwen's own table, DeepSWE 1.1 goes 13.3 → 42.2. That is not a version bump, that is a different product wearing the same weights-shape.
Qwen3.8-27B Hugging Face model card model overview with architecture layout and context length
The architecture is deliberately unchanged from 3.6 — the Hybrid Layout block, the MTP head, 262,144 native context (extensible to 1,000,000 via YaRN). The upgrade is what was poured into that same vessel.

Running it: BF16 on four 3090s

The numbers from the box, not from the press release. All from the configuration repo, all measured on Ubuntu 24.04, vLLM 0.23.0 + FlashInfer, TP=4.

~5 ms
Time to first token (warm, prefix-cached)
74.6 tok/s
Steady generation @ 100 tok output
74.0 / 74.7
tok/s @ 500 / 1,000 tok output
21.9–24.6 GB
Per-GPU occupancy

Three of those rows deserve attention. First-token latency of ~5 ms on a warm session is faster than the human blink between two keystrokes — the model feels like a very fast autocomplete, which matters more than headline tok/s for an agent loop that hammers the API hundreds of times a task. Throughput is flat across 100→1,000 token outputs (74.6 → 74.0 → 74.7), meaning the MTP drafter is doing its job and long generations do not degrade. And per-GPU occupancy stays under 25 GB: with VLLM_GPU_MEM 0.90 and VLLM_MAX_SEQS 2, the four cards sit comfortably under cap even with a full 262K-cache session live.

The quantization callout, in the open

Quantization is a trade, not a free lunch. An int8, AWQ, or 4-bit build of a 27–30B model runs in 16–24 GB — one card, a laptop, a DGX Spark. But every one of those numbers buys VRAM headroom at the cost of the model. Meta publishes the honest one for the class: Muse Glimmer-30B reports 0.2–1.0% benchmark degradation at 4-bit. Small. Possibly non-trivial for the agentic long-horizon tasks where the frontier of the whole class lives. We run BF16 on purpose, and that is the entire point of having 96 GB: the model at its native precision, at the price of consumer parts. If your box has 24 GB, the trade is yours to make — just know what the 4-bit number is costing you.

Prefix caching is the other quiet hero. Agent sessions are heavily re-prefixed — system prompt, repo context, prior turns — and with caching on, the repeated prefix costs ~5 ms instead of seconds. This is why the agent work in Sections 6 and 7 feels the way it feels.

The local class of August 2026

"Best model that fits in 96 GB" is a claim about a class, so here is the class — the other models a single prosumer box can hold, and where each one wins.

Muse Glimmer-30B: the one to beat

Meta Superintelligence's Muse Glimmer-30B (August 2026) is the release that makes this post honest rather than promotional — Qwen's own 3.8 card puts it in the comparison table as the main event. It is a dense ~29.6B with a 1.8B ViT-G/14 vision encoder, 52 layers, 131K+ context, Apache 2.0, and it is designed around consumer cards: the headline is that its 4-bit build fits 24 GB with the quantization cost explicitly measured (0.2–1.0%), and a DFlash 16-token speculative drafter takes it from 74.9 to 233.4 tok/s on an RTX 5090 — a 3.1× speedup out of the box.

On scores, it is genuinely competitive in parts of the table — SWE-bench Verified 76.0 is the best local number in the class — while sitting well behind on long-horizon agentic work: Terminal Bench 2.1 at 51.7 versus Qwen3.8's 73.0, and HLE at 22.0 versus 30.8. One-liners for the rest of the class: GLM 5 punches far above its weight on the official SWE-bench Verified leaderboard (72.8, high-effort) but does not report the full agentic table; Gemma 4 31B is Google's single-card 31B, strong on reasoning benchmarks, no public agentic-coding numbers for the 31B cut; GPT-OSS-120B reminds you why 120B still wins raw code on the leaderboard (26.0) while remaining the wrong size for a 96 GB box.

The shape of the class: Glimmer-30B wins the footprint game — 24 GB at 4-bit, one card, 3.1× drafted speed. Qwen3.8-27B wins the capability game at full precision — 262K context (2× of Glimmer's 131K), native video input, and substantially higher agentic-coding scores in every row both publish. If your hardware is one 24 GB card, Glimmer is the model. If you have the 96 GB, 3.8 at BF16 is the model.

The software-benchmark gap

So where does a model that lives in a rack actually stand against the closed frontier? This is the chart the whole post builds toward: agentic coding, the benchmark family that separates a model from an agent.

Read the chart left to right and the story writes itself. On SWE-bench Pro — the hardest agentic-coding benchmark in the family, real-world multi-file SWE tasks from major repos — Qwen3.8-27B at 61.7 is not just the best local model in the table, it is ahead of the closest frontier anchor shown (Opus 4.6 Max at 53.4) by 8.3 points. On LiveCodeBench v6, at 90.3, it leads the whole column including the frontier. On Terminal Bench 2.1 it is second to Opus 4.6 Max (78.2 vs 73.0) and ahead of the prior generation by nearly a full 10 points.

Now the honest half of the picture, which we would be doing you a disservice to skip:

Where the frontier still wins — three places. First, on the official SWE-bench Verified leaderboard (bash-only scaffold, the field-standard measurement) the closed flagship tier reads: Claude 4.5 Opus (high) 76.8, Gemini 3 Flash (high) 75.8, Claude 4.6 Opus 75.6, GPT-5.2 Codex 72.8, GLM 5 (high) 72.8, Gemini 3 Pro (high) 69.6 — against 77.2, the best Qwen number in the class (published on the 3.6 card, on Qwen's own harness; the 3.8 main table reports Pro, not Verified). On this benchmark the gap is inside the noise — that is the headline, and it is real. Second, on the hardest long-horizon rows the frontier anchor still pulls away: Terminal Bench 2.1 (78.2 vs 73.0), NL2Repo (47.6 vs 42.3), Humanity's Last Exam (40.0 vs 30.8), GPQA Diamond (91.3 vs 89.2). That is where "frontier" still means something. Third, every number in this section — including Qwen's own — is vendor-reported on that vendor's preferred harness. Cross-lab, cross-harness tables flatter everyone sitting in them; treat them as directional, not verdicts, and expect both columns to shift a full bar in one quarter.

What the chart is saying, net-net: the 27B class in August 2026 is within frontier range on agentic coding, occasionally ahead on specific rows, and the remaining gap is shrinking at the pace of one model release per quarter on both sides. That is a different sentence than it was twelve months ago.

Two harnesses, one platformer

Benchmarks are what a model says it can do. This section is what it actually did, on the tasks practitioners actually run — the same one-line prompt, through two different agent harnesses, recorded.

The prompt, verbatim, in the VS Code agent: Create a small 2d platformer in a single html. The model chip in the harness reads qwen3.8-27b FP16 · Extra High. That is the whole configuration. What follows is the agent thinking, planning, and writing a complete, working, self-contained platformer — one HTML file, canvas rendering, physics, a win state — then running it and iterating until it plays.

The VS Code agent generating the platformer from the one-line prompt. First 15 seconds of the working session — plan, file scaffold, first render logic.

Same session, later: the game plays. "Pixel Peak," a tiny platformer, runs to its flag, and the win screen shows up on its own.

"Pixel Peak" played out in the VS Code harness — the run through to the YOU WIN! you reached the flag! screen. The entire game is one local HTML file served on the box.

Now the A/B. The same task re-run in OpenWebUI — a different harness, a different rendering context, no IDE. The model ships "Ember Peak," a fully styled variant (torch-lighting, summit finish) that plays clean to a SUNSET CROWNED win in 0:15.

"Ember Peak" in the OpenWebUI harness — the B-side of the A/B, scrubbed to the win screen. Two harnesses, one model, two genuinely different games from the same one-line ask.
Why the harness matters as much as the model. The 3.8 card's "downstream compatibility" bullet reads like marketing until you've watched a platformer ship. Both harnesses — an IDE-integrated agent and a general web UI — produced complete, playable, bug-free single-file games from a one-liner, with zero hand edits. In the 3.6 days, roughly one of the two harnesses would need fixing. That compatibility surface is where the "reasoning_effort + preserve_thinking + harness support" trifecta of Section what changed becomes visible, and it's the difference between a benchmark row and a workflow.

The point is not "the model made a game." The point is: on the task class a practitioner actually runs daily — "write me a small tool / page / thing, end to end, in one file" — the local model on this box is operating at the level the frontier API does, and the harness choice now matters more than the model choice.

The hybrid locomotive simulators

The platformer is the demo. The locomotive is the artifact. This is what the box can now build: not a game, but an engineering instrument.

Over a sustained working session — plan, architecture, physics, UI, iteration, across many agentic turns — the model produced a self-contained web page simulating a HE-7531 hybrid-electric locomotive: a 6.4 MW continuous diesel prime mover, a 2.1 MWh battery pack, 94% regenerative-braking energy capture, and 3.2 MW of dynamic-braking resistor dissipation, all running live in the browser with no backend. Alongside it, a UNIT 4471 classic diesel-electric variant (16-cylinder prime mover, no battery) for side-by-side comparison. The dashboard mode — "LIVE SYSTEM CUTAWAY" — is an animated system diagram with live gauges: torque, battery state-of-charge, regen-current, resistor dissipation, all updating in real time from the simulation state.

The HE-7531 in live cutaway — the animated system diagram, the gauges, the simulation running. This whole page was generated by the local model; it is a static HTML file.
The hybrid locomotive simulators landing page showing the two engine variants
The live simulators — landing view with both engine variants. Open the HE-7531 and drive it.
The HE-7531 hybrid simulator interactive dashboard
The HE-7531 interactive, open: the control panel, the live gauges, the cutaway. This is not a screenshot of a game — it is an engineering model the agent built and debugged to working order.

What this artifact proves, in the language of this post: a 27B model at native precision, on 96 GB of second-hand consumer VRAM, is capable of end-to-end generation of a complex, multi-component, physically-grounded interactive system — planning, writing, testing, iterating, shipping — without ever leaving the box. The SWE-bench Pro 61.7 in Section five is not an abstraction; the HE-7531 is the receipt.

What we run it on

The proof of a local model is not a demo. It's what it does when it's in production, on the work that's actually on the plate.

This site's research pipeline is the first production load. The create-research-post skill — the two-gate human-in-the-loop workflow that produced this very post, including the research, the code, the media re-encoding, the CDN uploads, and the validation suite behind each gate — is driven by the local 3.8 as its primary reasoning engine. The model writes the post, the agent runs the build, the human approves the gates. That loop is the "agent-first" part of the business model, and it's running on the rack, not on an API.

The second production load is the agent-first marketing agency this site is the research arm of: client site work, research, deployment, and iteration, all driven by local 3.8 agents through the same harnesses shown in Section two harnesses. The concrete examples: the VS Code agent building and shipping single-file web tooling; the OpenWebUI harness driving multi-turn research and content sessions; the MTP-served model keeping first-token latency under 5 ms so that the agent loop — which makes hundreds of tool calls per task — feels like it's talking to a co-worker, not an API.

The production test is the harness test. Benchmarks (Section five) and demos (Sections 6–7) both matter, but the production test is: can the model drive a real, multi-step, multi-tool workflow reliably, on the harness the team actually uses, at a latency that doesn't stall the work? For us, the answer has been yes for the duration of this deployment, on every one of the three workloads above. That is the evidence the "scoped claim" in the thesis is resting on — and it's the evidence a leaderboard row can't give you.

The math of staying local

The objection is always the same, and it deserves a direct answer: why not just call the API?

The honest cost picture for a 4× 3090 box at our actual agent volume:

~$7–8k
Box TCO (4× 3090 + chassis, amortized over 3 yrs)
~2.5 kW
Draw at full generation load, all four cards
~5 ms
First token, warm, local
0
Per-token cost, at any volume

The API alternative, at comparable quality and comparable volume, scales linearly with every token the agent fleet generates — and agent workloads are not "chat" volume, they are hundreds of prefill-heavy tokens per tool call, multiplied across parallel sessions, multiplied across the workday. At the scale of a research pipeline plus an agency's daily agent traffic, the API bill is not a rounding error; it is a line item that compounds with the business. The box stops compounding after purchase. The ~2.5 kW draw is the real ongoing cost, and at our electricity rate it is a fraction of what the API line item would be at the same volume.

Two properties of local that no API price can match, and that are not about money:

  • Data never leaves. Client work, research corpora, internal workflows — none of it crosses a network boundary to a third party's inference fleet. For an agency handling client data, that is a contractual and liability property, not a preference.
  • Latency is a physical property, not a pricing tier. First token at 5 ms means the agent loop's thinking time is the model's thinking time, not a network round trip. That is why the harnesses in Section two harnesses feel the way they do — the round trip has been eliminated, not optimized.

The honest counterweight, before anyone files an objection: the frontier still wins on the hardest single-shot reasoning tasks (Section five's warning). For those tasks, the API is still the tool. The local box is the tool for the volume workload — the 95% of agent traffic that is tool-calling, file-editing, and long-context reasoning where the quality gap has closed to inside the harness noise. That split is the real answer to "why not just use the API": you do, for the 5%.

Bottom line

Qwen3.8-27B is, at the moment, the strongest general-purpose model that fits in roughly 96 GB of consumer GPU memory — and the claim is earned, not asserted.

The evidence map, mapped to the sections:

  • The delta (Section two): same skeleton, but reasoning_effort, preserve_thinking, harness compatibility, and video input, with DeepSWE 1.1 jumping 13.3 → 42.2. A version bump would not do that.
  • The class (Section four): against Muse Glimmer-30B, GLM 5, and Gemma 4 31B, Qwen3.8-27B wins on agentic-coding rows and context; Glimmer wins on footprint. The class is real, and it is competitive.
  • The gap (Section five): on the official SWE-bench Verified leaderboard the frontier keeps a 3–6 point lead; on SWE-bench Pro the local model is ahead of the closest frontier anchor shown in the same table. The gap is real and it is shrinking.
  • The footage (Sections 6–7): two harnesses, one prompt, two playable games; and a full engineering simulator built end-to-end, in production, on the box.
  • The math (Section nine): volume workload at zero per-token cost, data that never leaves, latency as a physical property — with the honest 5% that still deserves the API.
The scoped thesis, restated: if your box has 96 GB of consumer VRAM and your workload is agentic volume — tool-calling, file-editing, long-context, single-shot-reasoning-light — Qwen3.8-27B in BF16 is the model to run, at the moment, in the class of August 2026. The frontier gap on the hardest tasks is real, and it is a moving target in both directions. The honest caveat, and the one worth underlining: next quarter's 30B will probably make today's 27B look like the 3.6. The box doesn't change; the model does, on a quarterly cadence, in the same 25 GB per card, at the same $0 per token.

Key Sources and References