Add dual-GPU FLUX 9B image pipeline

This commit is contained in:
Mikei386
2026-09-07 15:42:45 +02:00
parent 61aa20cb52
commit 1844551534
19 changed files with 945 additions and 51 deletions
+25 -4
View File
@@ -6,8 +6,9 @@ flowchart LR
H -->|OpenAI API| R[Profile Router<br/>Athena :8081]
R --> P[Profile Controller]
P --> Q[genau ein llama.cpp-Profil<br/>Qwen Fast / Medium / Large / Ultra / Uncensored]
R --> I[FLUX.2-klein-4B<br/>RTX 5080, Text + Editing]
R --> T[XTTS RTX 3060<br/>Piper CPU-Fallback]
R --> I[FLUX.2 Klein 9B FP8 Beta<br/>RTX 5080 Transformer]
I --> E[Qwen3-8B NF4 Textencoder<br/>RTX 3060 während Bildauftrag]
R --> T[Qwen3-TTS RTX 3060<br/>Piper CPU-Fallback]
R --> STT[Whisper.cpp large-v3-turbo<br/>CPU, lokale Spracherkennung]
H --> U[MUA / Unraid MCP]
@@ -46,9 +47,29 @@ Kontextgröße:
| Medium | 160.000 Token |
| Large | 192.000 Token |
| Ultra | 262.144 Token |
| Beta 1 | 192.000 Token |
| Uncensored | 80.000 Token |
## Exklusiver Bildmodus
Text- und Bildinferenz teilen sich dieselben GPUs und laufen deshalb nicht
gleichzeitig. Der Wechsel ist transaktional:
1. Router merkt sich das aktive Textprofil.
2. Profile Controller stoppt alle llama.cpp-Profile und Qwen3-TTS.
3. Bild-Worker lädt Qwen3-8B als NF4-Textencoder auf die RTX 3060 und den
FLUX.2-Klein-9B-FP8-Transformer auf die RTX 5080.
4. Nach dem Prompt-Encoding werden die Embeddings zur RTX 5080 übertragen.
5. Vor dem VAE-Decoding werden Textencoder und Transformer freigegeben.
6. Der Worker wird gestoppt; anschließend starten Qwen3-TTS und das vorherige
Textprofil wieder. Piper bleibt als CPU-Fallback verfügbar.
Der Bild-Worker ist lazy und besitzt `restart: "no"`; im normalen Textbetrieb
belegt er daher keinen VRAM. Container werden über eindeutige Docker-Labels
gefunden, nicht über zufällige Container-IDs.
Die visuelle Fassung liegt als `athena-architecture-map.png` neben dieser Datei.
Eine zweite Detailkarte, `athena-gpu-allocation-map.png`, zeigt die
profilabhängige Layer-Verteilung auf RTX 5080 und RTX 3060 sowie die festen
GPU-Zuordnungen von FLUX.2, Vision-Projektor und XTTS.
profilabhängige Layer-Verteilung auf RTX 5080 und RTX 3060. Die PNG-Karten
zeigen noch den Stand vor dem 9B-Bildpfad; die aktuelle textuelle Beschreibung
in diesem Dokument ist verbindlich.
+24 -1
View File
@@ -1,6 +1,29 @@
# Aktueller produktiver Laufzustand
Stand: 3. September 2026
Stand: 7. September 2026
## FLUX.2 Klein 9B FP8 Beta
Die bisherige 4B-Bildinferenz wurde testweise durch FLUX.2 Klein 9B FP8
ersetzt. Athenas Profile Controller stellt dafür einen exklusiven Zwei-GPU-Pfad
bereit:
- RTX 5080: 9B-FP8-Diffusionstransformer und VAE-Decoding
- RTX 3060: Qwen3-8B-Textencoder in NF4
- Qwen3-TTS und aktives llama.cpp-Profil werden für den Bildauftrag pausiert
- Piper bleibt währenddessen als CPU-TTS verfügbar
- nach Abschluss werden TTS und das vorherige Textprofil wiederhergestellt
Ein vollständiger Aufruf über Athenas OpenAI-kompatiblen Router wurde mit
HTTP 200, einem korrekt gespeicherten 1024×1024-PNG und anschließender
Wiederherstellung von Qwen3-TTS und `qwen-fast` erfolgreich geprüft. Ein
isolierter Vergleich ergab ungefähr 14,6 Sekunden Bildlaufzeit mit dem
GPU-Textencoder gegenüber 102,1 Sekunden mit CPU-Textencoder. Diese Werte sind
eine lokale Einzelmessung und keine allgemeine Modellgarantie.
Das Modell ist nicht kommerziell lizenziert. Die Bedingungen der beiden
zugriffsbeschränkten Black-Forest-Labs-Repositories müssen vor dem Download
akzeptiert werden. Details stehen in [FLUX_9B_BETA.md](FLUX_9B_BETA.md).
## Lokale Spracherkennung
+153
View File
@@ -0,0 +1,153 @@
# FLUX.2 Klein 9B FP8 Beta auf Athena
Stand: 7. September 2026
## Zweck und Status
Der Bildpfad ersetzt testweise FLUX.2 Klein 4B durch das größere
FLUX.2-Klein-9B-Modell. Ziel sind bessere Prompttreue, räumliche Beziehungen,
Objektkonsistenz und Referenzbild-Bearbeitung. Der Pfad ist technisch
funktionsfähig, bleibt aber bis zu weiteren Qualitäts- und Editing-Tests als
Beta bezeichnet.
Der OpenAI-kompatible Modellname lautet:
```text
FLUX.2-klein-9B-fp8-beta
```
## Modellartefakte und Lizenz
Verwendet werden zwei gepinnte, zugriffsbeschränkte Hugging-Face-Repositories:
| Zweck | Repository | Revision | Lokaler Pfad |
|---|---|---|---|
| Pipeline-Komponenten, Qwen3-Textencoder und VAE | `black-forest-labs/FLUX.2-klein-9B` | `92196c8e11f7b6cf2b7493e037d8c5345c559216` | `/data/models/FLUX.2-klein-9B-components` |
| FP8-Transformer | `black-forest-labs/FLUX.2-klein-9b-fp8` | `902d9d510b51533e07729f19211414a3648b77d2` | `/data/models/FLUX.2-klein-9B-fp8` |
FLUX.2 Klein 9B steht unter der FLUX Non-Commercial License. Vor dem Download
müssen die Bedingungen beider Repositories im verwendeten Hugging-Face-Konto
akzeptiert werden. Ein Token gehört ausschließlich in die durch
`HF_TOKEN_FILE` angegebene, für root lesbare Datei; niemals in Git oder
`stack.env`.
## GPU-Aufteilung
| Phase | RTX 5080, 16 GB | RTX 3060, 12 GB |
|---|---|---|
| Text-/Sprachbetrieb | aktives Qwen3.8-27B-Profil | Qwen3-TTS; Vision je nach Profil |
| Prompt-Encoding | FLUX-Transformer und VAE | Qwen3-8B-Textencoder, NF4 |
| Denoising | FLUX-Transformer | Textencoder wird nicht mehr benötigt |
| VAE-Decoding | VAE; Transformer zuvor freigegeben | Textencoder zuvor freigegeben |
Der Profile Controller stoppt vor dem Start des Bild-Workers alle
llama.cpp-Profile und den mit `com.mike-ai.tts-worker=qwen3` markierten
Qwen3-TTS-Container. Dadurch bleibt genügend VRAM für beide Bildkomponenten.
Nach dem Bildauftrag startet er Qwen3-TTS und das zuvor aktive Textprofil
wieder. Der TTS-Gateway kann während des Wechsels auf Piper ausweichen.
## Aktuelle Grenzen
- genau 1024 × 1024 Pixel
- genau vier Inferenzschritte
- Guidance Scale 1,0
- ein Bildauftrag gleichzeitig
- höchstens vier bereits lokal gespeicherte Referenzbilder
- Textencoder-Maximum 128 Token
- Bildbearbeitung wird vom Worker angenommen, ist aber noch gesondert
Ende-zu-Ende zu qualifizieren
## Installation und Aktualisierung
In `/root/mike-ai-install.env` müssen diese Werte gesetzt sein:
```bash
HF_TOKEN_FILE=/root/.cache/huggingface/token
FLUX_COMPONENT_DIR=/data/models/FLUX.2-klein-9B-components
FLUX_TRANSFORMER_DIR=/data/models/FLUX.2-klein-9B-fp8
```
Anschließend lädt der normale Installer nur die benötigten Komponenten und die
gepinnten FP8-Gewichte. Bestehende, vollständige Dateien werden nicht erneut
geladen:
```bash
cd /opt/mike-ai/stack
sudo ./install.sh --config /root/mike-ai-install.env
```
## Funktionsprobe
Der Router ist nur über das private Netz erreichbar. Ein minimaler Test lautet:
```bash
curl -fsS http://192.168.1.212:8081/v1/images/generations \
-H "Authorization: Bearer $ROUTER_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model":"FLUX.2-klein-9B-fp8-beta",
"prompt":"A yellow toy excavator on the left and a red toy truck on the right, studio photo",
"size":"1024x1024",
"steps":4,
"guidance":1.0,
"seed":9072026
}'
```
Danach müssen folgende Zustände wiederhergestellt sein:
```bash
docker ps --format '{{.Names}} {{.Status}}' \
--filter name=mike-ai-router \
--filter name=mike-ai-qwen3-tts \
--filter name=mike-ai-llama
docker ps -a --filter name=mike-ai-image-worker \
--format '{{.Names}} {{.Status}}'
nvidia-smi
```
Erwartet werden ein gesunder Router, gesundes Qwen3-TTS, genau ein gesundes
llama.cpp-Profil und ein mit Exit-Code 0 beendeter Bild-Worker.
## Hermes
Hermes auf Unraid verwendet einen persistenten Benutzer-Provider
`athena-local`. Seine Konfiguration muss auf denselben Modellnamen zeigen:
```yaml
image_gen:
provider: athena-local
model: FLUX.2-klein-9B-fp8-beta
max_parallel_requests: 1
```
Der Provider lebt in Hermes-Appdata und bleibt bei normalen Container-Updates
erhalten. Er gehört nicht in die Desktop-App und muss auf weiteren Clients
nicht erneut installiert werden. Die versionierte Quellfassung liegt unter
[`integrations/hermes-athena-image`](../integrations/hermes-athena-image).
## Rollback
Vor der Beta-Bereitstellung wurden auf Athena diese Rückfall-Images angelegt:
```text
mike-ai/image-worker:4b-rollback-20260907
mike-ai/profile-controller:rollback-20260907
```
Die zugehörige Deployment-Sicherung liegt auf Athena unter:
```text
/data/deploy-backups/20260907-flux9b-beta
```
Die vorherige Hermes-Konfiguration und der alte Provider liegen auf Unraid
unter:
```text
/mnt/nvme-storage/appdata/Hermes-Agent/backups/flux9b-beta-20260907
```
Ein Rollback darf nicht blind erfolgen: Zuerst aktives Profil, laufende
Anfragen und vorhandene Image-Tags prüfen, dann nur Image-Worker,
Profile Controller und Hermes-Provider auf den gesicherten Stand zurücksetzen.
+6
View File
@@ -15,6 +15,12 @@ Sie bleiben auf der Daten-SSD oder werden anhand der gepinnten Angaben in
`config/install.env.example` erneut geladen. Die Dashboard-Historie liegt
dauerhaft unter `/data/llama-dashboard`.
Für FLUX.2 Klein 9B müssen vor einem erneuten Download die Bedingungen der
beiden Black-Forest-Labs-Repositories im Hugging-Face-Konto akzeptiert sein.
Außerdem muss die in `HF_TOKEN_FILE` angegebene Token-Datei wiederhergestellt
oder neu erzeugt werden. Der Token selbst ist absichtlich nicht Bestandteil
des Git-Repositories oder des Athena-Backups.
Portainers lokale Konfiguration liegt im Docker-Volume `portainer_data` und
wird zusammen mit den übrigen nicht reproduzierbaren Volumes gesichert und
wiederhergestellt.