Zum Inhalt

Betrieb & Fallen

Fallen, die stillschweigend zuschlagen

Keine dieser Fallen erzeugt eine Fehlermeldung. Sie erzeugen falsche Ergebnisse, schlechtes Tempo oder tote Dienste — und sehen dabei gesund aus.

1. ollama rm kann llama-swap-Modelle zerstören. Die Blobs von qwen3-coder:30b, qwen3:4b-instruct-2507-q4_K_M, laguna-xs-2.1:q8_0 und granite4.1:8b werden von llama-swap als Dateien gelesen. Vor jedem rm die Digests gegen config.yaml prüfen.

2. Multimodal: Bild VOR Text. Im OpenAI-content-Array muss image_url vor dem text-Part stehen. Andersherum echot german-ocr nur den Prompt zurück.

3. Leerer content bei HTTP 200 heißt: Thinking-Budget aufgebraucht. Die Antwort steckt dann in reasoning_content. Entweder max_tokens erhöhen oder das Modell mit --reasoning-budget 0 fahren (so bei cleanup).

4. Der Residenten-Preload darf nicht verschwinden. Er hängt in hooks.on_startup.preload. Ohne ihn laden die Residenten lazy, und der Sprachpfad ist nach jedem Neustart einen Kaltstart lang taub.

5. Die Grafikkarte ist card1, nicht card0. Immer mit Platzhalter arbeiten:

grep -H . /sys/class/drm/card*/device/power_dpm_force_performance_level

6. amd-smi ist auf gfx1151 blind. Für die GPU-Auslastung radeontop oder /sys/class/drm/card1/device/gpu_busy_percent, für GTT /sys/class/drm/card1/device/mem_info_gtt_used.

7. 1670 MHz „Idle-Takt" ist DPM-Nachlauf, kein Fehler. Echtes Idle (600 MHz) stellt sich rund 30 Sekunden nach Lastende ein.

8. Container schreiben als root. /opt/ai/npu-models und Ähnliches gehören root. Vom Host beschriebene Verzeichnisse vorher übereignen.

9. btrfs und Datenbanken. chattr +C auf jedes Volume mit SQLite oder Postgres, bevor es befüllt wird. Nachträglich wirkungslos.

10. Kernel und linux-firmware sind gepinnt. Updates nur bewusst, mit Snapper-Snapshot davor — danach die komplette Hardware-Verifikation wiederholen.

Verifikation

# Backend
curl -s localhost:9292/health                             # llama-swap: OK
curl -s localhost:9292/v1/models | head -c 300            # Rollenliste
rocminfo | grep -i gfx                                    # gfx1151
vulkaninfo --summary | grep deviceName

# Residenz (löst zugleich den Lazy-Load aus)
curl -s localhost:9292/v1/chat/completions -H 'Content-Type: application/json' \
  -d '{"model":"voice-llamacpp","max_tokens":8,"messages":[{"role":"user","content":"OK?"}]}'

# Sprachpfad
docker ps --filter name=wyoming-                          # beide healthy?

# Infrastruktur
curl -s localhost:9100/metrics | grep -c '^aiserver_'     # erwartet 6
curl -s localhost:3000/health                             # Open WebUI
systemctl list-timers borgmatic.timer                     # nächster Lauf 20:00

# Speicher
sudo dmesg | grep 'GTT memory ready'                      # erwartet 98304M
awk '{printf "%.1f GB\n", $1/1073741824}' /sys/class/drm/card1/device/mem_info_gtt_used

Referenzwerte

Gemessen in Testrunde 2 (T4/Z2, 31.07.2026). Weicht eine Messung deutlich ab, stimmt etwas nicht.

Kennzahl Wert
Residenz-Boot (Neustart → voice+embed bereit) 2,6 s
voice idle / unter Doppellast 0,32 s / 0,72 s
Sprachpfad End-to-End (Parakeet + voice-agent) 634 ms
Brain (qwen3.6-MTP) 89 t/s
Brain-Dauerlast 60 min 83–84 t/s, kein Drift
Heavy-Swap kalt 1,5–24 s je nach Modellgröße
Budget-Worst-Case (brain+cleanup+ocr parallel) 94,9 / 96 GB, voice 0,76 s
Langkontext-Prefill 55k / 110k Tokens 104 s / 289 s
Thermik-Plateau Dauerlast ~72 °C bei ~112 W (Peak 75 °C / 119 W)
Idle-Takt (echt, nach 30 s Ruhe) 600 MHz
Parakeet-ASR WER 7,6 %, 0,12 s je Kommando

Messwerkzeuge im aiserver-Repo: scripts/bench-t4.py, scripts/voice-pipeline-bench.sh, scripts/thermal-watch.sh.

Offene Punkte

Thema Stand
Backup-Monitoring-Hook Defekt seit 15.08.2026, Details
Traefik mit DNS-01-Wildcard Wartet auf die Headscale-Umstellung (RFC-002). Das Docker-Netz proxy existiert bereits
Open WebUI auf dem NUC abschalten Offen, sobald die hiesige Instanz vollständig übernommen hat
Sprachpfad in HA umstellen Wyoming-Endpunkte zeigen noch auf den NUC
Kamera-Vision mit echten Frames Noch nicht erprobt
gemma4:e4b als Audio-Fallback Zu evaluieren, Ollama dafür temporär starten

Historie

Datum Ereignis
26.07.2026 Basis-Setup: BIOS, Ubuntu 26.04, btrfs-Subvolumes, GTT auf 96 GB
29.07.2026 AI-Stack Phase A — llama-swap als zweites Backend neben Ollama
30.–31.07.2026 Testrunde 2: Turniere je Rolle, Migration auf llama-swap, Ollama gestoppt, 622 GB freigeräumt
09.08.2026 Infra-Konservierung: Borgmatic, node_exporter, Open WebUI
14.08.2026 Backup-Erstlauf auf beide Ziele erfolgreich