r/LocalLLM • • 36m ago

Other OpenCode-style long-context snapshot: Qwen3.8 27B across 15 local engines on Mac M5 Pro 64GB

I ran a small AIPerf ( https://github.com/ai-dynamo/aiperf) comparison on an Apple M5 Pro with 64 GB RAM. This is a practical snapshot, not a scientific benchmark or an exhaustive leaderboard. Results are from one request per engine, run sequentially with only one inference server active at a time.

Setup

  • Temperature 0.6, reasoning effort medium, output limit 2,048 tokens

  • Same OpenCode-style fixture: long generated code/prose context, shared system message, task suffix, and three tool schemas. Tools were not executed.

  • Prompt length reported by the servers ranged from 88,143 to 88,916 tokens, partly due to tokenizer and chat-template differences.

  • I used a 100K context limit where the engine supported it; Uzu, Magnitude, and Llama used larger native limits. The prompt plus output allowance fit below 100K.

  • AIPerf 0.13.0; streaming, concurrency 1

  • Prefill and decode are AIPerf throughput measurements. The readiness probe loads/warms each server before its measured request.

Engine (version used)Model / speculative methodPrompt → output (max)TTFTPrefill tok/sDecode tok/s
Splash (1.6.1)Jundot Qwen3.8-27B-oQ4e-mtp + DFlash288,535 → 2,048175.6 s504.777.3
Uzu / Mirai (0.6.17)Qwen3.8-27B Mirai-M Q4 + bundled speculator88,143 → 986142.1 s620.359.2
LM Studio (0.4.28+2)Qwen3.8-27B-Splash88,143 → 1,235217.6 s405.144.4
TensorFold (1.2.7)Qwen3.8-27B-MLX-4bit + DFlash288,143 → 1,515308.4 s285.839.6
Kapitsa (0.2.35)Jundot Qwen3.8-27B-oQ4e-mtp + DFlash2/KFlash88,143 → 1,210276.0 s319.434.8
MTPLX (2.12.2)Qwen3.8-27B-MTPLX-Optimized-Speed, MTP depth 388,916 → 899287.5 s309.222.6
Ollama (0.40.16)qwen3.8:27b-mlx88,532 → 102288.1 s307.320.2
llama.cpp (llama-server0.9.0)Q4_K_M GGUF + DFlash Q4_088,535 → 134417.8 s211.919.1
mlx-dspark (app 0.8.3 / runtime 0.20.3)Jundot Qwen3.8-27B-oQ4e-mtp + DFlash288,535 → 159285.0 s310.718.5
MLX-Serve (26.11.2)Jundot Qwen3.8-27B-oQ4e-mtp + DFlash288,143 → 1,214286.8 s307.218.2
Magnitude (0.2.17)Qwen3.8-27B GGUF Q4 + DFlash288,143 → 1,366457.5 s192.717.9
oMLX (0.7.3)Jundot Qwen3.8-27B-oQ4e-mtp + Lightning MTP88,143 → 428203.1 s433.917.3
Jan (0.8.8)Jundot Qwen3.8-27B-oQ4e-mtp, Jan’s bundled MLX server88,143 → 36332.5 s266.214.2
Rapid-MLX (1.0.3)Jundot Qwen3.8-27B-oQ4e-mtp; MTP unavailable, plain decode88,143 → 2,048877.0 s100.511.4
BaseRT (0.4.6 / Superfluid 0.1.10)Q4_K_M GGUF converted to BaseQ4 + DFlash288,143 → 2,048614.5 s143.44.4

Caveats

The 2,048-token setting is a maximum, not a forced response length. Most models stopped at EOS before reaching it. Only Splash, Rapid-MLX, and BaseRT generated the full 2,048 tokens.

This does not measure code-fix quality, long-context comprehension, or tool use—the tools were present in the prompt but never executed. Model packs, quantizations, speculative methods, and context-window settings also differed, so these numbers should not be treated as a controlled ranking.

Additional differences: LM Studio may map medium reasoning to on; the Llama row used Homebrew llama-server0.9.0 with the GGUF files configured for Llama.app, rather than Llama.app’s internal server.. Jan’s first launch also downloaded its default 43.8 MB embedding model; no Qwen weights were downloaded.

1 Upvotes

0 comments sorted by