The rig at a glance
I’m testing whether local large language models (LLMs) on two M5 Ultra Mac Studios can take on real coding work that currently relies on hosted models. This first post covers the setup and test plan. The benchmark results will follow as I run the trial.
Three Mac Studios: one M3 Ultra and two M5 Ultras. Here’s the hardware in this setup.
| Machine | Chip | Unified memory (RAM) | CPU cores | GPU cores |
|---|---|---|---|---|
| Alberto | M3 Ultra | 96GB | 28 | 60 |
| Luca | M5 Ultra | 256GB | 36 | 80 |
| Giulia | M5 Ultra | 256GB | 36 | 80 |
| Luca + Giulia | Two M5 Ultras | 512GB | 72 | 160 |
| Whole rig | All three Studios | 608GB | 100 | 220 |
These are hardware totals across separate machines. How much memory and compute a single model can use depends on the software and how it distributes the work. That’s part of what I’m testing.
Alberto has been working for roughly four months now. It’s my M3 Ultra Mac Studio with 96GB of memory, and it runs the autonomous software delivery setup we’ve been developing ourselves.
I tried running local models on it. For the development work I wanted them to do, that setup wasn’t enough. So Alberto has been running the agents, builds and automated tests, while hosted models do the inference: the work of processing prompts and generating responses.
That distinction matters. There’s already a working delivery process here. What I want to change next is how much it depends on models running elsewhere.
I’m spending roughly £6,000 a month on hosted AI coding. That’s my current estimate, and it gives me a reason to revisit local models with more memory available.
Luca and Giulia are the two new Studios I’m adding to the setup. Luca arrives first, then Giulia. Alberto stays in the team. Yes, the names come from Luca. Alberto is already up and running, getting on with the work. The other two are joining it.
What Alberto has been doing
We call our approach the Autonomous Delivery House, or ADH. It’s the way we organise software delivery around defined jobs, AI agents, automated testing and independent review. I’ve explained how we organise that AI-assisted delivery process in more detail.
A piece of work starts with a clear brief and acceptance criteria. A development agent works on it, tests check the change, and a separate reviewer checks the work. Failed checks send it back for another pass. I set the direction and the rules about when something needs my decision or approval.
The independence matters to me. The agent that builds a change doesn’t get to decide on its own that the work is good enough. Being able to produce code quickly is only useful if the process catches problems before that code goes further.
Alberto has been the machine running that process, with cloud-based models doing the heavy model work. It turned out to have far more hardware than that particular job needed. But it’s given us a place to develop and use the delivery approach while we worked out what a useful local-model setup would require.
My earlier local-model attempts weren’t enough for the work I needed. That’s my experience of the setup I tried, rather than a claim that an M3 Ultra can’t run local models. I’ll need a much more explicit comparison for this next trial.
The question behind the purchase
Can local models take on more of the work inside the ADH process we already use? That’s the question behind the two new Studios.
Luca and Giulia each have 256GB of unified memory. I’ll test open-weight models on one machine and across the pair. More memory gives me room to try a different setup. It doesn’t tell me whether the code will be useful, or whether the system will be fast and reliable enough.
Alberto remains part of the three-machine system. I expect it to continue supporting the delivery process while Luca and Giulia take on the local-model trials. We’ll work out the division of jobs through testing.
I don’t expect the hosted bill to disappear just because I’ve bought hardware. There may be jobs where I still need a hosted model. I’ll also be paying for electricity and spending time on setup, maintenance and fixing whatever breaks.
I’ll track those costs alongside the hosted spending I still need. I need to know whether the reduction in hosted spending is worth the cost and effort of running them.
Marcus, the AI assistant handling the setup, is recording the runs and what goes wrong. I’ll use those records to explain what I’d trust the rig to do and where I’d still step in.
How I’ll test the machines
Alberto continues to support the delivery process. I’ll test Luca on its own first, then bring Giulia into the local-model trials and compare the pair with a single machine.
The models I want to try are Qwen3.8-Flash-Next, GLM-5.3-Flash and GLM-5.3. When I share a result, I’ll include the exact model version, how it was compressed to fit in memory and the software used to run it. Otherwise, comparing the numbers won’t tell you much.
I also want to try running GLM-5.3 across Luca and Giulia, linked over Thunderbolt 5. I’m interested in what happens when the work has to move between two machines. Does the extra memory help enough to make that worthwhile? I’ll need to test it.
What I need it to do
I’ve set four targets for the new local-model trial. These are targets, not results. I don’t have measurements from the new machines to share yet.
| Test | Target | What I’ll look at |
|---|---|---|
| Real development work | At least 4 of 6 difficult tasks ready to merge | Does the code meet the task requirements and pass its tests? How much did I have to correct? |
| Generation speed | At least 15 tokens per second | Can it keep producing text at that rate during the test? |
| Cold 32K-token prefill | Under 3 minutes | How long does it take to process a 32,000-token prompt before starting its answer, without a cached prompt? |
| Reliability | 8 hours stable | Can it keep working through the trial workload without crashes or restarts? |
By “ready to merge”, I mean code I’m happy to put into the project after reviewing it. A model finishing its answer doesn’t mean it has finished the job.
I’ll record how much help each task needed. If I spend an hour rescuing a change, you should know that when you look at the result.
I’ll also show model loading separately from prompt processing, and use the same test conditions when comparing machines. If I change the setup between runs, I’ll explain what changed.
The machines need to earn their place
I want this rig to work. But wanting it to work is not a reason to keep it.
The new Studios need to deliver code I can use, at a cost that makes sense, without giving me more work in review and recovery. If they can’t do that, I need to say so, however much I like the hardware.
Setting the targets now gives me something to judge them against once the excitement of unboxing has worn off.
What this might mean for your business
You might have no reason to buy a Mac Studio. But if you’re paying for AI tools, you’ll probably recognise the question: how much useful work am I getting for the money?
A cheaper model could turn out to be more expensive if someone has to spend longer checking and fixing its work. Equally, a local model that handles a particular job reliably could be worth using, even if it can’t do everything.
That’s what I want to understand here. Which tasks can I hand over? How much supervision do they need? And what does it actually cost to get the job finished?
I may end up keeping a mix of local and hosted models. I’m happy with that if the results support it.
That’s also how I approach AI consultancy and implementation for businesses: start with the work that needs doing, test a focused change and check whether it helps the people responsible for it.
What comes next
I’ll start by adding Luca to the existing setup and running its first local-model tests, then put it through development tasks on its own. Once Giulia arrives, I’ll try the two together. After that comes the decision on whether they’re worth keeping.
If something fails, I’ll include it. If a result looks promising but needs more testing, I’ll say that too.
Silenzio, Bruno. Let’s see how Luca gets on.
What would you like me to test? If you’ve run local models yourself, tell me where you got stuck. It might save me a detour, or give us something useful to investigate.
Sources and evidence.
- My notesThe plan and the numbers
The roughly four months with Alberto, earlier local-model experience, machine configurations, spending estimate and targets are my account. I haven’t shared measurements from the new trial yet.
- To followThe test results
I’ll include the model versions, settings and run records when I write up the results, so you can see how I reached each conclusion.
- Reference
Chip specifications for Alberto’s recorded 28-core CPU configuration, paired with a 60-core GPU.
- Reference
The 36-core CPU and 80-core GPU configuration used by Luca and Giulia. Each machine has 256GB of unified memory.
How I put these posts together.
I use AI tools to help record the tests, organise my notes and draft these posts. Before I publish, I check the claims against the records. I’m responsible for what appears here. If I get something wrong, I’ll correct it and explain the change.
No corrections have been recorded.