Why 24GB Still Matters — RTX 3090 for Local AI in 2026

Used RTX 3090 cards still offer 24GB of practical CUDA memory, but dual GPUs, KV cache pressure and PCIe…

Why 24GB Still Matters — RTX 3090 for Local AI in 2026

The short version

  • The RTX 3090 remains compelling for local AI because 24GB of VRAM keeps quantized models GPU-resident.
  • Two PCIe-connected cards improved Qwen3.8-27B throughput by 16–35%, while adding memory and communication overhead.
  • Home-lab buyers should measure model fit, KV-cache pressure and concurrency before adding a second or fourth GPU.

The RTX 3090 is an aging space heater with the emotional stability of a Vespa parked in my office. It’s also the local-AI GPU I’d buy tomorrow.

An RTX 5090 is the sensible luxury purchase if your wallet no longer feels pain. The older card gives me something more useful: 24GB of CUDA-friendly VRAM for a serious quantized model and working context.

Controlled Qwen3.8-27B W4A16 tests make the case. A PCIe-connected pair ran 16–35% faster than one card with the same vLLM harness and launcher defaults. Useful? Yes. Double? No. Anyone promising that probably has an enterprise blockchain strategy to sell me.

My buying order is practical: keep the model GPU-resident, leave memory for context, then consider speed and simultaneous users. Current serving work exposes what glossy benchmarks skip: speculative-drafter residency, cache capacity, PCIe communication and first-prefill crashes.

The best local LLM has to stay in memory

For me, the best local LLM is the strongest model that stays within available GPU memory during my actual work. Qwen3.8-27B W4A16 is unusually well documented for this card. I’m judging its serving behavior and agent performance, not crowning it the universal coding champion. The available tests can’t support that, however cool the model name looks in a thumbnail.

Bar chart comparing current figures against their baselines: dual-3090 DFlash2 greedy decode… 474 tok/s versus 432 tok/s, single-stream prose decode on the… 85 tok/s versus 98 tok/s, single-user speculative decode at long… 32 tok/s versus 68 tok/s, steady-state aggregate decode throughput… 1100 tok/s versus 46 tok/s.

VRAM controls serving. Weights take their share; prefill and generation add runtime allocations. The remainder becomes the KV cache, storing the state needed to continue a conversation without rebuilding its history. Every decode step accesses resident weights and cached state. If weights spill into system RAM, PCIe enters the hot path and every token commutes across the motherboard. Then raw GPU speed matters less because the model waits for data. Residency beats benchmark rankings. Sempre.

I relearned this on my machine. With ComfyUI occupying the RTX 5060 Ti’s 16GB pool, Ollama had roughly 150MB available, forcing the 20B language model onto the CPU. It technically worked, like I technically cook when microwaving leftover pasta.

Large unified memory offers another route. On August 25, fully resident gpt-oss:20b generated about 74 tokens per second versus 51 for gpt-oss:120b on the same M3 Max. The larger model remained usable, proving more about memory capacity than any generation badge.

Prompt processing showed the same gap: about 756 tokens per second for the smaller model and 215 for the larger. Time to first token rose from roughly four seconds to six. That Mac is quiet, beautiful and deeply Apple-priced; CUDA still makes the RTX card easier with experimental vLLM serving stacks.

“Experimental” matters. DFlash2, MTP and compressed KV formats change context capacity and output speed. Loading successfully says little about the first giant prefill. I leave headroom because an out-of-memory crash after cloning six repositories feels like dropping the pizza while unlocking the door.

With Ollama, I use the same rule: choose a Qwen quantization that stays fully on the GPU, inspect `ollama ps`, then test my repositories. Ollama simplifies packaging, but its context limits and speculative behavior can differ sharply from patched vLLM.

A second card buys less speed than expected

A second RTX 3090 adds memory and a modest speed bump. Clean doubling belongs in vendor slides.

Tensor parallelism splits model weights and KV state across both GPUs. Each computes part of a layer; an all-reduce combines the results before execution continues. This repeats every layer, putting communication inside generation rather than only at startup. Parallel shard reads and computation create the speedup. PCIe claws some back whenever partial results cross the motherboard. In a home-lab server, slot topology can matter as much as card count.

The controlled Qwen sweep covered one through eight concurrent requests. Despite communicating through PCIe, the pair gained 16–35% over one card. I’ll take it—I just budget for “noticeably faster,” not “twice as fast.”

Speculative decoding affects speed and memory. A drafter proposes future tokens; the target verifies them. Accepting several proposals lets one target-model step release multiple tokens. Rejected proposals fall back to the target’s decision, which the tonyd2wild repository authors call the final authority. DFlash2 uses a separate block-diffusion backbone with candidate-selector codebooks. Those components share VRAM with target weights, reducing KV-cache space. Faster drafting therefore shortens the context runway unless I add memory or cut another allocation.

At the highest tested concurrency, DFlash2 reached 474 tokens per second versus 432 for MTP under identical greedy-decode conditions. That’s aggregate throughput across eight requests, not one user watching tokens fly at espresso speed.

A separate evaluation used 69 agent scenarios with prompts, tool calls, code and JSON. DFlash2 ran 30% faster than MTP on the same dual-card host and day. I trust that more than a synthetic completion about llamas opening a bakery.

The memory bill is chunky. The DFlash2 speed tier exposed about 259,000 logical KV tokens versus 532,000 for the lighter MTP context tier. Operators reduced GPU-memory utilization to preserve activation headroom for the first prefill, further shrinking the cache pool.

Three operators share a dual-RTX 3090 host for simultaneous local AI agent testing in a lab.

Self-hosted AI agents fight over the KV cache

One card can run self-hosted AI agents if the quantized model fits and sessions remain within the cache pool. Mine could handle one heavy coding agent or several shorter conversations. Multiple deep-context agents need queueing, tighter context limits or another GPU.

Each agent turn sends instructions and working material through prefill. The server converts the prompt into model state and stores its keys and values in the KV cache. Decode consults that state for every new token. After a tool runs, the next request usually repeats the old prompt with fresh output appended. Prefix caching reuses the unchanged part. As sessions accumulate, their cache blocks compete for space and evict older blocks. Rebuilding them makes an agent feel instant one turn and caffeinated-but-useless the next.

BillJPG’s vLLM issue offers the strongest criticism of repeated fixed-seed benchmark sweeps. Automatic prefix caching can recognize token-identical synthetic prompts on a long-lived server, reuse cached work and distort the scaling curve until eviction begins. Supposedly cold performance may be quietly warmed through. I’d disable prefix caching, vary prompts or restart between runs.

Batch numbers need equal suspicion. In one short-prompt vLLM benchmark, a card capped at 250 watts rose from 46 tokens per second for one request to about 1,100 at 64 concurrent requests. That measures aggregate output under sustained batching. It says little about how fast my coding agent responds when asked to untangle the TypeScript monorepo from my “microservices are elegant” phase.

Cache compression can stretch one card further. The KVarN comparison used MTP speculative decoding on one RTX 3090 with two prompts of roughly 112,000 tokens.

KVarN expanded the pool from about 174,000 tokens to 292,000, with a visible latency cost.

On those tasks, speculative decode fell from 68 tokens per second with an FP8 cache to 32 with KVarN. The compact representation stores more context, but target steps slow and speculative acceptance may fall. I get a longer, heavier conversation.

The clean theory says speculative-decoding output should remain exact: the drafter only proposes tokens, while the target decides. Forlayo nevertheless reported deterministic token-sequence divergence in a greedy SGLang comparison with Qwen thinking mode enabled. The target-only repeat remained deterministic; the no-thinking control matched exactly. Nobody has established whether this was a general DFlash2 integration defect, a configuration-specific bug or an already-fixed upstream issue.

Four GPUs turn PCIe into the toll booth

Four cards provide enough combined cache for nearly four full native-context requests. The dual-card DFlash2 configuration couldn’t fit one. That’s a meaningful capacity jump for several enormous agent sessions.

Topology sends the invoice. The four-card server used NVLink within each pair, but tensor-parallel all-reduce crossed PCIe between pairs. Every layer synchronized across that slower boundary. More cards expanded the KV pool, enabling full-context concurrency unavailable on the smaller machine. Each stream then paid the cross-pair communication cost throughout generation. This works for several deep sessions together. One impatient human gains little from all that metal.

The measured prose rate makes the trade clear: four-way serving reached about 85 tokens per second versus roughly 98 on one NVLinked pair. The larger machine held more work but delivered each stream more slowly.

Gaps remain. We don’t know how reliably these dual- and four-card results transfer across models, engines, quantizations or traffic mixes. Different interconnects may shift every crossover point. Nobody has measured the cost-per-use boundary between adding used cards and applying KV compression for a specific deployment. Proposed vLLM scheduler optimizations also lack end-to-end long-context latency results on this hardware.

My path is simple: start with one card and collect real traces. Add a second when cache pressure or request volume becomes measurable. Four makes sense only when full-context concurrency justifies slower streams and the electrical appetite of a small Roman trattoria.

Before ordering, list the model, quantization, context ceiling and simultaneous users. If you can’t name the allocation that fails to fit, you’re shopping for a benchmark screenshot.

My bet: the used RTX 3090 remains the default serious home-lab GPU through 2027. Its replacement will win on usable memory per dollar, because no agent can infer its way out of an OOM error.

Frequently asked questions

Is the RTX 3090 still worth it for local AI?

The RTX 3090 is still worth considering for local AI because its 24GB of CUDA-friendly VRAM can keep serious quantized models and useful context on the GPU. Its value is memory capacity rather than leading-edge speed, especially when used-card pricing beats newer high-memory alternatives.

How much faster are two RTX 3090 cards?

The tested PCIe-connected RTX 3090 pair ran Qwen3.8-27B W4A16 16–35% faster than one card using the same vLLM harness and launcher defaults. The gain came with more combined memory, but tensor-parallel communication across PCIe prevented anything close to a clean doubling of speed.

Can one RTX 3090 run self-hosted AI agents?

One RTX 3090 can run self-hosted AI agents when the quantized model fits in VRAM and active sessions stay within the KV-cache pool. One heavy coding agent or several shorter conversations can work, while multiple deep-context agents require queueing, tighter context limits or additional GPU memory.

Sources

Related reading

Luca

Luca

Luca by the way is the personal blog of Los Angeles based entrepreneur Luca Capula. A true Italian who lives between Torino and LA.

More posts →