Workstation Specs — Know your memory pools before you place a single expert

Part of Two Pools.

PartModelThe number that matters
CPURyzen 9 9950X16 Zen 5 cores, dual-channel memory controller
GPURadeon RX 9070 XT16 GB GDDR6, 640 GB/s, gfx1201 (RDNA4)
RAM128 GB DDR5 as 4 × 32 GBDDR5-3600 → 57.6 GB/s

The one insight that determines everything

This workstation has two memory pools, roughly 11× apart in bandwidth: 16 GB of VRAM at 640 GB/s, and 128 GB of system RAM at a theoretical 57.6 GB/s once the DIMM population is accounted for. Every configuration decision in this course — quantization level, which experts go where, KV cache size, context length — is really a decision about which bytes live in which pool, and how often you pay to move them.

where is bytes actually read per token from each pool — not bytes stored there. Mixture-of-Experts models exist specifically so that most of a model’s bytes can sit in the slow pool without being read on every single token.


Pool 1: VRAM — fast, and too small

640 GB/s comes from a 256-bit bus at 20 Gbps. That part of the spec is generous. The capacity is the problem.

Here’s what Qwen3-Coder-30B-A3B actually costs at Q4_K_M (~4.8 bits/weight):

ComponentParamsSize at Q4_K_M
Non-expert (attention, embeddings, router, norms)1.49 B0.89 GB
Routed expert FFN29.01 B17.41 GB
Total30.5 B18.30 GB

The model does not fit

18.30 GB into a 16 GB card — and that’s before a single byte of KV cache. At 32K context, KV cache adds another 3.22 GB on top. This is not a problem to route around. It is the course.


Pool 2: System RAM — large, and slower than you bought it for

Dual-channel DDR5 means a 128-bit bus, or 16 bytes per transfer, so:

The 9950X officially supports DDR5-5600, which works out to 89.6 GB/s. But AMD publishes supported memory speed by DIMM population, not by total capacity:

PopulationOfficial supported speedBandwidth
2 × single-rankDDR5-560089.6 GB/s
2 × dual-rankDDR5-560089.6 GB/s
4 × single-rankDDR5-360057.6 GB/s
4 × dual-rankDDR5-360057.6 GB/s

The 4-DIMM tax

Reaching 128 GB as 4 × 32 GB drops the officially supported speed from 5600 to 3600 — a 36% bandwidth cut, purely from how the capacity was assembled. It’s invisible in every parts list and every spec sheet screenshot. It directly sets the token rate of every model that spills into system RAM.

If you’re still speccing a machine

Buy 2 × 64 GB instead of 4 × 32 GB. Two DIMMs keep you at the higher officially supported speed for the same total capacity.

The JEDEC number in that table is a floor, not a ceiling — a board may post a higher sustained number with manual tuning. That’s exactly why module-0-two-pools measures actual DDR5 bandwidth with STREAM Triad instead of assuming the datasheet number. The course runs on what you measure, not on what AMD prints.


The ratio

VRAMSystem RAMRatio
Capacity16 GB128 GB1 : 8
Bandwidth640 GB/s57.6 GB/s11.1 : 1

Eight times the capacity, at one eleventh the speed.

These are theoretical peaks and you will not hit them

Real sustained bandwidth is typically 60–90% of the peak numbers on this page, on both sides of the equation. Do not build predictions on the numbers on this page. module-0-two-pools and module-1-toolchain replace both of them with measured values before the course asks you to predict anything. The numbers here are the specification; the course runs on the measurement.


What this machine can and cannot run

At Q4_K_M:

ModelTotal / activeWeightsFits VRAM?Viable?
Qwen2.5-Coder-7B7B dense~4.5 GBYesYes — calibration model, see module-2-calibration
Qwen2.5-Coder-14B14B dense~9 GBYesYes, with modest context
Qwen3-Coder-30B-A3B30.5B / 3.3B18.3 GBNoYes, via expert offload — the main model of this course
gpt-oss-120b117B / 5.1B~63 GBNoYes, mostly in system RAM — predicted in capstone-1-predicted-machine
GLM-4.5-Air106B / 12B~60 GBNoYes, but 12B active is a heavy per-token DDR5 bill
Any 70B dense~40 GBNoNo

Why dense models above ~14B are off the table

A dense model reads every weight for every token. A 70B dense model at Q4 is roughly 40 GB, of which ~25 GB sits in system RAM once VRAM is full: 25 ÷ 57.6 ≈ 434 ms/token ≈ 2.3 tok/s. Run the same arithmetic on the 30B MoE model and only 1.088 GB of expert weights get read per token, because just 8 of 128 experts activate. That difference — not raw parameter count — is why this course is built on a MoE model. module-5-expert-placement measures whether that theory survives contact with real silicon.


Software baseline

ComponentChoice
OSLinux, Ubuntu 24.04.x or 26.04, dual-boot
GPU stackROCm 10.0 — gfx1201 officially supported, no HSA_OVERRIDE_GFX_VERSION needed
Inference enginellama.cpp, recent master, built twice — once against HIP, once against Vulkan (module-7-backend-shootout needs both)

Why Linux, and why this is not just preference

AMD’s own Windows compatibility documentation states that PyTorch on Windows ships ROCm components, but “the entire ROCm stack is not yet supported on Windows.” llama.cpp does work on Windows, via Vulkan or the HIP SDK — but the full toolchain, and testing both backends cleanly against each other, is a Linux story today.

One more thing worth flagging: gfx1201 support is recent. It was not supported at this card’s launch — official listing arrived around ROCm 7.0. Any 2025 guide telling you to set HSA_OVERRIDE_GFX_VERSION on this card is stale.


Sources

  • 640 GB/s, 16 GB GDDR6, gfx1201 — AMD RX 9070 XT product page. The page is JavaScript-rendered, so these figures were confirmed against the launch press-kit specification rather than trusted from a raw fetch; unchanged since the February 2025 launch.
  • Dual-channel support, the DDR5-5600 official figure, and the 4-DIMM DDR5-3600 table — AMD Ryzen 9 9950X processor specification page, same rendering caveat as above.
  • Model architecture — the shipped config.json for Qwen3-Coder-30B-A3B-Instruct: 48 layers, 4 KV heads, head_dim 128, 128 experts with 8 active, max_position_embeddings 262144, rope_scaling: null.
  • ROCm 10.0 gfx1201 support — the ROCm compatibility matrix.

See reference-material for full citations.