AI-Server (Corsair AI Workstation 300)¶
Dedizierte Maschine für lokale KI-Inferenz. Sie trägt alle Sprachmodelle des Homelabs — Home-Assistant-Sprachsteuerung, Transkript-Aufbereitung, Obsidian-RAG und die Dokumentenkette für Paperless-ngx.
Die Arbeitsteilung ist bewusst: Claude bleibt der Haupt-Kopf, die lokalen Modelle übernehmen Dauerdienste und alles, was das Haus nicht verlassen soll.
- Hardware: Corsair AI Workstation 300 — AMD Ryzen AI Max+ 395 „Strix Halo", 128 GB Unified Memory, davon 96 GB als GTT für die iGPU
- OS: Ubuntu 26.04 LTS Server, headless im Rack, Zugriff nur per SSH
- Adresse:
10.10.10.7, Hostnameaiserver, Benutzerrobin - Betrieb: bare metal + Docker, kein Proxmox
- Repo: aiserver — Live-Checkout
unter
/opt/aiserver(Deploy-Key, read-only)
Architektur¶
Der Kern ist eine Zwei-Container-Architektur: llama-swap trägt sämtliche LLM-Rollen auf der iGPU, wyoming-parakeet macht die Spracherkennung auf der CPU. Dazu kommen Piper (TTS), Open WebUI und der node_exporter.
| Ebene | Aufgabe | Regel |
|---|---|---|
| iGPU (Vulkan/RADV) | llama-swap mit allen LLM-Rollen | Gruppe resident bleibt dauerhaft geladen, Gruppe heavy swappt (eins aktiv) |
| CPU | Parakeet-ASR, Piper-TTS | Alles, was nie warten darf |
| NPU (XDNA 2) | — stillgelegt — | Whisper-NPU verlor den Vergleich doppelt: WER 12,1 % gegen 7,6 %, Latenz 16-fach |
Stacks¶
Ein Verzeichnis je Stack unter /opt/aiserver, alle im Docker-Netz ai.
| Stack | Container | Zweck |
|---|---|---|
| llama-swap | llama-swap |
Einziges LLM-Backend, OpenAI-kompatibel |
| voice | wyoming-parakeet, wyoming-piper |
Sprachpfad für Home Assistant |
| openwebui | open-webui |
Chat-Oberfläche über die Modell-Rollen |
| monitoring | node-exporter |
Metriken für das Prometheus auf dem NUC |
| backup | — (nativ auf dem Host) | Borgmatic auf NUC + Hetzner Storage Box |
Archiviert: ollama/ (Container gestoppt, Blob-Store dient llama-swap weiter als
Dateiquelle) und npu-whisper/ (Container entfernt).
Endpunkte¶
| Dienst | Adresse | Protokoll |
|---|---|---|
| llama-swap API | http://10.10.10.7:9292/v1 |
OpenAI-kompatibel |
| llama-swap Web-UI | http://10.10.10.7:9292/ui |
HTTP |
| Open WebUI | http://10.10.10.7:3000 |
HTTP, nur LAN |
| Speech-to-Text | tcp://10.10.10.7:10300 |
Wyoming |
| Text-to-Speech | tcp://10.10.10.7:10200 |
Wyoming |
| Metriken | http://10.10.10.7:9100/metrics |
Prometheus |
Kein Traefik, keine externe Erreichbarkeit. Die Exposition wartet auf die Headscale-Umstellung (RFC-002).
Speicheraufteilung¶
Zwei getrennte NVMe, kein RAID.
/ System-NVMe (btrfs, Subvolume @, Snapper aktiv)
1,9 TB, ~32 GB belegt
/opt zweite NVMe (btrfs, ohne Kompression)
1,9 TB, ~141 GB belegt
├── ai/
│ ├── models/ollama/ Ollama-Blob-Store — llama-swap liest die Blobs als
│ │ Dateien (read-only); Ollama selbst ist gestoppt
│ ├── models/hf/ offizielle HF-GGUFs (+ mmproj und MTP-Drafts)
│ ├── npu-models/ FastFlowLM-Bestand (Stack stillgelegt)
│ ├── volumes/ Docker-Volumes mit Daten
│ └── eval/ Messergebnisse, Sprachaufnahmen, Referenzen
├── aiserver/ Git-Checkout des Repos, ein Verzeichnis je Stack
└── docker/ Docker data-root
Die Systemplatte ist gesnapshottet, /opt nicht
Snapper deckt nur / ab. Alles unter /opt, was nicht reproduzierbar ist,
gehört ins Backup — konkret /opt/ai/eval und
/opt/ai/volumes. Die 135 GB Modelle sind bewusst ausgenommen: sie sind
jederzeit erneut ziehbar.
Einordnung ins Homelab¶
| Beziehung | Mechanismus |
|---|---|
| → Home Assistant (NUC) | Wyoming-Endpunkte für STT/TTS, llama-swap als Conversation-Agent |
| → Prometheus (NUC) | Prometheus scrapt 10.10.10.7:9100, Alarmregeln liegen im homeserver-Repo |
| → NUC + Storage Box | Borgmatic sichert nächtlich auf beide Ziele |
| → ntfy (Hetzner) | Meldung, wenn ein Backup-Lauf abbricht |
Ablösung des NUC-Stacks
Ollama, Open WebUI und der Sprachpfad laufen aktuell doppelt — hier und auf dem NUC. Fachlich ist der NUC-Stack abgelöst; das Abschalten dort ist ein eigener Schritt und noch offen. Siehe Ollama (NUC) und Voice-Stack (NUC).
Weiterführend¶
- Hardware & Systemeinstellungen — BIOS, Kernel-Parameter, Unified Memory, Snapper
- llama-swap — Backend, Gruppen, Pflicht-Flags
- Modell-Rollen — welches Modell welche Aufgabe hat, mit Messwerten
- Betrieb & Fallen — Verifikation, Referenzwerte, stille Fehlerquellen