Local Host Lab · Tools

What runs on what

A ladder of hardware for running open-weight models locally, from a 12 GB gaming card to a 512 GB workstation. Memory capacity decides which models fit; memory bandwidth decides how fast one conversation runs. Each rung lists both, what fits, public decode measurements with their sources, and where this notebook measured something itself.

Public figures read 2026-10-13, each cited · own measurements June to October 2026, each linked to its entry

Part of the Local Host Lab notebook. To try a specific model and machine, use the calculator; for prices, the cost-performance table; for every source and date, the sources page.

Two labels are used throughout. measured here marks a number measured in this notebook, linked to the entry it came from. public marks a number someone else measured and published, cited with its source and the date of the result.

Two numbers decide most of it

To produce one token, a model reads every weight that token uses and the attention cache built so far. For one conversation at a time this reading is the bottleneck, so single-stream decode speed is close to memory bandwidth divided by the bytes read per token. Measured runs in this notebook reached 75 to 82% of that ceiling for dense models (see the calibration table). Capacity is a hard limit instead: a model either fits in fast memory or spills to something an order of magnitude slower.

Mixture-of-experts models change the trade. They need memory for all their parameters but read only the active ones per token, so a 117B model with 5.1B active parameters can decode faster than a dense 27B. That is why large-memory, modest-bandwidth machines (a DGX Spark, a Ryzen AI Max, a Mac) are useful at all.

measured in this notebook public specification only
8 16 32 64 128 256 512 1024 200 500 1,000 2,000 memory, GiB (total across devices, log scale) bandwidth, GB/s (log scale) RTX 3060 12GB: 12 GiB, 360 GB/s RTX 3060 RTX 5060 Ti 16GB: 16 GiB, 448 GB/s RTX 5060 Ti RTX 5080 16GB: 16 GiB, 960 GB/s RTX 5080 RTX 3080, modified to 20 GB: 20 GiB, 760 GB/s RTX 3080 20GB RTX 3090 24GB: 24 GiB, 936 GB/s RTX 4090 24GB: 24 GiB, 1,008 GB/s RTX 3090 · 4090 Intel Arc Pro B60 24GB: 24 GiB, 456 GB/s Arc Pro B60 RTX 5090 32GB: 32 GiB, 1,792 GB/s RTX 5090 Tesla V100 32GB PCIe (2017): 32 GiB, 900 GB/s V100 32GB Radeon AI PRO R9700 32GB: 32 GiB, 640 GB/s R9700 2 × Tesla V100 32GB PCIe, tensor parallel: 64 GiB, 1,800 GB/s 2 × V100 A100 80GB PCIe (2020): 80 GiB, 1,935 GB/s A100 80GB RTX PRO 6000 Blackwell 96GB: 96 GiB, 1,792 GB/s RTX PRO 6000 NVIDIA DGX Spark 128GB: 128 GiB, 273 GB/s DGX Spark AMD Ryzen AI Max+ 395, 128GB (Framework Desktop): 128 GiB, 256 GB/s Ryzen AI Max+ 395 Mac Studio M4 Max 64GB (2025): 64 GiB, 546 GB/s M4 Max Mac Studio M5 Max 128GB (2026): 128 GiB, 614 GB/s M5 Max Mac mini M5 Pro 64GB (2026): 64 GiB, 307 GB/s M5 Pro Mac Studio M3 Ultra 512GB (2025): 512 GiB, 819 GB/s M3 Ultra Mac Studio M5 Ultra 256GB (2026): 256 GiB, 1,200 GB/s M5 Ultra
Capacity decides which models fit; bandwidth sets the speed ceiling. No device is high on both without a datacenter price: gaming cards sit high and to the left, unified-memory machines low and to the right. Multi-card rows are plotted with total memory and, where the cards run tensor parallel, combined bandwidth. Values from vendor specifications; see the ladder table and the sources page.

The ladder

Each rung lists the memory and bandwidth from the vendor's specification, two derived columns, and measured decode speeds. The derived columns use the calculator's arithmetic: the largest dense model whose 4.9-bit weights (Q4_K_M) fit after reserving 5% of memory (more on unified-memory machines) and 2 GiB for cache and buffers, and the bandwidth ceiling for a 27B dense model at Q4_K_M (a 16.5 GB file). Both are estimates; the measured columns are not.

Hardware MemoryGiB BandwidthGB/s Dense at Q4fits, est. 27B Q4 ceilingtok/s, est. Measured decode
12 GB
RTX 3060 12GB 12 360 about 16B does not fit
publicLlama 2 7B Q4_0: 75.6 tok/s · llama.cpp CUDA scoreboard
16 GB
RTX 5060 Ti 16GB 16 448 about 23B does not fit
publicgpt-oss-20b MXFP4: 111.5 tok/s · llama.cpp gpt-oss guide
RTX 5080 16GB 16 960 about 23B does not fit
measured hereQwen3.6-27B IQ4_XS, 48K context, 4-bit KV: about 49 tok/s · entry 13
publicgpt-oss-20b MXFP4: 204.9 tok/s · llama.cpp gpt-oss guide
20 to 24 GB
RTX 3080, modified to 20 GBbandwidth assumed equal to the stock card 20 760 about 30B 46
measured hereQwen3.6-27B IQ4_XS, 64K: 39 tok/s; with MTP at 128K: 72.3 tok/s · entry 12
RTX 3090 24GB 24 936 about 36B 57
publicgpt-oss-20b MXFP4: 162.0 tok/s · llama.cpp gpt-oss guide
RTX 4090 24GB 24 1008 about 36B 61
publicgpt-oss-20b MXFP4: 225.2 tok/s · llama.cpp gpt-oss guide
Radeon RX 7900 XTX 24GB 24 960 about 36B 58
publicLlama 2 7B Q4_0: 167.1 tok/s (ROCm), 182.6 (Vulkan) · llama.cpp ROCm and Vulkan scoreboards
Intel Arc Pro B60 24GB 24 456 about 36B 28
32 GB
RTX 5090 32GB 32 1792 about 50B 109
publicgpt-oss-20b MXFP4: 282.5 tok/s · llama.cpp gpt-oss guide
Tesla V100 32GB PCIe (2017)used datacenter card; needs server airflow 32 900 about 50B 55
measured heretwo cards, layer split, Qwen3.8-27B Q8_0: 23.6 tok/s · V100 note 02
publicLlama 2 7B Q4_0: 129.1 tok/s · llama.cpp CUDA scoreboard
Instinct MI50 32GB (2018)used datacenter card; needs server airflow 32 1000 about 50B 61
publicLlama 2 7B Q4_0: 99.0 tok/s (ROCm), 108.5 (Vulkan) · llama.cpp ROCm scoreboard
Radeon AI PRO R9700 32GB 32 640 about 50B 39
publicLlama 2 7B Q4_0: 93.8 tok/s · llama.cpp ROCm scoreboard
64 GB, two cards
2 × Tesla V100 32GB PCIe, tensor parallelno NVLink 2 × 32 2 × 900 about 103B 109
measured hereQwen3.8-27B Q4_1 with MTP: 66 tok/s; Q8_0 with MTP: about 53 · entry 03
measured hereQwen3.8-Flash-Next Q8_0 (188 GB), second card as expert cache: 55 to 58 tok/s · V100 note 05
80 to 96 GB
A100 80GB PCIe (2020)used datacenter card 80 1935 about 130B 118
publicLlama 2 7B Q4_0: 190.9 tok/s (A100 80GB, form factor not stated) · llama.cpp CUDA scoreboard
RTX PRO 6000 Blackwell 96GB 96 1792 about 156B 109
publicgpt-oss-120b MXFP4: 196.3 tok/s · llama.cpp gpt-oss guide
128 GB unified
NVIDIA DGX Spark 128GBabout 119 GiB usable 128 273 about 205B 17
measured hereQwen3.8-27B Q8_0: 7.87 tok/s; DeepSeek-V4-Flash IQ3_XXS: 19.2; Flash-Next with MTP: 43.2 · entries 08 to 10
publicgpt-oss-120b MXFP4: 58.7 tok/s (tg32) · llama.cpp DGX Spark benchmarks
AMD Ryzen AI Max+ 395, 128GB (Framework Desktop)bandwidth derived from a 256-bit LPDDR5X-8000 bus 128 256 about 205B 16
publicgpt-oss-120b MXFP4: 56.6 tok/s; Qwen3.6-27B Q8_K_XL: 6.5 · kyuz0 Strix Halo results, May 2026
64 to 128 GB unified
Mac Studio M4 Max 64GB (2025)16-core CPU, 40-core GPU 64 546 about 81B 33
measured hereMiniMax-H3 33B video, bf16: 19 min per 5 s clip (no language model measured) · entry 14
publicLlama 2 7B Q4_0: 83.1 tok/s · llama.cpp Apple Silicon scoreboard
Mac Studio M5 Max 128GB (2026)18-core CPU, 40-core GPU 128 614 about 165B 37
publicLlama 2 7B Q4_0: 119.9 tok/s (August 2026 build) · llama.cpp Apple Silicon scoreboard
Mac mini M5 Pro 64GB (2026)18-core CPU, 20-core GPU 64 307 about 81B 19
publicLlama 2 7B Q4_0: 66.3 tok/s (20-core GPU, August 2026 build) · llama.cpp Apple Silicon scoreboard
256 to 512 GB unified
Mac Studio M3 Ultra 512GB (2025)previous generation 512 819 about 670B 50
publicgpt-oss-20b MXFP4: 115.5 tok/s · llama.cpp gpt-oss guide
Mac Studio M5 Ultra 256GB (2026)30-core CPU, 64-core GPU; 512GB only with the 80-core GPU 256 1200 about 333B 73
publicLlama 2 7B Q4_0: 179.1 tok/s (80-core GPU) · llama.cpp Apple Silicon scoreboard
pooled across machines
8 × Tesla V100 32GB, four nodes joined over 25 GbEllama.cpp RPC, layer split 8 × 32 8 × 900 about 423B 55
measured here744B MoE at 1 bit (202 GB): 12 to 14 tok/s · V100 note 01

Multi-device rows show memory and bandwidth per device. Under layer split only one device reads at a time, so the ceiling uses one device's bandwidth; under tensor parallelism all devices read at once. On two V100s in this notebook, switching from layer split to tensor parallel roughly doubled decode (entry 03). Apple and AMD unified-memory rows show total memory; the GPU can address most but not all of it, so their "fits" column assumes 93% (DGX Spark, Ryzen AI Max) or 75% (Macs, the macOS default) is usable. A 16 GB card misses the 27B at Q4_K_M by a small margin; with the slightly smaller IQ4_XS file and a 4-bit KV cache it fits, as entry 13 shows.

One model, many machines

The llama.cpp project keeps three community scoreboards (CUDA, ROCm, and Apple Metal) that run the same small model with the same command: Llama 2 7B at Q4_0, a 3.56 GiB file, generating 128 tokens from an empty context. It is an old model and a small one, so the absolute numbers are higher than anything useful today, but it is the only probe run the same way on all of this hardware. The ratio column shows what fraction of the bandwidth ceiling each result reached.

public · Llama 2 7B Q4_0, tg128, tok/s
RTX 50901792 GB/s · CUDA
290.02
RTX PRO 6000 Blackwell1792 GB/s · CUDA
274.2
RTX 40901008 GB/s · CUDA
186.21
RTX 5080960 GB/s · CUDA
181.99
M5 Ultra, 80-core GPU1228 GB/s · Metal
179.1
RTX 5070 Ti896 GB/s · CUDA
176.85
RX 7900 XTX960 GB/s · ROCm
167.11
RTX 3090936 GB/s · CUDA
158.16
Tesla V100 32GB900 GB/s · CUDA
129.08
M5 Max, 40-core GPU614 GB/s · Metal
119.92
Instinct MI50 32GB1000 GB/s · ROCm
98.95
Radeon AI PRO R9700640 GB/s · ROCm
93.84
M3 Ultra, 80-core GPU819 GB/s · Metal
92.14
RTX 5060 Ti 16GB448 GB/s · CUDA
90.94
M4 Max, 40-core GPU546 GB/s · Metal
83.06
RTX 3060 12GB360 GB/s · CUDA
75.57
M5 Pro, 20-core GPU307 GB/s · Metal
66.33
DGX Spark273 GB/s · CUDA
57.21
M4 Pro, 20-core GPU273 GB/s · Metal
50.74
Ryzen AI Max+ 395256 GB/s · ROCm
50.01
Token generation for the same 3.56 GiB model on each device, fastest first, from the llama.cpp CUDA, ROCm and Apple Silicon scoreboards (read 2026-10-13). Devices under about 500 GB/s reach 70 to 83% of their bandwidth ceiling on this small model; the fastest reach 55 to 62%, because fixed costs per token weigh more when each token takes only a few milliseconds. The lowest ratios (Instinct MI50, 38%; M3 Ultra, 43%, on a 2023 build) point to software rather than hardware.
Data and sources
Hardware GB/s tok/s Of ceiling Backend, build Source
RTX 5090 1792 290.02 62% CUDA, 8cf6b42 CUDA scoreboard
RTX PRO 6000 Blackwell 1792 274.2 58% CUDA, 79c1160 CUDA scoreboard
RTX 4090 1008 186.21 71% CUDA, 2241453 CUDA scoreboard
RTX 5080 960 181.99 72% CUDA, 8a4280c CUDA scoreboard
M5 Ultra, 80-core GPU 1228 179.1 56% Metal, c1d0e7a Apple Silicon scoreboard
RTX 5070 Ti 896 176.85 75% CUDA, 933414c CUDA scoreboard
RX 7900 XTX 960 167.11 67% ROCm, 2f0c2db ROCm scoreboard
RTX 3090 936 158.16 65% CUDA, c76b420 CUDA scoreboard
Tesla V100 32GB 900 129.08 55% CUDA, 51f5a45 CUDA scoreboard
M5 Max, 40-core GPU 614 119.92 75% Metal, c1d0e7a Apple Silicon scoreboard
Instinct MI50 32GB 1000 98.95 38% ROCm, 97d5117 ROCm scoreboard
Radeon AI PRO R9700 640 93.84 56% ROCm, bd4ef13 ROCm scoreboard
M3 Ultra, 80-core GPU 819 92.14 43% Metal, 8e672ef (2023) Apple Silicon scoreboard
RTX 5060 Ti 16GB 448 90.94 78% CUDA, 89d10295 CUDA scoreboard
M4 Max, 40-core GPU 546 83.06 58% Metal, 8e672ef (2023) Apple Silicon scoreboard
RTX 3060 12GB 360 75.57 80% CUDA, baa9255 CUDA scoreboard
M5 Pro, 20-core GPU 307 66.33 83% Metal, c1d0e7a Apple Silicon scoreboard
DGX Spark 273 57.21 80% CUDA, 5acd455 CUDA scoreboard
M4 Pro, 20-core GPU 273 50.74 71% Metal, 8e672ef (2023) Apple Silicon scoreboard
Ryzen AI Max+ 395 256 50.01 75% ROCm, e60f241 ROCm scoreboard

Ceiling = bandwidth ÷ 3.8226 GB (the 3.56 GiB file). The CUDA and ROCm values are without flash attention; Apple values are from the scoreboard's Q4_0 column.

A modern MoE on large-memory machines

gpt-oss-120b in its released MXFP4 format is a 59.02 GiB file with 5.1B active parameters per token. It fits on one 96 GB workstation card and on every 128 GB unified-memory machine, which makes it a useful common probe for that class.

Hardware BandwidthGB/s Decodetok/s Test Source
RTX PRO 6000 Blackwell 96GB 1,792 196.31 tg128 llama.cpp gpt-oss guide (discussion 15396), August 2025
Mac Studio M2 Ultra 192GB, 76-core GPU 800 79.68 tg128 llama.cpp gpt-oss guide (discussion 15396), August 2025
NVIDIA DGX Spark 128GB 273 58.72 tg32, empty context llama.cpp benches/dgx-spark, 2026-02-05
Ryzen AI Max+ 395 128GB 256 56.61 tg128, Vulkan (RADV) kyuz0 Strix Halo toolbox results, 2026-05-16

On the 128 GB machines decode falls with context: on the DGX Spark from 58.7 tok/s at an empty context to 42.8 at 32K tokens, and on the Ryzen AI Max+ 395 from 56.6 to 35.0 at 64K, in the same sources. In this notebook the DGX Spark ran larger MoE models than this one: DeepSeek-V4-Flash (284B, 13B active) at 19.2 tok/s and Qwen3.8-Flash-Next (180B, 6B active) at 43.2 tok/s with speculative decoding (entries 08 and 10).

Where this notebook sits

The machines measured here are a narrow slice of the ladder: datacenter cards from 2017, one unified-memory desktop, two gaming cards and a laptop-class chip. The table repeats their headline decode numbers next to the bandwidth ceiling, so they can be read against the public figures above.

Hardware Model and setup Decodetok/s Entry
RTX 3080, modified to 20 GB Qwen3.6-27B IQ4_XS + MTP, 128K context 72.3 entry 12
2 × V100 PCIe Qwen3.8-27B Q4_1, tensor parallel, MTP 66 entry 03
2 × V100 PCIe Qwen3.8-Flash-Next Q8_0 (188 GB), second card as expert cache 55 to 58 V100 note 05
RTX 5080 16GB Qwen3.6-27B IQ4_XS, no MTP about 49 entry 13
DGX Spark Qwen3.8-Flash-Next 180B UD-Q4_K_XL + MTP 43.2 entry 10
RTX 3080, modified to 20 GB Qwen3.6-27B IQ4_XS, no MTP 39 entry 12
2 × V100 PCIe, layer split Qwen3.8-27B Q8_0, no MTP 23.6 V100 note 02
5 × V100, three nodes DeepSeek-V4-Flash IQ3_XXS, llama.cpp RPC 21.2 entry 02
DGX Spark DeepSeek-V4-Flash UD-IQ3_XXS 19.2 entry 08
8 × V100, four nodes 744B MoE at 1 bit, llama.cpp RPC 12 to 14 V100 note 01
DGX Spark Qwen3.8-27B Q8_0, no MTP 7.87 entry 09

Reading these numbers

  1. Builds differ between rows. Scoreboard entries are single runs submitted by different people with whatever llama.cpp commit they had. The Apple M1 to M4 rows were all run at a November 2023 build and the M5 rows at an August 2026 build; the same M2 Ultra rose from 94.3 to 125.2 tok/s on that model between those two builds.
  2. Backends differ by more than hardware generations. On the same Radeon RX 7900 XTX the Vulkan backend beat ROCm. On a DGX Spark, gpt-oss-20b decoded at 49.7 tok/s under Ollama at launch and 83.4 under llama.cpp four months later.
  3. Empty-context numbers are the best case. Every public number on this page is at or near an empty context. In this notebook a dense 27B fell to 38% of its short-context speed at 224K tokens.
  4. Speculative decoding is left out of public rows. The scoreboards measure plain decoding. With a draft head (MTP), measured speed here rose 1.5 to 2.3 times on every machine, so a measured-here number with MTP is not comparable to a public number without it; those rows say so.