diff --git a/docs/plan-local-llm-router.md b/docs/plan-local-llm-router.md index 849c91f..61040b5 100644 --- a/docs/plan-local-llm-router.md +++ b/docs/plan-local-llm-router.md @@ -231,6 +231,31 @@ lohnt nicht): erscheint im Dashboard; grosses lokales LLM oder FLUX-Vollausbau dorthin. Ohne Orchestrator. +### Verschieben-Button (Semi-Auto) — reboot-sicher via Platzierungs-Config + +Wenn ein „Verschieben"-Button in Diagnostic gewuenscht ist (Dropdown Ziel-Host + +Button = hier stoppen, dort starten), braucht das remote Container-Steuerung → +**kleiner Agent pro GPU-Host** (Docker-Zugriff, hoert RVS-Befehle). Das ist der +zuvor „teure" Teil, aber in der DUMMEN Variante: + +- **Eine Platzierungs-Config ist Single Source of Truth:** + `/shared/config/gpu_placement.json` = `{service: host}`. +- **Dummer Reconcile-Agent pro Host:** bei Start UND Config-Aenderung — starte + die mir zugewiesenen Dienste, stoppe die anderen. Keine Policy, kein + VRAM-Placement. Mensch = Scheduler (Button), Agent = befolgt nur Config. +- **Button aendert nur die Config** → Agenten reconcilen (alt stoppt, neu + startet). **Reboot liest Config** → kein Divergieren, keine Kollision. +- **Reboot-Falle vermieden:** NIE Laufzeit-Move ohne Config-Update (sonst holt + `restart: unless-stopped` den Dienst beim Reboot zurueck). Config = Wahrheit. + +Deploy-Story: Code liegt via git auf allen Hosts (`pull`+`build`), aber `up -d` +startet nichts GPU-maessig von selbst — die Platzierungs-Config (bzw. +`COMPOSE_PROFILES`) entscheidet, was wo laeuft. Neuer Host = zuweisen, Agent +startet. + +**Reihenfolge:** NACH B0/B1. Fallback ohne Button: reine `COMPOSE_PROFILES` pro +Host + Verschieben von Hand (null neue Infra). + ## Nicht-Ziele - Kein echter Gemini-Live-Duplex-Klon (Text-Modell als Hirn).