Local AI hardware leaderboard
AI models timed on the machines I own, with the same prompts and the same test on each. Speeds are tokens a second for one user unless it says otherwise.
The leaderboard, model by model
Each model on every machine that has run it, fastest first at writing code. A speed compares fairly only on the same model, so each model has its own ranking.
Gemma 4 12B
| Place | Machine | File | Writing code | Writing prose | First word | Reading (prefill) | Tested |
|---|---|---|---|---|---|---|---|
| 1 | RTX 4090 desktopllama.cpp on CUDA, version b11669 | Google's own 4-bit QAT file (Q4_0), GGUF | 99.7 tok/s99.4 to 99.9 over 3 runs | 101.9 tok/s101.8 to 102.0 over 3 runs | 0.36 s | 5,072 tok/sabout 19,000 tokens | 20 Oct 2026 |
| 2 | RTX 5070 Ti desktopllama.cpp on CUDA, version b11669 | Google's own 4-bit QAT file (Q4_0), GGUF | 92.5 tok/s92.4 to 92.6 over 3 runs | 94.4 tok/s93.7 to 94.6 over 3 runs | 0.35 s | 2,910 tok/sabout 19,000 tokens | 20 Oct 2026 |
| 3 | Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | Google's own 4-bit QAT file (Q4_0), GGUF | 33.2 tok/s33.2 to 33.3 over 3 runs | 34.6 tok/s34.5 to 34.6 over 3 runs | 0.20 s | 1,513 tok/sabout 19,000 tokens | 29 Oct 2026 |
| 4 | Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | Google's own 4-bit QAT file (Q4_0), GGUF | 28.6 tok/s27.8 to 29.3 over 3 runs | 30.5 tok/s30.1 to 30.8 over 2 runs | 0.89 s | 1,439 tok/sabout 19,000 tokens | 29 Oct 2026 |
| 5 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Balanced | Google's own 4-bit QAT file (Q4_0), GGUF | 25.9 tok/s25.9 to 26.3 over 3 runs | 26.2 tok/s26.0 to 26.6 over 3 runs | 0.72 s | 182 tok/sabout 19,000 tokens | 22 Oct 2026 |
| 6 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | Google's own 4-bit QAT file (Q4_0), GGUF | 22.6 tok/s22.5 to 22.7 over 3 runs | 23.9 tok/s23.3 to 24.0 over 3 runs | 1.02 s | 380 tok/sabout 19,000 tokens | 27 Oct 2026 |
| 7 | Mac mini M4Apple M4, 16GBllama.cpp on Metal, version b11669 | Google's own 4-bit QAT file (Q4_0), GGUF | 12.9 tok/s12.8 to 13.0 over 3 runs | 13.3 tok/s13.3 to 13.4 over 3 runs | 0.72 s | 115 tok/sabout 19,000 tokens | 20 Oct 2026 |
Qwen 3.5 9B
| Place | Machine | File | Writing code | Writing prose | First word | Reading (prefill) | Tested |
|---|---|---|---|---|---|---|---|
| 1 | RTX 4090 desktopllama.cpp on CUDA, version b11669 | Q4_K_M, GGUF | 137.6 tok/s137.0 to 138.2 over 3 runs | 138.3 tok/s137.4 to 138.9 over 3 runs | 0.32 s | 8,584 tok/sabout 19,000 tokens | 20 Oct 2026 |
| 2 | RTX 5070 Ti desktopllama.cpp on CUDA, version b11669 | Q4_K_M, GGUF | 126.6 tok/s | 127.0 tok/s126.9 to 127.0 over 3 runs | 0.25 s | 5,275 tok/sabout 19,000 tokens | 20 Oct 2026 |
| 3 | Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | Q4_K_M, GGUF | 44.6 tok/s44.5 to 44.7 over 3 runs | 45.7 tok/s45.4 to 45.8 over 3 runs | 0.12 s | 2,684 tok/sabout 19,000 tokens | 29 Oct 2026 |
| 4 | Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | Q4_K_M, GGUF | 40.5 tok/s40.2 to 40.8 over 3 runs | 39.7 tok/s39.5 to 40.7 over 3 runs | 0.21 s | 2,524 tok/sabout 19,000 tokens | 29 Oct 2026 |
| 5 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Best performance | Q4_K_M, GGUF | 38.1 tok/s37.9 to 38.1 over 3 runs | 38.5 tok/s38.4 to 38.5 over 3 runs | 0.18 s | 775 tok/sabout 19,000 tokens | 26 Oct 2026 |
| 6 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | Q4_K_M, GGUF | 32.9 tok/s32.8 to 33.0 over 3 runs | 33.4 tok/s33.2 to 33.6 over 3 runs | 0.36 s | 935 tok/sabout 19,000 tokens | 27 Oct 2026 |
| 7 | Mac mini M4Apple M4, 16GBllama.cpp on Metal, version b11669 | Q4_K_M, GGUF | 17.7 tok/s17.6 to 17.7 over 3 runs | 18.0 tok/s | 0.42 s | 185 tok/sabout 19,000 tokens | 20 Oct 2026 |
Qwen 3.8 27B (each machine in the 4-bit format its own software uses)
| Place | Machine | File | Writing code | Writing prose | First word | Reading (prefill) | Tested |
|---|---|---|---|---|---|---|---|
| 1 | RTX 4090 desktopLM Studio, llama.cpp on CUDA, version 2.55.0 | Q4_K_M, GGUF | 62.4 tok/s61.3 to 62.5 over 3 runs | 45.0 tok/s44.5 to 46.5 over 3 runs | 0.63 s | 1,994 tok/sabout 19,000 tokens | 11 Oct 2026 |
| 2 | Two DGX SparksvLLM across two boxes, version 0.1.dev20003graphics chips capped at 2,200MHz to cut power use4 at once: 96.4 tok/s in total | NVFP4 at 4 bits | 44.7 tok/s43.5 to 45.5 over 3 runs | 28.7 tok/s26.1 to 29.0 over 3 runs | 0.17 s | 2,034 tok/sabout 19,000 tokens | 11 Oct 2026 |
| 3 | One DGX SparkvLLM on one box, version 0.1.dev20003graphics chips capped at 2,200MHz to cut power use4 at once: 60.9 tok/s in total | NVFP4 at 4 bits | 26.7 tok/s25.9 to 27.1 over 3 runs | 16.9 tok/s16.8 to 17.3 over 3 runs | 0.16 s | 1,188 tok/sabout 19,000 tokens | 11 Oct 2026 |
| 4 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBLM Studio, llama.cpp on Vulkan, version 2.55.0on mains power, Windows power mode Balanced | Q4_K_M, GGUF | 23.5 tok/s22.7 to 23.7 over 3 runs | 14.6 tok/s14.6 to 15.4 over 3 runs | 1.30 s | 194 tok/sabout 19,000 tokens | 11 Oct 2026 |
| 5 | Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | Q4_K_M, GGUF | 15.2 tok/s | 15.2 tok/s | 0.32 s | 800 tok/sabout 19,000 tokens | 29 Oct 2026 |
| 6 | Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | Q4_K_M, GGUF | 14.1 tok/s14.0 to 14.3 over 3 runs | 14.0 tok/s13.9 to 14.2 over 3 runs | 0.97 s | 760 tok/sabout 19,000 tokens | 29 Oct 2026 |
| 7 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Balanced | Q4_K_M, GGUF | 12.1 tok/s | 12.1 tok/s12.0 to 12.1 over 3 runs | 1.44 s | 205 tok/sabout 19,000 tokens | 22 Oct 2026 |
| 8 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | Q4_K_M, GGUF | 10.2 tok/s | 10.1 tok/s10.1 to 10.2 over 3 runs | 1.04 s | 259 tok/sabout 19,000 tokens | 27 Oct 2026 |
Gemma 4 26B-A4B
| Place | Machine | File | Writing code | Writing prose | First word | Reading (prefill) | Tested |
|---|---|---|---|---|---|---|---|
| 1 | RTX 4090 desktopllama.cpp on CUDA, version b11669 | UD-IQ4_XS, about 4 bits, GGUF | 161.4 tok/s161.3 to 161.4 over 3 runs | 165.4 tok/s165.3 to 165.5 over 3 runs | 0.32 s | 7,257 tok/sabout 19,000 tokens | 20 Oct 2026 |
| 2 | Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | UD-IQ4_XS, about 4 bits, GGUF | 60.7 tok/s60.6 to 60.8 over 3 runs | 64.5 tok/s64.1 to 64.6 over 3 runs | 0.17 s | 2,328 tok/sabout 19,000 tokens | 29 Oct 2026 |
| 3 | RTX 5070 Ti desktopllama.cpp on CUDA, version b11669 | UD-IQ4_XS, about 4 bits, GGUF | 59.4 tok/s | 59.8 tok/s59.8 to 59.9 over 3 runs | 0.42 s | 2,199 tok/sabout 19,000 tokens | 21 Oct 2026 |
| 4 | Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | UD-IQ4_XS, about 4 bits, GGUF | 58.3 tok/s57.9 to 58.5 over 3 runs | 61.7 tok/s60.8 to 62.0 over 3 runs | 0.87 s | 2,209 tok/sabout 19,000 tokens | 29 Oct 2026 |
| 5 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Balanced | UD-IQ4_XS, about 4 bits, GGUF | 43.3 tok/s43.2 to 43.4 over 3 runs | 43.3 tok/s43.0 to 44.3 over 3 runs | 0.40 s | 271 tok/sabout 19,000 tokens | 22 Oct 2026 |
| 6 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | UD-IQ4_XS, about 4 bits, GGUF | 34.6 tok/s34.6 to 34.8 over 3 runs | 37.2 tok/s36.2 to 37.3 over 3 runs | 0.77 s | 596 tok/sabout 19,000 tokens | 27 Oct 2026 |
gpt-oss-20b
| Place | Machine | File | Writing code | Writing prose | First word | Reading (prefill) | Tested |
|---|---|---|---|---|---|---|---|
| 1 | RTX 4090 desktopllama.cpp on CUDA, version b11669 | MXFP4, GGUF, thinking at its lowest level | 238.6 tok/s238.1 to 239.2 over 3 runs | 241.1 tok/s241.0 to 241.3 over 3 runs | 0.35 s | 9,940 tok/sabout 15,000 tokens | 20 Oct 2026 |
| 2 | RTX 5070 Ti desktopllama.cpp on CUDA, version b11669 | MXFP4, GGUF, thinking at its lowest level | 213.2 tok/s212.6 to 213.2 over 3 runs | 214.4 tok/s214.4 to 217.4 over 3 runs | 0.23 s | 7,884 tok/sabout 15,000 tokens | 21 Oct 2026 |
| 3 | Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | MXFP4, GGUF, thinking at its lowest level | 80.4 tok/s80.1 to 82.1 over 3 runs | 82.5 tok/s82.5 to 83.0 over 3 runs | 0.13 s | 4,415 tok/sabout 15,000 tokens | 29 Oct 2026 |
| 4 | Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | MXFP4, GGUF, thinking at its lowest level | 78.2 tok/s76.8 to 78.3 over 3 runs | 79.7 tok/s78.4 to 80.1 over 3 runs | 0.17 s | 3,530 tok/sabout 15,000 tokens | 29 Oct 2026 |
| 5 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Balanced | MXFP4, GGUF, thinking at its lowest level | 67.2 tok/s66.0 to 69.3 over 3 runs | 66.0 tok/s63.6 to 67.3 over 3 runs | 0.26 s | 1,220 tok/sabout 15,000 tokens | 22 Oct 2026 |
| 6 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | MXFP4, GGUF, thinking at its lowest level | 51.6 tok/s50.9 to 52.3 over 3 runs | 52.1 tok/s52.0 to 52.6 over 3 runs | 0.24 s | 1,102 tok/sabout 15,000 tokens | 27 Oct 2026 |
Ternary Bonsai 2 27B
| Place | Machine | File | Writing code | Writing prose | First word | Reading (prefill) | Tested |
|---|---|---|---|---|---|---|---|
| 1 | RTX 4090 desktopPrism ML's llama.cpp on CUDA, version b10787 | PTQ1_0, about 1.75 bits a weight, GGUF | 105.5 tok/s105.4 to 105.6 over 3 runs | 106.1 tok/s106.0 to 106.2 over 3 runs | 0.36 s | 2,941 tok/sabout 19,000 tokens | 20 Oct 2026 |
| 2 | RTX 5070 Ti desktopPrism ML's llama.cpp on CUDA, version b10787 | PTQ1_0, about 1.75 bits a weight, GGUF | 98.8 tok/s98.8 to 99.0 over 3 runs | 99.8 tok/s99.5 to 100.0 over 3 runs | 0.39 s | 1,730 tok/sabout 19,000 tokens | 20 Oct 2026 |
| 3 | Mac mini M4Apple M4, 16GBPrism ML's llama.cpp on Metal, version b10787 | PTQ1_0, about 1.75 bits a weight, GGUF | 9.4 tok/s9.4 to 9.9 over 3 runs | 9.6 tok/s9.6 to 10.0 over 3 runs | 1.94 s | 47 tok/sabout 19,000 tokens | 20 Oct 2026 |
Nemotron 3.5 Bolt 74B
| Place | Machine | File | Writing code | Writing prose | First word | Reading (prefill) | Tested |
|---|---|---|---|---|---|---|---|
| 1 | Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | NVIDIA's 24GB GGUF, about 2 bits a weight | 41.5 tok/s41.4 to 41.7 over 3 runs | 42.1 tok/s42.1 to 42.2 over 3 runs | 0.36 s | 1,153 tok/sabout 18,000 tokens | 29 Oct 2026 |
| 2 | Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | NVIDIA's 24GB GGUF, about 2 bits a weight | 37.4 tok/s37.0 to 37.6 over 3 runs | 37.2 tok/s36.2 to 37.8 over 3 runs | 1.03 s | 1,081 tok/sabout 18,000 tokens | 29 Oct 2026 |
| 3 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Balanced | NVIDIA's 24GB GGUF, about 2 bits a weight | 28.6 tok/s28.4 to 28.9 over 3 runs | 27.9 tok/s27.7 to 28.1 over 2 runs | 1.05 s | 371 tok/sabout 18,000 tokens | 22 Oct 2026 |
| 4 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | NVIDIA's 24GB GGUF, about 2 bits a weight | 23.3 tok/s23.0 to 23.3 over 3 runs | 23.0 tok/s22.9 to 23.5 over 3 runs | 3.64 s | 332 tok/sabout 18,000 tokens | 27 Oct 2026 |
Qwen 3.6 35B-A3B
| Place | Machine | File | Writing code | Writing prose | First word | Reading (prefill) | Tested |
|---|---|---|---|---|---|---|---|
| 1 | Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | UD-Q4_K_M, about 4 bits, GGUF | 72.1 tok/s71.7 to 73.0 over 3 runs | 73.8 tok/s72.9 to 75.4 over 3 runs | 0.19 s | 2,339 tok/sabout 19,000 tokens | 29 Oct 2026 |
| 2 | Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | UD-Q4_K_M, about 4 bits, GGUF | 69.7 tok/s69.2 to 70.1 over 2 runs | 71.4 tok/s70.2 to 71.8 over 3 runs | 0.27 s | 2,117 tok/sabout 19,000 tokens | 29 Oct 2026 |
| 3 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Best performance | UD-Q4_K_M, about 4 bits, GGUF | 52.3 tok/s52.3 to 52.5 over 3 runs | 54.5 tok/s54.0 to 54.8 over 3 runs | 0.26 s | 1,006 tok/sabout 19,000 tokens | 27 Oct 2026 |
| 4 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | UD-Q4_K_M, about 4 bits, GGUF | 39.2 tok/s39.0 to 39.4 over 3 runs | 40.5 tok/s40.4 to 40.8 over 3 runs | 0.95 s | 935 tok/sabout 19,000 tokens | 27 Oct 2026 |
Qwen 3.8 27B with multi-token prediction
| Place | Machine | File | Writing code | Writing prose | First word | Reading (prefill) | Tested |
|---|---|---|---|---|---|---|---|
| 1 | Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | Q4_K_M, GGUF | 33.3 tok/s33.1 to 33.4 over 3 runs | 24.5 tok/s24.3 to 24.7 over 3 runs | 0.32 s | 772 tok/sabout 19,000 tokens | 29 Oct 2026 |
| 2 | Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | Q4_K_M, GGUF | 30.7 tok/s30.4 to 30.8 over 3 runs | 22.7 tok/s21.9 to 23.0 over 3 runs | 0.81 s | 734 tok/sabout 19,000 tokens | 29 Oct 2026 |
| 3 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Best performance | Q4_K_M, GGUF | 25.0 tok/s24.7 to 25.3 over 3 runs | 18.5 tok/s18.2 to 18.7 over 3 runs | 0.61 s | 215 tok/sabout 19,000 tokens | 27 Oct 2026 |
| 4 | HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | Q4_K_M, GGUF | 20.2 tok/s19.7 to 20.4 over 3 runs | 14.9 tok/s14.9 to 15.5 over 3 runs | 1.47 s | 237 tok/sabout 19,000 tokens | 27 Oct 2026 |
DeepSeek V4.1 Flash 1017
| Place | Machine | File | Writing code | Writing prose | First word | Reading (prefill) | Tested |
|---|---|---|---|---|---|---|---|
| 1 | Four DGX SparksSGLang across all four boxesgraphics chips capped at 2,200MHz to cut power use | DeepSeek's own release: experts 4-bit MXFP4, the rest 8-bit FP8 | 116.0 tok/s112.6 to 120.2 over 3 runs | 63.0 tok/s58.6 to 63.3 over 3 runs | 0.24 s | 4,924 tok/sabout 15,000 tokens | 20 Oct 2026 |
GLM 5.3 Flash
| Place | Machine | File | Writing code | Writing prose | First word | Reading (prefill) | Tested |
|---|---|---|---|---|---|---|---|
| 1 | Four DGX SparksvLLM across all four boxes, version 0.1.dev20051graphics chips capped at 2,200MHz to cut power use4 at once: 112.3 tok/s in total | NVFP4 at 4 bits, dense layers at 8 | 104.1 tok/s100.0 to 104.2 over 3 runs | 62.7 tok/s62.6 to 63.4 over 3 runs | 0.15 s | 3,159 tok/sabout 16,000 tokens | 11 Oct 2026 |
Qwen 3.5 9B
| Place | Machine | File | Writing code | Writing prose | First word | Reading (prefill) | Tested |
|---|---|---|---|---|---|---|---|
| 1 | Mac mini M4Apple M4, 16GBMLX (mlx-lm) on Metal, version mlx-lm 0.32.2 | MLX 4-bit | 20.5 tok/s20.4 to 20.5 over 3 runs | 20.6 tok/s20.5 to 20.6 over 3 runs | 0.20 s | 207 tok/sabout 19,000 tokens | 20 Oct 2026 |
Each figure is the middle of three runs with the model's thinking switched off, and the range is under it. First word is the wait after a short question. Reading is how fast the machine takes in a long document before it starts to answer, which other sites call prefill or prompt processing. The llama.cpp and Prism ML's llama.cpp rows were run with llama.cpp's own default sampling. The LM Studio rows were run with LM Studio's defaults, which include the model's own multi-token prediction. The "Qwen 3.8 27B with multi-token prediction" rows were run with llama.cpp's own default sampling; multi-token prediction, 2 tokens drafted a step. The MLX (mlx-lm) rows were run with MLX's own default sampling, which always takes the likeliest word (temperature 0). The four DGX Sparks are timed from another machine on the same network, so the first word includes the trip across it.
What I have found so far
My Sparks would run a little faster than the figures on this page.
I cap their graphics chips at 2,200MHz, against about 2,400 uncapped, to cut their power use. When I tested the cap on one box in August, writing speed stayed within 1 per cent, reading was 2 to 4 per cent slower, and the chip's peak power fell from 55.5W to 43.3W.
DeepSeek V4.1 Flash 1017 on the four DGX Sparks: it reads a document of about 15,000 tokens in about 3 seconds, and 16 users at once get 3.1 times what one user gets, in total.
The four DGX Sparks wrote code at 116.0 tokens a second with DeepSeek V4.1 Flash 1017 (DeepSeek's own release: experts 4-bit MXFP4, the rest 8-bit FP8), and read a document of about 15,000 tokens at 4,924 tokens a second. That is a wait of about 3 seconds before the first word (the size of the document divided by the speed).
With DeepSeek V4.1 Flash 1017 thinking before it answers, the first word of the code answer came after about 18 seconds on the four Sparks. With thinking off it came after 0.24 seconds. In 2 of the 3 runs on the four Sparks it was still thinking when the 2,000 tokens ran out, so that wait comes from the one run that answered.
With 16 users at once, the four DGX Sparks wrote 200 tokens a second in total with DeepSeek V4.1 Flash 1017, about 13.8 for each user. That is 3.1 times what one user on their own got (200 divided by 64.0).
GLM 5.3 Flash on the four DGX Sparks: it reads a document of about 16,000 tokens in about 5 seconds.
The four DGX Sparks wrote code at 104.1 tokens a second with GLM 5.3 Flash (NVFP4 at 4 bits, dense layers at 8), and read a document of about 16,000 tokens at 3,159 tokens a second. That is a wait of about 5 seconds before the first word (the size of the document divided by the speed).
With GLM 5.3 Flash thinking before it answers, the first word of the code answer came after about 0.5 seconds on the four Sparks. With thinking off it came after 0.15 seconds.
Qwen 3.8 27B on five machines: the RTX 4090 desktop writes code 6.1 times as fast as the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2), and two of my DGX Sparks read a long document 10 times as fast as the HP ZBook Ultra G1a (LM Studio, llama.cpp on Vulkan).
With Qwen 3.8 27B on all of them (each machine in the 4-bit format its own software uses), the RTX 4090 desktop wrote code at 62.4 tokens a second, two of my DGX Sparks at 44.7, one DGX Spark on its own at 26.7, the HP ZBook Ultra G1a (LM Studio, llama.cpp on Vulkan) at 23.5, the Lenovo Yoga Pro 9n (llama.cpp on CUDA) at 15.2, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) at 14.1, the HP ZBook Ultra G1a (llama.cpp on Vulkan) at 12.1 and the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) at 10.2.
Two of my DGX Sparks read a document of about 19,000 tokens at 2,034 tokens a second, the RTX 4090 desktop at 1,994, one DGX Spark on its own at 1,188, the Lenovo Yoga Pro 9n (llama.cpp on CUDA) at 800, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) at 760, the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) at 259, the HP ZBook Ultra G1a (llama.cpp on Vulkan) at 205 and the HP ZBook Ultra G1a (LM Studio, llama.cpp on Vulkan) at 194. That is a wait of about 9 seconds on the two Sparks, 9 seconds on the 4090, 16 seconds on the single Spark, 23 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA), 25 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2), 72 seconds on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2), 91 seconds on the HP ZBook Ultra G1a (llama.cpp on Vulkan) and 97 seconds on the HP ZBook Ultra G1a (LM Studio, llama.cpp on Vulkan) before the first word (the size of the document divided by each speed).
With Qwen 3.8 27B thinking before it answers, the first word of the code answer came after about 7 seconds on the 4090, 14 seconds on the two Sparks (one run), 17 seconds on the single Spark (one run) and 22 seconds on the HP ZBook Ultra G1a (LM Studio, llama.cpp on Vulkan). With thinking off it came after 1.3 seconds at most.
On the prose prompt with thinking on, Qwen 3.8 27B was still thinking when the 2,000 tokens ran out, which took 37 seconds on the 4090, 55 seconds on the two Sparks, 86 seconds on the single Spark and 104 seconds on the HP ZBook Ultra G1a (LM Studio, llama.cpp on Vulkan).
Given room for 8,000 tokens, the prose answer began after 52 seconds in one run on the two Sparks and after 271 seconds in one run on the single Spark. The thinking before it ran to about 1,800 and 7,400 tokens, so most of that gap is the model thinking for longer.
Gemma 4 12B on five machines: the RTX 4090 desktop writes code 7.7 times as fast as the Mac mini M4, and reads a long document 44 times as fast.
With the same model on each (Gemma 4 12B, Google's own 4-bit QAT file (Q4_0), GGUF), the RTX 4090 desktop wrote code at 99.7 tokens a second, the RTX 5070 Ti desktop at 92.5, the Lenovo Yoga Pro 9n (llama.cpp on CUDA) at 33.2, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) at 28.6, the HP ZBook Ultra G1a (llama.cpp on Vulkan) at 25.9, the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) at 22.6 and the Mac mini M4 at 12.9.
The RTX 4090 desktop read a document of about 19,000 tokens at 5,072 tokens a second, the RTX 5070 Ti desktop at 2,910, the Lenovo Yoga Pro 9n (llama.cpp on CUDA) at 1,513, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) at 1,439, the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) at 380, the HP ZBook Ultra G1a (llama.cpp on Vulkan) at 182 and the Mac mini M4 at 115. That is a wait of about 4 seconds on the 4090, 6 seconds on the 5070 Ti, 12 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA), 13 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2), 49 seconds on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2), 103 seconds on the HP ZBook Ultra G1a (llama.cpp on Vulkan) and 162 seconds on the Mac mini before the first word (the size of the document divided by each speed).
With Gemma 4 12B thinking before it answers, the first word of the code answer came after about 8 seconds on the 5070 Ti, 9 seconds on the 4090, 22 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA), 29 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2), 36 seconds on the HP ZBook Ultra G1a (llama.cpp on Vulkan), 55 seconds on the Mac mini and 56 seconds on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2). With thinking off it came after 1.0 second at most.
With 16 users at once, the RTX 4090 desktop wrote 307 tokens a second in total with Gemma 4 12B, about 38.4 for each user. That is 3.4 times what one user on their own got (307 divided by 90.5).
With 16 users at once, the RTX 5070 Ti desktop wrote 200 tokens a second in total with Gemma 4 12B, about 32.5 for each user. That is 2.4 times what one user on their own got (200 divided by 82.6).
With 16 users at once, the HP ZBook Ultra G1a (llama.cpp on Vulkan) wrote 36 tokens a second in total with Gemma 4 12B, about 3.7 for each user. That is 1.6 times what one user on their own got (36 divided by 22.8).
With 16 users at once, the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) wrote 35 tokens a second in total with Gemma 4 12B, about 5.9 for each user. That is 1.7 times what one user on their own got (35 divided by 20.6).
With 4 users at once, the Mac mini M4 wrote 26 tokens a second in total with Gemma 4 12B, about 9.5 for each user. That is 2.4 times what one user on their own got (26 divided by 10.9).
With 16 users at once, the Lenovo Yoga Pro 9n (llama.cpp on CUDA) wrote 82 tokens a second in total with Gemma 4 12B, about 14.8 for each user. That is 2.5 times what one user on their own got (82 divided by 32.6).
With 16 users at once, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) wrote 76 tokens a second in total with Gemma 4 12B, about 13.5 for each user. That is 2.7 times what one user on their own got (76 divided by 28.1).
Gemma 4 26B-A4B on four machines: the RTX 4090 desktop writes code 4.7 times as fast as the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2), and the RTX 4090 desktop reads a long document 27 times as fast as the HP ZBook Ultra G1a (llama.cpp on Vulkan).
With the same model on each (Gemma 4 26B-A4B, UD-IQ4_XS, about 4 bits, GGUF), the RTX 4090 desktop wrote code at 161.4 tokens a second, the Lenovo Yoga Pro 9n (llama.cpp on CUDA) at 60.7, the RTX 5070 Ti desktop at 59.4, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) at 58.3, the HP ZBook Ultra G1a (llama.cpp on Vulkan) at 43.3 and the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) at 34.6.
The RTX 4090 desktop read a document of about 19,000 tokens at 7,257 tokens a second, the Lenovo Yoga Pro 9n (llama.cpp on CUDA) at 2,328, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) at 2,209, the RTX 5070 Ti desktop at 2,199, the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) at 596 and the HP ZBook Ultra G1a (llama.cpp on Vulkan) at 271. That is a wait of about 3 seconds on the 4090, 8 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA), 8 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2), 8 seconds on the 5070 Ti, 31 seconds on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) and 69 seconds on the HP ZBook Ultra G1a (llama.cpp on Vulkan) before the first word (the size of the document divided by each speed).
With Gemma 4 26B-A4B thinking before it answers, the first word of the code answer came after about 5 seconds on the 4090, 15 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2), 17 seconds on the 5070 Ti, 17 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA), 22 seconds on the HP ZBook Ultra G1a (llama.cpp on Vulkan) and 31 seconds on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2). With thinking off it came after 0.9 seconds at most. In 1 of the 3 runs on the HP ZBook Ultra G1a (llama.cpp on Vulkan) it was still thinking when the 2,000 tokens ran out, so that wait comes from the runs that answered.
With 16 users at once, the RTX 4090 desktop wrote 383 tokens a second in total with Gemma 4 26B-A4B, about 39.9 for each user. That is 2.7 times what one user on their own got (383 divided by 139.5).
With 16 users at once, the RTX 5070 Ti desktop wrote 124 tokens a second in total with Gemma 4 26B-A4B, about 9.5 for each user. That is 2.3 times what one user on their own got (124 divided by 54.3).
With 16 users at once, the HP ZBook Ultra G1a (llama.cpp on Vulkan) wrote 52 tokens a second in total with Gemma 4 26B-A4B, about 4.7 for each user. That is 1.4 times what one user on their own got (52 divided by 37.6).
With 16 users at once, the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) wrote 48 tokens a second in total with Gemma 4 26B-A4B, about 6.7 for each user. That is 1.5 times what one user on their own got (48 divided by 31.9).
With 16 users at once, the Lenovo Yoga Pro 9n (llama.cpp on CUDA) wrote 116 tokens a second in total with Gemma 4 26B-A4B, about 16.4 for each user. That is 1.9 times what one user on their own got (116 divided by 59.6).
With 16 users at once, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) wrote 102 tokens a second in total with Gemma 4 26B-A4B, about 14.9 for each user. That is 2.0 times what one user on their own got (102 divided by 51.9).
gpt-oss-20b on four machines: the RTX 4090 desktop writes code 4.6 times as fast as the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2), and reads a long document 9.0 times as fast.
With the same model on each (gpt-oss-20b, MXFP4, GGUF, thinking at its lowest level), the RTX 4090 desktop wrote code at 238.6 tokens a second, the RTX 5070 Ti desktop at 213.2, the Lenovo Yoga Pro 9n (llama.cpp on CUDA) at 80.4, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) at 78.2, the HP ZBook Ultra G1a (llama.cpp on Vulkan) at 67.2 and the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) at 51.6.
The RTX 4090 desktop read a document of about 15,000 tokens at 9,940 tokens a second, the RTX 5070 Ti desktop at 7,884, the Lenovo Yoga Pro 9n (llama.cpp on CUDA) at 4,415, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) at 3,530, the HP ZBook Ultra G1a (llama.cpp on Vulkan) at 1,220 and the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) at 1,102. That is a wait of about 1.5 seconds on the 4090, 1.9 seconds on the 5070 Ti, 3 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA), 4 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2), 13 seconds on the HP ZBook Ultra G1a (llama.cpp on Vulkan) and 14 seconds on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) before the first word (the size of the document divided by each speed).
With gpt-oss-20b thinking before it answers, the first word of the code answer came after about 1.8 seconds on the 5070 Ti, 3 seconds on the 4090, 4 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA), 4 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2), 7 seconds on the HP ZBook Ultra G1a (llama.cpp on Vulkan) and 7 seconds on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2). With thinking off it came after 0.3 seconds at most.
With 16 users at once, the RTX 4090 desktop wrote 624 tokens a second in total with gpt-oss-20b, about 58.6 for each user. That is 3.1 times what one user on their own got (624 divided by 202.1).
With 16 users at once, the RTX 5070 Ti desktop wrote 560 tokens a second in total with gpt-oss-20b, about 50.9 for each user. That is 3.1 times what one user on their own got (560 divided by 182.8).
With 16 users at once, the HP ZBook Ultra G1a (llama.cpp on Vulkan) wrote 98 tokens a second in total with gpt-oss-20b, about 8.9 for each user. That is 1.8 times what one user on their own got (98 divided by 55.5).
With 16 users at once, the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) wrote 91 tokens a second in total with gpt-oss-20b, about 11.8 for each user. That is 1.9 times what one user on their own got (91 divided by 48.6).
With 16 users at once, the Lenovo Yoga Pro 9n (llama.cpp on CUDA) wrote 200 tokens a second in total with gpt-oss-20b, about 24.0 for each user. That is 2.5 times what one user on their own got (200 divided by 81.6).
With 16 users at once, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) wrote 180 tokens a second in total with gpt-oss-20b, about 21.4 for each user. That is 2.4 times what one user on their own got (180 divided by 75.7).
Qwen 3.5 9B on five machines: the RTX 4090 desktop writes code 7.8 times as fast as the Mac mini M4, and reads a long document 46 times as fast.
With the same model on each (Qwen 3.5 9B, Q4_K_M, GGUF), the RTX 4090 desktop wrote code at 137.6 tokens a second, the RTX 5070 Ti desktop at 126.6, the Lenovo Yoga Pro 9n (llama.cpp on CUDA) at 44.6, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) at 40.5, the HP ZBook Ultra G1a (llama.cpp on Vulkan) at 38.1, the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) at 32.9 and the Mac mini M4 at 17.7.
The RTX 4090 desktop read a document of about 19,000 tokens at 8,584 tokens a second, the RTX 5070 Ti desktop at 5,275, the Lenovo Yoga Pro 9n (llama.cpp on CUDA) at 2,684, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) at 2,524, the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) at 935, the HP ZBook Ultra G1a (llama.cpp on Vulkan) at 775 and the Mac mini M4 at 185. That is a wait of about 2 seconds on the 4090, 4 seconds on the 5070 Ti, 7 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA), 7 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2), 20 seconds on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2), 24 seconds on the HP ZBook Ultra G1a (llama.cpp on Vulkan) and 101 seconds on the Mac mini before the first word (the size of the document divided by each speed).
With Qwen 3.5 9B thinking before it answers, the first word of the code answer came after about 1.5 seconds on the 4090 and 5 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2). With thinking off it came after 0.3 seconds at most. In 2 of the 3 runs on the 4090 it was still thinking when the 2,000 tokens ran out, so that wait comes from the one run that answered. In 2 of the 3 runs on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) it was still thinking when the 2,000 tokens ran out, so that wait comes from the one run that answered.
On the code prompt with thinking on, Qwen 3.5 9B was still thinking when the 2,000 tokens ran out, which took 16 seconds on the 5070 Ti, 45 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA), 53 seconds on the HP ZBook Ultra G1a (llama.cpp on Vulkan), 61 seconds on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) and 113 seconds on the Mac mini.
On the prose prompt with thinking on, Qwen 3.5 9B was still thinking when the 2,000 tokens ran out, which took 15 seconds on the 4090, 16 seconds on the 5070 Ti, 45 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA), 50 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2), 53 seconds on the HP ZBook Ultra G1a (llama.cpp on Vulkan) and 61 seconds on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2).
With 16 users at once, the RTX 4090 desktop wrote 576 tokens a second in total with Qwen 3.5 9B, about 49.1 for each user. That is 4.5 times what one user on their own got (576 divided by 126.8).
With 16 users at once, the RTX 5070 Ti desktop wrote 420 tokens a second in total with Qwen 3.5 9B, about 40.3 for each user. That is 3.7 times what one user on their own got (420 divided by 113.4).
With 16 users at once, the HP ZBook Ultra G1a (llama.cpp on Vulkan) wrote 76 tokens a second in total with Qwen 3.5 9B, about 5.9 for each user. That is 2.1 times what one user on their own got (76 divided by 35.8).
With 16 users at once, the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) wrote 107 tokens a second in total with Qwen 3.5 9B, about 11.5 for each user. That is 3.5 times what one user on their own got (107 divided by 30.9).
With 16 users at once, the Mac mini M4 wrote 44 tokens a second in total with Qwen 3.5 9B, about 4.2 for each user. That is 2.8 times what one user on their own got (44 divided by 15.9).
With 16 users at once, the Lenovo Yoga Pro 9n (llama.cpp on CUDA) wrote 188 tokens a second in total with Qwen 3.5 9B, about 17.1 for each user. That is 4.3 times what one user on their own got (188 divided by 43.9).
With 16 users at once, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) wrote 167 tokens a second in total with Qwen 3.5 9B, about 15.6 for each user. That is 4.4 times what one user on their own got (167 divided by 38.0).
Ternary Bonsai 2 27B on three machines: the RTX 4090 desktop writes code 11 times as fast as the Mac mini M4, and reads a long document 63 times as fast.
With the same model on each (Ternary Bonsai 2 27B, PTQ1_0, about 1.75 bits a weight, GGUF), the RTX 4090 desktop wrote code at 105.5 tokens a second, the RTX 5070 Ti desktop at 98.8 and the Mac mini M4 at 9.4.
The RTX 4090 desktop read a document of about 19,000 tokens at 2,941 tokens a second, the RTX 5070 Ti desktop at 1,730 and the Mac mini M4 at 47. That is a wait of about 6 seconds on the 4090, 11 seconds on the 5070 Ti and 399 seconds on the Mac mini before the first word (the size of the document divided by each speed).
With Ternary Bonsai 2 27B thinking before it answers, the first word of the code answer came after about 4 seconds on the 4090, 6 seconds on the 5070 Ti and 40 seconds on the Mac mini. With thinking off it came after 1.9 seconds at most.
On the prose prompt with thinking on, Ternary Bonsai 2 27B was still thinking when the 2,000 tokens ran out, which took 19 seconds on the 4090 and 21 seconds on the 5070 Ti.
With 16 users at once, the RTX 4090 desktop wrote 309 tokens a second in total with Ternary Bonsai 2 27B, about 29.5 for each user. That is 3.3 times what one user on their own got (309 divided by 93.6).
With 16 users at once, the RTX 5070 Ti desktop wrote 213 tokens a second in total with Ternary Bonsai 2 27B, about 22.7 for each user. That is 2.5 times what one user on their own got (213 divided by 86.9).
With 4 users at once, the Mac mini M4 wrote 5 tokens a second in total with Ternary Bonsai 2 27B, about 1.5 for each user. That is 0.7 times what one user on their own got (5 divided by 7.6).
Nemotron 3.5 Bolt 74B on two machines: the Lenovo Yoga Pro 9n (llama.cpp on CUDA) writes code 1.8 times as fast as the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2), and reads a long document 3.5 times as fast.
With the same model on each (Nemotron 3.5 Bolt 74B, NVIDIA's 24GB GGUF, about 2 bits a weight), the Lenovo Yoga Pro 9n (llama.cpp on CUDA) wrote code at 41.5 tokens a second, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) at 37.4, the HP ZBook Ultra G1a (llama.cpp on Vulkan) at 28.6 and the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) at 23.3.
The Lenovo Yoga Pro 9n (llama.cpp on CUDA) read a document of about 18,000 tokens at 1,153 tokens a second, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) at 1,081, the HP ZBook Ultra G1a (llama.cpp on Vulkan) at 371 and the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) at 332. That is a wait of about 16 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA), 17 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2), 50 seconds on the HP ZBook Ultra G1a (llama.cpp on Vulkan) and 56 seconds on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) before the first word (the size of the document divided by each speed).
Qwen 3.6 35B-A3B on two machines: the Lenovo Yoga Pro 9n (llama.cpp on CUDA) writes code 1.8 times as fast as the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2), and reads a long document 2.5 times as fast.
With the same model on each (Qwen 3.6 35B-A3B, UD-Q4_K_M, about 4 bits, GGUF), the Lenovo Yoga Pro 9n (llama.cpp on CUDA) wrote code at 72.1 tokens a second, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) at 69.7, the HP ZBook Ultra G1a (llama.cpp on Vulkan) at 52.3 and the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) at 39.2.
The Lenovo Yoga Pro 9n (llama.cpp on CUDA) read a document of about 19,000 tokens at 2,339 tokens a second, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) at 2,117, the HP ZBook Ultra G1a (llama.cpp on Vulkan) at 1,006 and the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) at 935. That is a wait of about 8 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA), 9 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2), 19 seconds on the HP ZBook Ultra G1a (llama.cpp on Vulkan) and 20 seconds on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) before the first word (the size of the document divided by each speed).
On the code prompt with thinking on, Qwen 3.6 35B-A3B was still thinking when the 2,000 tokens ran out, which took 28 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA), 29 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2), 38 seconds on the HP ZBook Ultra G1a (llama.cpp on Vulkan) and 52 seconds on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2).
On the prose prompt with thinking on, Qwen 3.6 35B-A3B was still thinking when the 2,000 tokens ran out, which took 28 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA), 29 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2), 38 seconds on the HP ZBook Ultra G1a (llama.cpp on Vulkan) and 52 seconds on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2).
With 16 users at once, the HP ZBook Ultra G1a (llama.cpp on Vulkan) wrote 75 tokens a second in total with Qwen 3.6 35B-A3B, about 5.7 for each user. That is 1.5 times what one user on their own got (75 divided by 50.0).
With 16 users at once, the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) wrote 68 tokens a second in total with Qwen 3.6 35B-A3B, about 7.7 for each user. That is 2.0 times what one user on their own got (68 divided by 34.0).
With 16 users at once, the Lenovo Yoga Pro 9n (llama.cpp on CUDA) wrote 161 tokens a second in total with Qwen 3.6 35B-A3B, about 14.8 for each user. That is 2.3 times what one user on their own got (161 divided by 70.1).
With 16 users at once, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) wrote 143 tokens a second in total with Qwen 3.6 35B-A3B, about 13.5 for each user. That is 2.4 times what one user on their own got (143 divided by 60.6).
Qwen 3.8 27B with multi-token prediction on two machines: the Lenovo Yoga Pro 9n (llama.cpp on CUDA) writes code 1.6 times as fast as the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2), and the Lenovo Yoga Pro 9n (llama.cpp on CUDA) reads a long document 3.6 times as fast as the HP ZBook Ultra G1a (llama.cpp on Vulkan).
With the same model on each (Qwen 3.8 27B with multi-token prediction, Q4_K_M, GGUF), the Lenovo Yoga Pro 9n (llama.cpp on CUDA) wrote code at 33.3 tokens a second, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) at 30.7, the HP ZBook Ultra G1a (llama.cpp on Vulkan) at 25.0 and the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) at 20.2.
The Lenovo Yoga Pro 9n (llama.cpp on CUDA) read a document of about 19,000 tokens at 772 tokens a second, the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2) at 734, the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) at 237 and the HP ZBook Ultra G1a (llama.cpp on Vulkan) at 215. That is a wait of about 24 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA), 26 seconds on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2), 79 seconds on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2) and 87 seconds on the HP ZBook Ultra G1a (llama.cpp on Vulkan) before the first word (the size of the document divided by each speed).
Qwen 3.5 9B on the Mac mini M4: it reads a document of about 19,000 tokens in about 91 seconds, and 16 users at once get 3.1 times what one user gets, in total.
The Mac mini M4 wrote code at 20.5 tokens a second with Qwen 3.5 9B (MLX 4-bit), and read a document of about 19,000 tokens at 207 tokens a second. That is a wait of about 91 seconds before the first word (the size of the document divided by the speed).
On the code prompt with thinking on, Qwen 3.5 9B was still thinking when the 2,000 tokens ran out, which took 98 seconds on the Mac mini.
On the prose prompt with thinking on, Qwen 3.5 9B was still thinking when the 2,000 tokens ran out, which took 98 seconds on the Mac mini.
With 16 users at once, the Mac mini M4 wrote 54 tokens a second in total with Qwen 3.5 9B, about 5.2 for each user. That is 3.1 times what one user on their own got (54 divided by 17.6).
The machines
The same test with thinking switched on
| Machine | Model | Code prompt | Prose prompt | Wait before the code | Wait before the prose | Tested |
|---|---|---|---|---|---|---|
| Four DGX SparksSGLang across all four boxesgraphics chips capped at 2,200MHz to cut power use | DeepSeek V4.1 Flash 1017DeepSeek's own release: experts 4-bit MXFP4, the rest 8-bit FP8 | 92.5 tok/s87.6 to 92.8 over 3 runs | 79.6 tok/s70.2 to 85.5 over 3 runs | 18.0 sabout 2,000 tokens of thinkingstill thinking at 2,000 tokens in 2 of 3 runs | 16.8 s12.5 to 21.1 s over 2 runsabout 1,800 tokens of thinkingstill thinking at 2,000 tokens in 1 of 3 runs | 20 Oct 2026 |
| Four DGX SparksvLLM across all four boxes, version 0.1.dev20051graphics chips capped at 2,200MHz to cut power use | GLM 5.3 FlashNVFP4 at 4 bits, dense layers at 8 | 106.1 tok/s106.0 to 111.1 over 3 runs | 61.8 tok/s61.7 to 63.0 over 3 runs | 0.5 s0.4 to 0.8 s over 3 runsabout 40 tokens of thinking | 1.3 s1.3 to 1.8 s over 3 runsabout 80 tokens of thinking | 11 Oct 2026 |
| Two DGX SparksvLLM across two boxes, version 0.1.dev20003graphics chips capped at 2,200MHz to cut power use | Qwen 3.8 27BNVFP4 at 4 bits | 40.9 tok/s38.5 to 41.5 over 3 runs | 36.7 tok/s35.6 to 38.5 over 3 runs | 14.2 sone run onlyabout 540 tokens of thinking | over 55 sstill thinking at 2,000 tokens | 11 Oct 2026 |
| One DGX SparkvLLM on one box, version 0.1.dev20003graphics chips capped at 2,200MHz to cut power use | Qwen 3.8 27BNVFP4 at 4 bits | 25.2 tok/s25.1 to 26.3 over 3 runs | 23.3 tok/s21.6 to 23.5 over 3 runs | 17.3 sone run onlyabout 410 tokens of thinking | over 86 sstill thinking at 2,000 tokens | 11 Oct 2026 |
| RTX 4090 desktopllama.cpp on CUDA, version b11669 | Gemma 4 12BGoogle's own 4-bit QAT file (Q4_0), GGUF | 99.1 tok/s99.0 to 99.1 over 3 runs | 99.8 tok/s99.7 to 99.9 over 3 runs | 9.0 s8.3 to 11.0 s over 3 runsabout 870 tokens of thinking | 11.2 s10.4 to 11.4 s over 3 runsabout 1,100 tokens of thinking | 20 Oct 2026 |
| RTX 4090 desktopllama.cpp on CUDA, version b11669 | Gemma 4 26B-A4BUD-IQ4_XS, about 4 bits, GGUF | 160.8 tok/s160.8 to 160.9 over 3 runs | 160.8 tok/s160.7 to 161.4 over 3 runs | 5.0 s4.4 to 7.5 s over 3 runsabout 770 tokens of thinking | 9.7 s8.8 to 10.5 s over 2 runsabout 1,630 tokens of thinkingstill thinking at 2,000 tokens in 1 of 3 runs | 20 Oct 2026 |
| RTX 4090 desktopllama.cpp on CUDA, version b11669 | gpt-oss-20bMXFP4, GGUF, thinking at its lowest level | 237.9 tok/s237.0 to 238.4 over 3 runs | 240.8 tok/s240.7 to 240.9 over 3 runs | 2.8 s1.8 to 3.3 s over 3 runsabout 580 tokens of thinking | 1.4 s1.2 to 2.2 s over 3 runsabout 240 tokens of thinking | 20 Oct 2026 |
| RTX 4090 desktopllama.cpp on CUDA, version b11669 | Qwen 3.5 9BQ4_K_M, GGUF | 138.1 tok/s138.0 to 138.2 over 3 runs | 138.1 tok/s138.0 to 138.2 over 3 runs | 1.5 sabout 2,000 tokens of thinkingstill thinking at 2,000 tokens in 2 of 3 runs | over 15 sstill thinking at 2,000 tokens | 20 Oct 2026 |
| RTX 4090 desktopLM Studio, llama.cpp on CUDA, version 2.55.0 | Qwen 3.8 27BQ4_K_M, GGUF | 58.5 tok/s57.2 to 59.6 over 3 runs | 54.7 tok/s54.5 to 55.7 over 3 runs | 6.7 s6.5 to 7.8 s over 3 runsabout 350 tokens of thinking | over 37 sstill thinking at 2,000 tokens | 11 Oct 2026 |
| RTX 4090 desktopPrism ML's llama.cpp on CUDA, version b10787 | Ternary Bonsai 2 27BPTQ1_0, about 1.75 bits a weight, GGUF | 105.6 tok/s105.5 to 105.6 over 3 runs | 105.5 tok/s105.5 to 105.6 over 3 runs | 3.5 s3.0 to 5.6 s over 3 runsabout 340 tokens of thinking | over 19 sstill thinking at 2,000 tokens | 20 Oct 2026 |
| RTX 5070 Ti desktopllama.cpp on CUDA, version b11669 | Gemma 4 12BGoogle's own 4-bit QAT file (Q4_0), GGUF | 91.8 tok/s | 92.4 tok/s91.8 to 92.8 over 3 runs | 8.4 s7.7 to 13.8 s over 3 runsabout 750 tokens of thinking | 13.1 s11.5 to 16.7 s over 3 runsabout 1,180 tokens of thinking | 20 Oct 2026 |
| RTX 5070 Ti desktopllama.cpp on CUDA, version b11669 | Gemma 4 26B-A4BUD-IQ4_XS, about 4 bits, GGUF | 59.3 tok/s58.6 to 59.4 over 3 runs | 59.3 tok/s58.6 to 59.5 over 3 runs | 17.3 s13.6 to 21.0 s over 3 runsabout 1,010 tokens of thinking | 28.9 s22.0 to 29.5 s over 3 runsabout 1,660 tokens of thinking | 21 Oct 2026 |
| RTX 5070 Ti desktopllama.cpp on CUDA, version b11669 | gpt-oss-20bMXFP4, GGUF, thinking at its lowest level | 213.0 tok/s212.2 to 213.1 over 3 runs | 213.0 tok/s212.8 to 215.5 over 3 runs | 1.8 s1.8 to 3.3 s over 3 runsabout 340 tokens of thinking | 2.7 sabout 2,000 tokens of thinkingstill thinking at 2,000 tokens in 2 of 3 runs | 21 Oct 2026 |
| RTX 5070 Ti desktopllama.cpp on CUDA, version b11669 | Qwen 3.5 9BQ4_K_M, GGUF | 126.4 tok/s126.3 to 126.4 over 3 runs | 126.4 tok/s126.1 to 126.4 over 3 runs | over 16 sstill thinking at 2,000 tokens | over 16 sstill thinking at 2,000 tokens | 20 Oct 2026 |
| RTX 5070 Ti desktopPrism ML's llama.cpp on CUDA, version b10787 | Ternary Bonsai 2 27BPTQ1_0, about 1.75 bits a weight, GGUF | 98.9 tok/s98.8 to 98.9 over 3 runs | 98.9 tok/s98.6 to 98.9 over 3 runs | 6.2 s5.9 to 6.2 s over 3 runsabout 580 tokens of thinking | over 21 sstill thinking at 2,000 tokens | 20 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Balanced | Gemma 4 12BGoogle's own 4-bit QAT file (Q4_0), GGUF | 25.8 tok/s | 25.9 tok/s25.9 to 26.2 over 3 runs | 36.5 s29.6 to 50.3 s over 3 runsabout 940 tokens of thinking | 48.1 s42.7 to 66.3 s over 3 runsabout 1,240 tokens of thinking | 22 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | Gemma 4 12BGoogle's own 4-bit QAT file (Q4_0), GGUF | 22.4 tok/s22.3 to 22.4 over 3 runs | 22.7 tok/s22.5 to 22.7 over 3 runs | 56.5 s41.7 to 69.4 s over 3 runsabout 1,270 tokens of thinking | 45.2 s44.9 to 57.0 s over 3 runsabout 1,010 tokens of thinking | 27 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Balanced | Gemma 4 26B-A4BUD-IQ4_XS, about 4 bits, GGUF | 43.0 tok/s42.9 to 43.4 over 3 runs | 43.5 tok/s43.4 to 43.9 over 3 runs | 22.5 s19.0 to 26.0 s over 2 runsabout 1,120 tokens of thinkingstill thinking at 2,000 tokens in 1 of 3 runs | 33.5 s29.4 to 37.7 s over 2 runsabout 1,620 tokens of thinkingstill thinking at 2,000 tokens in 1 of 3 runs | 22 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | Gemma 4 26B-A4BUD-IQ4_XS, about 4 bits, GGUF | 34.7 tok/s34.6 to 34.8 over 3 runs | 34.7 tok/s34.5 to 35.1 over 3 runs | 30.9 s23.5 to 47.7 s over 3 runsabout 1,080 tokens of thinking | 38.4 s30.6 to 46.3 s over 2 runsabout 1,580 tokens of thinkingstill thinking at 2,000 tokens in 1 of 3 runs | 27 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Balanced | gpt-oss-20bMXFP4, GGUF, thinking at its lowest level | 66.5 tok/s66.0 to 67.0 over 3 runs | 66.0 tok/s65.9 to 67.2 over 3 runs | 6.9 s4.5 to 7.3 s over 3 runsabout 420 tokens of thinking | 3.7 s3.7 to 3.7 s over 2 runsabout 200 tokens of thinkingstill thinking at 2,000 tokens in 1 of 3 runs | 22 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | gpt-oss-20bMXFP4, GGUF, thinking at its lowest level | 52.3 tok/s51.8 to 52.3 over 3 runs | 52.3 tok/s52.1 to 52.6 over 3 runs | 7.2 s6.7 to 12.3 s over 3 runsabout 360 tokens of thinking | 13.3 s3.9 to 22.6 s over 2 runsabout 1,160 tokens of thinkingstill thinking at 2,000 tokens in 1 of 3 runs | 27 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan | Nemotron 3.5 Bolt 74B | not tested with thinking on yet | ||||
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2 | Nemotron 3.5 Bolt 74B | not tested with thinking on yet | ||||
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Best performance | Qwen 3.5 9BQ4_K_M, GGUF | 38.0 tok/s38.0 to 38.1 over 2 runs | 38.0 tok/s38.0 to 38.1 over 3 runs | over 53 sstill thinking at 2,000 tokens | over 53 sstill thinking at 2,000 tokens | 26 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | Qwen 3.5 9BQ4_K_M, GGUF | 33.0 tok/s32.8 to 33.1 over 3 runs | 32.9 tok/s32.9 to 33.0 over 3 runs | over 61 sstill thinking at 2,000 tokens | over 61 sstill thinking at 2,000 tokens | 27 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Best performance | Qwen 3.6 35B-A3BUD-Q4_K_M, about 4 bits, GGUF | 52.9 tok/s52.3 to 52.9 over 3 runs | 53.1 tok/s52.5 to 53.1 over 3 runs | over 38 sstill thinking at 2,000 tokens | over 38 sstill thinking at 2,000 tokens | 27 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | Qwen 3.6 35B-A3BUD-Q4_K_M, about 4 bits, GGUF | 39.3 tok/s39.0 to 39.5 over 3 runs | 38.9 tok/s38.9 to 39.2 over 3 runs | over 52 sstill thinking at 2,000 tokens | over 52 sstill thinking at 2,000 tokens | 27 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBLM Studio, llama.cpp on Vulkan, version 2.55.0on mains power, Windows power mode Balanced | Qwen 3.8 27BQ4_K_M, GGUF | 21.1 tok/s20.5 to 21.3 over 3 runs | 19.5 tok/s19.1 to 19.8 over 2 runs | 22.2 s19.1 to 34.8 s over 3 runsabout 410 tokens of thinking | over 104 sstill thinking at 2,000 tokens | 11 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan | Qwen 3.8 27B | not tested with thinking on yet | ||||
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2 | Qwen 3.8 27B | not tested with thinking on yet | ||||
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2 | Qwen 3.8 27B with multi-token prediction | not tested with thinking on yet | ||||
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan | Qwen 3.8 27B with multi-token prediction | not tested with thinking on yet | ||||
| Mac mini M4Apple M4, 16GBllama.cpp on Metal, version b11669 | Gemma 4 12BGoogle's own 4-bit QAT file (Q4_0), GGUF | 12.8 tok/s12.8 to 12.9 over 3 runs | 12.9 tok/s12.7 to 13.0 over 3 runs | 55.2 s49.2 to 65.4 s over 3 runsabout 710 tokens of thinking | 108.9 s80.6 to 128.8 s over 3 runsabout 1,400 tokens of thinking | 20 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | Gemma 4 12BGoogle's own 4-bit QAT file (Q4_0), GGUF | 32.9 tok/s32.8 to 33.2 over 3 runs | 33.2 tok/s32.9 to 33.5 over 3 runs | 21.9 s20.9 to 22.7 s over 3 runsabout 740 tokens of thinking | 42.5 s33.3 to 43.3 s over 3 runsabout 1,420 tokens of thinking | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | Gemma 4 12BGoogle's own 4-bit QAT file (Q4_0), GGUF | 28.7 tok/s28.6 to 28.9 over 3 runs | 28.8 tok/s28.7 to 29.6 over 3 runs | 29.0 s29.0 to 35.6 s over 3 runsabout 860 tokens of thinking | 41.4 s40.4 to 47.0 s over 3 runsabout 1,210 tokens of thinking | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | Gemma 4 26B-A4BUD-IQ4_XS, about 4 bits, GGUF | 59.9 tok/s59.7 to 60.3 over 3 runs | 61.2 tok/s59.9 to 61.4 over 3 runs | 17.3 s15.9 to 27.0 s over 3 runsabout 1,060 tokens of thinking | 17.8 s17.3 to 18.3 s over 2 runsabout 1,130 tokens of thinkingstill thinking at 2,000 tokens in 1 of 3 runs | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | Gemma 4 26B-A4BUD-IQ4_XS, about 4 bits, GGUF | 57.6 tok/s56.4 to 58.2 over 3 runs | 57.8 tok/s57.6 to 58.1 over 3 runs | 14.9 s14.0 to 20.8 s over 3 runsabout 890 tokens of thinking | 31.1 s29.0 to 33.2 s over 2 runsabout 1,900 tokens of thinkingstill thinking at 2,000 tokens in 1 of 3 runs | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | gpt-oss-20bMXFP4, GGUF, thinking at its lowest level | 81.5 tok/s79.5 to 81.9 over 3 runs | 80.8 tok/s80.5 to 81.2 over 3 runs | 4.3 s3.1 to 10.7 s over 3 runsabout 360 tokens of thinking | 6.4 sabout 2,000 tokens of thinkingstill thinking at 2,000 tokens in 2 of 3 runs | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | gpt-oss-20bMXFP4, GGUF, thinking at its lowest level | 78.4 tok/s76.8 to 79.2 over 3 runs | 77.8 tok/s77.0 to 78.5 over 2 runs | 4.5 s3.6 to 22.0 s over 3 runsabout 350 tokens of thinking | 13.2 s7.6 to 18.8 s over 2 runsabout 1,020 tokens of thinking | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA | Nemotron 3.5 Bolt 74B | not tested with thinking on yet | ||||
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2 | Nemotron 3.5 Bolt 74B | not tested with thinking on yet | ||||
| Mac mini M4Apple M4, 16GBMLX (mlx-lm) on Metal, version mlx-lm 0.32.2 | Qwen 3.5 9BMLX 4-bit | 20.5 tok/s20.4 to 20.5 over 3 runs | 20.5 tok/s20.3 to 20.5 over 3 runs | over 98 sstill thinking at 2,000 tokens | over 98 sstill thinking at 2,000 tokens | 20 Oct 2026 |
| Mac mini M4Apple M4, 16GBllama.cpp on Metal, version b11669 | Qwen 3.5 9BQ4_K_M, GGUF | 17.7 tok/s17.7 to 17.8 over 3 runs | 17.7 tok/s17.6 to 17.7 over 3 runs | over 113 sstill thinking at 2,000 tokens | 95.0 sabout 2,000 tokens of thinkingstill thinking at 2,000 tokens in 2 of 3 runs | 20 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | Qwen 3.5 9BQ4_K_M, GGUF | 44.6 tok/s44.5 to 44.8 over 2 runs | 44.5 tok/s44.3 to 44.6 over 3 runs | over 45 sstill thinking at 2,000 tokens | over 45 sstill thinking at 2,000 tokens | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | Qwen 3.5 9BQ4_K_M, GGUF | 40.3 tok/s40.1 to 40.3 over 3 runs | 40.5 tok/s39.5 to 40.8 over 3 runs | 5.2 sabout 2,000 tokens of thinkingstill thinking at 2,000 tokens in 2 of 3 runs | over 50 sstill thinking at 2,000 tokens | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | Qwen 3.6 35B-A3BUD-Q4_K_M, about 4 bits, GGUF | 72.3 tok/s71.9 to 72.7 over 3 runs | 72.7 tok/s70.9 to 73.1 over 3 runs | over 28 sstill thinking at 2,000 tokens | over 28 sstill thinking at 2,000 tokens | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | Qwen 3.6 35B-A3BUD-Q4_K_M, about 4 bits, GGUF | 68.7 tok/s68.7 to 69.8 over 3 runs | 68.7 tok/s68.4 to 70.9 over 3 runs | over 29 sstill thinking at 2,000 tokens | over 29 sstill thinking at 2,000 tokens | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA | Qwen 3.8 27B | not tested with thinking on yet | ||||
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2 | Qwen 3.8 27B | not tested with thinking on yet | ||||
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA | Qwen 3.8 27B with multi-token prediction | not tested with thinking on yet | ||||
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2 | Qwen 3.8 27B with multi-token prediction | not tested with thinking on yet | ||||
| Mac mini M4Apple M4, 16GBPrism ML's llama.cpp on Metal, version b10787 | Ternary Bonsai 2 27BPTQ1_0, about 1.75 bits a weight, GGUF | 9.5 tok/s9.4 to 9.6 over 3 runs | 9.4 tok/s9.4 to 9.5 over 3 runs | 40.0 s37.0 to 52.7 s over 3 runsabout 370 tokens of thinking | 42.6 sabout 2,000 tokens of thinkingstill thinking at 2,000 tokens in 2 of 3 runs | 20 Oct 2026 |
Thinking is the model working through the problem before it answers. For DeepSeek V4.1 Flash 1017, thinking on means high, the middle of the model's three thinking levels (75 on its scale of 1 to 100), on every machine. For GLM 5.3 Flash, thinking on means high, the middle of the model's three thinking levels, on every machine. For Qwen 3.8 27B, thinking on means medium, the middle of the model's three thinking levels, on every machine. For Gemma 4 12B, thinking on means its single thinking setting (it has no levels), on every machine. For Gemma 4 26B-A4B, thinking on means its single thinking setting (it has no levels), on every machine. For gpt-oss-20b, thinking on means medium, the middle of the model's three thinking levels, on every machine. For Qwen 3.5 9B, thinking on means its single thinking setting (it has no levels), on every machine. For Ternary Bonsai 2 27B, thinking on means medium, the middle of the model's three thinking levels, on every machine. For Qwen 3.6 35B-A3B, thinking on means its single thinking setting (it has no levels), on every machine. The speeds in this table count the tokens it thinks with and the tokens of the answer. The wait is from sending the prompt to the first word of the answer, and it is the middle of three runs, because the model thinks for a different length each time. The cap of 2,000 tokens covers the thinking and the answer together. A wait marked "one run only" was timed in a single separate run with room for 8,000 tokens, because the three runs of that row were made before the test timed the answer. Where a wait begins with "over", the model was still thinking when the 2,000 tokens ran out. The speed beside it is then the speed of its thinking, and the real wait is longer than the one shown.
Several users at once
| Machine | Model | 1 user | 2 users | 4 users | 8 users | 16 users | Tested |
|---|---|---|---|---|---|---|---|
| Four DGX SparksSGLang across all four boxesgraphics chips capped at 2,200MHz to cut power use | DeepSeek V4.1 Flash 1017DeepSeek's own release: experts 4-bit MXFP4, the rest 8-bit FP8 | 64.0 tok/s63.2 to 68.2 over 3 runs | 83.0 tok/s43.5 each82.6 to 85.3 over 3 runs | 119.5 tok/s32.1 each117.3 to 124.0 over 3 runs | 153.7 tok/s21.1 each152.5 to 155.7 over 3 runs | 200.3 tok/s13.8 each198.9 to 201.8 over 3 runs | 20 Oct 2026 |
| RTX 4090 desktopllama.cpp on CUDA, version b11669 | Gemma 4 12BGoogle's own 4-bit QAT file (Q4_0), GGUF | 90.5 tok/s90.4 to 90.9 over 3 runs | 135.0 tok/s90.1 each134.8 to 163.0 over 3 runs | 205.2 tok/s79.7 each204.4 to 238.3 over 3 runs | 264.6 tok/s60.3 each263.9 to 325.6 over 3 runs | 307.3 tok/s38.4 each305.3 to 383.2 over 3 runs | 20 Oct 2026 |
| RTX 4090 desktopllama.cpp on CUDA, version b11669 | Gemma 4 26B-A4BUD-IQ4_XS, about 4 bits, GGUF | 139.5 tok/s139.0 to 140.1 over 3 runs | 187.8 tok/s124.6 each187.7 to 219.5 over 3 runs | 281.8 tok/s103.0 each280.7 to 301.9 over 3 runs | 348.5 tok/s70.5 each344.9 to 412.7 over 3 runs | 383.4 tok/s39.9 each382.8 to 459.0 over 3 runs | 20 Oct 2026 |
| RTX 4090 desktopllama.cpp on CUDA, version b11669 | gpt-oss-20bMXFP4, GGUF, thinking at its lowest level | 202.1 tok/s201.8 to 203.3 over 3 runs | 274.8 tok/s174.5 each274.3 to 304.5 over 3 runs | 388.9 tok/s128.7 each386.5 to 404.5 over 3 runs | 498.4 tok/s87.1 each495.3 to 539.2 over 3 runs | 623.5 tok/s58.6 each619.3 to 704.1 over 3 runs | 20 Oct 2026 |
| RTX 4090 desktopllama.cpp on CUDA, version b11669 | Qwen 3.5 9BQ4_K_M, GGUF | 126.8 tok/s122.7 to 127.4 over 3 runs | 210.2 tok/s123.6 each209.5 to 225.8 over 3 runs | 335.3 tok/s102.1 each333.8 to 345.3 over 3 runs | 480.7 tok/s78.8 each471.2 to 500.3 over 3 runs | 576.1 tok/s49.1 each575.3 to 626.1 over 3 runs | 20 Oct 2026 |
| RTX 4090 desktopPrism ML's llama.cpp on CUDA, version b10787 | Ternary Bonsai 2 27BPTQ1_0, about 1.75 bits a weight, GGUF | 93.6 tok/s92.5 to 93.7 over 3 runs | 140.6 tok/s86.4 each139.9 to 150.0 over 3 runs | 208.6 tok/s69.9 each204.9 to 215.0 over 3 runs | 250.6 tok/s44.1 each250.5 to 269.9 over 3 runs | 309.0 tok/s29.5 each305.3 to 340.6 over 3 runs | 20 Oct 2026 |
| RTX 5070 Ti desktopllama.cpp on CUDA, version b11669 | Gemma 4 12BGoogle's own 4-bit QAT file (Q4_0), GGUF | 82.6 tok/s77.6 to 83.7 over 3 runs | 106.8 tok/s82.4 each103.2 to 146.7 over 3 runs | 148.0 tok/s70.4 each145.3 to 185.0 over 3 runs | 223.1 tok/s48.2 each171.4 to 223.1 over 2 runs | 200.1 tok/s32.5 each199.2 to 271.6 over 3 runs | 20 Oct 2026 |
| RTX 5070 Ti desktopllama.cpp on CUDA, version b11669 | Gemma 4 26B-A4BUD-IQ4_XS, about 4 bits, GGUF | 54.3 tok/s53.6 to 55.2 over 3 runs | 68.6 tok/s42.1 each68.0 to 76.1 over 3 runs | 86.4 tok/s27.8 each85.4 to 93.9 over 3 runs | 99.7 tok/s16.8 each99.1 to 109.9 over 3 runs | 123.5 tok/s9.5 each113.1 to 123.5 over 2 runs | 21 Oct 2026 |
| RTX 5070 Ti desktopllama.cpp on CUDA, version b11669 | gpt-oss-20bMXFP4, GGUF, thinking at its lowest level | 182.8 tok/s176.1 to 189.8 over 3 runs | 240.6 tok/s161.6 each240.6 to 285.6 over 3 runs | 309.8 tok/s111.8 each307.4 to 346.9 over 3 runs | 356.5 tok/s67.5 each356.3 to 409.8 over 3 runs | 559.5 tok/s50.9 each463.7 to 559.5 over 2 runs | 21 Oct 2026 |
| RTX 5070 Ti desktopllama.cpp on CUDA, version b11669 | Qwen 3.5 9BQ4_K_M, GGUF | 113.4 tok/s110.0 to 116.3 over 3 runs | 186.6 tok/s112.9 each183.7 to 200.3 over 3 runs | 276.9 tok/s92.2 each268.5 to 295.3 over 3 runs | 357.1 tok/s66.6 each356.3 to 399.1 over 3 runs | 420.1 tok/s40.3 each414.5 to 474.9 over 3 runs | 20 Oct 2026 |
| RTX 5070 Ti desktopPrism ML's llama.cpp on CUDA, version b10787 | Ternary Bonsai 2 27BPTQ1_0, about 1.75 bits a weight, GGUF | 86.9 tok/s84.0 to 87.2 over 3 runs | 122.5 tok/s82.6 each121.4 to 137.5 over 3 runs | 171.7 tok/s64.8 each164.1 to 186.4 over 3 runs | 183.5 tok/s37.0 each183.5 to 206.6 over 3 runs | 213.3 tok/s22.7 each212.7 to 240.4 over 3 runs | 20 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Balanced | Gemma 4 12BGoogle's own 4-bit QAT file (Q4_0), GGUF | 22.8 tok/s22.5 to 23.0 over 3 runs | 28.0 tok/s21.9 each27.7 to 37.6 over 3 runs | 37.1 tok/s14.7 each36.1 to 44.9 over 3 runs | 45.7 tok/s9.4 each42.0 to 51.7 over 3 runs | 35.7 tok/s3.7 each35.6 to 43.9 over 3 runs | 22 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | Gemma 4 12BGoogle's own 4-bit QAT file (Q4_0), GGUF | 20.6 tok/s19.7 to 20.7 over 3 runs | 23.8 tok/s20.8 each23.4 to 35.8 over 3 runs | 30.3 tok/s17.0 each30.0 to 39.1 over 3 runs | 33.6 tok/s10.8 each33.3 to 44.8 over 3 runs | 34.7 tok/s5.9 each34.6 to 47.1 over 3 runs | 27 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Balanced | Gemma 4 26B-A4BUD-IQ4_XS, about 4 bits, GGUF | 37.6 tok/s37.6 to 37.7 over 3 runs | 43.6 tok/s32.7 each42.1 to 54.7 over 3 runs | 55.5 tok/s19.6 each54.6 to 61.0 over 3 runs | 45.9 tok/s8.9 each45.3 to 52.8 over 3 runs | 52.1 tok/s4.7 each50.7 to 60.0 over 3 runs | 22 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | Gemma 4 26B-A4BUD-IQ4_XS, about 4 bits, GGUF | 31.9 tok/s31.0 to 32.2 over 3 runs | 34.6 tok/s29.7 each34.6 to 52.2 over 3 runs | 43.2 tok/s22.0 each43.0 to 56.2 over 3 runs | 45.9 tok/s12.8 each45.9 to 59.1 over 3 runs | 47.7 tok/s6.7 each47.3 to 61.4 over 3 runs | 27 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Balanced | gpt-oss-20bMXFP4, GGUF, thinking at its lowest level | 55.5 tok/s55.3 to 57.5 over 3 runs | 69.1 tok/s48.1 each66.3 to 81.5 over 3 runs | 79.1 tok/s29.1 each78.7 to 93.8 over 3 runs | 84.5 tok/s13.6 each75.4 to 85.6 over 3 runs | 97.9 tok/s8.9 each92.6 to 106.8 over 3 runs | 22 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | gpt-oss-20bMXFP4, GGUF, thinking at its lowest level | 48.6 tok/s47.3 to 48.7 over 3 runs | 53.6 tok/s39.2 each52.8 to 68.1 over 3 runs | 65.7 tok/s25.8 each65.0 to 76.0 over 3 runs | 75.1 tok/s16.2 each74.8 to 88.9 over 3 runs | 90.9 tok/s11.8 each89.4 to 113.7 over 3 runs | 27 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Best performance | Qwen 3.5 9BQ4_K_M, GGUF | 35.8 tok/s35.4 to 35.8 over 3 runs | 58.3 tok/s34.2 each52.7 to 58.5 over 3 runs | 85.7 tok/s27.6 each85.7 to 85.8 over 3 runs | 99.6 tok/s16.9 each98.8 to 99.6 over 3 runs | 75.9 tok/s5.9 each74.8 to 77.7 over 3 runs | 26 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | Qwen 3.5 9BQ4_K_M, GGUF | 30.9 tok/s30.1 to 30.9 over 3 runs | 47.8 tok/s29.6 each47.8 to 53.1 over 3 runs | 65.6 tok/s23.0 each65.2 to 72.6 over 3 runs | 75.8 tok/s13.6 each74.3 to 81.9 over 3 runs | 107.4 tok/s11.5 each104.9 to 120.8 over 3 runs | 27 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669on mains power, Windows power mode Best performance | Qwen 3.6 35B-A3BUD-Q4_K_M, about 4 bits, GGUF | 50.0 tok/s49.5 to 50.1 over 3 runs | 65.7 tok/s38.8 each65.0 to 68.6 over 3 runs | 80.3 tok/s24.6 each80.3 to 82.4 over 2 runs | 78.8 tok/s12.1 each78.7 to 82.2 over 3 runs | 75.1 tok/s5.7 each74.8 to 78.6 over 3 runs | 27 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669on mains power, Windows power mode Best performance | Qwen 3.6 35B-A3BUD-Q4_K_M, about 4 bits, GGUF | 34.0 tok/s30.7 to 34.4 over 3 runs | 47.3 tok/s31.9 each | 63.7 tok/s22.9 each63.6 to 69.7 over 3 runs | 62.0 tok/s12.9 each61.5 to 77.0 over 3 runs | 68.3 tok/s7.7 each65.6 to 74.4 over 3 runs | 27 Oct 2026 |
| Mac mini M4Apple M4, 16GBllama.cpp on Metal, version b11669 | Gemma 4 12BGoogle's own 4-bit QAT file (Q4_0), GGUF | 10.9 tok/s10.5 to 11.1 over 3 runs | 17.0 tok/s10.9 each16.9 to 17.4 over 3 runs | 25.7 tok/s9.5 each23.7 to 26.7 over 3 runs | not measured | not measured | 20 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | Gemma 4 12BGoogle's own 4-bit QAT file (Q4_0), GGUF | 32.6 tok/s31.1 to 32.6 over 3 runs | 42.6 tok/s30.6 each40.9 to 58.5 over 3 runs | 60.7 tok/s27.4 each60.0 to 76.2 over 3 runs | 73.4 tok/s21.4 each73.1 to 99.9 over 3 runs | 82.3 tok/s14.8 each82.2 to 117.9 over 3 runs | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | Gemma 4 12BGoogle's own 4-bit QAT file (Q4_0), GGUF | 28.1 tok/s28.1 to 29.1 over 2 runs | 37.3 tok/s27.4 each36.5 to 49.0 over 3 runs | 51.9 tok/s24.4 each50.1 to 65.1 over 3 runs | 65.7 tok/s19.0 each64.6 to 87.9 over 3 runs | 75.9 tok/s13.5 each74.3 to 103.2 over 3 runs | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | Gemma 4 26B-A4BUD-IQ4_XS, about 4 bits, GGUF | 59.6 tok/s54.5 to 60.1 over 3 runs | 68.3 tok/s50.3 each67.8 to 94.6 over 3 runs | 89.4 tok/s38.0 each89.1 to 108.1 over 3 runs | 103.5 tok/s25.6 each102.2 to 130.5 over 3 runs | 115.5 tok/s16.4 each115.3 to 155.8 over 3 runs | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | Gemma 4 26B-A4BUD-IQ4_XS, about 4 bits, GGUF | 51.9 tok/s50.9 to 52.3 over 3 runs | 82.8 tok/s46.9 each60.7 to 82.8 over 2 runs | 76.0 tok/s33.5 each74.8 to 92.5 over 3 runs | 91.3 tok/s22.8 each89.3 to 115.5 over 3 runs | 102.0 tok/s14.9 each101.6 to 139.4 over 3 runs | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | gpt-oss-20bMXFP4, GGUF, thinking at its lowest level | 81.6 tok/s80.0 to 81.8 over 3 runs | 93.0 tok/s59.6 each92.3 to 114.7 over 3 runs | 115.0 tok/s39.4 each114.5 to 129.0 over 3 runs | 135.7 tok/s24.6 each135.3 to 154.8 over 3 runs | 200.2 tok/s24.0 each200.2 to 254.0 over 3 runs | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | gpt-oss-20bMXFP4, GGUF, thinking at its lowest level | 75.7 tok/s70.5 to 75.9 over 3 runs | 87.2 tok/s56.1 each86.1 to 107.7 over 3 runs | 106.2 tok/s35.9 each105.5 to 116.9 over 3 runs | 121.4 tok/s21.6 each121.1 to 138.0 over 3 runs | 180.1 tok/s21.4 each179.9 to 231.1 over 3 runs | 29 Oct 2026 |
| Mac mini M4Apple M4, 16GBMLX (mlx-lm) on Metal, version mlx-lm 0.32.2 | Qwen 3.5 9BMLX 4-bit | 17.6 tok/s6.6 to 17.6 over 3 runs | 31.6 tok/s19.7 each31.5 to 31.6 over 3 runs | 43.5 tok/s15.0 each43.4 to 44.5 over 3 runs | 44.7 tok/s7.8 each36.9 to 44.9 over 3 runs | 54.0 tok/s5.2 each53.9 to 54.1 over 3 runs | 20 Oct 2026 |
| Mac mini M4Apple M4, 16GBllama.cpp on Metal, version b11669 | Qwen 3.5 9BQ4_K_M, GGUF | 15.9 tok/s15.6 to 15.9 over 3 runs | 22.7 tok/s13.5 each | 33.9 tok/s11.1 each33.7 to 33.9 over 3 runs | 44.4 tok/s8.4 each43.4 to 45.1 over 3 runs | 44.5 tok/s4.2 each43.5 to 46.5 over 3 runs | 20 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | Qwen 3.5 9BQ4_K_M, GGUF | 43.9 tok/s42.2 to 44.6 over 3 runs | 73.8 tok/s42.1 each72.9 to 78.6 over 3 runs | 114.9 tok/s35.8 each113.7 to 123.4 over 3 runs | 147.6 tok/s25.1 each147.3 to 160.4 over 3 runs | 187.8 tok/s17.1 each184.9 to 206.3 over 3 runs | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | Qwen 3.5 9BQ4_K_M, GGUF | 38.0 tok/s37.9 to 39.8 over 3 runs | 60.9 tok/s36.1 each60.9 to 63.7 over 2 runs | 102.3 tok/s32.2 each98.0 to 107.7 over 3 runs | 128.1 tok/s22.5 each127.6 to 139.7 over 3 runs | 167.0 tok/s15.6 each164.5 to 188.6 over 3 runs | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669on mains power, Windows power mode Best performance | Qwen 3.6 35B-A3BUD-Q4_K_M, about 4 bits, GGUF | 70.1 tok/s69.3 to 70.6 over 3 runs | 92.8 tok/s57.2 each92.5 to 106.7 over 3 runs | 118.4 tok/s39.1 each117.1 to 128.7 over 3 runs | 139.9 tok/s24.8 each137.4 to 154.4 over 3 runs | 160.8 tok/s14.8 each157.0 to 179.7 over 3 runs | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669on mains power, Windows power mode Best performance | Qwen 3.6 35B-A3BUD-Q4_K_M, about 4 bits, GGUF | 60.6 tok/s60.5 to 60.9 over 3 runs | 94.4 tok/s54.5 each86.5 to 94.4 over 2 runs | 102.7 tok/s35.5 each99.7 to 108.8 over 3 runs | 121.9 tok/s22.0 each119.0 to 136.1 over 3 runs | 142.6 tok/s13.5 each142.4 to 158.8 over 3 runs | 29 Oct 2026 |
| Mac mini M4Apple M4, 16GBPrism ML's llama.cpp on Metal, version b10787 | Ternary Bonsai 2 27BPTQ1_0, about 1.75 bits a weight, GGUF | 7.6 tok/s7.4 to 7.6 over 3 runs | 3.4 tok/s1.9 each3.4 to 3.5 over 3 runs | 5.2 tok/s1.5 each5.1 to 5.2 over 3 runs | not measured | not measured | 20 Oct 2026 |
Several people, or several agents, using one machine at once. Each column is that many requests started together, each on a different subject, with about 1,000 tokens of prompt and room for 512 tokens of answer, thinking off. The figure is all of them together, in tokens a second, the middle of three runs, and under it is what each user got. Every answer here is prose, so the one-user column is closer to the prose figure in the first table than to the code one.
A coding agent's whole job, timed
| Machine | Model and recipe | The whole job | Tested |
|---|---|---|---|
| RTX 4090 desktopllama.cpp on CUDA, version b11669 | Qwen 3.8 27BQ4_K_M; multi-token prediction, 2 tokens drafted a step (Artificial Analysis's RTX 5090 recipe) | 7.3 min | 15 Oct 2026 |
| One DGX Sparkllama.cpp on CUDA, version b11669graphics chips capped at 2,200MHz to cut power use | Qwen 3.8 27BUD-Q4_K_M; DFlash, a small helper model drafting 7 tokens a step (Artificial Analysis's DGX Spark recipe) | 17.3 min | 28 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669 | Qwen 3.8 27BUD-Q4_K_M; DFlash, a small helper model drafting 7 tokens a step (Artificial Analysis's RTX Spark recipe) | 17.4 min | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, version b11669 | Qwen 3.8 27BQ4_K_M; multi-token prediction, 2 tokens drafted a step (Artificial Analysis's Strix Halo recipe) | 22.9 min | 29 Oct 2026 |
| Lenovo Yoga Pro 9n (RTX Spark)RTX Spark laptop, NVIDIA N1X, 128GBllama.cpp on CUDA, in WSL 2, version b11669 | Qwen 3.8 27BQ4_K_M; multi-token prediction, 2 tokens drafted a step (Artificial Analysis's Strix Halo recipe) | 24.9 min | 29 Oct 2026 |
| One DGX Sparkllama.cpp on CUDA, version b11669graphics chips capped at 2,200MHz to cut power use | Qwen 3.8 27BQ4_K_M; multi-token prediction, 2 tokens drafted a step (Artificial Analysis's Strix Halo recipe) | 27.1 min | 28 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on Vulkan, version b11669 | Qwen 3.8 27BQ4_K_M; multi-token prediction, 2 tokens drafted a step (Artificial Analysis's Strix Halo recipe) | 43.2 min | 27 Oct 2026 |
| HP ZBook Ultra G1aStrix Halo laptop, Ryzen AI Max+ 395, 64GBllama.cpp on ROCm, in WSL 2, version b11669 | Qwen 3.8 27BQ4_K_M; multi-token prediction, 2 tokens drafted a step (Artificial Analysis's Strix Halo recipe) | 49.9 min | 27 Oct 2026 |
| Four DGX SparksvLLM across all four boxesgraphics chips capped at 2,200MHz to cut power usetimed from another machine on the same network | GLM 5.3 FlashNVFP4 at 4 bits, dense layers at 8; DFlash2, a small helper model drafting tokens | 8.4 min | 15 Oct 2026 |
A coding agent's recorded work, played back by Artificial Analysis's AgentPerf-Local (version 0.3.3): the same 168 requests on every machine, each with its recorded prompt, and the model made to write exactly the recorded number of tokens for each, 30,883 in all, so every machine does the same work. The figure is the time to answer all of them, without the time the agent's tools took, so lower is better. Multi-token prediction and DFlash both draft a few tokens ahead for the model to check in one pass, which saves time when the guesses are right. Each row is the quickest of its runs.
The models, exactly
- DeepSeek V4.1 Flash 1017 on the four DGX Sparks. DeepSeek's own release of V4.1 Flash 1017 (revision 1bae0e1, 510GB on disk), unchanged: the experts at 4 bits (MXFP4) and the rest at 8 bits (FP8), the precision DeepSeek built it in, with nothing compressed further. The model's own draft layers (DSpark) guess five tokens ahead. It runs on SGLang's DeepSeek V4.1 branch (f80c91a4b), split across all four boxes (tensor parallel 4) under another owner's published recipe, version 2.4 (403a5aa), which joins the boxes over RDMA on both halves of each ConnectX-7 port. The window is 1,048,576 tokens, with room for 2,199,808 tokens of conversation memory and up to 16 requests at once, and the prompt cache is on. See DeepSeek's weights and the recipe.
- GLM 5.3 Flash on the four DGX Sparks. NVIDIA's own NVFP4 export of GLM 5.3 Flash (4-bit, 204.5GB on disk), with the dense layers re-encoded at 8 bits, which the recipe calls lossless8. A small draft model, DFlash2 converted to FP8, guesses several tokens ahead. It runs on vLLM split across all four boxes (tensor parallel 4) under another owner's published recipe, with a window of 1,048,576 tokens. The model is about 300 billion parameters with about 15 billion active for each token, which is my estimate from its config file. See NVIDIA's weights, the draft model and the recipe.
- Qwen 3.8 27B on two of my DGX Sparks. Unsloth's NVFP4 build of Qwen 3.8 27B (4-bit, 23.4GB on disk), on vLLM split across two boxes through the 200Gb/s switch (tensor parallel 2). The model's own multi-token prediction was on, guessing 3 tokens ahead. The window was 351,232 tokens, the engine kept its working memory of the conversation at 8 bits (FP8), and sampling was the model's own default, a temperature of 1.0. See the weights.
- Qwen 3.8 27B on one DGX Spark on its own. The same weights, engine and settings as the two-box row, on one box by itself (tensor parallel 1). See the weights.
- Gemma 4 12B on the RTX 4090 desktop. Google's own 4-bit GGUF of Gemma 4 12B, made with quantisation-aware training (QAT, Q4_0, 7.0GB). It ran on llama.cpp b11669 with the whole model on the graphics card, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Gemma 4 26B-A4B on the RTX 4090 desktop. Unsloth's dynamic 4-bit GGUF of Gemma 4 26B-A4B (UD-IQ4_XS, 13.6GB), a mixture of experts that uses about 4 billion of its 26 billion parameters for each token. It ran on llama.cpp b11669 with the whole model on the graphics card, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- gpt-oss-20b on the RTX 4090 desktop. OpenAI's gpt-oss-20b in its own MXFP4 format, as a GGUF from the llama.cpp project (12.1GB). It cannot switch its thinking off, so its thinking-off figures are at its lowest level, low, and its thinking counts as tokens written. It ran on llama.cpp b11669 with the whole model on the graphics card, with room for 32,768 tokens of conversation shared by up to 16 requests at once. llama.cpp's own reading of the model's replies threw away 13 of 24 of its answers to the code prompt in the first runs, with an error, because the model sometimes labels its answer "final code" where llama.cpp expects "final". So it ran with llama.cpp's --skip-chat-parsing setting, which passes each reply through whole, and the thinking was told apart from the answer at the model's own markers. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Qwen 3.5 9B on the RTX 4090 desktop. Unsloth's Q4_K_M GGUF of Qwen 3.5 9B (4-bit, 5.7GB). It ran on llama.cpp b11669 with the whole model on the graphics card, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Qwen 3.8 27B on the RTX 4090 desktop. The Q4_K_M GGUF file of Qwen 3.8 27B from LM Studio's own catalogue (4-bit, 16.8GB), loaded whole onto the graphics card with a window of 20,480 tokens. LM Studio's settings were left as they come, so the model's own multi-token prediction was on. In this run it kept 78 per cent of its guesses. See the file.
- Ternary Bonsai 2 27B on the RTX 4090 desktop. Prism ML's Ternary Bonsai 2 27B, Qwen 3.8 27B with every weight set to -1, 0 or +1, in its densest packing (PTQ1_0, about 1.75 bits a weight, 5.95GB). It needs Prism ML's own fork of llama.cpp (prism-b10787). Prism ML's fork ran it with the whole model on the graphics card, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and Prism ML's llama.cpp.
- Gemma 4 12B on the RTX 5070 Ti desktop. Google's own 4-bit GGUF of Gemma 4 12B, made with quantisation-aware training (QAT, Q4_0, 7.0GB). It ran on llama.cpp b11669 with the whole model on the graphics card, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Gemma 4 26B-A4B on the RTX 5070 Ti desktop. Unsloth's dynamic 4-bit GGUF of Gemma 4 26B-A4B (UD-IQ4_XS, 13.6GB), a mixture of experts that uses about 4 billion of its 26 billion parameters for each token. It ran on llama.cpp b11669 with room for 32,768 tokens of conversation shared by up to 16 requests at once. That does not all fit in the card's 16GB, so the experts of 15 of its 30 layers stayed in the computer's own memory, the split llama.cpp's own fitting tool chose. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- gpt-oss-20b on the RTX 5070 Ti desktop. OpenAI's gpt-oss-20b in its own MXFP4 format, as a GGUF from the llama.cpp project (12.1GB). It cannot switch its thinking off, so its thinking-off figures are at its lowest level, low, and its thinking counts as tokens written. It ran on llama.cpp b11669 with the whole model on the graphics card, with room for 32,768 tokens of conversation shared by up to 16 requests at once. llama.cpp's own reading of the model's replies threw away 13 of 24 of its answers to the code prompt in the first runs, with an error, because the model sometimes labels its answer "final code" where llama.cpp expects "final". So it ran with llama.cpp's --skip-chat-parsing setting, which passes each reply through whole, and the thinking was told apart from the answer at the model's own markers. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Qwen 3.5 9B on the RTX 5070 Ti desktop. Unsloth's Q4_K_M GGUF of Qwen 3.5 9B (4-bit, 5.7GB). It ran on llama.cpp b11669 with the whole model on the graphics card, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Ternary Bonsai 2 27B on the RTX 5070 Ti desktop. Prism ML's Ternary Bonsai 2 27B, Qwen 3.8 27B with every weight set to -1, 0 or +1, in its densest packing (PTQ1_0, about 1.75 bits a weight, 5.95GB). It needs Prism ML's own fork of llama.cpp (prism-b10787). Prism ML's fork ran it with the whole model on the graphics card, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and Prism ML's llama.cpp.
- Gemma 4 12B on the HP ZBook Ultra G1a (llama.cpp on Vulkan). Google's own 4-bit GGUF of Gemma 4 12B, made with quantisation-aware training (QAT, Q4_0, 7.0GB), the same file as on the other machines. It ran on llama.cpp b11669's Vulkan build with the whole model on the Radeon 8060S graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Gemma 4 12B on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2). Google's own 4-bit GGUF of Gemma 4 12B, made with quantisation-aware training (QAT, Q4_0, 7.0GB), the same file as on the other machines. It ran on llama.cpp b11669 built for ROCm 7.2.1 inside WSL 2 (Ubuntu 24.04) on Windows 11 with the whole model on the Radeon 8060S graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Gemma 4 26B-A4B on the HP ZBook Ultra G1a (llama.cpp on Vulkan). Unsloth's dynamic 4-bit GGUF of Gemma 4 26B-A4B (UD-IQ4_XS, 13.6GB), the same file as on the other machines, a mixture of experts that uses about 4 billion of its 26 billion parameters for each token. It ran on llama.cpp b11669's Vulkan build with the whole model on the Radeon 8060S graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Gemma 4 26B-A4B on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2). Unsloth's dynamic 4-bit GGUF of Gemma 4 26B-A4B (UD-IQ4_XS, 13.6GB), the same file as on the other machines, a mixture of experts that uses about 4 billion of its 26 billion parameters for each token. It ran on llama.cpp b11669 built for ROCm 7.2.1 inside WSL 2 (Ubuntu 24.04) on Windows 11 with the whole model on the Radeon 8060S graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- gpt-oss-20b on the HP ZBook Ultra G1a (llama.cpp on Vulkan). OpenAI's gpt-oss-20b in its own MXFP4 format, as a GGUF from the llama.cpp project (12.1GB), the same file as on the other machines. It cannot switch its thinking off, so its thinking-off figures are at its lowest level, low, and its thinking counts as tokens written. It ran on llama.cpp b11669's Vulkan build with the whole model on the Radeon 8060S graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once, and with llama.cpp's --skip-chat-parsing setting, as on the other machines. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- gpt-oss-20b on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2). OpenAI's gpt-oss-20b in its own MXFP4 format, as a GGUF from the llama.cpp project (12.1GB), the same file as on the other machines. It cannot switch its thinking off, so its thinking-off figures are at its lowest level, low, and its thinking counts as tokens written. It ran on llama.cpp b11669 built for ROCm 7.2.1 inside WSL 2 (Ubuntu 24.04) on Windows 11 with the whole model on the Radeon 8060S graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once, and with llama.cpp's --skip-chat-parsing setting, as on the other machines. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Nemotron 3.5 Bolt 74B on the HP ZBook Ultra G1a (llama.cpp on Vulkan). The same 24GB GGUF of Nemotron 3.5 Bolt 74B-A9B as the RTX 4090 ran, with the same settings, on llama.cpp b11669's Vulkan build with the whole model on the Radeon 8060S graphics: a window of 32,768 tokens for one request at a time, and the conversation memory at 8 bits. Sampling was llama.cpp's own default.
- Nemotron 3.5 Bolt 74B on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2). The same 24GB GGUF of Nemotron 3.5 Bolt 74B-A9B as the RTX 4090 ran, with the same settings, on llama.cpp b11669 built for ROCm 7.2.1 inside WSL 2 (Ubuntu 24.04) on Windows 11 with the whole model on the Radeon 8060S graphics: a window of 32,768 tokens for one request at a time, and the conversation memory at 8 bits. Sampling was llama.cpp's own default.
- Qwen 3.5 9B on the HP ZBook Ultra G1a (llama.cpp on Vulkan). Unsloth's Q4_K_M GGUF of Qwen 3.5 9B (4-bit, 5.7GB), the same file as on the other machines. It ran on llama.cpp b11669's Vulkan build with the whole model on the Radeon 8060S graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Qwen 3.5 9B on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2). Unsloth's Q4_K_M GGUF of Qwen 3.5 9B (4-bit, 5.7GB), the same file as on the other machines. It ran on llama.cpp b11669 built for ROCm 7.2.1 inside WSL 2 (Ubuntu 24.04) on Windows 11 with the whole model on the Radeon 8060S graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Qwen 3.6 35B-A3B on the HP ZBook Ultra G1a (llama.cpp on Vulkan). Unsloth's dynamic 4-bit GGUF of Qwen 3.6 35B-A3B (UD-Q4_K_M, 22.1GB), a mixture of experts that uses about 3 billion of its 35 billion parameters for each token. It ran on llama.cpp b11669's Vulkan build with the whole model on the Radeon 8060S graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Qwen 3.6 35B-A3B on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2). Unsloth's dynamic 4-bit GGUF of Qwen 3.6 35B-A3B (UD-Q4_K_M, 22.1GB), a mixture of experts that uses about 3 billion of its 35 billion parameters for each token. It ran on llama.cpp b11669 built for ROCm 7.2.1 inside WSL 2 (Ubuntu 24.04) on Windows 11 with the whole model on the Radeon 8060S graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Qwen 3.8 27B on the HP ZBook Ultra G1a (LM Studio, llama.cpp on Vulkan). The same Q4_K_M GGUF file as the RTX 4090 ran (4-bit, 16.8GB), loaded whole onto the graphics chip with a window of 20,480 tokens. LM Studio's settings were left as they come, so the model's own multi-token prediction was on. In this run it kept 69 per cent of its guesses. See the file.
- Qwen 3.8 27B on the HP ZBook Ultra G1a (llama.cpp on Vulkan). Unsloth's Q4_K_M GGUF of Qwen 3.8 27B (4-bit, 17.1GB), the same file on both laptops. It ran on llama.cpp b11669's Vulkan build with the whole model on the Radeon 8060S graphics and a window of 32,768 tokens for one request at a time. Sampling was llama.cpp's own default.
- Qwen 3.8 27B on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2). Unsloth's Q4_K_M GGUF of Qwen 3.8 27B (4-bit, 17.1GB), the same file on both laptops. It ran on llama.cpp b11669 built for ROCm 7.2.1 inside WSL 2 (Ubuntu 24.04) on Windows 11 with the whole model on the Radeon 8060S graphics and a window of 32,768 tokens for one request at a time. Sampling was llama.cpp's own default.
- Qwen 3.8 27B with multi-token prediction on the HP ZBook Ultra G1a (llama.cpp on ROCm, in WSL 2). Unsloth's Q4_K_M GGUF of Qwen 3.8 27B (4-bit, 17.1GB), the same file on both laptops, with multi-token prediction on: the model's own draft head proposes two tokens at a time and the model checks them in one pass, as Artificial Analysis's Strix Halo recipe sets it. It ran on llama.cpp b11669 built for ROCm 7.2.1 inside WSL 2 (Ubuntu 24.04) on Windows 11 with the whole model on the Radeon 8060S graphics and a window of 32,768 tokens for one request at a time. Sampling was llama.cpp's own default.
- Qwen 3.8 27B with multi-token prediction on the HP ZBook Ultra G1a (llama.cpp on Vulkan). Unsloth's Q4_K_M GGUF of Qwen 3.8 27B (4-bit, 17.1GB), the same file on both laptops, with multi-token prediction on: the model's own draft head proposes two tokens at a time and the model checks them in one pass, as Artificial Analysis's Strix Halo recipe sets it. It ran on llama.cpp b11669's Vulkan build with the whole model on the Radeon 8060S graphics and a window of 32,768 tokens for one request at a time. Sampling was llama.cpp's own default.
- Gemma 4 12B on the Mac mini M4. Google's own 4-bit GGUF of Gemma 4 12B, made with quantisation-aware training (QAT, Q4_0, 7.0GB). It ran on llama.cpp b11669 with the whole model on the M4's graphics (Metal), with room for 32,768 tokens of conversation shared by up to 4 requests at once. With room for 16, as on the other machines, every request failed: Gemma 4 keeps a window of recent text for each request in 40 of its 48 layers, and for 16 requests that comes to about 5.5GB on top of its 7GB of weights, more than a 16GB Mac lets its graphics use. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Gemma 4 12B on the Lenovo Yoga Pro 9n (llama.cpp on CUDA). Google's own 4-bit GGUF of Gemma 4 12B, made with quantisation-aware training (QAT, Q4_0, 7.0GB), the same file as on the other machines. It ran on llama.cpp b11669's CUDA build for Windows on Arm with the whole model on the RTX Spark's Blackwell graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Gemma 4 12B on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2). Google's own 4-bit GGUF of Gemma 4 12B, made with quantisation-aware training (QAT, Q4_0, 7.0GB), the same file as on the other machines. It ran on llama.cpp b11669's CUDA build inside WSL 2 (Ubuntu) on Windows 11 on Arm with the whole model on the RTX Spark's Blackwell graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Gemma 4 26B-A4B on the Lenovo Yoga Pro 9n (llama.cpp on CUDA). Unsloth's dynamic 4-bit GGUF of Gemma 4 26B-A4B (UD-IQ4_XS, 13.6GB), the same file as on the other machines, a mixture of experts that uses about 4 billion of its 26 billion parameters for each token. It ran on llama.cpp b11669's CUDA build for Windows on Arm with the whole model on the RTX Spark's Blackwell graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Gemma 4 26B-A4B on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2). Unsloth's dynamic 4-bit GGUF of Gemma 4 26B-A4B (UD-IQ4_XS, 13.6GB), the same file as on the other machines, a mixture of experts that uses about 4 billion of its 26 billion parameters for each token. It ran on llama.cpp b11669's CUDA build inside WSL 2 (Ubuntu) on Windows 11 on Arm with the whole model on the RTX Spark's Blackwell graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- gpt-oss-20b on the Lenovo Yoga Pro 9n (llama.cpp on CUDA). OpenAI's gpt-oss-20b in its own MXFP4 format, as a GGUF from the llama.cpp project (12.1GB), the same file as on the other machines. It cannot switch its thinking off, so its thinking-off figures are at its lowest level, low, and its thinking counts as tokens written. It ran on llama.cpp b11669's CUDA build for Windows on Arm with the whole model on the RTX Spark's Blackwell graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once, and with llama.cpp's --skip-chat-parsing setting, as on the other machines. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- gpt-oss-20b on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2). OpenAI's gpt-oss-20b in its own MXFP4 format, as a GGUF from the llama.cpp project (12.1GB), the same file as on the other machines. It cannot switch its thinking off, so its thinking-off figures are at its lowest level, low, and its thinking counts as tokens written. It ran on llama.cpp b11669's CUDA build inside WSL 2 (Ubuntu) on Windows 11 on Arm with the whole model on the RTX Spark's Blackwell graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once, and with llama.cpp's --skip-chat-parsing setting, as on the other machines. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Nemotron 3.5 Bolt 74B on the Lenovo Yoga Pro 9n (llama.cpp on CUDA). The same 24GB GGUF of Nemotron 3.5 Bolt 74B-A9B as the RTX 4090 ran, with the same settings, on llama.cpp b11669's CUDA build for Windows on Arm with the whole model on the RTX Spark's Blackwell graphics: a window of 32,768 tokens for one request at a time, and the conversation memory at 8 bits. Sampling was llama.cpp's own default.
- Nemotron 3.5 Bolt 74B on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2). The same 24GB GGUF of Nemotron 3.5 Bolt 74B-A9B as the RTX 4090 ran, with the same settings, on llama.cpp b11669's CUDA build inside WSL 2 (Ubuntu) on Windows 11 on Arm with the whole model on the RTX Spark's Blackwell graphics: a window of 32,768 tokens for one request at a time, and the conversation memory at 8 bits. Sampling was llama.cpp's own default.
- Qwen 3.5 9B on the Mac mini M4. LM Studio's MLX 4-bit copy of Qwen 3.5 9B (6.0GB), on Apple's own MLX engine (mlx-lm 0.32.2 with MLX 0.32.4), the whole model on the M4's graphics. The same Mac ran llama.cpp's Q4_K_M file of the same model, so the two engines can be set side by side. Sampling was MLX's own default, which always takes the likeliest word (temperature 0). See the file and mlx-lm.
- Qwen 3.5 9B on the Mac mini M4. Unsloth's Q4_K_M GGUF of Qwen 3.5 9B (4-bit, 5.7GB). It ran on llama.cpp b11669 with the whole model on the M4's graphics (Metal), with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Qwen 3.5 9B on the Lenovo Yoga Pro 9n (llama.cpp on CUDA). Unsloth's Q4_K_M GGUF of Qwen 3.5 9B (4-bit, 5.7GB), the same file as on the other machines. It ran on llama.cpp b11669's CUDA build for Windows on Arm with the whole model on the RTX Spark's Blackwell graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Qwen 3.5 9B on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2). Unsloth's Q4_K_M GGUF of Qwen 3.5 9B (4-bit, 5.7GB), the same file as on the other machines. It ran on llama.cpp b11669's CUDA build inside WSL 2 (Ubuntu) on Windows 11 on Arm with the whole model on the RTX Spark's Blackwell graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Qwen 3.6 35B-A3B on the Lenovo Yoga Pro 9n (llama.cpp on CUDA). Unsloth's dynamic 4-bit GGUF of Qwen 3.6 35B-A3B (UD-Q4_K_M, 22.1GB), a mixture of experts that uses about 3 billion of its 35 billion parameters for each token. It ran on llama.cpp b11669's CUDA build for Windows on Arm with the whole model on the RTX Spark's Blackwell graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Qwen 3.6 35B-A3B on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2). Unsloth's dynamic 4-bit GGUF of Qwen 3.6 35B-A3B (UD-Q4_K_M, 22.1GB), a mixture of experts that uses about 3 billion of its 35 billion parameters for each token. It ran on llama.cpp b11669's CUDA build inside WSL 2 (Ubuntu) on Windows 11 on Arm with the whole model on the RTX Spark's Blackwell graphics, with room for 32,768 tokens of conversation shared by up to 16 requests at once. Sampling was llama.cpp's own default. See the file and llama.cpp b11669.
- Qwen 3.8 27B on the Lenovo Yoga Pro 9n (llama.cpp on CUDA). Unsloth's Q4_K_M GGUF of Qwen 3.8 27B (4-bit, 17.1GB), the same file on both laptops. It ran on llama.cpp b11669's CUDA build for Windows on Arm with the whole model on the RTX Spark's Blackwell graphics and a window of 32,768 tokens for one request at a time. Sampling was llama.cpp's own default.
- Qwen 3.8 27B on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2). Unsloth's Q4_K_M GGUF of Qwen 3.8 27B (4-bit, 17.1GB), the same file on both laptops. It ran on llama.cpp b11669's CUDA build inside WSL 2 (Ubuntu) on Windows 11 on Arm with the whole model on the RTX Spark's Blackwell graphics and a window of 32,768 tokens for one request at a time. Sampling was llama.cpp's own default.
- Qwen 3.8 27B with multi-token prediction on the Lenovo Yoga Pro 9n (llama.cpp on CUDA). Unsloth's Q4_K_M GGUF of Qwen 3.8 27B (4-bit, 17.1GB), the same file on both laptops, with multi-token prediction on: the model's own draft head proposes two tokens at a time and the model checks them in one pass, as Artificial Analysis's Strix Halo recipe sets it. It ran on llama.cpp b11669's CUDA build for Windows on Arm with the whole model on the RTX Spark's Blackwell graphics and a window of 32,768 tokens for one request at a time. Sampling was llama.cpp's own default.
- Qwen 3.8 27B with multi-token prediction on the Lenovo Yoga Pro 9n (llama.cpp on CUDA, in WSL 2). Unsloth's Q4_K_M GGUF of Qwen 3.8 27B (4-bit, 17.1GB), the same file on both laptops, with multi-token prediction on: the model's own draft head proposes two tokens at a time and the model checks them in one pass, as Artificial Analysis's Strix Halo recipe sets it. It ran on llama.cpp b11669's CUDA build inside WSL 2 (Ubuntu) on Windows 11 on Arm with the whole model on the RTX Spark's Blackwell graphics and a window of 32,768 tokens for one request at a time. Sampling was llama.cpp's own default.
- Ternary Bonsai 2 27B on the Mac mini M4. Prism ML's Ternary Bonsai 2 27B, Qwen 3.8 27B with every weight set to -1, 0 or +1, in its densest packing (PTQ1_0, about 1.75 bits a weight, 5.95GB). It needs Prism ML's own fork of llama.cpp (prism-b10787). Prism ML's fork ran it with the whole model on the M4's graphics (Metal), with room for 32,768 tokens of conversation shared by up to 4 requests at once (on this Mac the several-users test stops at 4, to keep its run short). Sampling was llama.cpp's own default. See the file and Prism ML's llama.cpp.
The hardware, exactly
- The DGX Sparks (the same boxes, used one, two or four at a time). The boxes: four NVIDIA DGX Sparks in two makes, GIGABYTE AI TOP ATOM and ASUS GX10, which behave the same here. Chip: an NVIDIA GB10 in each box, which is a Blackwell graphics processor and a 20-core Arm processor (10 cores at about 3.9GHz and 10 at about 2.8GHz) on one package. Memory: 128GB in each box, shared between the processor and the graphics, with a bandwidth of 273GB a second. Network: two ConnectX-7 ports of 200Gb/s on each box, joined through a MikroTik CRS812 switch. System: NVIDIA DGX OS. Standing setting: graphics chips capped at 2,200MHz to cut power use.
- RTX 4090 desktop. Graphics card: NVIDIA GeForce RTX 4090 with 24GB of its own memory. Processor: AMD Ryzen 9 7950X, 16 cores and 32 threads. Memory: 96GB of DDR5 as two 48GB modules running at 6,000MT/s (Corsair CMK96GX5M2B6000Z30). Motherboard: ASRock X670E Taichi. System: Windows 11 Pro.
- RTX 5070 Ti desktop. Graphics card: NVIDIA GeForce RTX 5070 Ti with 16GB of its own memory. Processor: AMD Ryzen 9 5950X, 16 cores and 32 threads. Memory: 32GB of DDR4 as two 16GB modules running at 4,000MT/s (G.Skill F4-4000C16-16GTZRA). Motherboard: Gigabyte B550 AORUS PRO AC. System: Windows 11 Pro.
- HP ZBook Ultra G1a. Machine: a 14 inch laptop, timed on mains power. Processor: AMD Ryzen AI Max+ 395 (Strix Halo), 16 cores and 32 threads. Graphics: Radeon 8060S, built into the processor. Memory: 64GB of LPDDR5X soldered to the board, running at 8,000MT/s. Windows sees 47.8GB of it, because 16GB is set aside for the graphics. System: Windows 11 Pro.
- Mac mini M4. Machine: Mac mini (2024). Chip: Apple M4: 10 processor cores (4 performance, 6 efficiency) and 10 graphics cores. Memory: 16GB, shared between the processor and the graphics, with a bandwidth of 120GB a second (Apple's figure). System: macOS 26.5.2.
- Lenovo Yoga Pro 9n (RTX Spark). Machine: a laptop, timed on mains power. Processor: NVIDIA N1X (RTX Spark), 20 Arm cores. Graphics: NVIDIA Blackwell with 6,144 cores, built into the N1X. Memory: 128GB of LPDDR5X running at 9,400MT/s, shared by the processor and the graphics. Windows sees 62.5GB of it, because the NVIDIA app sets aside 64GB for the graphics by default. System: Windows 11 Home on Arm.
GLM 5.3 Flash on four DGX Sparks, before and after a recipe change
| Test | 5 October new recipe | 2 October old recipe | Change |
|---|---|---|---|
| Writing codeone user | 94.2 tok/s | 58.4 tok/s | 1.6 times |
| A long answerone user | 89.8 tok/s | 45.6 tok/s | 2.0 times |
| A short answerone user | 60.4 tok/s | 28.2 tok/s | 2.1 times |
| Four at onceall four added together | 110.7 tok/s | 65.2 tok/s | 1.7 times |
The same test on both days. The only change was a recipe another owner published. The first word of an answer arrived after 0.26 seconds in a session recorded on 5 October. The change column is my own maths.
Three models, the same eight prompts
| Model | Runs on | Writing speed middle of 8 prompts | First word short prompt | Reading a 345,000-token document from cold |
|---|---|---|---|---|
| GLM 5.3 Flash | 4 DGX Sparks | 46.3 tok/s | 0.19 s | 257 s |
| Qwen 3.8 27B | 2 DGX Sparks | 42.8 tok/s | 0.16 s | 810 s |
| DeepSeek V4 Flash | 2 DGX Sparks | 40.9 tok/s | 0.29 s | not measured |
Measured in August 2026 with each model thinking at its highest setting, on different prompts from the test at the top of this page. These were also taken before October's recipe change, so they should not be set beside the other tables.
How I test
- One user at a time unless the row says otherwise. A total across several users is always labelled as a total.
- The machine is idle. The test waits for 8 quiet seconds before each run, and a run that had other work arriving part way through is thrown away.
- The same prompts and the same test on every machine, so two rows can be compared.
- Three runs, the middle one reported. The lowest and highest are under each figure.
- Thinking off, and thinking on. Where a model can think before it answers, I run the writing test both ways, and each way has its own table.
- A laptop is tested on mains power, and the row says which Windows power mode it was in.
- Every row has its date. Recipes and software move quickly, and an old figure stays labelled as old.
- Nothing here is a maker's claim. Every figure on this page is one I measured.
- If a figure looks wrong, tell me under the latest video and I will run it again.