Erste SchritteLeaderboardDecode calculatorModelleOrganizationsReportsMatrix runsHardwareBenchmarksMarktplatzVermietungenProAPI-Doku
Sprache
Actual Computer — Every computer, one endpoint
Community field report

4x Arc Pro B65: context sweep 0-200K, 12 models, vLLM + llama.cpp

Decode and prefill from context 0 to 200K at 1-16 users on 4x Intel Arc Pro B65 (and 1 card): 30 vLLM matrices across 12 models, Qwen3.8-Flash-Next prefill chunk 2048 vs 8192, and three llama.cpp depth sweeps. Every number links to its LocalMaxxing matrix or run.

The rig

GPUs4x Intel Arc Pro B65, 32 GB each (128 GB total)
CPU / RAMAMD EPYC 7343 (16 cores), 499 GB
OSUbuntu 26.04.1 LTS, xe driver
EnginesUpstream vLLM vllm/vllm-openai-xpu:v0.32.0; Intel llm-scaler 0.31.0-b1-experimental (llm-scaler 1.5 for one Muse upload); llama.cpp b11729 (SYCL, oneAPI 2026.1.1)
Benchllm_decode_bench.py v0.8.0 through lmx v0.1.54 speed-test matrix run

Every model below ran with tensor parallelism across 4 cards or on 1 card. All numbers come from the linked LocalMaxxing matrices and runs; nothing here was re-measured or edited for this report.

Method

  • Grid: decode at contexts 0, 8K, 32K, 64K, 128K and 200K (204,800), by 1, 2, 4, 8 and 16 concurrent users; prefill-only at 8K, 32K and 128K. 30 s per cell, 256 output tokens, prefix caching on, up to 16 sequences.
  • Settings: each arm reuses the config I already have listed on LocalMaxxing for that model, quant and card count, with speculative decoding off, at the model's own window. Cells beyond the served window are SKIPPED.
  • Gate: the bench exited cleanly, the context-0 single-user cell is VALID and close to the model's earlier single-user run, no VALID cell collapses below 10% of context 0, and LOOPED/ERROR cells are a minority. Then LocalMaxxing's dry run.
  • Stable fallback: each arm had a twin on the newest stable runtime (vLLM v0.31.0 or llm-scaler 1.5), run only when the current one failed or was held.

Results

Aggregate decode tok/s. "1u" = one user, "16u" = 16 users. "Deepest" is the largest context with a single-user cell. † = the bench flagged the cell capacity_limited.

ModelQuantCardsRuntime1u ctx 01u deepestDepth16u ctx 0
Qwen3.6-27BBF164vLLM 0.32.028.622.6200K396.1
Qwen3.6-27BFP84llm-scaler48.132.1200K626.7
Qwen3.6-27BINT44llm-scaler50.533.2200K466.0
Qwen3.6-27BINT41llm-scaler20.314.8128K162.2
Qwen3.6-35B-A3BBF164vLLM 0.32.088.754.2200K855.6†
Qwen3.6-35B-A3BFP84llm-scaler99.959.9200K1,030.5
Qwen3.6-35B-A3BINT44llm-scaler98.658.8200K833.4
Qwen3.6-35B-A3BINT41llm-scaler80.338.2200K469.4
Qwen3.8-27BBF164vLLM 0.32.028.622.7200K389.5
Qwen3.8-27BINT44llm-scaler50.433.8200K458.1
Qwen3.8-27BINT41llm-scaler20.214.6128K159.3
Qwen3.8-27B-FP8FP84vLLM 0.32.030.523.2200K404.2
Qwen3.5-9BBF164vLLM 0.32.082.854.7200K1,132.8
Qwen3.5-9BFP84llm-scaler126.173.3200K1,568.3
Qwen3.5-9BBF161vLLM 0.32.034.222.7200K469.7
Qwen3.5-122B-A10B-GPTQ-Int4GPTQ-4bit4llm-scaler52.735.7200K539.6
gpt-oss-20bMXFP44vLLM 0.32.0179.9146.764K1,670.0
gpt-oss-20bMXFP41vLLM 0.32.097.372.164K760.9
GLM-4.7-FlashBF164vLLM 0.32.081.021.0128K595.7
Muse-Glimmer-30BBF164vLLM 0.32.026.725.664K399.3
Muse-Glimmer-30BFP84llm-scaler36.334.464K476.4
Muse-Glimmer-30BFP84llm-scaler 1.548.845.164K343.7
gemma-4-26B-A4B-itBF164vLLM 0.32.078.925.9†64K674.3
gemma-4-26B-A4B-itFP84vLLM 0.32.085.826.6†64K856.0
gemma-4-26B-A4B-itFP81vLLM 0.32.059.5-ctx 0 only425.3
gemma-4-31B-itBF164vLLM 0.32.022.512.3†32K284.5
gemma-4-31B-itFP84llm-scaler36.412.7†64K396.8
gemma-4-31B-itINT41llm-scaler13.7-ctx 0 only207.3
gemma-4-12B-itBF164vLLM 0.32.050.716.8†64K648.0
gemma-4-12B-itBF161vLLM 0.32.021.8-ctx 0 only262.4

"llm-scaler" without a version is 0.31.0-b1.

How much decode survives a long context

Four-card single-user decode as % of its own context-0 speed. "-" is beyond the served window.

ModelQuantctx 0 tok/s8K32K64K128K200K
Muse-Glimmer-30BBF1626.71009896--
Muse-Glimmer-30BFP8 (llm-scaler 1.5)48.8989592--
Qwen3.8-27B-FP8FP830.59894918376
Qwen3.6-27B / Qwen3.8-27BBF1628.69895918479
Qwen3.5-122B-A10BGPTQ-4bit52.79995878068
Qwen3.8-27BINT450.49892867567
Qwen3.5-9BBF1682.89793867666
Qwen3.6-35B-A3BFP899.99791847060
Qwen3.5-9BFP8126.19790826958
gpt-oss-20bMXFP4179.9979182--
GLM-4.7-FlashBF1681.079543926-
gemma-4-31B-itFP836.46643†35†--
gemma-4-26B-A4B-itFP885.8623931†--
gemma-4-12B-itBF1650.76441†33†--

Qwen3.8-Flash-Next: prefill chunk size

Four cards, W4A16, 262K window, vLLM 0.30.0-based XPU build. --max-num-batched-tokens (the prefill chunk) was the bottleneck: the shipped default is 1,024.

MatrixChunkMTPPrefill 8KPrefill 32KPrefill 128K (TTFT)1u ctx 01u 200K
20482,048off3,8563,6282,586 (49.5 s)42.631.2
81928,192off5,3064,9503,603 (35.5 s)42.731.2
2048 MTP-32,04833,9613,4882,454 (52.2 s)84.549.5
8192 MTP-38,19235,1924,8423,420 (37.4 s)84.451.4

8,192 prefills 31-39% faster than 2,048 at 8K-128K, with the same decode. The cost is under mixed load: a stream that is already decoding pauses for up to 2-5 s while another user's long prompt prefills at 8,192, against at most 1.0-1.4 s at 1,024-2,048. A single user sees no pauses.

Findings

  • Context costs Qwen, gpt-oss and Muse little. At 64K they keep 82-96% of their context-0 decode. Dense Qwen 27B BF16 still keeps 79% at 200K.
  • gemma-4 and GLM-4.7-Flash fall off hard. At 64K they keep 31-39%. gemma-4 prefill is also slow on this stack: 26B BF16 does 2,219 / 679 / 341 tok/s at 8K / 32K / 64K (189 s TTFT at 64K), against 3,709 / 3,444 / 3,085 for Qwen3.6-27B BF16.
  • gemma-4 at 128K+ stalls. At the full 262K window, the 26B decode cells at 128K and 200K returned no output on both vLLM 0.32.0 and 0.31.0 even though the 128K prefill completed, so every gemma-4 arm was run at a 131K window (31B BF16 at 64K, because it hung at 131K too).
  • One B65 can't hold a useful gemma-4 KV cache. One card has room for 6-9K tokens of KV (12B BF16, 26B FP8, 31B INT4), so those three matrices are context-0 only.
  • Best single user at 200K: Qwen3.5-9B FP8, 73.3 tok/s; then Qwen3.6-35B-A3B FP8 59.9 and INT4 58.8. Best 16-user throughput: gpt-oss-20b, 1,670 tok/s at context 0 and 1,400 at 32K.
  • vLLM 0.32.0 vs the old nightly: 0.94-1.03x on every arm with a baseline, except GLM-4.7-Flash at 2.23x (81.0 against 36.4 tok/s). Its v0.31.0 twin ran at 12.0 and was not uploaded.
  • Muse FP8 runtime trade-off: llm-scaler 1.5 wins single-user (48.8 against 36.3), 0.31.0-b1 wins at 16 users (476.4 against 343.7). Both are uploaded.

llama.cpp depth sweeps, 1 card

lmx kvcache run llama.cpp (llama-bench -p 512 -n 128 -d <depth>), b11729 SYCL. Decode tok/s, prefill in brackets.

GGUF4K32K64K128K
unsloth/Qwen3.8-27B-GGUF UD-Q4_K_XL14.9 (615)10.8 (529)8.2 (458)5.6 (361)
Qwen/Qwen3.6-27B Q4_K_M20.4 (773)13.4 (642)9.7 (543)6.2 (413)
Qwen/Qwen3.6-35B-A3B UD-Q4_K_M69.9 (1,282)56.5 (1,090)46.4 (937)34.4 (733)

At 128K the MoE keeps 49% of its 4K decode; the dense 27Bs keep 30-38%. Against vLLM INT4 on one card: Qwen3.6-27B is about even (20.4 vs 20.3), Qwen3.6-35B-A3B is behind (69.9 vs 80.3). Different benchmarks, so indicative only.

What this is not

  • These are sustained-decode matrices, not LocalMaxxing Verified single-request runs. Speculative decoding was off, so single-user numbers are well below my spec-on uploads of the same configs (0.09x-0.63x).
  • Speed only. No long-context answer-quality test.
  • † cells carry the bench's own capacity flag and were accepted by LocalMaxxing as-is.
Discussion

0 comments

Questions, reproduction notes, and follow-up results.

No comments yet. Start the technical discussion.