Benchmark results: what is the best and fastest engine to run Qwen3.8-27B on macOS

Reddit r/LocalLLaMA News

Summary

This article benchmarks various engines for running the Qwen 3.8 27B model on macOS, comparing their speed and performance in agentic coding tasks, and recommends MTPLX or llama.cpp with MTP for best results.

The new Qwen 3.8 27B is fantastic for local agentic use. The problem is, what makes it so good, being a dense model, also makes it slow. Many engines and versions of the model claim various speed increase. How true are those claim? And does a proven huge boost claim on a short synthetic test actually holds on real agentic work? I spent five days and over 100 GPU hours running rigorous repeatable agentic coding tests, collecting and comparing the data. 200 GB of models downloaded. Ended up with 20 Bubble Bobble clones on my disk, including the ones from failed tests. None of them good, but that wasn't the point. My recommendation: MTPLX or llama.cpp+MTP I ran the tests on 8-bit quants (GGUF or MLX), unquantised KV cache. 100k max response size, full 262k context, official Qwen coding sampler, official Qwen Jinja chat template. I first tested each engine with a short synthetic benchmark, to verify the installation, usage, results collection, and to verify the speed claims Then came the real test, with an agentic coding benchmark consisting of 4 phases/prompts; each engine was tested twice, at medium and xhigh reasoning effort: 2.1. capturing requirements and writing the specification plan 2.2. writing the implementation plan 2.3. implementing the core functionality 2.4. finishing the implementation with advanced functionality Last test, for prefill speed, was with a cold 128k token prompt test, with reasoning turned off and deterministic sample, repeated twice Test hardware: Apple Mac Studio, M2 Max, 96 GB unified memory. Engine Effort Decode Prefill Wall Tokens Score MTPLX xhigh 20–22 tok/s 109 t/s 2h05 152K 93 MTPLX medium 21–24 tok/s 109 t/s 1h35 117K 91 llama.cpp + MTP xhigh 17–19 tok/s 103 t/s 2h52 179K 86 llama.cpp + MTP medium 18–20 tok/s 103 t/s 1h04 70K 84 mlx-dspark DFlash2 medium ~16–18 tok/s 145 t/s 2h09 125K 82 mlx-dspark DSpark medium ~12–17 tok/s 145 t/s 2h05 96K 77 llama.cpp + DFlash2 medium 14–15 tok/s ~103 t/s 2h09 111K 74 llama.cpp + DFlash2 xhigh 13–14 tok/s ~103 t/s 3h31 174K 72 oMLX xhigh 10–11 tok/s 85 t/s 3h57 146K 67 llama.cpp baseline xhigh 10–11 tok/s 103 t/s 3h43 140K 66 llama.cpp baseline medium 10–12 tok/s 103 t/s 1h44 66K 66 oMLX medium 10–12 tok/s 85 t/s 1h44 64K 65 vllm-mlx medium 9–11 tok/s 134 t/s 3h30 115K 51 vllm-mlx xhigh 9–12 tok/s 134 t/s 4h08 136K 50 mlx-dspark DFlash2 xhigh ~9–15 tok/s 145 t/s 3h58 226K 47 vllm-mlx: completed the task, but it does not separate thinking from output, so the raw chain of thought leaks into the final output. mlx-dspark DFlash2 xhigh: thought for 226 thousand tokens and delivered nothing. What about xhigh vs medium reasoning effort? MTPLX xhigh costs only half an hour more than medium (2h05 vs 1h35) and the game quality went significantly up on my scorecard. Worth it. llama.cpp + MTP xhigh costs 1h48 more, with again a significant increase in quality. Worth it if you have the time. oMLX xhigh took more than twice as long as medium. The slower token speed has a huge impact on the time difference between both modes. Not worth it. Get a faster engine instead. dspark DFlash2 xhigh is the cautionary tale at the bottom of the table. See the anomaly note above. xhigh is worth it when the engine is fast enough and uncapped. The model thinks 30 to 100 percent longer, at the same speed, and the result is better. On slow engines you can really feel the slower performance compounded by the extra thinking; instead it could be better to use medium, with more of your own time spent planning a better process and workflow. Commands and configuration notes Exact commands I used for each engine: ``` llama.cpp baseline (homebrew, b10470) llama-server -m Qwen3.8-27B-Q8_0.gguf --mmproj mmproj-F16.gguf \ --jinja -c 262144 --parallel 1 -ngl 99 --port 8030 llama.cpp + MTP, the recommended GGUF setup llama-server -m Qwen3.8-27B-Q8_0.gguf --mmproj mmproj-F16.gguf \ -md mtp-Qwen3.8-27B-Q8_0.gguf --spec-type draft-mtp --spec-draft-n-max 3 \ --jinja -c 262144 --parallel 1 -ngl 99 -ngld 99 llama.cpp + DFlash2 (for now, needs PR #27342 build) llama-server -m Qwen3.8-27B-Q8_0.gguf \ -md Qwen3.8-27B-DFlash2-Q8_0.gguf --spec-type draft-dflash --spec-draft-n-max 7 \ --jinja -c 262144 --parallel 1 -ngl 99 -ngld 99 MTPLX (pip install mtplx). Note --max-tokens mtplx start web --model Qwen3.8-27B-MTPLX-Optimized-Quality --max-tokens 100000 oMLX (brew install jundot/omlx/omlx), model dir contains the checkpoint omlx serve --model-dir /path/to/models mlx-dspark (pip install mlx-dspark). Note --max-tokens-cap mlx-dspark serve --model Qwen3.8-27B-MLX-8bit --mode dflash \ --context-window 262144 --max-tokens-cap 262144 --default-max-tokens 100000 vllm-mlx (pip install vllm-mlx). Note --timeout vllm-mlx serve Qwen3.8-27B-MLX-8bit --max-request-tokens 262144 --timeout 7200 ``` The MLX engines all take the plain mlx-community 8-bit weights, except MTPLX which needs its own checkpoint format with the MTP tensors included (I used Youssofal/Qwen3.8-27B-MTPLX-Optimized-Quality). For llama.cpp GGUF, I used the official MTP draft from ggml-org. MTPLX has a default low response cap. Use --max-tokens 100000 dspark also has a low default generation cap of 32K vllm-mlx kills any request that spends more than 300 seconds on prefill. Raise it with --timeout. One measurement warning for anyone reproducing this: engines do not all stream one token per event. Some pack several tokens per chunk, MTPLX about 1.7, oMLX about 3.
Original Article

Similar Articles

Run Qwen3.8 27B locally: real numbers from my Mac Studio

Hacker News Top

The article provides real-world performance benchmarks for running the Qwen3.8 27B AI model locally on a Mac Studio, comparing it to its predecessor and discussing hardware requirements and quantization effects.

Are you running Qwen 3.8 27b or Qwen Flash Next?

Reddit r/LocalLLaMA

The user discusses preferences between Qwen 3.8 27b and Qwen Flash Next models on Apple hardware, comparing speeds, and inquires about improving performance with MLX and harnesses without reasoning.

I benchmarked 21 local LLMs on a MacBook Air M5 for code quality AND speed

Reddit r/LocalLLaMA

A developer benchmarked 21 local LLMs on MacBook Air M5 using HumanEval+ and found Qwen 3.6 35B-A3B (MoE) leads at 89.6% with 16.9 tok/s, while Qwen 2.5 Coder 7B offers the best RAM-to-performance ratio at 84.2% in 4.5 GB. Notably, Gemma 4 models significantly underperformed expectations (31.1% for 31B), possibly due to Q4_K_M quantization effects.

Qwen 3.6 27B is the sweet spot for local development

Hacker News Top

Qwen 3.6 27B is praised as a powerful local AI model that outperforms expectations for general intelligence, suitable for practical tasks like code generation, and runs easily with llama.cpp.