CoolFace
Datasetpublic

axjns/strix-halo-inference-bench

Strix Halo Local Inference Benchmarks Measured prefill and decode throughput, and real VRAM cost, for local GGUF models on AMD Strix Halo (Radeon 8060S / gfx1151) under ROCm. Why this exists Strix Halo inverts the usual local-inference trade-off. A discrete 24 GB card gives you high memory bandwidth and a hard capacity ceiling; Strix Halo gives you the opposite — up to 64 GiB addressable as VRAM out of 128 GB unified, at substantially lower bandwidth. That changes… See the full description on the dataset page: https://huggingface.co/datasets/axjns/strix-halo-inference-bench.

sourceHugging Faceapache-2.0updated 1mo agoView on Hugging Face
1likes33downloads
Dataset Card

Strix Halo Local Inference Benchmarks

Measured prefill and decode throughput, and real VRAM cost, for local GGUF models on AMD Strix Halo (Radeon 8060S / gfx1151) under ROCm.

Why this exists

Strix Halo inverts the usual local-inference trade-off. A discrete 24 GB card gives you high memory bandwidth and a hard capacity ceiling; Strix Halo gives you the opposite — up to 64 GiB addressable as VRAM out of 128 GB unified, at substantially lower bandwidth. That changes which models are worth running, and by how much.

Almost none of this is documented with numbers. People evaluating these machines are working from forum anecdotes and vendor slides. This dataset is an attempt to fix that for one specific, fully-specified machine, with the harness published so the numbers can be checked.

The headline result is not about quantization at all — it is about architecture. Decode throughput, every model measured, same machine:

modelarchquantVRAMprefilldecode
ornith-1.0-35bMoEQ4KM20.1 GiB1102.5 tok/s74.1 tok/s
Qwen3.6-35B-A3BMoEUD-Q4KM20.7 GiB1014.3 tok/s62.2 tok/s
gpt-oss-120bMoEQ4KM58.9 GiB648.4 tok/s57.2 tok/s
Qwen3.6-35B-A3BMoEQ8_034.7 GiB1136.0 tok/s53.5 tok/s
Qwen3.6-27BdenseQ3KM13.2 GiB297.0 tok/s14.4 tok/s
Qwen3.6-27BdenseQ4_014.9 GiB339.4 tok/s13.4 tok/s
Qwen3.8-27BdenseUD-Q4KXL16.9 GiB349.0 tok/s11.9 tok/s
Dolphin-Mistral-24BdenseQ6_K18.4 GiB380.1 tok/s11.5 tok/s
gemma-4-31B-itdenseUD-Q4KXL19.6 GiB279.7 tok/s11.2 tok/s
Qwen3.6-27BdenseQ5KM18.5 GiB330.6 tok/s11.0 tok/s
Qwen3.6-27BdenseQ6_K20.9 GiB303.4 tok/s9.5 tok/s

Every MoE beats every dense model by roughly 5-7x on decode, and a 120B MoE at 58.9 GiB decodes faster than a 27B dense model at 16.9 GiB. On memory-bandwidth-bound hardware the active parameter count sets decode speed, not the total — so unified memory's large capacity is worth most when spent on sparse models.

Quantization matters too, but an order of magnitude less. Qwen3.6-27B, same model and machine, across four quantizations:

quantfile VRAMprefill 512decode 128decode @4k
Q3KM13.2 GiB297.0 tok/s14.4 tok/s14.6 tok/s
Q4_014.9 GiB339.4 tok/s13.4 tok/s13.1 tok/s
Q5KM18.5 GiB330.6 tok/s11.0 tok/s10.8 tok/s
Q6_K20.9 GiB303.4 tok/s9.5 tok/s9.4 tok/s

Decode throughput falls steadily as the weights grow; prefill stays flat within noise. That is the whole platform in one table: prefill is compute-bound and this iGPU handles it respectably, decode is memory-bandwidth-bound and that is where you pay. *On this hardware the quantization you choose is your decode speed, and prefill numbers will not warn you about it.*

Every model measured so far:

modelquantVRAMprefilldecode
Qwen3.6-27BQ3KM13.2 GiB297.0 tok/s14.4 tok/s
Qwen3.6-27BQ4_014.9 GiB339.4 tok/s13.4 tok/s
Qwen3.6-27BQ5KM18.5 GiB330.6 tok/s11.0 tok/s
Qwen3.6-27BQ6_K20.9 GiB303.4 tok/s9.5 tok/s
Qwen3.6-35B-A3BQ8_034.7 GiB1136.0 tok/s53.5 tok/s
Qwen3.6-35B-A3BUD-Q4KM20.7 GiB1014.3 tok/s62.2 tok/s
Qwen3.8-27BUD-Q4KXL16.9 GiB349.0 tok/s11.9 tok/s
cognitivecomputations_Dolphin-Mistral-24B-Venice-EditionQ6_K18.4 GiB380.1 tok/s11.5 tok/s
gemma-4-31B-itUD-Q4KXL19.6 GiB279.7 tok/s11.2 tok/s
gpt-oss-120bQ4KM58.9 GiB648.4 tok/s57.2 tok/s
ornith-1.0-35bQ4KM20.1 GiB1102.5 tok/s74.1 tok/s

Any capacity planning that quotes a single "tokens/sec" figure for this hardware is hiding the number that actually matters for interactive use.

What's measured

One row per (model, quant, benchmark point). Throughput comes from llama-bench; VRAM is sampled independently because llama-bench does not report it.

fieldmeaning
model_labelGGUF filename stem
quantquantization parsed from the filename (Q4_K_M, UD-Q4_K_XL, IQ2XXS, …)
file_size_byteson-disk size of the GGUF
phaseprefill or decode
n_prompt / n_gen / depthbenchmark point; depth = pre-filled KV cache
tokens_per_secmean over repetitions
tokens_per_sec_stddevspread across repetitions
model_vram_gibpeak minus baseline — what this model actually cost
peak_vram_gib / baseline_vram_gibraw figures behind the above
gpu_contendedtrue if another GPU workload was resident
concurrent_workloadswhat those workloads were
lb_*every field llama-bench emitted, passed through verbatim
gpu, gcn_arch, rocm_version, kernel, llama_bench_flags, …environment

lb_* fields are passed through rather than re-derived, so the schema survives upstream llama-bench changes and you can always recover the original output.

Method

  • llama-bench with -ngl 999 (all layers on GPU) unless llama_bench_flags says otherwise.
  • 3 repetitions per point; mean and stddev both recorded.
  • Four points per model: prefill at 512 and 4096, decode at 128 both cold and with a 4096-token KV cache already warm. Decode-at-depth is included because decode throughput degrades with context and single-number benchmarks hide it.
  • VRAM sampled from rocm-smi at 4 Hz throughout the run; peak retained.
  • Baseline VRAM captured immediately before launch so model_vram_gib reflects the model, not whatever else was resident.

Caveats — read before citing

  • `gpu_contended=true` rows are not comparable to clean rows. Throughput is depressed and baseline VRAM is inflated. They are kept, and flagged, rather than quietly dropped.
  • Unified memory means "VRAM" is a soft boundary. The 64 GiB figure is the current allocation out of 128 GB, not a hardware limit; results shift if you reallocate.
  • One machine, one build. These numbers characterise this box at this ROCm and llama.cpp version. Both are recorded per row; do not generalise across versions.
  • Quantization is parsed from filenames. Convention-dependent, and unknown where the filename doesn't say.
  • Two models are absent, not omitted. diffusiongemma-26B-A4B-it (a diffusion LM) fails to load in this llama.cpp build, and DeepSeek-V4-Flash-ROCmFP3 (95 GiB) exceeds the 64 GiB VRAM allocation. Both are real limits worth knowing.
  • Throughput is measured, quality is not. A fast quant that degrades output is not a good quant, and nothing here tells you which is which.

Reproducing

bash
python strix_bench.py --list                 # discover local GGUFs
python strix_bench.py --all --dry-run        # show the plan
python strix_bench.py --model Qwen3.6-27B    # a quant sweep of one model
python strix_bench.py --all                 # everything

The harness refuses to run if it detects another GPU workload, since that would silently corrupt the numbers. --allow-contended overrides and tags the rows.

Scope

Deliberately narrow: one machine, fully specified, numbers you can reproduce. It is not a leaderboard and makes no claim about which model is "best" — only what each costs to run here.