Orkun Soylu

3 min read

Strata @W7800 + RX 7900 XTX

I split Qwen3.8-Flash-Next by layer across 72 GB of VRAM and system RAM dropped out of the picture entirely. Decode barely moved (72 → 74 tok/s); long-prompt prefill gained 24% (961 → 1,190 tok/s) — less than I expected, because each card needs its own prompt buffers.

Tested
Setup

W7800 48 GB + RX 7900 XTX 24 GB — dual-GPU bare metalBare metal, Ubuntu 26.04 Server, inbox amdgpu · AMD Ryzen 5 7600 (6C/12T) · 64 GB DDR5-6400

Radeon Pro W7800 48 GB — Proxmox VM (GPU passthrough)Proxmox VE guest with PCIe passthrough, Ubuntu 26.04 · Intel Core i5-13400 host (6P+4E); guest 8 vCPU, 16 vCPU for the Strata test · Guest 40 GB (52 GB for the Strata test); host 64 GB DDR5-4800

Runtime
Strata 0.1.41 (commit fb58e0d), HIP, layer split with STRATA_STAGE_TRIM=1
Models

Qwen3.8-Flash-NextISTA GSQ-RCO IQ3_Stested

Verdict

Worth it, just not for raw speed: every expert lives on the GPUs, CPU and RAM sit near idle, and there's room for a speech model alongside. Set the layer split by hand ('auto' left 38 GB of the W7800 empty) and put the faster card last.

Works

  • 100% of 24,576 experts in VRAM, zero in RAM
  • Prefill 31K: 961 → 1,190 tok/s (+24%)
  • Leaves ~4 GB free on the W7800 for a co-resident Whisper server
  • Both cards ≤ 61 °C edge under sustained load, one slot apart

Doesn’t

  • Decode only +3% (72.0 → 73.9 tok/s) — it was already 95%+ on the GPU
  • 'layer_split: auto' gave the W7800 only 2 layers
  • Per-card prompt buffers (~1.5 GB per 2,048 tokens) cap the prefill chunk at 8,192
Decode
73.9tok/s
Prefill 31K
1,190tok/s
Experts in VRAM
100%
Total VRAM
72GB

Prefill speed by prompt length

higher is better
  • 1× W7800 (75% experts in VRAM)
  • 2 GPUs, split 32, chunk 4K
  • 2 GPUs, split 34, chunk 8K
7.5K-token prompt
840 tok/s1× W7800 (75% experts in VRAM) · 840 tok/s
921 tok/s2 GPUs, split 32, chunk 4K · 921 tok/s
949 tok/s2 GPUs, split 34, chunk 8K · 949 tok/s
31K-token prompt
961 tok/s1× W7800 (75% experts in VRAM) · 961 tok/s
1,116 tok/s2 GPUs, split 32, chunk 4K · 1,116 tok/s
1,190 tok/s2 GPUs, split 34, chunk 8K · 1,190 tok/s
Data
1× W7800 (75% experts in VRAM)2 GPUs, split 32, chunk 4K2 GPUs, split 34, chunk 8K
7.5K-token prompt840 tok/s921 tok/s949 tok/s
31K-token prompt961 tok/s1,116 tok/s1,190 tok/s

Decode speed

higher is better
1× W7800 (VM, 75% in VRAM)
72.0 tok/sDecode · 72.0 tok/s
2 GPUs, split 32, chunk 4K
74.0 tok/sDecode · 74.0 tok/s
2 GPUs, split 34, chunk 8K
73.9 tok/sDecode · 73.9 tok/s
Data
Decode
1× W7800 (VM, 75% in VRAM)72.0 tok/s
2 GPUs, split 32, chunk 4K74.0 tok/s
2 GPUs, split 34, chunk 8K73.9 tok/s

Why two cards

On a single W7800, Strata could keep only 75% of Qwen3.8-Flash-Next’s 24,576 experts in VRAM. The rest lived in system RAM and got pulled over PCIe whenever prefill needed them. That bugged me. The IQ3_S experts add up to ~47 GiB, and there was an RX 7900 XTX (24 GB) sitting in my gaming PC. 48 + 24 = 72 GB, so on paper everything fits. Both cards are gfx1100, which means one engine build and one set of ROCm wheels covers both.

The box: bare metal this time (no hypervisor), Ryzen 5 7600, 64 GB DDR5-6400, both cards on PCIe 4.0 x8 straight from the CPU, display on the iGPU.

How Strata splits a model

Strata splits by layer. Each card holds the experts and KV cache for its own layers, plus its own prompt buffers — that last bit turns out to matter. With STRATA_STAGE_TRIM=1 and a manual split point, each card loads only its own dense weights; without it, every card carries a full 3.4 GiB copy.

The last card gets extra work: the output layer, the MTP draft layer and verification, all of which run on every token. So the faster card (7900 XTX, 96 CUs) goes last. Traffic between the cards is a few hundred KB per verification window, so x8 links are more than enough.

What I expected (before measuring)

Component (262K context) Size
Dense weights (all layers) ~3.4 GiB
Output layer (Q5_K) 0.5 GiB
MTP draft layer ~1.1 GiB
KV cache (int8) ~3.8 GiB
All experts ~46.8 GiB

My guess: split around layer 31/32, decode ~70–85 tok/s, prefill 1.3–1.8× faster.

What actually happened

  1. layer_split: auto got it wrong. It handed the W7800 just 2 layers and left 38 GB of it empty. I set the split by hand.
  2. Split 32, chunk 4,096: the W7800 takes layers 0–31 (16,384 expert slots), the XTX takes 32–47 (8,192 slots), and 100% of the experts are in VRAM. The W7800 sits at 38.5 / 46 GB (including a 1.1 GB Whisper server), the XTX at 21.8 / 24 GB. But I couldn’t push the prefill chunk past 4,096: the buffers are per card, ~1.5 GB per 2,048 tokens, and the XTX had no room left.
  3. Split 34, chunk 8,192: moving two more layers onto the W7800 freed enough XTX memory for an 8K chunk. A 16K chunk (~12 GB per card) won’t fit on the XTX even if every layer moves off it.
1× W7800 (VM) 2 GPUs, split 32 / chunk 4K 2 GPUs, split 34 / chunk 8K
Experts in VRAM 75% 100% 100%
Experts in RAM 18.2 GiB 0 0
Decode 72.0 tok/s 74.0 tok/s 73.9 tok/s
Prefill 7.5K 840 tok/s 921 tok/s 878 / 949 tok/s (two runs)
Prefill 15K — — 1,102 tok/s
Prefill 31K 961 tok/s 1,116 tok/s 1,190 tok/s

Heat and power under sustained load

Edge Junction Power
Radeon Pro W7800 61 °C 73 °C 247 W
RX 7900 XTX 61 °C 70 °C 204 W

One empty slot between the cards was enough. At idle the links drop to 2.5 GT/s x1 and come back to PCIe 4.0 x8 under load — that’s just power management, nothing to worry about.

What I make of it

  • Decode landed where I expected (+3%). On one card it was already serving 95–99% from VRAM, so there wasn’t much left to gain.
  • Prefill gained 24%, short of my 1.3–1.8× guess. Every expert is local now, but each card needs its own prompt buffers, so the chunk shrank from 16,384 (single card) to 8,192 — and big chunks were exactly what made single-card prefill fast. The gain shows up in long prompts, which is what agent sessions and tool-heavy answers produce anyway.
  • The real win is everything else. System RAM and CPU are almost idle, I no longer care which GPU service starts first, and the W7800 still has ~4 GB free.

So this is now my homelab’s main model server.

Thanks

Thanks to the Strata team: a 125B MoE running entirely from VRAM across two AMD cards is only possible because of their work.