Zum Inhalt

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, Hostname aiserver, Benutzer robin
  • 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