Mittelstufe 13 minMac

MLX vs. llama.cpp auf Macs der M-Serie: Wer gewinnt 2026? ?

Auf Macs der M-Serie haben Sie zwei Möglichkeiten, ein LLM lokal auszuführen: MLX, das offizielle Framework von Apple, oder llama.cpp mit seinem Metal-Backend. Beide nutzen die integrierte GPU und den gemeinsamen Speicher, verfolgen aber sehr unterschiedliche Ansätze. Dieser Vergleich von MLX und llama.cpp auf dem Mac stellt beide hinsichtlich Tokens pro Sekunde, Modellunterstützung, Quantisierung und Benutzerfreundlichkeit bei der Nutzung mit Python gegenüber – mit einem klaren Urteil je nach Ihrem Profil.

Von Marie L.·Aktualisierung 2026-08-27·Getestet auf macOS 14+

#Die beiden Seiten im Jahr 2026

MLX wurde Ende 2023 vom ML-Team von Apple veröffentlicht. Es ist ein Python-Framework, das einer Mischung aus NumPy und PyTorch ähnelt und von Anfang an für Unified Memory und Metal konzipiert wurde. Sein Einsatzbereich ist breit: LLMs, Vision, Audio, Fine-Tuning. Das Paket mlx-lm ist speziell für die Inferenz und das Training von Sprachmodellen zuständig.

llama.cpp ist ein 2023 entstandenes C++-Projekt, das sich plattformübergreifend zum De-facto-Standard für lokale LLM-Inferenz entwickelt hat. Auf dem Mac erzeugt sein Metal-Backend Compute-Shader, um die Apple-Silicon-GPU zu nutzen. Es bildet die Grundlage für Ollama, LM Studio und die meisten Tools für Endanwender. Modellformat: GGUF.

i
Warum sie koexistieren
MLX ist auf Apple zugeschnitten, llama.cpp ist portabel. Ersteres ist bis zur letzten Metal-Anweisung optimiert; Letzteres überträgt denselben Code auf CUDA, Vulkan und ROCm. Auf dem Mac stehen sie in direkter Konkurrenz. Auf anderen Plattformen stellt sich die Frage nicht.

#1. Installation

Das Mac-Kit

Lokale KI auf Ihrem Mac voll ausschöpfen: Unified Memory, MLX vs. GGUF, das passende Modell für Ihren Chip und auf Apple Silicon abgestimmte Einstellungen für Ollama und LM Studio.

  • Lebenslanger Online-Zugang
  • PDF + Dateien
  • Erstattung binnen 30 Tagen

Bei MLX läuft alles über pip. Die Laufzeitumgebung mlx-lm übernimmt das Herunterladen von Hugging Face, die Konvertierung, die Quantisierung und die Inferenz.

MLX
pip install mlx-lm

# Premier test : Qwen 3.5 4B 4-bit en une commande
mlx_lm.generate --model mlx-community/Qwen3.5-4B-Instruct-4bit \
  --prompt "Explique la mémoire unifiée Apple en 3 phrases."

Bei llama.cpp haben Sie drei Möglichkeiten: aus dem Quellcode mit aktiviertem Metal kompilieren, Homebrew nutzen oder einen Wrapper wie Ollama oder LM Studio verwenden. Für einen fairen Vergleich verwenden wir die kompilierte Binärdatei.

llama.cpp
brew install llama.cpp

# Inférence sur un modèle GGUF déjà téléchargé
llama-cli -m ./Qwen3.5-4B-Instruct-Q4_K_M.gguf \
  -p "Explique la mémoire unifiée Apple en 3 phrases." \
  -n 256 -ngl 99
→
ngl 99 = alles auf der GPU
Setzen Sie das Flag -ngl (number of GPU layers) auf dem Mac grundsätzlich auf 99 oder höher. Alle Schichten werden über Metal auf der integrierten GPU ausgeführt, und dank des vereinheitlichten Speichers kostet das keine zusätzliche Speicherbandbreite.

#2. Tokens/sec auf M3 Max und M4 Pro

Hier sind repräsentative Größenordnungen für zwei gängige Rechner im Jahr 2026: ein MacBook Pro M3 Max mit 64 GB (Speicherbandbreite 400 GB/s) und ein Mac mini M4 Pro mit 48 GB (273 GB/s). Die Modelle wurden bei vergleichbarer Quantisierung verglichen — 4-Bit-MLX gegenüber Q4_K_M-GGUF — mit einem Prompt von 200 Tokens und 256 generierten Tokens.

Qwen 3.5 4B — M3 Max
MLX 4-Bit: 150 tok/s · llama.cpp Q4_K_M: 135 tok/s. MLX liegt um etwa 11 % vorn.
Qwen 3.5 9B — M3 Max
MLX 4-bit: 72 Tok/s · llama.cpp Q4_K_M: 66 Tok/s. Abweichung ca. 9 % zugunsten von MLX.
Gemma 4 12B — M3 Max
MLX 4-Bit: 48 Tok/s · llama.cpp Q4_K_M: 44 Tok/s. MLX +9%
Mistral Small 24B — M3 Max
MLX 4-Bit: 24 Tok/s · llama.cpp Q4_K_M: 22 Tok/s. MLX +9%.
Qwen 3.8 27B — M3 Max
MLX 4-bit: 21 Tok/s · llama.cpp Q4_K_M: 19 Tok/s. MLX +10%.
Qwen 3.5 9B — M4 Pro
MLX 4-bit: 50 Tok/s · llama.cpp Q4_K_M: 46 Tok/s. MLX +9%.

Das Muster ist klar und reproduzierbar: Bei der reinen Generierung liegt MLX um 8 bis 15 % vorn. Der Unterschied liegt darin, dass die Metal-Kernels von MLX direkt von Apple geschrieben und optimiert werden, mit genauer Kenntnis des GPU-Schedulers und der L1/L2-Caches. llama.cpp verwendet ebenfalls Metal-Kernels, die jedoch allgemeiner ausgelegt sind.

!
Die Prompt-Verarbeitung kann das Urteil umkehren
Bei der Verarbeitung des initialen Prompts (Prefill) holt llama.cpp mit aktiviertem Flash Attention (-fa) oft zu MLX auf und übertrifft es bei langen Kontexten sogar. Wenn Sie 16 k Tokens in ein RAG-System geben, messen Sie die beiden Phasen getrennt, bevor Sie sich entscheiden.

#3. Unterstützung von Hugging Face-Modellen

Dies ist einer der Punkte, an denen sich die beiden Ökosysteme in der Praxis unterscheiden. MLX hat sein eigenes Format für Modellgewichte (.safetensors mit MLX-Konfiguration), llama.cpp verwendet GGUF.

MLX — Verfügbarkeit
Die Organisation mlx-community auf Hugging Face veröffentlicht die meisten beliebten Modelle (Qwen 3.5/3.8, Gemma 4, Mistral, Granite 4.2) in 4-Bit- und 8-Bit-Versionen, oft innerhalb einer Woche nach ihrem Erscheinen.
MLX — seltene Modelle
Für eine ungewöhnliche Fine-Tuning-Variante oder ein wenig bekanntes Modell müssen Sie die Konvertierung selbst mit mlx_lm.convert durchführen. Typische Konvertierungsdauer: 2–10 Minuten je nach Größe.
llama.cpp — Verfügbarkeit
GGUF-Dateien sind überall verfügbar. Bartowski, TheBloke (Archive), Unsloth und die offiziellen Herausgeber veröffentlichen viele Modelle im GGUF-Format, noch bevor sie im MLX-Format erscheinen.
llama.cpp — sehr aktuelle Modelle
Wenn eine neue Architektur erscheint (z. B. ein neues MoE, exotische Attention), muss llama.cpp sie in C++ implementieren. Typische Dauer: einige Tage bis 2 Wochen. MLX, da Python + Metal, folgt manchmal schneller, wenn Apple es bereits vorbereitet hat.
Ein HF-Modell in das MLX-Format mit 4-Bit-Quantisierung konvertieren
mlx_lm.convert \
  --hf-path Qwen/Qwen3.5-9B-Instruct \
  --mlx-path ./qwen3.5-9b-mlx-4bit \
  -q --q-bits 4 --q-group-size 64

#4. Verfügbare Quantisierungen

Das ist wahrscheinlich der Bereich, in dem llama.cpp eindeutig überlegen ist. GGUF bietet etwa ein Dutzend Quantisierungsvarianten (Q2_K, Q3_K_S/M/L, Q4_K_S/M, Q5_K_M, Q6_K, Q8_0 sowie die I-Quants IQ2_XXS bis IQ4_NL), mit denen sich der Kompromiss zwischen Größe und Qualität fein abstimmen lässt.

MLX
Quantisierung mit 4, 6 und 8 Bit. Wichtigster Parameter: group-size (32, 64, 128). Kein direktes Äquivalent zu den gemischten K-Quants (Q4_K_M bewahrt in bestimmten Schichten eine höhere Präzision).
llama.cpp
GGUF Q4_K_M (empfohlen), Q5_K_M, Q6_K, Q8_0, FP16, sowie I-quants, um noch tiefer zu gehen. Kalibrierung über imatrix möglich.
Beobachtete Qualität
Bei vergleichbarer Größe liefern GGUF Q4_K_M und MLX 4-Bit eine sehr ähnliche Perplexität (Abweichung < 1 %). Um ein großes Modell bei knappem RAM unterzubringen (Qwen 3.8 27B auf 16 GB), bieten die I-Quants von llama.cpp weiterhin feinere Abstufungen.
i
Q4_K_M bleibt die Referenz
Für die meisten Anwendungsfälle liefern Q4_K_M bei llama.cpp und eine 4-Bit-Quantisierung mit einer Gruppengröße von 64 bei MLX in der Praxis dieselben Ergebnisse. Unterschiede werden nur sichtbar, wenn Sie genaue Benchmarks mit MMLU oder anhand der Perplexität durchführen.

#5. Unified Memory: Wer nutzt sie am besten?

Auf Macs mit Chips der M-Serie teilen sich CPU und GPU denselben Arbeitsspeicher. Keine Kopien, keine PCIe-Übertragung, nur ein gemeinsamer Speicherpool. Das ist der strukturelle Vorteil der Apple-Chips bei der LLM-Inferenz, von dem beide Frameworks profitieren – allerdings auf unterschiedliche Weise.

MLX
Von Grund auf für gemeinsamen Speicher konzipiert. Die Tensoren liegen in einem Adressraum, auf den CPU und GPU gleichermaßen zugreifen können. Konvertierung zwischen NumPy und MLX ohne Kopieren. Das ist Apples wichtigstes architektonisches Argument.
llama.cpp Metal
Allokiert gemeinsam genutzte MTLBuffer. Funktioniert, fügt aber eine Abstraktionsschicht hinzu. Bei Modellen, die den standardmäßig zugewiesenen VRAM überschreiten, muss die Grenze manchmal manuell über sudo sysctl iogpu.wired_limit_mb angepasst werden.
Große Modelle mit 64 GB
Im Jahr 2026 wiegt selbst das allgemeine Flaggschiff Qwen 3.8 27B nur etwa 18 GB bei 4-Bit: 64 GB Unified RAM lassen ausreichend Platz für einen großen MoE wie Qwen 3.6 35B-A3B (~23 GB) oder für die gleiche Version in Q8 für maximale Qualität. Auf 128 GB (M3 Max Top-Spezifikation oder M2 Ultra) können Sie mehrere Modelle parallel laden ohne Einschränkungen.
→
Die VRAM-Grenze unter macOS erhöhen
Standardmäßig reserviert macOS etwa 75 % des RAM für die GPU. Auf einem Rechner mit 64 GB sind das etwa 48 GB nutzbarer Speicher. Um die Grenze auf 56 GB anzuheben: sudo sysctl iogpu.wired_limit_mb=57344 — nützlich, um ein großes 35B-MoE-Modell mit höherer Quantisierungspräzision (Q5_K_M oder 6-Bit-MLX) oder mehrere Modelle gleichzeitig zu laden.

#6. Python-Integration

Wenn Sie einen Agenten oder eine RAG-Pipeline programmieren oder Ihr LLM mit LangChain / LlamaIndex / Ihrem eigenen Code instrumentieren, zählt die Arbeit mit Python genauso viel wie die Tokens pro Sekunde.

MLX — Streaming-Inferenz
from mlx_lm import load, stream_generate

model, tokenizer = load("mlx-community/Qwen3.5-9B-Instruct-4bit")

prompt = tokenizer.apply_chat_template(
    [{"role": "user", "content": "Résume MLX en 3 phrases."}],
    tokenize=False, add_generation_prompt=True,
)

for chunk in stream_generate(model, tokenizer, prompt, max_tokens=256):
    print(chunk.text, end="", flush=True)

Bei llama.cpp erfolgt die Python-Integration über llama-cpp-python (offizielle Bindings). Die API ist umständlicher in der Verwendung und näher an C++, aber nach dem Start des Servers OpenAI-kompatibel.

llama-cpp-python
from llama_cpp import Llama

llm = Llama(
    model_path="./Qwen3.5-9B-Instruct-Q4_K_M.gguf",
    n_gpu_layers=-1,   # tout sur Metal
    n_ctx=8192,
    flash_attn=True,
)

for chunk in llm.create_chat_completion(
    messages=[{"role": "user", "content": "Résume llama.cpp en 3 phrases."}],
    stream=True,
):
    delta = chunk["choices"][0]["delta"].get("content", "")
    print(delta, end="", flush=True)
MLX — Komfort
Sehr saubere API, NumPy-artige Syntax, native Integration mit HF Hub. Für einen Data Scientist ist das sofort verständlich.
MLX — Einschränkungen
Es ist (noch) kein offizieller OpenAI-kompatibler Endpunkt integriert. Um ein Modell für mehrere Clients bereitzustellen, müssen Sie einen eigenen FastAPI-Wrapper erstellen.
llama.cpp — Komfort
Die Python-API ist in Ordnung, doch in der Praxis erfolgt der produktive Einsatz über llama-server (Binärdatei), der nativ den OpenAI-kompatiblen Endpunkt /v1/chat/completions bereitstellt.
llama.cpp — Grenzen
Das Wheel für llama-cpp-python muss mit dem richtigen Metal-Flag neu kompiliert werden (CMAKE_ARGS="-DGGML_METAL=on" pip install llama-cpp-python --force-reinstall --no-cache-dir). Das sorgt für zusätzlichen Aufwand.

#7. Ökosystem und Werkzeuge

Über die reine Runtime hinaus bestimmt das Ökosystem, was Sie konkret tun können.

Ollama
Basiert auf llama.cpp. Der einfachste Weg, um einen LLM auf einem Mac mit einer OpenAI-kompatiblen API lokal auf localhost:11434 zu betreiben.
LM Studio
Unterstützt seit 2025 beide Engines: llama.cpp standardmäßig, MLX optional für kompatible Modelle. Wechsel mit einem Klick.
LoRA-Fine-Tuning
MLX bietet mit mlx_lm.lora eine native, sehr saubere Lösung, die ohne Bastelei auf der integrierten GPU läuft. llama.cpp unterstützt kein Fine-Tuning – dafür müssen Sie Unsloth oder MLX verwenden.
Ein Modell bereitstellen
llama.cpp gewinnt mit llama-server eindeutig: Unterstützung für mehrere Clients, Batch-Verarbeitung, Slots, OAI-Kompatibilität. Bei MLX gibt es mlx_lm.server seit 2025, allerdings nur mit grundlegenden Funktionen.
Vision und Audio
MLX verfügt über gut gepflegte Erweiterungen (mlx-vlm, mlx-whisper). llama.cpp unterstützt die Bildverarbeitung über die Modelle LLaVA / Qwen-VL, wobei die Unterstützung vom Build abhängt.

#Fazit nach Anwendungsfall

Sie wollen die maximale Anzahl an Tokens pro Sekunde im lokalen Chat
MLX. +10 % kostenlos, und der Unterschied wird bei großen Modellen noch größer. Vor allem bei 4-Bit.
Sie möchten einen Endpunkt für mehrere Clients (Team, App) bereitstellen
llama.cpp (llama-server oder Ollama). Mehrere Slots, batch-basiert, OpenAI-kompatibel, seit langem stabil.
Sie testen etwa zehn verschiedene Modelle pro Woche
llama.cpp. Das GGUF-Ökosystem ist bei der Abdeckung und Aktualität der Quantisierungen unübertroffen.
Sie entwickeln ein Python-Projekt (Agent, RAG, Pipeline)
MLX, wenn alles lokal und ausschließlich auf Macs läuft. llama-cpp-python oder ein Ollama-Client, wenn Sie Code möchten, der sowohl unter Linux als auch auf dem Mac läuft.
Sie möchten ein 7-13B-Modell auf Ihrem Mac feinabstimmen
MLX. mlx_lm.lora funktioniert sehr gut auf M3 Max / M4 Pro mit 32 GB+.
Sie stehen am Anfang und möchten einfach ein LLM, das funktioniert
Ollama (also llama.cpp). Ein Befehl, und fertig.
i
Die eigentliche Antwort: Nutzen Sie beide
Auf einem Mac spricht nichts dagegen, Ollama als Daemon für den täglichen Gebrauch (Open WebUI, Continue.dev, lokale API) laufen zu lassen und MLX in einer virtuellen Python-Umgebung (venv) für Forschungsarbeiten oder Benchmarks zu nutzen. Sie kommen sich nicht in die Quere, und beide sind auf ihrem jeweiligen Gebiet hervorragend.

#Weiterführende Informationen

Einige weiterführende Lektüren, um das Thema zu vertiefen:

Hat Ihnen dieser Guide geholfen?

Haben Sie Feedback, einen Fehler entdeckt oder möchten Sie etwas präzisieren? Geben Sie uns Bescheid – so wird der Guide für alle besser.