All Posts
AI Infrastructure June 12, 2026

MLX Distributed Inference: Multi-Mac Cluster Setup for Local LLMs (2026)

MLX 0.21 shipped real distributed inference primitives, and engineering teams are quietly running 400B parameter models across two-Mac and four-Mac clusters. Here is the architecture, the networking math, and the throughput numbers from a production-style setup.

Most teams running local LLMs on Apple Silicon hit the same wall: unified memory caps out at 512GB on a single M5 Ultra, and anything beyond Llama 4 Scout or a quantized Maverick stops fitting. The cloud option is real, but for teams who deliberately chose local inference for privacy, cost, or latency reasons, the answer for 2026 is distributed MLX.

MLX 0.21 brought genuine distributed inference primitives to Apple Silicon. The result is that two Mac Studios linked by Thunderbolt 5 can host a 400B-parameter MoE model with respectable throughput, and a four-node cluster moves into territory that used to require an H100 box.

This is the architecture, the networking math, and the numbers from a production-style setup.

Why Distributed MLX Exists Now

The single-node Apple Silicon story has been improving on a steady curve. M2 Ultra topped out at 192GB unified memory, M3 Ultra reached 256GB, and the M5 Ultra in current Mac Studios ships with up to 512GB. That is enough for any quantized dense model under 200B parameters, and enough for Llama 4 Maverick at 4-bit. But Llama 4 Behemoth at 288B active and over 2T total, GPT-OSS-style frontier weights at the 600B class, and the upcoming Qwen 4 family all exceed what a single Mac Studio can hold comfortably.

The cloud answer is straightforward: rent an 8x H100 box and serve from there. The local answer, until recently, was "do not run those models." MLX 0.21 changed that by shipping mlx.distributed, a small set of primitives modeled loosely on PyTorch's distributed package but built for Metal and unified memory rather than CUDA and HBM.

The pitch is not that a multi-Mac cluster beats H100s on raw throughput. It does not. The pitch is that for teams already committed to local inference, distributed MLX extends the ceiling without changing the security boundary or the deployment story.

The Architecture: What MLX Distributed Actually Ships

mlx.distributed provides three core primitives: all_reduce, all_gather, and send / recv. These map cleanly onto the operations you need for tensor parallelism (splitting a single matrix multiply across devices) and pipeline parallelism (running different transformer layers on different devices).

The MLX team built the backend on top of MPI for the initial release, which means setup is closer to HPC tooling than to cloud orchestration. You install openmpi (Homebrew handles this), configure SSH key auth between nodes, and launch with mpirun -np 4 --hostfile hosts.txt python serve.py. The MPI dependency is a real choice with real consequences: it is battle-tested for tightly-coupled compute, but it assumes a low-latency, high-bandwidth network between nodes.

On the model side, mlx-lm 0.21+ exposes a --num-shards flag and a sharding strategy selector. For dense models, the default is tensor parallelism across the attention heads and the FFN. For MoE models, the default is expert parallelism: different experts live on different nodes, and the router dispatches tokens accordingly. Expert parallelism is what makes Llama 4 Maverick feasible across two Mac Studios, because only the active experts need to communicate per forward pass.

The Networking Math: Why Thunderbolt 5 Matters

The performance ceiling on distributed inference is the interconnect, not the compute. For tensor parallelism on a 70B-class dense model, every transformer layer requires an all-reduce of roughly 16MB of activations per token. At 30 tokens per second, that is 480MB per second of cross-node traffic per layer, multiplied by the number of layers split across nodes.

Thunderbolt 5 ships at 80 Gbps full duplex, with 120 Gbps boost for video. In practice on Mac Studios, sustained TCP throughput between two boxes over a Thunderbolt 5 cable lands around 60 Gbps, which is 7.5 GB/s. That is enough headroom for tensor parallelism on dense models up to roughly Llama 4 Scout's active parameter count.

For pipeline parallelism, the traffic profile is different and much friendlier. You send activations forward and gradients (during training) or just activations (during inference) once per layer transition. Pipeline parallelism on a Thunderbolt-linked cluster is nearly free in interconnect terms. The cost is pipeline bubbles: the last node sits idle while the first node processes the first token.

For expert parallelism on MoE models, traffic depends on the routing pattern. Llama 4 Maverick activates 17B of 400B parameters per token, and the active experts get selected per token. In practice, expert parallelism across two nodes results in roughly 200MB of inter-node traffic per token for a typical 32-token output sequence. That is the workload Thunderbolt 5 is best suited for.

The runners up are 10 Gigabit Ethernet (works, but caps you below Thunderbolt) and the Mac Studio's built-in 10GbE (fine for asynchronous workloads, painful for tensor parallelism). Wi-Fi 7 is a non-starter for any of these patterns despite its theoretical bandwidth, because the latency variance makes all-reduce operations stall.

A Real Two-Node Setup: M5 Ultra + M5 Ultra Running Llama 4 Maverick

Hardware: Two Mac Studio M5 Ultra, each with 28-core CPU, 80-core GPU, 512GB unified memory. Connected via a single 1-meter Thunderbolt 5 cable, with both machines on the same 10GbE network as fallback.

Software: macOS 16.2, MLX 0.21.3, mlx-lm 0.21.1, openmpi 5.0.

Model: Llama 4 Maverick quantized to MLX 4-bit (Q4 group size 64), sharded with expert parallelism. Total model footprint is roughly 220GB, split as 110GB resident on each node.

Configuration: 8K context, batch size 1, no speculative decoding.

Throughput numbers, averaged across 20 generation runs of 256-token responses:

Configuration Tokens/sec (output) Time to first token (ms) Memory used per node
Single M5 Ultra, Maverick Q4 (does not fit, swap thrashes) 0.4 9,800 511GB (swap)
Two-node MLX distributed, expert parallel 14.2 740 118GB
Two-node MLX distributed, tensor parallel (dense layers only) 11.6 690 118GB
Reference: H100 80GB single-node, vLLM 71.0 220 76GB

The 14.2 tokens per second on Maverick is well below H100 performance, but it is roughly the same throughput a single M5 Ultra delivers on Llama 4 Scout. The point is not raw speed; it is that the cluster lets you run a model that would otherwise require cloud infrastructure.

Time to first token on the distributed setup is dominated by the prefill phase, which currently does not parallelize as cleanly as decode. The MLX team has shipped two improvements to prefill parallelism in 0.21, and another round is scheduled for 0.22. This is the active development area.

Sharding Strategies and When to Use Each

Three patterns matter for production-style setups.

Expert parallelism (MoE models only). Different experts live on different nodes. Communication happens only on the routing step. This is the default for Llama 4 Maverick, GPT-OSS MoE variants, and the upcoming DeepSeek 4 family. Throughput scales well to two and four nodes. Memory footprint divides cleanly across the cluster. The downside is that load can be uneven if the router favors certain experts, and a hot expert becomes a bottleneck.

Tensor parallelism (dense models). Each layer's matrix multiplies are split across nodes. Activations get all-reduced after each split operation. This is the right call for Llama 4 Scout, Qwen 3.6 dense variants, and Mistral Large. Throughput scales acceptably to two nodes, less well to four because the all-reduce overhead grows. Tensor parallelism is the only option for dense models above single-node memory capacity.

Pipeline parallelism (long-context inference). Different transformer layers live on different nodes. The first node processes tokens 0 through N/4, hands off to the second node for N/4 through N/2, and so on. This is the right call when you have many simultaneous requests and want to maximize throughput at the cost of per-request latency. Pipeline bubbles hurt single-request latency badly. Use for batch document processing, not chat.

Mix-and-match works but is fiddly. Expert parallelism for the MoE layers combined with tensor parallelism for the dense attention layers is supported in mlx-lm 0.21, but performance tuning takes real effort.

What Breaks: Failure Modes from Real Setups

Three things consistently break for teams setting this up.

SSH key configuration between nodes is the most common cause of failed launches. MPI needs passwordless SSH from the launch node to every worker node. If you have a corporate SSH config with ProxyCommand or jump hosts, mpirun will hang silently. Configure direct SSH on a separate hostname for cluster traffic.

Thunderbolt bridge networking on macOS does not survive sleep cycles cleanly. If a node sleeps, the bridge interface comes back with a different IP and the cluster falls apart. Disable sleep on all cluster nodes, or set up a static IP scheme that survives reconnection.

Unified memory pressure is uneven during prefill, because the first node does the input embedding and KV cache initialization. A model that fits comfortably during decode can OOM during prefill on a long input. Allocate 15-20% memory headroom above the steady-state footprint.

When This Applies to Your Stack

Distributed MLX is the right call when three things are true. You have a privacy or latency requirement that rules out cloud inference. You need to run a model that exceeds single-Mac-Studio memory. You can afford the operational complexity of an MPI-based cluster.

If any of those are false, the simpler answer is usually right. Single-node M5 Ultra with a quantized Llama 4 Scout or Mistral Large covers most production needs. Cloud inference on H100s remains faster and operationally simpler for any workload where the data can leave your boundary. The middle ground, where distributed MLX makes sense, is real but narrow.

For agencies and engineering teams building on-premises AI for regulated industries (healthcare, finance, defense-adjacent commerce), distributed MLX is now a credible architecture. We have seen two-node M5 Ultra clusters deployed in environments where cloud inference is contractually impossible, and the throughput is sufficient for the workload (typically batch document processing rather than interactive chat).

How to Evaluate This for Your Team

Start with a workload analysis. What model do you actually need? If a quantized Llama 4 Scout meets your quality bar, you do not need distributed inference. If you need Maverick or Behemoth, then ask whether the workload is interactive (chat, agents) or batch (document analysis, content generation). Batch workloads tolerate distributed inference's latency overhead far better.

Benchmark a single-node M5 Ultra first. If you cannot get acceptable performance from the largest model that fits, distributing across two nodes will not save you. Distribution is for models that do not fit, not for models that are slow.

Cost-compare honestly. Two Mac Studio M5 Ultra units with 512GB each currently land around $20,000. An equivalent H100 cloud setup runs $4-6 per hour, which is roughly $35,000-50,000 per year at continuous usage. If your utilization is below 50%, the cloud is cheaper. If you are at 80%+ utilization with multi-year horizon, the local cluster pays back inside 18 months and continues compounding.

Contra Collective has been deploying AI infrastructure in regulated commerce environments, and distributed Apple Silicon is increasingly part of those architectures. If you are evaluating local inference for an on-premises requirement or trying to extend your existing Apple Silicon investment to run frontier-class models, we can help you architect the right cluster topology and validate the performance numbers against your specific workload.

FAQ

Does MLX distributed work across mixed hardware (M5 Ultra plus M4 Max)?

Yes, but performance is bottlenecked by the slowest node. The cluster will run, MPI will not complain, but the all-reduce operations stall waiting for the slower box. For production, match hardware across nodes. For experimentation, mixed clusters work fine.

Can I distribute inference across Apple Silicon and a Linux box with a GPU?

Not with MLX directly. MLX is Metal-only. If you need heterogeneous distribution, vLLM with Ray supports mixed CUDA setups, but you lose the Apple Silicon advantages. Pick one architecture and commit.

What is the latency cost compared to single-node?

Roughly 15-25% latency overhead on a two-node cluster compared to a hypothetical single-node setup running the same model. The overhead grows nonlinearly as you add nodes: four nodes typically run at 60-70% of single-node efficiency. This is why distributed inference is for models that do not fit, not for raw speed.

Does Thunderbolt 4 work instead of Thunderbolt 5?

Yes, with reduced bandwidth. Thunderbolt 4 caps at 40 Gbps, which becomes the bottleneck for tensor parallelism on dense models above 30B parameters. Expert parallelism on MoE models is more forgiving and works acceptably over Thunderbolt 4. For new builds, Thunderbolt 5 is worth the upgrade.

Is there an alternative to MPI for the backend?

Not currently. The MLX team has discussed a native networking backend that would remove the MPI dependency, but as of MLX 0.21 there is no public timeline. MPI works; it just feels like 2005 HPC tooling because it is.

[ 02 ] — Keep Reading

More from the lab.

Jul 11, 2026 AI Infrastructure

GPU vs Apple Neural Engine for Local LLM Inference on M5 Max: Why the Runtimes Skip the ANE (2026)

Your M5 Max ships with a Neural Engine that Apple markets for machine learning, and yet every local LLM runtime you can name loads the model onto the GPU and leaves that accelerator idle. This is not an oversight. The Neural Engine is a fixed shape matrix machine built for CoreML graphs, and autoregressive token generation, with its growing KV cache and one token at a time decode, is close to the worst case for it. We walk through what the ANE actually is, why llama.cpp and MLX both target Metal instead, and the narrow cases where routing part of the pipeline through the Neural Engine still earns its power budget.

Jul 8, 2026 AI Infrastructure

Fine Tuning LLMs Locally on M5 Max: LoRA and QLoRA with mlx-lm (2026)

You do not need a rented cluster to specialize an 8B or 14B model. On an M5 Max with 128GB of unified memory, mlx-lm turns LoRA and QLoRA fine tuning into an overnight job you run on the same laptop that later serves the adapter. We measured peak memory, training throughput, and wall clock across a few model sizes, because the interesting question is not whether local fine tuning works on Apple Silicon, it clearly does, but where the memory ceiling and the throughput floor decide the model size you can actually train before renting a GPU pays off.

Jul 7, 2026 AI Infrastructure

Flux.1 vs SDXL vs SD 3.5: Local Image Generation on M5 Max (2026)

The three diffusion models a team actually shortlists for local image generation in 2026 are Flux.1, SDXL, and Stable Diffusion 3.5, and they sit at very different points on the quality versus cost curve. SDXL is the fast, mature workhorse. Flux.1 produces the most coherent output and the best text rendering but is the heaviest to run. SD 3.5 lands between them with strong prompt adherence at a middle weight. We measured seconds per image, step counts, quantization behavior, and peak memory on an M5 Max, because the model that wins the gallery comparison is rarely the one that fits inside a request budget.

Ready when you are

Want to discuss this topic?

Start a Conversation