Repository navigation
Strix Halo on Windows 11 with stock llama.cpp Vulkan: Qwen3.6-35B-A3B at 55-62 tok/s, Qwen3.5-122B-A10B at 23-24 tok/s, both loaded at once (field report) #31839
IanCrossland
started this conversation in
Show and tell
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
TL;DR: Two GMKtec EVO-X3 mini PCs (Ryzen AI Max+ 395, Radeon 8060S, 128 GB) running the stock llama.cpp b11401 Windows Vulkan release. No ROCm, no Linux, nothing tuned beyond a 16 GB graphics reservation. Every Strix Halo LLM benchmark we found was run on Linux, so here are Windows numbers.
-ctxcp 0cut a fixed 10 s first-token delay on the 122B to 1.5 to 2.6 s.-cram 0made the 35B faster at every prompt length.-cram 0) and 55 s on the 122B for its first token.Setup
-DGGML_VULKAN=ON(Vulkan SDK 1.4.363.0, MSVC 14.44)Both machines had the same runtime files and the same model files (checked by sha256).
We picked IQ4_XS for the 122B because the usual 4-bit files (UD-Q4_K_XL at 71.74 GiB, Q4_K_M at 71.28 GiB) exceed the 66.70 GiB budget Vulkan reports. That budget later proved not to be a hard wall (see "Both models loaded at once"), so the larger quants may load too. We did not test them.
Generation speed and first-token latency
Warm first token is 30 repeats of a short chat request to a loaded server, prompt cache on, 32K context, one slot. Machine A was also running a voice assistant and its speech recognizer; Machine B ran nothing else. That fits B's faster 35B and its extra free memory.
Updating Machine B's driver to 32.0.32015.2008 left speed unchanged (35B 60.6, 122B 23.8 tok/s). It cut the 35B's warm p95 from 2.3 s to 0.7 s and its 22.5K-token first token from 27.5 s to 24.7 s.
On realistic chat and tool prompts (a few hundred tokens, 85 test cases), the median first token was 0.32 s on the 35B and 1.1 s on the 122B. With thinking on, counting thinking tokens as output, it rose to 1.6 s and 5.1 s.
Long prompts
Seconds to first token. Median of 3 prompts per size, Machine A, 32K context,
-ctxcp 0.-cram 0The wait grows roughly in a straight line with prompt length: about 1 s per 1,000 tokens on the 35B and about 3 s per 1,000 on the 122B. For prompts of 3K tokens and up, the 35B processed about 1,000 to 1,190 tok/s with
-cram 0(700 to 870 with the cache on), and the 122B 290 to 360 tok/s with the cache on. One earlier 35B run with the cache on stalled for 65 s at 13K tokens and 117 s at 19K.Both models loaded at once
The 122B and the 35B fit together with 27 GiB of Windows memory to spare. Keeping both loaded costs nothing, but generating on both at once halves the 35B.
One trial of 3.6 minutes:
-c 8192 -ctxcp 0on both, thinking off, temperature 0, 256-token replies, models loaded one after the other.Server flags
For these two Qwen models, set
-ctxcp 0and-cram 0on llama-server. Leave flash attention and the micro-batch at their defaults.-ctxcp 0-cram 0-fa-ub-ctxcp 0works is our inference from timings, not confirmed in llama.cpp's source. Each checkpoint seemed to cost about 3.5 s, and every request made at least one. llama-bench, with no server, showed no fixed cost: 4 prompt tokens took 0.08 s and 512 took 1.7 s.-ctxcp 0costs: no prefix reuse on these models, so every turn re-processes the whole prompt.-ctxcp 1is untested.-cram 0alone did not fix the 122B's 10 s delay;-ctxcp 0did.Whisper on the same GPU
whisper.cpp small.en on the Radeon 8060S transcribes in 291 ms against 755 ms on the CPU, with no accuracy loss. Sharing the iGPU costs the 35B about 9% of its generation speed.
Time runs from the end of the audio to the transcript, over 32 clips of one speaker, 4 to 9 s each (317 words). Drift is the word edit distance against CPU small.en f16 at beam 5. The Vulkan q8_0 row comes from an earlier run the same day. Its GPU kernels produce slightly different text, so use f16 on the GPU.
Worst case, with whisper looping nonstop while the 35B generates nonstop:
Cancelling a request
On llama-server b11401, a cancel that arrives during prompt processing waits for the prompt to finish. Once tokens are streaming, closing the connection stops the server within one decode step.
We detected idle by polling the server's
/slotsendpoint every 20 ms, with 5 trials per case per model.Method
Most figures are medians of 30 warm requests to one model on one machine, measured in October 2026.
-ngl 99), thinking off unless stated. Context was 8K for chat tests and 32K for the prompt-size sweep.Not tested
Only the Vulkan backend on Windows with a 16 GB graphics reservation. We did not measure:
--n-cpu-moe).-ctxcp 1, or prefix reuse of any kind on these models.-cram 0on the 122B, contexts over 32K, or more than one slot.Reproduce
The exact commands behind the numbers, run in PowerShell from the unzipped llama.cpp b11401 Windows x64 Vulkan release.
Serve a model (for the 122B, point
-mat the first of its three shards,Qwen3.5-122B-A10B-UD-IQ4_XS-00001-of-00003.gguf):Prompt-processing bench (flash attention and micro-batch, no generation):
whisper.cpp b5130 with Vulkan, built with the Vulkan SDK and the VS 2022 Build Tools, then served warm with small.en f16:
Write-up drafted with Claude from our benchmark logs; every number is measured. Questions welcome.
All reactions