Lokale Large Language Models (LLMs) auf einem Mac mit M1/M2 laufen zu lassen, ist für mich inzwischen eine der besten Methoden, sensible Daten privat zu halten — vorausgesetzt, man richtet alles richtig ein. In diesem Artikel beschreibe ich Schritt für Schritt, wie ich ein datenschutzfreundliches, wirklich offline arbeitendes LLM aufsetze, welche Tools ich empfehle und welche Fallstricke du vermeiden solltest.
Warum lokal und offline?
Ich frage mich bei jedem Cloud-Dienst: Wohin gehen meine Daten? Bei lokalen LLMs bleiben Eingaben und Modelle auf meiner Maschine. Das bedeutet keine Telemetrie zu Drittanbietern, keine versteckten API-Calls und volle Kontrolle über Updates und Zugriffsrechte. Das ist besonders wichtig, wenn du mit vertraulichen Texten, Kundendaten oder internen Dokumenten arbeitest.
Was du brauchst
- Mac mit Apple Silicon (M1 oder M2) — genug RAM hilft, 16 GB ist praktisch, 32 GB besser.
- Ausreichend Speicherplatz — Modelle können von wenigen hundert MB (kleine quantisierte) bis zu mehreren Dutzend GB reichen.
- Grundkenntnisse im Terminal — ich erkläre Befehle, aber du solltest dich wohlfühlen.
- Optional: Little Snitch oder LuLu (Firewall), um ausgehende Verbindungen zu kontrollieren.
Modelle, Lizenzen und Datenschutz
Wichtig ist, das Modell legal zu beziehen. Modelle wie Llama 2 haben Nutzungsbedingungen; andere Open-Source-Modelle (z. B. Mistral, Meta-released) ebenfalls. Ich lade Modelle nur von offiziellen Quellen herunter und prüfe die Lizenz. Technisch ist ein Modell lokal, aber rechtlich musst du die Lizenzbedingungen beachten.
Überblick: Tools & Architekturen
Hier ist kurz, was ich typischerweise vergleiche:
| llama.cpp | Sehr effizient auf CPU/Apple Silicon, viele quantisierte Modelle (.ggml). Kein Python nötig. |
| text-generation-webui | Web-Frontend, unterstützt viele Backends (llama.cpp, transformers). Praktisch, wenn man eine UI will. |
| Ollama | Kommerzielle, einfache Installation & Verwaltung. Sehr bequem, aber prüfe Telemetrie und Lizenz. |
Schritt 1 – System vorbereiten
Ich beginne immer mit einem sauberen Arbeitsbereich und aktiviere FileVault, damit meine Modelle verschlüsselt sind, falls das Gerät verloren geht.
- FileVault einschalten: Systemeinstellungen → Sichern & Datenschutz → FileVault.
- Homebrew installieren (falls nicht vorhanden): /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)".
- Optional: Ein separates lokales Benutzerkonto für LLM-Experimente anlegen, um Berechtigungen zu isolieren.
Schritt 2 – Firewall & Netzwerkhärtung
Um wirklich offline zu bleiben, sichere ich das Netzwerk:
- Little Snitch oder LuLu installieren und Standard-Profile anlegen.
- Blockiere ausgehende Verbindungen für die Prozesse, die das LLM ausführen werden (z. B. Terminal, Python-Interpreter, Web-UI).
- Verifiziere aktiv mit nettop oder lsof -i, dass keine Verbindungen aufgebaut werden.
Schritt 3 – Installation von llama.cpp (empfohlen für Apple Silicon)
Ich nutze oft llama.cpp, weil es effizient, einfach und unabhängig von großen Python-Bibliotheken ist.
Beispielinstallation:
git clone https://github.com/ggerganov/llama.cpp.gitcd llama.cppmake
Danach brauchst du ein quantisiertes Modell im .ggml-Format. Viele Community-Tools bieten Konverter. Ich achte beim Download darauf, dass die Quelle vertrauenswürdig ist und die Checksums stimmen.
Schritt 4 – Modell lokal, verschlüsselt und mit restriktiven Dateiberechtigungen
Ich speichere Modelle auf einer verschlüsselten APFS-Partition oder in einem verschlüsselten Verzeichnis und setze Berechtigungen so, dass nur mein Benutzerkonto Zugriff hat:
chmod 700 /Pfad/zum/modellordnerchown deinuser:staff /Pfad/zum/modellordner
Wenn du ein Teamgerät benutzt, kann ein Hardware-Sicherheitsmodul (YubiKey) für zusätzlichen Schutz sinnvoll sein.
Schritt 5 – Offline-Ausführung und Web-UI absichern
Wenn ich ein Web-Frontend wie text-generation-webui benutze, stelle ich sicher, dass es nur an localhost gebunden ist:
python server.py --listen 127.0.0.1
Und in der Firewall blockiere ich eingehende Zugriffe auf den Port. Niemals ein öffentliches Interface ohne Authentifizierung öffnen.
Schritt 6 – Monitoring & Audit
Ich überprüfe regelmäßig, ob Prozesse tatsächlich offline bleiben:
- netstat -an | grep ESTABLISHED — offene Verbindungen prüfen.
- ps aux | grep llama — laufende Prozesse identifizieren.
- Logs durchsehen: Falls das UI Logs schreibt, prüfe, ob dort URLs oder externe Hosts auftauchen.
Tipps zur Performance auf M1/M2
Apple Silicon ist stromsparend und schnell, aber du musst oft quantisierte Modelle verwenden, um gute Antwortzeiten zu erreichen. Ich nutze häufig 4-bit oder 8-bit-Quantisierung. Wenn du PyTorch-Backends brauchst, installiere eine für MPS kompilierte PyTorch-Version, aber beachte: manche Backends sind noch nicht völlig ausgereift auf MPS — deshalb ist llama.cpp oft stabiler.
Sicherheits-Checks vor produktiver Nutzung
- Stelle sicher, dass beim Starten keine Internet-Anfragen stattfinden (überprüfe Prozesse + Netzwerk).
- Führe Stichproben mit sensiblen Daten durch und beobachte, ob das System Daten sendet.
- Halte Modell-Weights offline und lade niemals Modelle automatisch aus der Cloud, ohne das bewusst zu erlauben.
Praxisbeispiel: kurzes Startkommando für llama.cpp
Ein typisches Kommando, das ich benutze, sieht so aus — vorausgesetzt, du hast ein model.ggml:
./main -m /Pfad/zum/model.ggml -p "Schreibe eine kurze Zusammenfassung von ..." --n_predict 256
Dieses Kommando läuft rein lokal. Ich starte es in einer Firewall-Session, die alle ausgehenden Verbindungen blockiert, um sicherzugehen.
Wenn du möchtest, kann ich dir beim nächsten Schritt helfen: Entweder ein konkretes Modell empfehlen (abhängig von Use-Case und Speicher), oder ein Skript zusammenstellen, das Firewall-Regeln automatisch anlegt und das Web-UI auf localhost bindet. Sag mir kurz, welchen Anwendungsfall du hast (z. B. private Dokumenten-Suche, persönliche Assistenz, Code‑Unterstützung) — dann passe ich die Anleitung an.