llama.cpp mit Metal
Auf einem Mac mit Apple Silicon lässt sich llama.cpp mit drei Befehlen kompilieren, und Metal ist standardmäßig aktiviert: Klonen Sie das Repository, führen Sie cmake -B build und anschließend cmake --build build --config Release aus, ohne ein GPU-Toolkit zu installieren. Sie können es auch ohne Kompilieren über Homebrew installieren. Die ausführbaren Dateien llama-cli und llama-server führen die Berechnungen dann auf der GPU des M-Chips aus; für die mögliche Modellgröße ist der gemeinsame Speicher wichtiger als die reine Rechenleistung.
llama.cpp ist die Inferenz-Engine, auf der Ollama und LM Studio basieren, und läuft nativ auf dem Mac. Dieser Leitfaden zeigt, wie man sie installiert oder mit Metal kompiliert, mit einem GGUF-Modell ausführt, über eine API bereitstellt, die GPU-Speichergrenze von macOS anhebt und die veröffentlichten Benchmarks für die Chips M1 bis M5 richtig interpretiert.
#llama.cpp auf dem Mac: Was Metal bringt
Unter macOS wird die GPU über Metal, Apples Grafik- und Berechnungs-API, angesprochen, und llama.cpp nutzt diese direkt. Das README des Projekts betont, dass Apple Silicon erstklassig unterstützt und über ARM NEON, Accelerate und Metal optimiert wird. In der Praxis bedeutet das, dass bereits die Standardkompilierung eine Engine erzeugt, die die GPU nutzt, ohne dass zusätzliche Optionen nötig sind. Der vereinheitlichte Speicher vermeidet sämtliche Datenübertragungen zwischen Prozessor und GPU: Das Modell liegt nur einmal im Speicher. Die begrenzenden Faktoren auf einem Mac sind daher die Kapazität und die Bandbreite dieses Speichers.
#Voraussetzungen
Ihr privates, kostenloses ChatGPT auf Ihrem Rechner in einer Stunde – mit LM Studio, Ollama, Open WebUI und Ihren Dokumenten, ganz ohne Cloud.
- Lebenslanger Online-Zugang
- PDF + Dateien
- Erstattung binnen 30 Tagen
- Ein Mac mit Apple Silicon
- M1 bis M5: Auf diese Modelle ist dieser Leitfaden ausgerichtet. Macs mit Intel-Prozessor profitieren davon kaum.
- Die Kompilierungswerkzeuge von Apple
- Installieren Sie die Command Line Tools mit xcode-select --install.
- CMake und Git
- Über Homebrew verfügbar: brew install cmake git.
- Speicher für das Modell
- Als Richtwert auf dieser Website gilt: Ein 8B-Modell in Q4 benötigt etwa 5 GB, ein 14B-Modell etwa 9 GB, ein 32B-Modell 19 bis 20 GB, jeweils ohne den Speicherbedarf für den Kontext.
#Installieren ohne Kompilierung: Homebrew
Wenn Sie keine besonderen Kompilierungsoptionen benötigen, ist Homebrew der schnellste Weg. Die Installationsdokumentation von llama.cpp gibt an, dass die Formel bei jeder neuen Version des Projekts automatisch aktualisiert wird. Sie erhalten dieselben ausführbaren Dateien, einsatzbereit und mit Metal-Unterstützung.
Kompilieren Sie selbst, wenn Sie die neueste Version des Repositorys haben, einen Branch testen oder eine Kompilierungsoption ändern möchten. Ansonsten reicht Homebrew aus: Sie sparen die Kompilierungszeit, und Updates erfolgen mit brew upgrade.
#1. Mit Metal kompilieren
Die Build-Dokumentation ist eindeutig: Unter macOS ist Metal standardmäßig aktiviert und lässt die Berechnungen auf der GPU ausführen. Es muss keine Option hinzugefügt werden. Der alte Repository-Name unter dem Konto von Georgi Gerganov leitet zur Organisation ggml-org weiter, wo sich das Projekt inzwischen befindet. Die Binärdateien liegen in build/bin, insbesondere llama-cli für das Terminal und llama-server für die API.
Zwei nützliche Optionen: Laut Dokumentation deaktiviert -DGGML_METAL=OFF Metal beim Kompilieren. Ein mit Metal kompiliertes Programm lässt sich mit --n-gpu-layers 0 zur Ausführung auf der CPU zwingen, was für Geschwindigkeitsvergleiche praktisch ist.
#2. Ein erstes Modell starten
Neuere Inferenz-Engines können das Modell selbst herunterladen. Die Option -hf nimmt den Namen eines Hugging-Face-Repositorys entgegen, mit der Quantisierung als Suffix; ohne Suffix wird standardmäßig Q4_K_M gewählt. Für eine bereits heruntergeladene Datei verwenden Sie -m mit ihrem Pfad.
Die Anzahl der auf der GPU abgelegten Schichten lässt sich mit -ngl einstellen; der Standardwert ist auto, was für einen Mac mit gemeinsamem Arbeitsspeicher geeignet ist. Sie können auch -ngl all angeben, um alles zu laden. Suchen Sie nicht im Ollama-Ordner nach dem Pfad zu einem Modell: Die Modelldateien werden in einem internen Format gespeichert, das kein direkt verwendbares GGUF ist.
#Eine OpenAI-kompatible API mit llama-server bereitstellen
llama-server stellt Routen bereit, die mit der OpenAI-API für Chat, Antworten und Embeddings kompatibel sind. Standardmäßig lauscht er auf 127.0.0.1, Port 8080: Er ist nur von Ihrem Mac aus erreichbar. Um ihn über das Netzwerk zugänglich zu machen, müssen Sie --host ausdrücklich angeben und sollten dann den Zugriff schützen.
#4. Die GPU-Speicherbegrenzung von macOS
Auf Apple Silicon stellt macOS der GPU nur einen Teil des vereinheitlichten Speichers zur Verfügung. Ein Modell, das diesen Anteil überschreitet, wird abgelehnt oder teilweise auf den Prozessor ausgelagert, selbst wenn der Gesamtspeicher ausreicht. Die Engine zeigt den effektiven Wert beim Start an: Suchen Sie in den Protokollen von llama-cli oder llama-server nach der Zeile ggml_metal_init: recommendedMaxWorkingSetSize.
Mit dem Befehl sysctl iogpu.wired_limit_mb lässt sich diese Obergrenze erhöhen. Er erwartet einen Wert in Megabyte: beispielsweise 61.440 für 60 GB. Ein Mitwirkender am llama.cpp-Repository weist darauf hin, dass der Befehl bei jedem Systemstart erneut ausgeführt werden muss, da die Einstellung nicht dauerhaft gespeichert wird, und rät davon ab, bis auf 100 % zu gehen: Das System braucht Speicher für alles, was nicht durch die GPU gesperrt ist, und es kommt zu Problemen, wenn ihm nicht genug Speicher bleibt.
#Welches Modell für welche Größe des vereinheitlichten Speichers
Der vereinheitlichte Speicher wird zwischen macOS, Ihren Anwendungen und dem Modell geteilt, und die GPU erhält davon nur einen Teil. Als Richtwert veranschlagt diese Website für die Gewichte eines 8B-Modells in Q4 etwa 5 GB, für ein 14B-Modell etwa 9 GB und für ein 32B-Modell etwa 19 bis 20 GB. Der Kontextcache kommt hinzu. Die Tabelle liefert eine vorsichtige Größenordnung; maßgeblich ist der vom Ausführungsbackend angezeigte Wert recommendedMaxWorkingSetSize.
| Arbeitsspeicher des Mac | Angemessenes Modell | Hinweis |
|---|---|---|
| 8 GB | 3B (2 GB) | Ein 8B ist möglich, aber lässt bei macOS zu wenig Spielraum |
| 16 GB | 8B (5 GB), mittlerer Kontext | Das standardmäßige GPU-Speicherlimit reicht weiterhin aus |
| 24 bis 32 GB | 14B (9 GB), oder auch ein 8B in Q8 | Ein 32B in Q4 erfordert das Erhöhen der GPU-Grenze |
| 48 bis 64 GB | 32B (19–20 GB) mit langem Kontext | Die GPU-Grenze erhöhen, falls die Engine das Modell nicht akzeptiert |
| 96 GB und mehr | 70B (ca. 40 GB) und MoE-Modelle | recommendedMaxWorkingSetSize vor dem Herunterladen prüfen |
Diese Größenordnungen sind vorsichtige Schätzungen, keine Messwerte: Ein langer Kontext, ein zweites Modell oder eine ressourcenhungrige Anwendung reichen aus, um die Situation zu verändern. Der Leitfaden zum Arbeitsspeicher erläutert die vollständige Berechnungsmethode.
#5. Die wichtigsten Einstellungen
| Option | Rolle | Standardwert |
|---|---|---|
| -ngl, --n-gpu-layers | Anzahl der im VRAM abgelegten Schichten (eine Zahl, auto oder all) | auto |
| -fa, --flash-attn | Flash Attention: on, off oder auto | auto |
| -ctk, -ctv | Typ des KV-Caches für Schlüssel und Werte (f16, q8_0, q4_0…) | f16 |
| -hf | Hugging-Face-Repository zum Herunterladen, mit optionaler Quantisierung | Q4_K_M, wenn das Suffix weggelassen wird |
| -c | Größe des Kontexts in Tokens | je nach Modell |
Flash Attention ist standardmäßig im Automatikmodus: In den meisten Fällen müssen Sie es nicht manuell aktivieren. Der KV-Cache lässt sich mit -ctk und -ctv quantisieren, sofern Flash Attention aktiv ist; mit q8_0 wird der Speicherbedarf des Caches gegenüber f16 ungefähr halbiert. Das geht mit einem leichten Genauigkeitsverlust einher, dessen Auswirkungen Sie für Ihre Anwendungsfälle überprüfen sollten. Der eigene Leitfaden dazu erläutert diesen Kompromiss im Detail.
#6. Leistungsdaten pro Chip: Was öffentliche Benchmarks messen
QuelLLM führt keine Messungen an diesen Geräten durch. Als Referenz dient die Diskussion „Performance of llama.cpp on Apple Silicon M-series“ im llama.cpp-Repository, in der alle Beitragenden denselben Test mit einem LLaMA 7B in Q4_0 ausführen. Die folgende Tabelle enthält einige Zeilen daraus sowie die jeweils verwendete Version von llama.cpp: Die Messungen für die Chips M1 bis M4 wurden mit derselben Version durchgeführt, die für die M5-Chips mit einer neueren.
| Chip (GPU-Kerne) | Bandbreite | Prompt | Generierung | Anteil des theoretischen Höchstwerts |
|---|---|---|---|---|
| M2 Pro (19) | 200 GB/s | 341,19 | 38,86 | 74 % |
| M3 Pro (18) | 150 GB/s | 341,67 | 30,74 | 78 % |
| M4 Pro (20) | 273 GB/s | 439,78 | 50,74 | 71 % |
| M5 Pro (20) | 307 GB/s | 1 620,64 | 66,33 | 82 % |
| M4 Max (40) | 546 GB/s | 885,68 | 83,06 | 58 % |
Die theoretische Obergrenze ergibt sich aus der Bandbreite geteilt durch die Größe der Modellgewichte (3,56 GiB, also 3,82 GB). Die Pro-Chips erreichen 71 bis 82 % dieser Obergrenze, der Max-Chip nur 58 %: Ab einem bestimmten Niveau ist der Speicher nicht mehr der einzige Engpass, und für mehr Bandbreite zu bezahlen bringt weniger, als das Datenblatt vermuten lässt.
Drei Erkenntnisse. Die Generierung folgt der Speicherbandbreite: Der M3 Pro mit 150 GB/s ist langsamer als der M2 Pro mit 200 GB/s, trotz der neueren Chip-Generation. Die Max-Chips mit deutlich höherer Bandbreite dominieren. Schließlich hat das Lesen des Prompts mit den M5-Chips einen Sprung gemacht: 1 620,64 Tokens/s für einen M5 Pro, gegenüber 439,78 für einen M4 Pro mit derselben Anzahl von GPU-Kernen, also 3,7-mal schneller. Dieser Unterschied ist für lange Dokumente und RAG von Bedeutung, für den Chat jedoch weit weniger.
Eine gute Vorgehensweise, bevor Sie zu dem Schluss kommen, dass ein Mac langsam ist: dasselbe Modell zunächst mit -ngl 0, dann mit dem Standardwert erneut starten und die Ergebnisse vergleichen. Der Unterschied zeigt, was die GPU auf Ihrem Rechner tatsächlich leistet, und bestätigt, dass die Berechnung tatsächlich über Metal erfolgt. Notieren Sie auch die verwendete Version von llama.cpp: Die Metal-Optimierungen entwickeln sich schnell weiter, und eine ältere Binärdatei kann deutlich langsamer sein als eine aktuelle Version.
#Fehlerbehebung: häufige Fehler
| Symptom | Wahrscheinliche Ursache | Lösungsansatz |
|---|---|---|
| Sehr geringer Durchsatz, Prozessor bei 100 % | Modell auf der CPU geladen | -ngl prüfen und die Startprotokolle lesen |
| GPU-Speicherzuweisungsfehler | Modell größer als der der GPU zugewiesene RAM-Anteil | iogpu.wired_limit_mb erhöhen, Modell oder Kontext reduzieren |
| Der Mac verlangsamt sich oder hängt | GPU-Limit zu hoch, kein Spielraum für macOS | Den Wert von iogpu.wired_limit_mb wieder senken |
| Die Kompilierung schlägt fehl | Fehlende Apple-Tools oder zu altes CMake | xcode-select --install dann brew upgrade cmake |
| Das Modell wird nicht gefunden | Fehlerhafter Pfad oder Repository-Name auf Hugging Face | -hf mit einem bekannten Repository oder -m mit einem absoluten Pfad testen |
- MLX vs. llama.cpp auf dem Mac: Wer gewinnt 2026?
- llama.cpp mit CUDA kompilieren
- Welche Modelle für 32 GB Speicher?
- Quelle: offizielles Repository von llama.cpp
- Quelle: Dokumentation zur Kompilierung von llama.cpp
- Quelle: öffentlicher Benchmark auf Apple Silicon
- Quelle: Diskussion über die GPU-Speichergrenze von Mac-Computern
Muss llama.cpp kompiliert werden, um Metal auf einem Mac zu verwenden?+
Wie überprüfe ich, ob llama.cpp die GPU auf meinem Mac nutzt?+
Wie lässt sich der GPU auf einem Mac mit Apple Silicon mehr Speicher zuweisen?+
llama.cpp oder Ollama auf dem Mac?+
Welche Geschwindigkeit ist von einem Mac M4 Pro mit llama.cpp zu erwarten?+
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.