Adding a datapoint for a hardware class not yet in the benchmark table: AMD Ryzen AI Max+ 395 "Strix Halo" with 128 GB unified memory, running headless CPU-only. Short version: frontier-quality answers at ~0.8–1.0 tok/s sustained, i.e. usable for single well-scoped questions, not for interactive/agentic loops.
Hardware / OS
|
|
| Machine |
GMKtec EVO-X2 |
| CPU |
AMD Ryzen AI Max+ 395 (Zen 5, 16C/32T; AVX2 + AVX-512 + AVX-VNNI) |
| Memory |
128 GB unified (124 GB usable; iGPU VRAM carve-out set to 1 GB minimum in BIOS to free RAM) |
| Storage |
Gen4 NVMe, ext4 |
| OS |
Ubuntu 24.04.4, kernel 7.0.0-28-generic |
| GPU path |
none — CPU-only (no NVIDIA; iGPU unused by the engine) |
| Model |
mateogrgic/GLM-5.2-colibri-int4-with-int8-mtp, 383.8 GB / 150 files; int8 MTP heads verified |
| Engine |
coli v1.0.0, make glm ARCH=native, gcc 13.3 |
Disk bandwidth (iobench, 19 MB random blocks)
| Mode |
Threads |
GB/s |
| O_DIRECT |
8 / 16 / 32 |
5.50 / 5.94 / 5.59 |
| buffered (cold) |
8 |
6.90 |
| buffered (fully cached) |
16 |
54.19 |
Placement (coli plan, quality policy)
RAM 113.3 GB budget · 10.9 GB dense · 6.1 GB runtime · 96.3 GB warm experts · cap 66/layer
disk 276.6 GB cold experts · 1282.7 GB free
Results
All decode figures are 128-token generations (sustained) unless noted. Cold = empty .coli_usage.
| Scenario |
tok/s |
expert hit rate |
pin% |
RSS |
| Cold (7-token burst) |
1.06 |
61.7% |
0.0% |
98.8 GB |
| Novel question (warm store, unseen prompt) |
0.78 |
65.2% |
39.3% |
106 GB |
| Revisited warmed prompt |
0.78–0.80 |
66–67% |
39–40% |
106 GB |
--topp 0.85 |
0.86 |
66.9% |
40.0% |
105 GB |
DIRECT=1 |
0.89 |
67.3% |
40.9% |
106 GB |
DIRECT=1 + --topp 0.85 |
0.99 |
67.9% |
42.4% |
105 GB |
Speculative decoding (int8 MTP heads): engaged, 2.0–3.5 tokens/forward, MTP acceptance 35–83% across runs. (Confirmed the int8 head sizes before running — the int4 head would have disabled this.)
Observations
- Cache warming does not improve wall-clock here. Across ~11 turns the pin store rose from 3% to ~40%, but sustained tok/s stayed ~0.78 and expert hit-rate plateaued at ~66% almost immediately. A revisited prompt (0.80) was no faster than a novel one (0.78). With ~698 experts routed per token, the ~33% that miss must stream from disk regardless of pinning, and 96 GB of warm budget can't blanket the 372 GB expert space. Net: on this hardware, warming shifts hits from LRU to pin but not the clock.
- The I/O knobs matter more than warming.
DIRECT=1 (+14%) and --topp 0.85 (+10%) stack to +27% (≈1.0 tok/s). DIRECT=1 being the bigger lever is consistent with observed memory pressure: at the default RAM budget the box sits at ~1 GB free with kswapd active, so bypassing the page cache avoids reclaim overhead. (I did not test a lower --ram to leave page-cache headroom — that may be worth trying.)
- Decode decays with context length: ~0.89 tok/s at token 16 → ~0.74 at token 96 (KV growth). Short answers are fastest.
- Answer quality is excellent — coherent, accurate, well-structured, correct LaTeX/math. This is a genuine frontier model; the only cost is speed.
Practical takeaway
For a ~128-token answer, budget ~2.5–3 minutes. That makes it viable for single, surgical questions (my intended use is offline/low-connectivity fieldwork where a slow-but-capable model beats none) but not for agentic coding loops or long-context prompts. Recommended run flags on this hardware: DIRECT=1 ... --topp 0.85.
Happy to run additional configurations (lower --ram, --policy balanced, longer contexts, PIPE/PILOT toggles) if useful for the table.
Adding a datapoint for a hardware class not yet in the benchmark table: AMD Ryzen AI Max+ 395 "Strix Halo" with 128 GB unified memory, running headless CPU-only. Short version: frontier-quality answers at ~0.8–1.0 tok/s sustained, i.e. usable for single well-scoped questions, not for interactive/agentic loops.
Hardware / OS
mateogrgic/GLM-5.2-colibri-int4-with-int8-mtp, 383.8 GB / 150 files; int8 MTP heads verifiedcoliv1.0.0,make glm ARCH=native, gcc 13.3Disk bandwidth (
iobench, 19 MB random blocks)Placement (
coli plan, quality policy)Results
All decode figures are 128-token generations (sustained) unless noted. Cold = empty
.coli_usage.--topp 0.85DIRECT=1DIRECT=1+--topp 0.85Speculative decoding (int8 MTP heads): engaged, 2.0–3.5 tokens/forward, MTP acceptance 35–83% across runs. (Confirmed the int8 head sizes before running — the int4 head would have disabled this.)
Observations
DIRECT=1(+14%) and--topp 0.85(+10%) stack to +27% (≈1.0 tok/s).DIRECT=1being the bigger lever is consistent with observed memory pressure: at the default RAM budget the box sits at ~1 GB free withkswapdactive, so bypassing the page cache avoids reclaim overhead. (I did not test a lower--ramto leave page-cache headroom — that may be worth trying.)Practical takeaway
For a ~128-token answer, budget ~2.5–3 minutes. That makes it viable for single, surgical questions (my intended use is offline/low-connectivity fieldwork where a slow-but-capable model beats none) but not for agentic coding loops or long-context prompts. Recommended run flags on this hardware:
DIRECT=1 ... --topp 0.85.Happy to run additional configurations (lower
--ram,--policy balanced, longer contexts,PIPE/PILOTtoggles) if useful for the table.