hermes-erkenntnisse/vram-arbitrierung-und-routingkarte-20260724.md

6.7 KiB

VRAM-Arbitrierung (Bugfix) + #61-Routingkarte/Pipelining-Plan, 2026-07-24

Teil A: VRAM-Thrashing-Bugfix (belegt, reversibel umgesetzt)

Befund (live verifiziert, nicht nur behauptet)

  • nvidia-smi: A40 hatte 45477/46068 MiB belegt (nur 59 MiB frei), 100% Util, bei einem einzelnen SDXL-Sampling-Job.
  • M:\comfyui-live.log: derselbe SDXL-Job brauchte 54-73 Sekunden/Iteration (32 Steps -> ~38 Minuten fuer EIN Bild). Normal fuer SDXL auf A40: 1-2s/it, also 15-40s Gesamtzeit. Faktor ~50-100x langsamer -> Thrashing bestaetigt, kein Einzelfall.
  • Root Cause: --highvram (aus #19, gesetzt fuer dedizierte Wan2.2-Beschleunigung) laesst ComfyUI Modelle NIE aus dem VRAM entladen. Bei gemischter Queue (SDXL-Checkpoints + Wan2.2-GGUF-Experten) stapeln sich die Modelle im VRAM bis Torch ueberbucht -> Swap/Thrashing. --highvram war fuer #19 (rein Wan2.2, dediziert) korrekt und brachte dort 4,3x Speedup -- ist aber falsch fuer gemischte Produktionsqueues.

Fix (additiv, reversibel, NICHT sofort scharf geschaltet)

  1. Backup: M:\start-comfyui-task.ps1.bak-vramfix-20260724-024847 (MD5 cab1f639... == Original vor Aenderung, verifiziert).
  2. M:\start-comfyui-task.ps1 (Default-Scheduled-Task ComfyUI-Server): --highvram entfernt -> ComfyUI faehrt wieder im Default-Dynamic-VRAM-Modus, entlaedt Modelle beim Wechsel zwischen Model-Typen automatisch. Kein VRAM-Stapeln mehr fuer die normale gemischte SDXL+Wan2.2-Produktionsqueue.
  3. Neu: M:\start-comfyui-task-wan-dedicated.ps1 -- Kopie mit --highvram, fuer bewusst dedizierte Wan2.2-Batch-Fenster (kein SDXL parallel), um die #19-Beschleunigung (4,3x) dort NICHT zu verlieren. Manuell/zeitgesteuert einsetzbar, ist NICHT der Scheduled-Task.
  4. Scheduled Task ComfyUI-Server zeigt unveraendert auf start-comfyui-task.ps1 -- Aenderung greift automatisch beim naechsten Neustart dieses Tasks, KEIN Reboot/Kill noetig und laut Auftrag auch nicht selbst durchgefuehrt (laufende SDXL-Queue nicht gestoert). Rueckweg: Copy-Item ...bak-vramfix-20260724-024847 start-comfyui-task.ps1 -Force.

Verifikation ausstehend (braucht main/Baer-GO fuer ComfyUI-Neustart)

  • Vorher: 54-73s/it SDXL (dieser Bericht), 45477 MiB VRAM belegt.
  • Nachher (Plan): nach Neustart mit neuer Config ein SDXL-Referenzbild (gleicher Checkpoint/Aufloesung/Steps) rendern, Zeit + nvidia-smi-VRAM vor/nach messen. Erwartung: Sekunden statt Minuten, VRAM faellt nach Job auf Checkpoint-Groesse (~5-8GB) statt konstant hoch zu bleiben.
  • Zusaetzlich: ein Wan2.2-Referenzlauf auf start-comfyui-task-wan-dedicated.ps1 gegenpruefen, dass die 4,3x aus #19 dort weiterhin gelten (kein Regressions-Risiko fuer den dedizierten Pfad).

Empfehlung fuer main/Orchestrator-Ebene (nicht in diesem Schritt umgesetzt)

ComfyUI bietet die API POST /free {"unload_models":true,"free_memory":true}. Der Job-Forwarder/Orchestrator koennte das zusaetzlich explizit aufrufen, wenn ein Job-Typ-Wechsel erkannt wird (SDXL->Wan2.2 oder umgekehrt) -- schnelleres, gezieltes Entladen statt auf ComfyUIs automatisches Management zu warten. Nicht umgesetzt, weil das eine Aenderung an job_forwarder/Orchestrator-Code waere (ausserhalb des heutigen additiv-reversiblen Config-Scopes) -- als Folgeschritt vorgeschlagen.


Teil B: #61 Routingkarte + Look-ahead-Pipelining (Plan, nicht vollstaendig umgesetzt)

Bekannte Ressourcen (aus Auftrag + verifizierten Quellen)

  • A40 (VM302, ComfyUI :8188): einzige echte GPU im aktuellen Pfad. Serialisiert durch _A40_GUARD-Semaphore (/opt/gpu1-status/app.py, VM201) -- verhindert parallele A40-Jobs auf Portal-Ebene (Schritt 1+2, dokumentiert barby/hermes-erkenntnisse/ burst-compute/w44-a40-guard-step2-2026-07-23.md). Guard haelt den Lock nur waehrend des Submit-Calls, NICHT ueber die gesamte Renderdauer -- bekannte Luecke, dort dokumentiert.
  • CPU (VM302): fuer pipe_04_restore_mux.py/pipe_05_interpolate.py aktuell libx264 -preset slow (CPU-Encoding). NVENC (h264_nvenc) ist auf der ffmpeg-Binary bereits vorhanden, aber laut #19-Bericht bewusst nicht angefasst (aktive #17-Pipeline, kein Umbau ohne vollen Test).
  • Shadow / Monster: im Auftrag als weitere Routing-Ziele genannt (#71-Offload-Karte). Ich konnte die #71-Doku in dieser Session NICHT auffinden (Forgejo-Volltextsuche/Qdrant lieferte keinen Treffer auf "#71 Offload-Karte" mit Shadow/Monster-Rollenzuordnung). Ehrlich markiert: die konkrete Schritt->Knoten-Zuordnung fuer Shadow/Monster kann ich ohne #71-Originaldokument nicht ausfuellen, ohne zu raten. Empfehlung: main/Baer liefert Pfad zu #71 (Dateiname/Repo), dann wird die Karte in einem Folgeschritt konkret ausgefuellt.

Vorlaeufige Routing-Logik (nur A40+CPU-Teil belastbar, Rest Platzhalter)

Schritt Ziel Beleg
SDXL/Wan2.2 Sampling, VAE Decode, Upscale (ComfyUI) A40 einzige GPU im Pfad, _A40_GUARD
pipe_04_restore_mux.py, pipe_05_interpolate.py (aktuell) CPU (libx264) #19-Bericht, ffmpeg-Log
pipe_04/pipe_05 (Vorschlag, ungetestet) A40 (NVENC) vorhanden aber nicht aktiviert
Shadow-Knoten ? #71 noch nicht gefunden
Monster-Knoten ? #71 noch nicht gefunden

Look-ahead-Pipelining -- Plan (nicht implementiert)

Idee (Standard-Ansatz fuer sequenzielle GPU/CPU-Pipelines): waehrend Segment N auf der A40 rendert, kann das VORHERIGE fertige Segment N-1 bereits parallel auf CPU nachbearbeitet werden (Restore/Mux/Interpolate), statt strikt sequenziell A40->CPU->A40->CPU zu warten. Voraussetzung: die A40-Guard-Semaphore muesste pipeline-stufenweise (nicht global) greifen, und pipe_0x-Skripte muessten async/Queue-fähig werden (Producer/Consumer statt Blocking-Call-Kette). Das ist ein groesserer Umbau der #17-Pipeline-Skripte -- laut Auftrag heute nur als Plan dokumentiert, nicht scharf geschaltet (kein ungetesteter Eingriff in die aktive Produktionskette).

Benchmark-Plan fuer Teil B (sobald main/Baer grosseres Zeitfenster gibt)

  1. Referenz-Clip (gleiche Parameter wie #19-Messung) end-to-end durch die volle Pipeline (Wan2.2 -> Lipsync -> Restore/Mux -> Interpolate) sequenziell zeitstempeln (pro Stufe).
  2. Gleicher Clip mit Look-ahead (Stufe N-1 CPU parallel zu Stufe N A40) -- Vergleich Wallclock gesamt.
  3. NVENC- vs. libx264-A/B auf pipe_04/pipe_05 separat messen (isoliert von Pipelining).

Status

  • Teil A: umgesetzt (Config), Verifikation (Vorher/Nachher-Benchmark) noch offen, braucht ComfyUI-Neustart -> main/Baer-Entscheidung.
  • Teil B: Routing-Analyse fuer A40/CPU belastbar, Shadow/Monster braucht #71-Fundstelle, Look-ahead-Pipelining als Plan dokumentiert, NICHT implementiert (Risiko fuer aktive #17-Pipeline zu hoch fuer einen ungetesteten Direktumbau in diesem Schritt).