Lokale en gedistribueerde inferentie van grote LLM's met MLX en RDMA op Mac Studio

MLX op Mac met Apple silicon stelt AI-onderzoekers en ontwikkelaars in staat om lokaal te experimenteren met de nieuwste modellen en methoden in een private omgeving. Het open-source array-framework maakt gebruik van de unified memory-architectuur van Apple silicon, waardoor iedereen nieuwe inferentie- en fine-tuningmethoden op eigen hardware kan uitvoeren en andere AI-technieken kan verkennen. In een eerder bericht hebben we de voordelen van de M5-architectuur en de GPU Neural Accelerators belicht.

In dit bericht laten we zien hoe u het nieuwste frontier-class model — Muse Spark Open, met bijna een biljoen parameters — direct vanaf uw bureau kunt draaien, gebruikmakend van de nieuwste versie van MLX die vandaag is uitgebracht. Op een cluster van vier Mac Studio's genereert Muse Spark Open meer dan 36 tokens per seconde (zie Figuur 1), wat ruim boven de gemiddelde menselijke leessnelheid ligt.

Hieronder volgt een overzicht van de reeks modellen die u nu op Mac Studio kunt draaien, beginnend bij een enkele Mac Studio (tot 512 GB unified memory) en opschalend naar meerdere Macs via de RDMA over Thunderbolt-driver.

Figuur 1: Decode-snelheid van Muse Spark Open in tokens per seconde, op Mac Studio met M5 Ultra, bij een contextgrootte van 8.192 tokens. Hoger is beter. Er wordt performance gerapporteerd voor drie parallelisatieschema's: pipeline-parallelisatie over twee Mac Studio's (2 M5 Pipeline), en tensor-parallelisatie over twee (2 M5 Tensor) en vier Mac Studio's (4 M5 Tensor).

Large Language Models draaien met MLX

We benchmarken verschillende populaire open-weight LLM's op Mac Studio met behulp van het MLX LM-pakket. We vergelijken twee generaties Mac Studio: de onlangs uitgebrachte M5 Ultra en de vorige generatie, de M3 Ultra. De M5-generatie beschikt over de GPU Neural Accelerator, die specifieke matrixvermenigvuldigingsoperaties ondersteunt, wat essentieel is voor veel machine learning-workloads.

We evalueren drie frontier-class modellen (Tabel 1) met uiteenlopende groottes (in miljarden parameters, B): het nieuw uitgebrachte Muse Spark Open (816 B), Mistral Medium 3.5 (128 B) en Qwen 3.8 (27 B). Muse Spark Open is een Mixture of Experts (MoE)-model, waarbij slechts een fractie van de experts — en dus parameters — actief is, wat de rekenkracht bij inferentie vermindert; dit model wordt geëvalueerd in NVFP4-precisie. Mistral Medium 3.5 en Qwen 3.8 hebben dense architecturen, waarbij alle parameters actief zijn bij inferentie, en zij worden geëvalueerd in hun native floating-point precisie (respectievelijk FP8 en BF16).

ModelTotale parametersActieve parametersNative precisieEvaluatieprecisie
Muse Spark Open816B42BBF16NVFP4
Mistral Medium 3.5128B128BFP8FP8
Qwen 3.827B27BBF16BF16

Tabel 1: Taalmodellen gebruikt in dit bericht. Modellen worden in verschillende precisieformaten geleverd; we evalueren Qwen 3.8 en Mistral Medium 3.5 in hun native precisie, en Muse Spark Open in 4-bit (NVFP4) precisie.

Onze evaluatie meet drie metrieken over een reeks contextgroottes: tijd tot het eerste token (TTFT, in seconden), generatie-doorvoersnelheid (in tokens/seconde) en piekvermogensverbruik (in watt). Alle prestatiecijfers in dit bericht zijn verkregen met mlx_lm.benchmark. Voor het uitvoeren van Qwen 3.8 met 8.192 tokens context en het genereren van 128 tokens wordt bijvoorbeeld de volgende opdrachtregel gebruikt:

mlx_lm.benchmark --model Qwen/Qwen3.8-27B -p 8192 -g 128 -b 1

Een populair gebruik van lokale LLM's op Mac Studio is het draaien van agentische ervaringen in een private omgeving, inclusief agentische codeerapplicaties die vaak grote contexten nodig hebben. Daarom rapporteren we de prestaties bij contextgroottes van zowel 8.192 als 65.536 tokens.

De ruwe TTFT en decode-doorvoer worden respectievelijk gerapporteerd in Tabel 2 en Tabel 3.

Inferentieprestaties op een enkele Mac Studio

Qwen 3.8 27B en Mistral Medium 3.5 128B passen gemakkelijk op een enkele Mac Studio met 512 GB, waarbij ze bij een grote contextgrootte (65.536 tokens) respectievelijk tot 68 GB en 158 GB RAM in beslag nemen. In Figuur 2 vergelijken we hun inferentieprestaties op een enkele Mac Studio met 512 GB RAM, zowel op de M3 Ultra als de M5 Ultra.

De tijd tot het eerste token (TTFT) is in essentie compute bound, en dat is waar de Neural Accelerators in de M5 Ultra GPU uitblinken: de gespecialiseerde hardware-ondersteuning voor snelle matrixvermenigvuldiging vertaalt zich direct in aanzienlijke versnellingen voor TTFT, tot 4,6× sneller vergeleken met een M3 Ultra (zie Figuur 2). Dit maakt de Mac Studio met M5 Ultra de ideale desktop voor taken met zeer grote contexten.

De generatiesnelheid (in tokens per seconde) is memory-bandwidth bound. De M5 Ultra-chip levert 1,2 TB/s aan unified memory-bandbreedte, tegenover 819 GB/s voor de M3 Ultra. Ook hier vertaalt dit zich direct in generatiesnelheid (zie Figuur 3), waarbij de Mac Studio met M5 Ultra 1,6× snellere tokens/s rapporteert.

Figuur 2: Versnelling van de tijd tot het eerste token (TTFT) op M5 Ultra ten opzichte van een M3 Ultra baseline (1,0×), voor Qwen 3.8 en Mistral Medium 3.5, bij contextgroottes van 8.192 en 65.536 tokens. De M5 Ultra GPU Neural Accelerator blinkt uit bij compute-bound workloads.

Figuur 3: Versnelling van de decode-snelheid op M5 Ultra ten opzichte van een M3 Ultra baseline (1,0×), voor Qwen 3.8 en Mistral Medium 3.5, bij contextgroottes van 8.192 en 65.536 tokens. Decode is memory-bandwidth bound, en de 1,2 TB/s unified memory-bandbreedte van de M5 Ultra (vs 819 GB/s op de M3 Ultra) is een belangrijk voordeel.

De Mac Studio is ook energiezuinig voor LLM-inferentie (zie Figuur 4): het piekvermogensverbruik is ongeveer 200W voor de Mac Studio met M3 Ultra en 300W voor de Mac Studio met M5 Ultra — een fractie van het stroomverbruik van een gewone broodrooster. Belangrijker is dat dit bescheiden stroomverbruik betekent dat een Mac Studio voor AI-werk kan worden ingezet in elke thuis- of kantooromgeving.

Figuur 4: Piekvermogensverbruik (in watt) tijdens Qwen 3.8 en Mistral Medium 3.5 inferentie, bij een contextgrootte van 65.536 tokens, op Mac Studio met M3 Ultra en met M5 Ultra.

Hoewel zowel de Qwen- als de Mistral-modellen passen op een enkele Mac Studio met 512 GB RAM, zou Muse Spark Open in native precisie (BF16) meer dan 1,6 TB RAM nodig hebben voor alleen de modelparameters. In een 4-bit gekwantiseerd (NVFP4) formaat wordt de memory footprint van het model verlaagd naar ongeveer 493 GB. Rekent men daar het geheugen bij op dat nodig is voor tussenliggende berekeningen tijdens de inferentie, dan past het model niet op één machine. Het vereist parallelisatie over meerdere Mac Studio-computers.

Pipeline-inferentie over twee Mac Studio's

Zeer grote frontier-class modellen zoals Muse Spark Open passen niet op één machine. Het is echter mogelijk om de helft van het model op één Mac Studio op te slaan en de andere helft op een andere. We kunnen de inferentie van het model vervolgens pipelinen over twee computers: de eerste Mac Studio voert de eerste helft van de model-lagen uit en stuurt de output vervolgens naar de tweede Mac Studio, die de tweede helft uitvoert. Dit parallelisatieschema wordt pipeline-parallelisatie genoemd (zie Figuur 5) en is uiterst eenvoudig te implementeren, met minimale wijzigingen in de code.

Figuur 5: MLX ondersteunt twee benaderingen om grote modellen over meerdere computers te verdelen. Bij pipeline-parallelisatie wordt een model over de diepte (depth) gesplitst, terwijl bij tensor-parallelisatie een model over de breedte (width) wordt gesplitst.

MLX ondersteunt verschillende parallelisatieschema's, zoals beschreven in de MLX-distributed documentatie. Deze vertrouwen op snelle communicatie tussen machines: macOS 26.2 introduceerde een low-latency RDMA-driver over Thunderbolt 5, en MLX (v0.30.1 en later) bouwt hierop voort en biedt nieuwe communicatie-collectives (jaccl, uitgesproken als "jackal") voor verschillende parallelisatieschema's. In onze setup zijn de twee Mac Studio's verbonden met twee Thunderbolt-kabels (om de linkbandbreedte te verdubbelen), wat de RDMA-over-Thunderbolt-verbinding levert die jaccl gebruikt. Zodra de hosts zijn ingesteld, biedt MLX mlx.launch, een hulpcommando om jobs over meerdere nodes te starten:

mlx.launch --hostfile hostfile.json --backend jaccl --env MLX_METAL_FAST_SYNCH=1 -- \
mlx_lm.benchmark --model mistralai/Mistral-Medium-3.5-128B -p 8192 -g 128 -b 1 --prefill-step-size 8192 --pipeline

In dit commando specificeert --backend jaccl de RDMA Thunderbolt-driver backend. De flag --env MLXMETALFAST_SYNCH=1 activeert een experimentele MLX-functie voor snelle CPU-GPU-synchronisatie, waardoor de communicatie-overhead tussen de CPU (die de Thunderbolt-communicatie initieert) en de GPU (die de berekeningen uitvoert) wordt verminderd.

Over het algemeen is de decode-inferentiesnelheid bij pipeline-parallelisatie (zie Figuur 7) zeer vergelijkbaar met die van een enkele machine, aangezien de lagen nog steeds sequentieel worden geëvalueerd. De communicatie-overhead is ook zeer laag, omdat alleen de tussenliggende outputs tussen de twee sets lagen uitgewisseld hoeven te worden.

Het is echter opmerkelijk dat voor zeer grote contexten (65.536 tokens in onze benchmark) pipeline-parallelisatie uiteindelijk sneller is dan een enkele node voor prefill — tot ~1,8× sneller (zie Figuur 6). Dit komt doordat MLX grote contexten opdeelt in kleinere chunks (hier 8.192 tokens, ingesteld via --prefill-step-size 8192) en de prefill over de machines pipelinet: terwijl de tweede machine de latere lagen van chunk $k$ berekent, berekent de eerste machine de eerdere lagen van chunk $k+1$, waardoor opeenvolgende chunks elkaar in de tijd overlappen. Voor nog betere compute-parallelisatie stappen we over op tensor-parallelisatie.

Figuur 6: Versnelling van de tijd tot het eerste token (TTFT) van twee M5 Ultra's met pipeline-parallelisatie ten opzichte van een enkele M5 Ultra baseline (1,0×), voor Qwen 3.8 en Mistral Medium 3.5, bij contextgroottes van 8.192 en 65.536 tokens. Het splitsen van de context (hier in chunks van 8.192 tokens) stelt MLX in staat om berekeningen over de twee machines te overlappen — vandaar de versnelling bij 65.536 maar niet bij 8.192.

Figuur 7: Versnelling van de decode-snelheid van twee M5 Ultra's met pipeline-parallelisatie ten opzichte van een enkele M5 Ultra baseline (1,0×), voor Qwen 3.8 en Mistral Medium 3.5, bij contextgroottes van 8.192 en 65.536 tokens. Pipeline-parallelisatie laat de decode-snelheid in essentie ongewijzigd.

Tensor-parallelisatie voor snellere inferentie

Tensor-parallelisatie (zie Figuur 5) verdeelt de breedte van de LLM over verschillende computers, in tegenstelling tot pipeline-parallelisatie, die het model over de diepte verdeelt. Elke machine bevat nu een fractie van elke laag van het model, zodat de berekening per laag geparallelliseerd wordt. Wanneer dit efficiënt wordt geïmplementeerd, verbetert tensor-parallelisatie de inferentiesnelheid.

Tensor-parallelisatie is echter complexer om te implementeren dan pipeline-parallelisatie: elke laag moet worden geparallelliseerd, wat de complexiteit van de code verhoogt. Het schema omvat bovendien veel kleine communicatie-operaties: voor elk input-token en voor elke laag moeten inputs worden broadcast en outputs worden geaggregeerd. Als gevolg hiervan is een communicatietechnologie met zeer lage latentie, zoals Thunderbolt RDMA (ondersteund door MLX jaccl), cruciaal om met deze aanpak een versnelling te realiseren.

Met de high-level mlx.launch helper van MLX is het eenvoudig om over te schakelen naar tensor-parallelisatie. De Mac Studio-computers zijn verbonden in een Thunderbolt-mesh, waarbij elk paar machines peer-to-peer is verbonden door twee Thunderbolt-kabels. Uitgaande van de ingestelde hosts starten we de benchmark over meerdere machines als volgt:

mlx.launch --hostfile hostfile.json --backend jaccl --env MLX_METAL_FAST_SYNCH=1 -- \
mlx_lm.benchmark --model meta-models/Muse-Spark-Open-816B-A42B-NVFP4 -p 8192 -g 128 -b 1

Figuur 8 en Figuur 9 tonen de versnellingen behaald met twee of vier Mac Studio's met M5 Ultra, relatief ten opzichte van een baseline van één machine (of, voor Muse Spark Open, de pipeline-parallelisatie baseline). Opvallend is dat dense architecturen beter schalen over meerdere computers.

Bij een klein aantal machines kan de communicatie-overhead van tensor-parallelisatie bij zeer grote contexten een deel van de compute-voordelen tenietdoen, hoewel dit alleen geldt voor prefill. Dit is zichtbaar bij Muse Spark Open, waar de aparte normalisatie van de outputs van de experts extra prefill-communicatie toevoegt. Bij zeer grote contexten (65.536 tokens) blijft tensor-parallelisatie met twee machines hierdoor achter bij pipeline-parallelisatie met twee machines. De aanpak loont echter zodra er meer machines worden toegevoegd, zoals te zien is bij vier M5 Ultra's. De decode-snelheid wordt niet beïnvloed: Muse Spark Open behoudt een aanzienlijke decode-versnelling onder tensor-parallelisatie, zelfs bij grote contexten, vergelijkbaar met dense modellen zoals Qwen 3.8 en Mistral Medium 3.5.

De mesh met twee kabels betaalt zich ook uit tijdens prefill, waar de extra linkbandbreedte merkbaar is. Voor Muse Spark Open op vier M5 Ultra's bij een context van 65.536 tokens, verkortten twee kabels per link de TTFT van ongeveer 50,5s (één kabel) naar 40,6s.

Figuur 8: Versnelling van de tijd tot het eerste token (TTFT) van twee of vier M5 Ultra's met tensor-parallelisatie ten opzichte van een enkele M5 Ultra baseline (1,0×; Muse Spark Open: twee-machine pipeline), voor Qwen 3.8, Mistral Medium 3.5, en Muse Spark Open, bij contextgroottes van 8.192 en 65.536 tokens. Muse Spark Open past niet op één machine, dus de baseline is de configuratie met twee M5 Ultra's in pipeline.

Figuur 9: Versnelling van de decode-snelheid van twee of vier M5 Ultra's met tensor-parallelisatie ten opzichte van een enkele M5 Ultra baseline (1,0×; Muse Spark Open: twee-machine pipeline), voor Qwen 3.8, Mistral Medium 3.5, en Muse Spark Open, bij contextgroottes van 8.192 en 65.536 tokens. Muse Spark Open past niet op één machine, dus de baseline is de configuratie met twee M5 Ultra's in pipeline.

Tijd tot eerste token (seconden) - Lager is beter

ModelM3 UltraM5 Ultra2 M5 Pipeline2 M5 Tensor4 M5 Tensor
Muse Spark Open (8k)——8,48,24,8
Muse Spark Open (65k)——zie tabelzie tabelzie tabel
Mistral Medium 3.5 (8k)95,924,624,514,47,5
Qwen 3.8 (8k)18,24,14,13,11,7

(Opmerking: De bovenstaande data is een samenvatting van Tabel 2 uit het origineel)

Tabel 2: Tijd tot het eerste token (TTFT) in seconden voor Qwen 3.8, Mistral Medium 3.5, en Muse Spark Open, bij contextgroottes van 8.192 en 65.536 tokens. Lager is beter. We rapporteren een enkele M3 Ultra, een enkele M5 Ultra, twee M5 Ultra's (pipeline en tensor parallelisatie), en vier M5 Ultra's (tensor parallelisatie).

Decode-snelheid (tokens per seconde) - Hoger is beter

ModelM3 UltraM5 Ultra2 M5 Pipeline2 M5 Tensor4 M5 Tensor
Muse Spark Open (8k)——15,7424,9936,73
Mistral Medium 3.5 (8k)4,957,707,7013,6923,37
Qwen 3.8 (8k)12,4619,6919,4433,2750,89

Tabel 3: Decode-snelheid in tokens per seconde voor Qwen 3.8, Mistral Medium 3.5, en Muse Spark Open, bij contextgroottes van 8.192 en 65.536 tokens. Hoger is beter. Decode-snelheid is gemeten over 128 gegenereerde tokens na de context.

Lokale Agentic AI op Mac

Recentelijk heeft agentische AI op Mac aanzienlijk aan terrein gewonnen, waarbij agentische codeertools wijdverspreid worden geadopteerd door ontwikkelaars. Met MLX is het voeden van deze tools lokaal zo eenvoudig als het starten van een server met de mlx_lm.server tool. Bijvoorbeeld, een server die Muse Spark Open draait op poort 8080 wordt gestart met:

mlx.launch --hostfile hostfile.json --backend jaccl --env MLX_METAL_FAST_SYNCH=1 -- \
mlx_lm.server --model meta-models/Muse-Spark-Open-816B-A42B-NVFP4 --port 8080

Net als bij mlxlm.benchmark kan de mlxlm.server helper worden voorafgegaan door mlx.launch om de berekening over meerdere Mac Studio's te paralleliseren. Vanaf dat punt kan agentische AI worden ingeschakeld met tools zoals OpenCode, die eenvoudig kan worden geconfigureerd om die lokale LLM-server te gebruiken:

{
  "$schema": "https://opencode.ai/config.json",
  "model": "meta-models/Muse-Spark-Open-816B-A42B-NVFP4",
  "provider": {
    "mlx": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Local MLX",
      "options": {
        "baseURL": "http://127.0.0.1:8080/v1"
      },
      "models": {
        "meta-models/Muse-Spark-Open-816B-A42B-NVFP4": {
          "name": "Muse Spark Open 816B (MLX)"
        }
      }
    }
  }
}

Veel andere lokale agentische AI-ervaringen kunnen via een vergelijkbare aanpak worden gerealiseerd.

Conclusie

Het afgelopen jaar hebben we gewerkt aan verschillende belangrijke innovaties in MLX om het eenvoudiger en efficiënter te maken om state-of-the-art LLM's lokaal te draaien op recente Apple silicon. Deze omvatten software-ondersteuning voor de Neural Accelerators in de GPU van de M5-chipfamilie, low-latency communicatie tussen verschillende Macs met RDMA over Thunderbolt, en efficiënte implementaties van recente populaire architecturen zoals Mixture of Experts (MoE).

Elk van deze zaken helpt op zichzelf, maar het is hun combinatie met de nieuwste Apple silicon — Mac Studio met M5 Ultra, Neural Accelerators in de M5 Ultra GPU, 512 GB unified memory en RDMA over Thunderbolt 5 — die ons nu in staat stelt om modellen zoals Muse Spark Open met meer dan 800 miljard parameters lokaal te draaien, met een opstartsnelheid (time-to-first-token) die tot 4,6× hoger ligt dan die van de vorige generatie Mac Studio.