Hybrid GPU + RAM · DIY build
RTX 5090 + EPYC 9355P with 768 GB DDR5 (MoE offload)
The usual recipe for running 600B+ MoE models at home: expert weights in 12-channel DDR5, attention and KV cache on one fast GPU. Faster prompt processing than CPU-only for a fraction of an all-GPU build's VRAM bill.
Memory for models
VRAM
Memory bandwidth
Parts
GPU, motherboard, ram and cooling prices not included
gpt-oss-20b, 4-bit
Parts
| Part | Qty | Each |
|---|---|---|
| GPUNVIDIA GeForce RTX 5090 | 1 | not priced |
| CPUAMD EPYC 9355P (32-core, 8 CCDs, 280 W, SP5) | 1 | ~$2,598 |
| MotherboardSupermicro H13SSL-N rev 2.01 (3x PCIe 5.0 x16) | 1 | not priced |
| RAM12x 64GB DDR5-6400 ECC RDIMM | 12 | not priced |
| PSUCorsair HX1500i (1500 W at 115-240 V, 1200 W at 100-115 V) | 1 | ~$390 |
| CaseCorsair 7000D AIRFLOW full tower (450 mm GPU clearance, 8 slots) | 1 | ~$290 |
| CoolingSP5 tower cooler | 1 | not priced |
| StorageCorsair MP600 CORE XT 2TB PCIe 4.0 NVMe | 1 | ~$485 |
| Priced parts only | $3,763GPU, motherboard, ram and cooling prices not included | |
New parts are priced at the maker’s own store or list price. Used cards have no price here yet, and a total with a missing GPU would understate the build, so none is shown.
What it runs at 4-bit
Every model in the catalog at its 4-bit file with 8,192 tokens of context. 39 of 41 fit. Speeds are the median of measured runs on the same GPUs where any exist; otherwise an estimate from memory bandwidth. Try other quants and context lengths.
| Model | Needs | Fit | Generation speed |
|---|---|---|---|
| Kimi K32.8T, 104B active · UD-Q4_K_XL | 1406.8 GBcontext memory estimated | Does not fit | |
| DeepSeek V4 Pro1.6T, 49B active · Q4_K_M | 890.5 GBcontext memory not counted | Does not fit | |
| Kimi K2.61T, 32B active · UD-Q4_K_XL | 545.7 GBcontext memory estimated | GPU + RAM offloadassumed limit | ~8.5–12 tok/sestimate, part in RAM |
| DeepSeek V4.1 Flash552B, 16B active · Q4 (DwarfStar) | 484.5 GB | GPU + RAM offloadassumed limit | ~11–15 tok/sestimate, part in RAM |
| GLM-5.3753.3B · UD-Q4_K_XL | 437.4 GBcontext memory estimated | GPU + RAM offloadassumed limit | – |
| DeepSeek V3.2671B, 37B active · Q4_K_M | 379.6 GBcontext memory estimated | GPU + RAM offloadassumed limit | ~7.2–11 tok/sestimate, part in RAM |
| MiniMax M3428B, 23B active · Q4_K_M | 244.8 GBcontext memory not counted | GPU + RAM offloadassumed limit | ~12–17 tok/sestimate, part in RAM |
| Qwen3.5 397B-A17B397B, 17B active · Q4_K_M | 229.1 GBcontext memory estimated | GPU + RAM offloadassumed limit | ~16–23 tok/sestimate, part in RAM |
| GLM-5.3 Flash320B, 18B active · UD-Q4_K_XL | 187.6 GBcontext memory estimated | GPU + RAM offloadassumed limit | ~15–22 tok/sestimate, part in RAM |
| Hy3295B, 21B active · Q4_K_M | 173.6 GB | GPU + RAM offloadassumed limit | ~13–19 tok/sestimate, part in RAM |
| MiniMax M2.7228.7B · Q4_K_M | 132.7 GB | GPU + RAM offloadassumed limit | – |
| Qwen3.8 Flash-Next125B, 6B active · Q4_K_M | 113.1 GBcontext memory estimated | GPU + RAM offloadassumed limit | ~32–47 tok/sestimate, part in RAM |
| Nemotron 3 Super 120B-A12B120B, 12B active · Q4_K_M | 82.6 GBcontext memory estimated | GPU + RAM offloadassumed limit | ~23–34 tok/sestimate, part in RAM |
| Qwen3.5 122B-A10B122B, 10B active · Q4_K_M | 73.0 GBcontext memory estimated | GPU + RAM offloadassumed limit | ~34–49 tok/sestimate, part in RAM |
| Mistral Medium 3.5 128B128B · Q4_K_M | 74.0 GB | GPU + RAM offloadassumed limit | ~5.4–8.6 tok/sestimate, part in RAM |
| GLM-4.5-Air106B, 12B active · Q4_K_M | 70.9 GB | GPU + RAM offloadassumed limit | ~26–38 tok/sestimate, part in RAM |
| Mistral Small 4 119B (2603)119B, 6.5B active · Q4_K_M | 69.3 GBcontext memory estimated | GPU + RAM offloadassumed limit | ~55–80 tok/sestimate, part in RAM |
| Llama 4 Scout 17B-16E Instruct109B, 17B active · Q4_K_M | 62.4 GBcontext memory not counted | GPU + RAM offloadassumed limit | ~22–33 tok/sestimate, part in RAM |
| gpt-oss-120b117B, 5.1B active · MXFP4 (native) | 60.2 GBcontext memory estimated | GPU + RAM offloadassumed limit | ~85–124 tok/sestimate, part in RAM |
| Qwen3 Coder Next80B, 3B active · Q4_K_M | 46.9 GBcontext memory estimated | GPU + RAM offloadassumed limit | ~150–219 tok/sestimate, part in RAM |
| Llama 3.3 70B Instruct70B · Q4_K_M | 43.6 GB | GPU + RAM offloadassumed limit | ~13–21 tok/sestimate, part in RAM |
| Nemotron 3.5 Lightning 30B-A3B30B, 3B active · Q4_K_M | 25.3 GBcontext memory estimated | Fits | ~175–256 tok/sestimate |
| Qwen3.6 35B-A3B35B, 3B active · Q4_K_M | 22.4 GBcontext memory estimated | Fits | 117 tok/smedian of 1 run |
| Ornith 1.5 35B-A3B35B, 3B active · Q4_K_M | 21.9 GBcontext memory estimated | Fits | ~240–350 tok/sestimate |
| Qwen3 Coder 30B-A3B Instruct30.5B, 3.3B active · Q4_K_M | 19.5 GB | Fits | ~222–324 tok/sestimate |
| Gemma 4 31B IT30.7B · Q4_K_M | 18.9 GBcontext memory estimated | Fits | 61 tok/smedian of 1 run |
| Granite 4.2 30B29.3B · Q4_K_M | 20.3 GB | Fits | ~49–77 tok/sestimate |
| Qwen3.8 27B27B · Q4_K_M | 18.2 GBcontext memory estimated | Fits | ~50–79 tok/sestimate |
| Gemma 4 26B-A4B IT25.2B, 3.8B active · Q4_K_M | 17.4 GBcontext memory estimated | Fits | 122 tok/smedian of 2 runs |
| Qwen3.6 27B27B · Q4_K_M | 17.7 GBcontext memory estimated | Fits | ~52–82 tok/sestimate |
| Devstral Small 2 24B (2512)24B · Q4_K_M | 16.1 GB | Fits | ~61–96 tok/sestimate |
| gpt-oss-20b21B, 3.6B active · MXFP4 (native) | 12.5 GBcontext memory estimated | Fits | 290 tok/smedian of 4 runs |
| Phi-414.7B · Q4_K_M | 11.3 GB | Fits | ~99–155 tok/sestimate |
| Ministral 3 14B Reasoning (2512)13.9B · Q4_K_M | 10.4 GB | Fits | ~107–167 tok/sestimate |
| Gemma 4 12B IT11.95B · Q4_K_M | 8.2 GBcontext memory estimated | Fits | ~123–194 tok/sestimate |
| Qwen3.5 9B9B · Q4_K_M | 7.0 GBcontext memory estimated | Fits | ~155–243 tok/sestimate |
| Granite 4.2 8B8.8B · Q4_K_M | 7.9 GB | Fits | ~159–249 tok/sestimate |
| Gemma 4 E4B IT8B · Q4_K_M | 6.5 GBcontext memory not counted | Fits | ~289–454 tok/sestimate |
| Qwen3 8B8.2B · Q4_K_M | 7.3 GB | Fits | 200 tok/smedian of 1 run |
| Llama 3.1 8B Instruct8B · Q4_K_M | 7.1 GB | Fits | 200 tok/smedian of 3 runs |
| Qwen3.5 4B4B · Q4_K_M | 4.3 GBcontext memory estimated | Fits | ~321–503 tok/sestimate |
Measured speeds
15 published runs with one user, plain decoding and at most 4,096 tokens already in context, on RTX 5090. Runs on 1x RTX 5090 with the same GPUs count here too, and say so.
| Model | Quant | Backend | Generation | Prompt | Context | Measured on | Source |
|---|---|---|---|---|---|---|---|
| Gemma 4 26B-A4B IT | Q4_K | llama.cpp (build not stated) | 180 tok/s | 8,799 tok/s4,096-token prompt | 4,096 | RTX 5090 | review2026-03 |
| Gemma 4 26B-A4B IT | INT4 experts / HQQ4 attention / k4v4 KV | Krasis (MoE runtime; version not stated in table) | 64 tok/s | 5,599 tok/s | 0 | RTX 5090 | independent benchmark2026-10 |
| Gemma 4 31B IT | Q4_K | llama.cpp (build not stated) | 61 tok/s | 3,395 tok/s4,096-token prompt | 4,096 | RTX 5090 | review2026-03 |
| gpt-oss-20b | MXFP4 MoE | llama.cpp b6782 CUDA,BLAS | 299 tok/s | 13,002 tok/s2,048-token prompt | 0 | RTX 5090 | llama.cpp benchmark discussion2025-10 |
| gpt-oss-20b | Q4_K | llama.cpp (build not stated) | 298 tok/s | 9,444 tok/s4,096-token prompt | 4,096 | RTX 5090 | review2026-03 |
| gpt-oss-20b | MXFP4 MoE | llama.cpp b6210 CUDA | 283 tok/s | 9,848 tok/s2,048-token prompt | 0 | RTX 5090 | llama.cpp benchmark discussion2025-08 |
| gpt-oss-20b | MXFP4 | Ollama (version not stated) | 205 tok/s | 8,519 tok/s | 0 | RTX 5090 | review2025-10 |
| Llama 3.1 8B Instruct | Q4_K_M | llama.cpp b11741 | 278 tok/s | – | 0 | RTX 5090 | review2026-10 |
| Llama 3.1 8B Instruct | Q4_K_M | Ollama (version not stated) | 200 tok/s | 30,982 tok/s | 0 | RTX 5090 | review2025-10 |
| Llama 3.1 8B Instruct | Q4_K_M | LocalScore (llamafile; version not stated on leaderboard) | 66 tok/s | 6,297 tok/s | 0 | RTX 5090 | LocalScore2026-10 |
| Llama 3.1 8B Instruct | Q8_0 | Ollama (version not stated) | 145 tok/s | 31,442 tok/s | 0 | RTX 5090 | review2025-10 |
| Llama 3.1 8B Instruct | FP8 | SGLang (lmsysorg/sglang:spark image) | 138 tok/s | 21,956 tok/s2,048-token prompt | 0 | RTX 5090 | review2025-10 |
| Llama 3.3 70B Instruct | IQ3_XXS | llama.cpp b11741 | 53 tok/s | – | 0 | RTX 5090 | review2026-10 |
| Qwen3 8B | Q4_K | llama.cpp b8189 | 200 tok/s | 11,933 tok/s4,096-token prompt | 4,096 | RTX 5090 | review2026-03 |
| Qwen3.6 35B-A3B | INT4 experts / HQQ4 attention / k4v4 KV | Krasis (MoE runtime; version not stated in table) | 117 tok/s | 10,670 tok/s | 0 | RTX 5090 | independent benchmark2026-10 |
With speculative decoding
A small draft model or extra prediction heads guess several tokens ahead. Generation is faster on text the guesses get right, so these are kept out of the medians above.
| Model | Quant | Backend | Generation | Prompt | Context | Measured on | Source |
|---|---|---|---|---|---|---|---|
| Qwen3.8 27B | NVFP4 (native, NVFP4 KV) | vLLM 0.27.1 + heavy local patches | 101 tok/s | – | 0 | RTX 5090 | independent benchmark2026-08 |
Deep into a long context
Measured with more than 4,096 tokens already in context, where every new token also reads the context memory.
| Model | Quant | Backend | Generation | Prompt | Context | Measured on | Source |
|---|---|---|---|---|---|---|---|
| Gemma 4 26B-A4B IT | Q4_K | llama.cpp (build not stated) | 167 tok/s | 7,733 tok/s16,384-token prompt | 16,384 | RTX 5090 | review2026-03 |
| Gemma 4 26B-A4B IT | Q4_K | llama.cpp (build not stated) | 159 tok/s | 6,293 tok/s32,768-token prompt | 32,768 | RTX 5090 | review2026-03 |
| Gemma 4 31B IT | Q4_K | llama.cpp (build not stated) | 59 tok/s | 2,794 tok/s16,384-token prompt | 16,384 | RTX 5090 | review2026-03 |
| Gemma 4 31B IT | Q4_K | llama.cpp (build not stated) | 55 tok/s | 2,229 tok/s32,768-token prompt | 32,768 | RTX 5090 | review2026-03 |
| gpt-oss-20b | Q4_K | llama.cpp (build not stated) | 249 tok/s | 7,168 tok/s16,384-token prompt | 16,384 | RTX 5090 | review2026-03 |
| gpt-oss-20b | Q4_K | llama.cpp (build not stated) | 215 tok/s | 5,183 tok/s32,768-token prompt | 32,768 | RTX 5090 | review2026-03 |
| Qwen3 8B | Q4_K | llama.cpp b8189 | 162 tok/s | 8,538 tok/s16,384-token prompt | 16,384 | RTX 5090 | review2026-03 |
| Qwen3 8B | Q4_K | llama.cpp b8189 | 130 tok/s | 6,034 tok/s32,768-token prompt | 32,768 | RTX 5090 | review2026-03 |
Specifications
- GPUs
- 1 × NVIDIA GeForce RTX 5090
- VRAM
- 32 GB
- System RAM
- 768 GB
- RAM bandwidth
- 12 channels x 6400 MT/s x 8 bytes = 614.4 GB/s
- Power supply
- 1500 W
- Estimated load
- RTX 5090 575 W + EPYC 9355P 280 W + 100 W = 955 W
- Software
- CUDA, Vulkan
Before you build it
- llama.cpp keeps MoE expert weights in system RAM with --cpu-moe (all layers) or --n-cpu-moe N (first N layers), leaving attention and shared weights on the GPU.
- The H13SSL-N gives the 5090 a full PCIe 5.0 x16 slot from the CPU.
- Server RDIMMs cost more per GB than desktop kits in the 2026 shortage: about $2,245 per 64 GB DDR5 RDIMM (~$35/GB) in the Oct 2026 retail tracker, so 12 sticks alone run well over $20,000.
- A US 15 A / 120 V circuit is 1,800 W on paper, but the NEC 80% rule for continuous loads (3 h+) limits it to 12 A, about 1,440 W, shared with everything else on that circuit.
Sources
- amd.com: price of AMD EPYC 9355P (32-core, 8 CCDs, 280 W, SP5)
- corsair.com: price of Corsair HX1500i (1500 W at 115-240 V, 1200 W at 100-115 V)
- corsair.com: price of Corsair 7000D AIRFLOW full tower (450 mm GPU clearance, 8 slots)
- corsair.com: price of Corsair MP600 CORE XT 2TB PCIe 4.0 NVMe
- nvidia.com: RTX 5090 575 W
- raw.githubusercontent.com: gotcha source
- supermicro.com: gotcha source
- capitalandcompute.net: gotcha source
- ecmweb.com: gotcha source
- blog.se.com: gotcha source
Compared with
Similar machines
- 1x RTX 5090~$3,234 + unpriced parts
- RTX 3090 (used) + 128 GB DDR5 on AM5 (MoE offload)~$4,833 + unpriced parts
- Apple Mac Studio (M5 Max, 32-core GPU)~$2,499