ki

Mac Studio KI Server

Von peter portmann,

Veröffentlicht am 15. Aug. 2026   â€”   7 min Lesezeit

codemacosselfhosted
Nano Banana 2
🍎
Mein Mac Studio läuft nun schon anderthalb Jahre. In dieser Zeit habe ich viel experimentiert. Die LLMs und die Software sind in stetem Wandel, daher hat sich einiges an Ballast angesammelt. Zeit zum Aufräumen. Hier eine Zusammenstellung der aktuellen Konfiguration.
Zudem kann ich jetzt mithilfe von Pi Coding Agent und Python Änderungen auf dem Client durchführen und dann automatisch auf den Server ausrollen. Das Arbeitsverzeichnis mit der Automatisierung wird in einem Repository gesichert und ist für Interessierte frei zugänglich.
Plattform Dienste Kurzbeschreibung
Docker Open WebUI, Docling Containerisierte AusfĂĽhrung von Applikationen und Diensten, portabel, isoliert und reproduzierbar.
LM Studio LLM‑Inferenz Desktop-/Server-Toolkit mit integrierter CLI für lokale Modellverwaltung und Inferenz.
Ollama LLM‑Inferenz LLM-Server, Modelle lokal und Ollama-Cloud (teilweise kostenlos).

Docker

Folgende Dienste laufen produktiv:

  • Open WebUI
  • Docling

Damit Docker beim Systemstart automatisch hochfährt, ist es unter den Anmeldeobjekten vermerkt.


Via SSH ist der Status vom Client aus auch via Terminal ersichtlich:

pp@MacStudio2025 ~ >docker ps
CONTAINER     

ghcr.io/open-webui/open-webui:main
8080->8080/tcp   open-webui

quay.io/docling-project/docling-serve:latest
5001->5001/tcp   docling-server

quay.io/docling-project/docling-serve:latest
8000->8000/tcp   docling-mcp

Open WebUI

Die Menustruktur in Open WebUI ist etwas komplex. Mit dem Alias owlskann ich rasch eine Liste der konfigurierten LLMs erstellen.

Ich verwende LLMs vom eigenen Server, gehostet mit LM Studio und auch mit einem opencode go Abo.

Alias in der .zshrc Datei:

# Open WebUI ls
alias owls='curl -s http://192.168.16.45:8080/api/v1/models -H
"Authorization: Bearer $OPENWEBUI_TOKEN" | jq -r ".data[] |
select(.openai != null) | .id"'

Nun kann mit dem Befehl owls schnell und einfach eine Liste der aktiven Modelle erstellt werden:

pp@MacBookPro2023 ~ >owls

LM Studio:
openai/gpt-oss-120b
google/gemma-4-26b-a4b
qwen/qwen3.6-27b
qwen/qwen3.6-35b-a3b
text-embedding-bge-m3
text-embedding-slide-bge-reranker-v2-m3

opencode go:
deepseek-v4-flash
glm-5.2
gpt-5.6-luna
kimi-k3
minimax-m3
qwen3.8-max

opencode go Abo

Bei opencode habe ich ein Go-Abo fĂĽr 10 $ pro Monat. Damit kann ich via API auf die LLMs zugreifen, was die Anbindung von Open WebUI und weiteren Anwendungen wie Pi Coding Agent ermöglicht.

So kann ich die Performance der lokalen LLMs mit den grossen Modellen aus der Cloud vergleichen. FĂĽr private Daten ist das nicht geeignet, zum Codieren ist es weniger kritisch, wenn mit den Secrets sorgsam umgegangen wird. opencode hat eine ZDR-Policy (Zero Data Retention) welche fĂĽr GPT und deepseek allerdings nur bedingt gilt. Wenigstens werden die Daten nicht fĂĽr das Training verwendet.

Open WebUI Konfiguration

Admin-Bereich | Einstellungen | AI Verbindungen

Aktiv sind hier:

  • LM Studio http://studio.home:1234/v1
  • openrouter go https://opencode.ai/zen/go/v1.

Admin-Bereich | Einstellungen | AI Modelle

LM Studiohttp://studio.home:1234/v1

opencode go Abohttps://opencode.ai/zen/go/v1

Interessant sind Mitte August 2026 vor allem die gĂĽnstigen und schnellendeepseek-v4-flash und gpt-5.6-luna Modelle. Diese setze ich vor allem fĂĽr das Codieren ein, wenn die Aufgabe fĂĽr lokale Modelle zu anspruchsvoll wird.

Die untenstehenden Grafiken stammen von artificialanalysis.ai. Die Kosten pro Token sagen dabei weniger aus, als die folgende Auswertung, welche die Gesamtkosten pro Aufgabe darstellt.

Die kostengĂĽnstigen Modelle befinden sich links.

Die schnellen Modelle befinden sich links, je höher, desto intelligenter.

Admin-Bereich | Einstellungen | Dokumente

Hier verwende ich zwei lokale Embedding-Modelle auf LM Studio.

pp@MacBookPro2023 ~ >owls

LM Studio:
text-embedding-bge-m3
text-embedding-slide-bge-reranker-v2-m3

FĂĽr ein funktionierendes RAG System ist die Aufbereitung der Dokumente von entscheidender Bedeutung.

Am zuverlässigsten hat sich in meinen Versuchen die Verarbeitung mit Docling erwiesen. Docling verwende ich mit guten Resultaten auch in einer Importpipeline bei Paperless-ngx. Das liefert auch bei komplexen Layouts sauberes Markdown. Open WebUI bietet auch eine direkte Anbindung an Docling. Ich trenne die Prozesse lieber und importiere dann nur die sauber aufbereiteten Markdown-Dateien in Open WebUI, meine Erfahrungen sind so deutlich konsistenter. Der Import kann auch automatisiert wie API geschehen.

Damit durch Open WebUI saubere Chunks generiert werden ist die Einstellung 'Markdown-Header-Text-Splitter' wichtig. Dafür ist, wie eben dargelegt, eine gute Qualität der Markdown-Dateien wichtig.


LM Studio

Die folgenden Modelle sind ständig aktiv.

pp@MacStudio2025 ~ >lms ps

MODEL                                      SIZE         CONTEXT
google/gemma-4-26b-a4b                     17.99 GB     262144 
openai/gpt-oss-120b                        63.39 GB     131072 
qwen/qwen3.6-35b-a3b                       37.75 GB     262144 
text-embedding-bge-m3                      634.55 MB    8192   
text-embedding-slide-bge-reranker-v2-m3    635.67 MB    8192   

Ollama

Bei Ollama laden ich die Modelle nur bei Bedarf in den Arbeitsspeicher. Bei Cloudmodellen ist die lokale Ollama-Instanz nur ein Proxy.

Cloudmodelle von Ollama können teilweise mit beschränktem Kontingent gratis benutzt werden. Beispielsweise minimax-m3:cloud. Das ist Ideal um rasche ein Modell zu testen.

pp@MacStudio2025 ~ >ollama ls
NAME                ID              SIZE     MODIFIED
minimax-m3:cloud    8cd948b96f47    -        12 days ago
gpt-oss:120b        f7f8e2f8f4e0    65 GB    11 months ago

pp@MacStudio2025 ~ >ollama ps
NAME    ID    SIZE    PROCESSOR    CONTEXT    UNTIL

Die historisch gewachsene Sammlung an LLMs habe ich folgendermassen bereinigt:

pp@MacStudio2025 ~ >for model in $(ollama list | tail -n +2 |
awk '{print $1}' | grep -E -v
'^(minimax-m3:cloud|gpt-oss:120b)$');do
    ollama rm "$model"
done

pp@MacStudio2025 ~ >ollama list
NAME                ID              SIZE     MODIFIED
minimax-m3:cloud    8cd948b96f47    -        7 days ago
gpt-oss:120b        f7f8e2f8f4e0    65 GB    11 months ago

pp@MacStudio2025 models/blobs >du -sh ~/.ollama/models
61G    /Users/pp/.ollama/models

Analyse mit KI: wurden die Modelle tatsächlich von der SSD entfernt?

Das passt exakt!

Dein `gpt-oss:120b` belegt alleine laut deiner ersten Liste 65 GB
(bzw. komprimiert etwas weniger auf der Disk). Zusammen mit dem
Cloud-Modell `minimax-m3:cloud` (das lokal fast keinen Platz braucht)
passen die verbleibenden 61 GB perfekt.

Alle anderen Modelle wurden vollständig gelöscht und der
Speicherplatz ist wieder frei.

macOS Konfiguration

Der Mac Studio ist so konfiguriert, dass bei Systemstart die oben beschriebenen Dienste automatisch hochgefahren werden inklusive der LLMs.

Bisher hatte ich das fĂĽr Ollama eingerichtet, allerdings als Ordner Library im Root-Verzeichnis. Nun verwende ich einen Daemon in der Library des Benutzers.

Docker

Bei Docker ist es einfach, ein Eintrag in die Anmeldeobjekte reicht aus.

Ollama & LM Studio

Der vollständige Code findet sich hier:

/Library/LaunchDaemons

Die Property-Lists starten Shell-Skripte in ~/bin.

pp@MacStudio2025 /Library/LaunchDaemons >ls | grep com.pp
com.pp.lmstudiostart.plist
com.pp.ollama.plist

~/bin

Shell-Skripte:

pp@MacStudio2025 ~/bin >ls -le
-rwxr-xr-x  1 pp  staff  2049  8 Aug. 20:44 lmstudiostart
-rwxr-xr-x  1 pp  staff   473  9 Aug. 19:05 lmstudiostatus
-rwxr-xr-x  1 pp  staff   269  9 Aug. 19:05 lmstudiostop
-rwxr-xr-x  1 pp  staff  1282  9 Aug. 18:36 ollamastart
-rwxr-xr-x  1 pp  staff   566  9 Aug. 18:44 ollamastatus
-rwxr-xr-x  1 pp  staff   717  9 Aug. 18:44 ollamastop

.zshrc

Hier sind einige Shortcuts fĂĽr die Befehle hinterlegt.

pp@MacStudio2025 ~ >cat .zshrc
# Terminal Prompt
PROMPT="%n@%m %2c >"

# Ollama
alias olstart="sudo launchctl kickstart -k system/com.pp.ollama"
alias olboot="sudo launchctl bootstrap system /Library/LaunchDaemons/com.pp.ollama.plist"
alias olstop="ollamastop"
alias olstatus="ollamastatus"
alias ollogout="tail -f /var/log/ollama/stdout.log"
alias ollogerr="tail -f /var/log/ollama/stderr.log"

# LM Studio
alias lmstart="sudo launchctl kickstart -k system/com.pp.lmstudiostart"
alias lmboot="sudo launchctl bootstrap system /Library/LaunchDaemons/com.pp.lmstudiostart.plist"
alias lmstop="/Users/pp/bin/lmsudiostop"
alias lmstatus="/Users/pp/bin/lmstudiostatus"
alias lmlogout="tail -f /var/log/lmstudio/stdout.log"
alias lmlogerr="tail -f /var/log/lmstudio/stderr.log"

Automatisierung

Der Code befindet sich öffentlich im folgenden, selbst gehosteten Forgejo-Repo:

Im Projektordner hat Pi Coding Agent Zugriff, so kann ich den Code mithilfe des Agenten anpassen. Mit dem Skript deploy.shkönnen die Änderungen via SSH vom MacBook auf den Mac Studio Server übertragen werden. Die .zshrcDatei wird dabei nicht überschrieben. Das ist wichtig, weil diese weitere Anweisungen enthält, welche mit LM Studio und Ollama nichts zu tun haben. Es wird Zeile für Zeile geprüft und allenfalls ergänzt. Die bisherigen Property-Lists und die Shell-Skripts werden vor der Anpassung gesichert.

Pi Coding Agent ist instruiert die Änderungen im Code jeweils zu commiten und in das Forgejo-Repo zu pushen. Dieses ist auf meinem UNRAID Server gehostet und werden automatisch über diverse Stufen gesichert.


Auf Facebook teilen Auf Linkedin teilen Auf Twitter teilen Per E-Mail senden