Reclaimed Node logoRECLAIMED NODE
← Back to Blog Homelab

Mac Studio vs. CMP 170HX: Same 27B Model, Same Settings, Which Serves It Better?

Oct 21, 2026 · 12 min read

Two GPU workstations facing each other with streams of glowing tokens flowing between them

We run the same local LLM on two very different machines: a Mac Studio and an Ubuntu VM with a single NVIDIA CMP 170HX (64 GB) passed through to it. Both serve the same model through the same llama.cpp build, with identical launch flags. We wanted to know which one handles real day-to-day use better, and what would change if we moved everything from one to the other.

TL;DR

Bottom line: with the same model and settings, the Mac Studio is the better all-round server (about 1.55x overall), mainly because it processes long prompts faster and slows down less when several people or agents share it. For one person chatting, you'd barely notice the difference.

28 of 31

Metrics won by the Mac Studio.

1.55x

Mac Studio advantage by geometric mean.

~55 tok/s

Single-user streaming speed on both. A tie.

The Setup

CMP 170HX
Mac Studio
Accelerator
NVIDIA CMP 170HX, 64 GB, single card
Apple M5 Ultra: 80 GPU cores, 256 GB unified memory
Host
Ubuntu VM on Proxmox (32 vCPUs, 128 GiB RAM)
Mac Studio, 36 CPU cores (12 Super + 24 Performance), macOS 27.0.1
Model
Huihui-Qwen3.8-27B-abliterated, Q8_0 GGUF
same file
Server
llama.cpp llama-server, build 11604 (commit 45451c366)
same build and commit
Context
262,144 total, 2 slots (131,072 each)
same
Flags
-ngl 999 -fa on --jinja, speculative decoding (draft-mtp, 2 draft tokens), reasoning_effort: low
identical

We matched the configuration on purpose. The Mac server originally ran 8 parallel slots, so we dropped it to 2 to match the CMP box. The CMP box was running an older llama.cpp build (11143), so we rebuilt it at the Mac's exact commit. The CMP 170HX's GPU was idle (0% utilization) at the start, and the benchmark client ran from a third machine (a Mac Mini) so it didn't load either server.

How We Tested

A small Python script (stdlib only) sent streaming requests to each server's OpenAI-compatible endpoint and recorded time to first token, streaming speed, total throughput and latency percentiles. Every scenario ran on both servers with zero errors.

Scenario
What it simulates
Prefill
One long prompt of about 17k tokens (16.7k on the Qwen tokenizer)
Chat, 1 user
One person chatting, with pauses between messages
Chat, 2 users
Two people chatting at the same time
Agents (2 and 4)
Agents sending ~6k-token log-analysis prompts (6.3k on the Qwen tokenizer), each with a unique start so the prompt cache can't help
Mixed
2 chat users and 4 agents at the same time

Results

All numbers below are from the matched-build run. Both llama.cpp servers received identical prompts, so their comparison is like for like.

Prompt processing (~17k-token prompt)

CMP 170HX
Mac Studio
Time to first token
21.9 s
16.2 s
Prompt processing speed
814 tok/s
1,038 tok/s

Chat

CMP 170HX
Mac Studio
1 user: streaming speed
55.7 tok/s
55.1 tok/s
1 user: time to first token (median)
0.73 s
0.25 s
2 users: streaming speed per user
37.5 tok/s
50.4 tok/s
2 users: time to first token (median)
1.23 s
0.31 s
2 users: worst-case latency (p95)
10.2 s
6.7 s

Going from one chatter to two, the CMP 170HX lost about a third of its per-user speed (56 to 38 tok/s). The Mac lost about 9% (55 to 50 tok/s).

The Mac's lead in time to first token for a single user comes from per-request overhead, not prompt speed. A one-token request takes about 0.23 s on the CMP box and about 0.05 s on the Mac, whether the requests are sent back to back or five seconds apart. Network latency isn't the cause (a ping to each server takes under a millisecond), and neither is the GPU waking from idle: the CMP stayed in its top performance state the whole time, and spaced-out requests were no slower than back-to-back ones. The servers' own timers show the extra time is spent inside prompt processing (about 215 to 240 ms on the CMP box versus 45 to 70 ms on the Mac for a trivial prompt), not in the web layer: a health-check request returns in about 3 ms on both. That is far more than a prompt this short should cost at the CMP's measured prompt speed, so it looks like a fixed cost per prompt-processing step. We haven't yet worked out why. (The very first request after a long idle period was slower on both machines: 1.4 s on the CMP versus 0.9 s on the Mac.)

Streaming speed per user (tok/s, higher is better)
CMP 170HXMac Studio
1 user
55.7 tok/s
55.1 tok/s
2 users
37.5 tok/s
50.4 tok/s
Time to first token (s, lower is better)
CMP 170HXMac Studio
1 user
0.73 s
0.25 s
2 users
1.23 s
0.31 s

Agents

CMP 170HX
Mac Studio
4 agents: total output
17.9 tok/s
26.0 tok/s
4 agents: time to first token (median)
39.0 s
22.5 s
4 agents: worst-case latency (p95)
45.7 s
35.0 s
4 agents: per-stream speed
38.2 tok/s
27.8 tok/s
2 agents: per-stream speed
15.4 tok/s
21.5 tok/s

Agent output looks low on both machines because each request carries a ~6k-token prompt and returns only ~200 tokens, so most of the time goes to prompt processing. That's why the Mac's faster prompt processing shows up so clearly here. Per-stream speed during generation is a different story: the CMP led with 4 agents, the Mac led with 2, and the order flipped between our two runs, so we treat it as a toss-up.

Total output with 4 agents (tok/s, higher is better)
CMP 170HXMac Studio
17.9 tok/s
26 tok/s
Worst-case latency with 4 agents (s, lower is better)
CMP 170HXMac Studio
45.7 s
35 s

Chat while agents are running

CMP 170HX
Mac Studio
Chat: time to first token (median)
30.7 s
24.8 s
Chat: streaming speed
21.7 tok/s
46.9 tok/s
Agents: total output
13.4 tok/s
19.5 tok/s
Agents: streaming speed
38.3 tok/s
21.4 tok/s

Both machines struggle here. A chat message waited 25 to 45 seconds before the first token, because with only two slots, chat requests queue behind agents. Once chat replies started, the Mac streamed them more than twice as fast (47 versus 22 tok/s).

Chat wait while 4 agents run (median time to first token, s, lower is better)
CMP 170HX 30.7 s
Mac Studio 24.8 s
vLLM bonus 0.12 s

vLLM bonus server: different model and stack, for context only.

Does the llama.cpp Build Matter?

Our first run had the CMP box on an older build (11143) than the Mac (11604). To rule that out, we rebuilt the CMP box at the Mac's exact commit and reran.

Old build
New build
Overall score vs. the Mac
1.61x for the Mac
1.55x for the Mac
Long-prompt processing (~17k tokens)
801 tok/s
814 tok/s
1-user streaming speed
54.2 tok/s
55.7 tok/s

Across all 31 metrics, the new build was 1.04x better than the old one: 11 metrics up, 6 down, 14 flat. Single-chat and prompt speed barely moved. The metrics that did swing by 40 to 70% were agent per-stream speeds, which also moved in opposite directions in different scenarios. That is run-to-run noise, not a software effect.

What Migrating Would Change

Moving from the CMP 170HX to the Mac Studio:

Use case
Change
1 person chatting
Streaming speed about the same; reply starts about 0.5 s sooner
2 people chatting
About 34% faster streaming; first token about 4x sooner
Long prompts (~17k tokens)
About 26% less wait before the first token
4 agents
About 45% more throughput; about 23% lower worst-case latency
Chat while agents run
About 2.2x faster streaming; first token about 19% sooner

The one thing that may get worse: agent requests that are already generating sometimes stream slower on the Mac (about 27% slower with 4 agents, about 44% slower in the mixed test). That result was inconsistent between runs, so don't count on it.

Improvement moving from CMP 170HX to Mac Studio (%)
Chat while agents run, streaming
+116%
4 agents, throughput
+45%
2 users chatting, streaming
+34%
Long prompt (~17k tokens), wait for first token
26% less
4 agents, worst-case latency
23% lower
1 user chatting, streaming
~0%

Bonus: a vLLM Server Running a Different Model

We also ran the same test against a third machine: a vLLM server running GLM-5.3-Flash (a W4A16 4-bit quant with MTP). It's a different model and a different serving stack, so this is context, not a ranking. Tokens per second can't be compared fairly across different models.

Hardware: four NVIDIA CMP 170HX cards (64 GB each, 256 GB total) running with tensor parallelism across all four, on an AMD EPYC 7502P (32 cores) with 247 GiB of RAM, Ubuntu 26.04.1. That's the same card as our single-GPU test, times four. The build is covered in Four CMP 170HX Cards, One Server.

Server: vLLM 0.32.0rc1.dev215 (a development build), max context 262,144 tokens, up to 32 concurrent sequences (--max-num-seqs 32), 85% GPU memory utilization, and speculative decoding with a separate draft model (7 tokens per step, adjusting down to 5 or 3 as load rises). Prefill is chunked and mixed with decoding.

Scenario
Output tok/s (total)
Per-stream tok/s (p50)
Time to first token (median)
Time to first token (p95)
Latency p95
1 chat user
107.5
175.5
0.07 s
0.07 s
1.9 s
2 chat users
178.1
145.6
0.09 s
0.39 s
3.1 s
2 agents
70.4
74.4
3.0 s
4.1 s
7.3 s
4 agents
74.8
30.0
3.8 s
7.2 s
14.1 s
Mixed: agents
56.6
33.0
5.2 s
9.1 s
14.1 s
Mixed: chat
62.5
119.9
0.12 s
3.4 s
20.7 s

The long prompt (the same text counts as about 12.5k tokens with GLM's tokenizer) reached its first token in 4.1 seconds, which works out to roughly 3,000 prompt tokens per second. That figure is calculated from the actual prompt token count, since vLLM doesn't report server-side prompt speed. Every scenario ran with zero errors.

The notable result is the mixed test. With four agents running, chat still got its first token in about 0.12 seconds at the median, where the two llama.cpp servers made chat wait 25 to 30 seconds. That supports the slot-isolation point above: vLLM batches requests continuously instead of using a small fixed number of slots, so chat doesn't queue behind agents. This server allows 32 concurrent sequences, where the llama.cpp servers have 2 slots. We also can't separate how much of the result comes from vLLM's scheduling, from using four GPUs, from the speculative-decoding setup, or from this model simply being lighter to run, because we haven't run the same model on both stacks.

2 fixed slots
llama.cpp in this test
Slot 1agent
Slot 2agent
Waiting
chatagentagentagent
Continuous batching
vLLM, up to 32 sequences
chatagentagentchatagentagent
Waiting
None
With two fixed slots, a chat request waits until an agent finishes. Continuous batching works new requests in as they arrive.

Where Each One Makes Sense

What the benchmark shows. With this model, the Mac Studio was equal or better on every speed measure. The CMP 170HX did not win on prompt processing: the Mac processed long prompts about 28% faster (1,038 versus 814 tok/s). The only clean tie is single-user streaming speed (55.7 versus 55.1 tok/s). The CMP led on agent streaming speed in two scenarios, but that result flipped between our two runs, so we don't count it as a win.

What the benchmark doesn't measure. The case for the CMP 170HX rests on things outside our tests:

A rule of thumb. If you want one machine to serve agents or several people, the Mac Studio is the better pick on speed. If you already own the CMP hardware, or price per unit matters, a single CMP is fine for one or two people chatting: same streaming speed, about half a second slower to start. Long prompts and heavy agent traffic are where it falls behind.

Takeaways

  1. If it's just one or two people chatting, either machine is fine. The Mac is a bit snappier, but you'd need to be watching the clock.
  2. If agents are in the picture, the Mac is the better home. Agent prompts are long, and prompt processing is where it leads.
  3. Neither machine handles chat and agents sharing two slots well. If interactive chat matters, the fix is slot isolation. Reserving slots for chat, or running a separate instance for agents, would likely help far more than any hardware swap. We haven't tested this yet.
  4. The Mac Studio wins every speed measure, but speed isn't the only factor. The CMP 170HX matches it on single-user streaming and runs the whole 27B Q8 model on one card. Price, power and room to add cards, which we didn't measure, decide whether the CMP still makes sense. See "Where each one makes sense."

Caveats

Notes on the Model and Setup

Related: Mac Studio vs. CMP 170HX for image generation and Four CMP 170HX Cards, One Server.

Building Something Like This?

Tell us what you are trying to run — local models, passthrough labs, bulk storage — and we will tell you honestly what it takes and what we have on the bench.

Get Sourcing Help
More Posts Shop Inventory