Add ComfyUI configuration for image generation with ROCm support
- Docker Compose setup with ROCm for RX 7800 XT (gfx1101) - Auto-download script for SDXL models - Basic SDXL workflow for testing - Full documentation in README.md - Update .gitignore to exclude model files (too large)
This commit is contained in:
+16
@@ -70,3 +70,19 @@ desktop.ini
|
|||||||
|
|
||||||
# Fichiers de configuration spécifiques à l'utilisateur
|
# Fichiers de configuration spécifiques à l'utilisateur
|
||||||
*.local
|
*.local
|
||||||
|
|
||||||
|
# ComfyUI - Modèles et outputs (trop volumineux)
|
||||||
|
comfyui/models/checkpoints/*.safetensors
|
||||||
|
comfyui/models/checkpoints/*.ckpt
|
||||||
|
comfyui/models/vae/*.safetensors
|
||||||
|
comfyui/models/vae/*.ckpt
|
||||||
|
comfyui/models/loras/*.safetensors
|
||||||
|
comfyui/models/loras/*.ckpt
|
||||||
|
comfyui/output/*.png
|
||||||
|
comfyui/output/*.jpg
|
||||||
|
comfyui/output/*.jpeg
|
||||||
|
comfyui/output/*.webp
|
||||||
|
comfyui/input/*.png
|
||||||
|
comfyui/input/*.jpg
|
||||||
|
comfyui/input/*.jpeg
|
||||||
|
comfyui/input/*.webp
|
||||||
|
|||||||
@@ -0,0 +1,181 @@
|
|||||||
|
# 🎨 Effi - ComfyUI (Génération d'Images)
|
||||||
|
|
||||||
|
Configuration Docker de ComfyUI avec support ROCm pour RX 7800 XT.
|
||||||
|
|
||||||
|
## 📋 Prérequis
|
||||||
|
|
||||||
|
- Docker et Docker Compose installés
|
||||||
|
- ROCm 6.x installé sur l'hôte
|
||||||
|
- RX 7800 XT (16GB VRAM)
|
||||||
|
- ~20GB d'espace disque libre
|
||||||
|
|
||||||
|
## 🚀 Installation
|
||||||
|
|
||||||
|
### 1. Copier cette configuration sur folzo-Corp
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~/
|
||||||
|
git clone https://gitea.folzocorp.fr/Folzo/effi.git
|
||||||
|
cd effi/comfyui
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Télécharger le modèle SDXL Base
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Créer le dossier models/checkpoints
|
||||||
|
mkdir -p models/checkpoints
|
||||||
|
|
||||||
|
# Télécharger SDXL Base (6.9GB)
|
||||||
|
wget -O models/checkpoints/sd_xl_base_1.0.safetensors \
|
||||||
|
"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors"
|
||||||
|
|
||||||
|
# Alternative avec huggingface-cli (si installé)
|
||||||
|
# huggingface-cli download stabilityai/stable-diffusion-xl-base-1.0 \
|
||||||
|
# sd_xl_base_1.0.safetensors --local-dir models/checkpoints
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Lancer ComfyUI
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Vérifier le fonctionnement
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Logs
|
||||||
|
docker logs -f comfyui
|
||||||
|
|
||||||
|
# Accès web
|
||||||
|
http://192.168.1.11:8188
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔧 Configuration ROCm
|
||||||
|
|
||||||
|
Cette configuration utilise les variables d'environnement ROCm pour la RX 7800 XT:
|
||||||
|
|
||||||
|
- `HIP_VISIBLE_DEVICES=0` - Utilise le premier GPU
|
||||||
|
- `HSA_OVERRIDE_GFX_VERSION=11.0.1` - Force l'architecture gfx1101 (Navi 32)
|
||||||
|
- `PYTORCH_HIP_ALLOC_CONF=expandable_segments:True` - Optimisation mémoire PyTorch
|
||||||
|
|
||||||
|
## 📁 Structure des dossiers
|
||||||
|
|
||||||
|
```
|
||||||
|
comfyui/
|
||||||
|
├── docker-compose.yml # Configuration Docker
|
||||||
|
├── models/
|
||||||
|
│ ├── checkpoints/ # Modèles principaux (SDXL, etc.)
|
||||||
|
│ ├── vae/ # Encodeurs/décodeurs VAE
|
||||||
|
│ └── loras/ # Modères LoRA pour fine-tuning
|
||||||
|
├── output/ # Images générées
|
||||||
|
├── input/ # Images d'entrée (img2img)
|
||||||
|
├── custom_nodes/ # Extensions ComfyUI
|
||||||
|
└── workflows/ # Workflows sauvegardés
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🖼️ Modèles recommandés
|
||||||
|
|
||||||
|
### Pour RX 7800 XT 16GB
|
||||||
|
|
||||||
|
| Modèle | Taille | VRAM | Usage |
|
||||||
|
|--------|--------|------|-------|
|
||||||
|
| SDXL Base 1.0 | 6.9GB | 8-10GB | Usage général |
|
||||||
|
| SDXL Lightning | 6.9GB | 8-10GB | Génération rapide |
|
||||||
|
| RealVisXL | 6.9GB | 8-10GB | Photoréalisme |
|
||||||
|
|
||||||
|
### Commandes de téléchargement
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# SDXL Base
|
||||||
|
wget -O models/checkpoints/sd_xl_base_1.0.safetensors \
|
||||||
|
"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors"
|
||||||
|
|
||||||
|
# SDXL VAE (optionnel mais recommandé)
|
||||||
|
wget -O models/vae/sdxl_vae.safetensors \
|
||||||
|
"https://huggingface.co/stabilityai/sdxl-vae/resolve/main/diffusion_pytorch_model.safetensors"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔌 Intégration OpenWebUI
|
||||||
|
|
||||||
|
Dans OpenWebUI (http://192.168.1.27:3000):
|
||||||
|
|
||||||
|
1. Aller dans **Admin Panel** → **Settings** → **Images**
|
||||||
|
2. **Image Generation Engine**: ComfyUI
|
||||||
|
3. **ComfyUI URL**: `http://192.168.1.11:8188`
|
||||||
|
4. **ComfyUI Workflow**: Default
|
||||||
|
5. Sauvegarder
|
||||||
|
|
||||||
|
## 🧪 Tests
|
||||||
|
|
||||||
|
### Test via interface web
|
||||||
|
|
||||||
|
1. Ouvrir http://192.168.1.11:8188
|
||||||
|
2. Charger un workflow (bouton **Load**)
|
||||||
|
3. Sélectionner le modèle SDXL dans le nœud "Load Checkpoint"
|
||||||
|
4. Modifier le prompt
|
||||||
|
5. Cliquer **Queue Prompt**
|
||||||
|
|
||||||
|
### Test via OpenWebUI
|
||||||
|
|
||||||
|
Dans une conversation avec Effi:
|
||||||
|
```
|
||||||
|
Dessine-moi un chat astronaute sur la lune
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🐛 Dépannage
|
||||||
|
|
||||||
|
### ComfyUI ne démarre pas
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Vérifier les logs
|
||||||
|
docker logs comfyui
|
||||||
|
|
||||||
|
# Vérifier que ROCm est accessible
|
||||||
|
docker exec -it comfyui rocm-smi
|
||||||
|
```
|
||||||
|
|
||||||
|
### Erreur mémoire GPU
|
||||||
|
|
||||||
|
Réduire la résolution dans le workflow (max 1024x1024 pour SDXL).
|
||||||
|
|
||||||
|
### Modèle non trouvé
|
||||||
|
|
||||||
|
Vérifier que le fichier `.safetensors` est bien dans `models/checkpoints/`.
|
||||||
|
|
||||||
|
### Accès refusé (SELinux)
|
||||||
|
|
||||||
|
Les volumes utilisent le flag `:Z` pour SELinux. Si problème persiste:
|
||||||
|
```bash
|
||||||
|
sudo chown -R $USER:$USER models/ output/ input/
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📊 Monitoring
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Surveiller l'utilisation GPU
|
||||||
|
watch -n 1 docker exec comfyui rocm-smi
|
||||||
|
|
||||||
|
# Espace disque utilisé
|
||||||
|
du -sh models/*
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔒 Sécurité
|
||||||
|
|
||||||
|
- ComfyUI écoute sur `0.0.0.0` (toutes les interfaces)
|
||||||
|
- Pas d'authentification par défaut
|
||||||
|
- Accessible uniquement depuis le réseau local
|
||||||
|
- Port non exposé sur Internet
|
||||||
|
|
||||||
|
## 📝 Notes
|
||||||
|
|
||||||
|
- Premier démarrage peut être long (téléchargement des dépendances)
|
||||||
|
- La génération d'image utilise ~8-10GB VRAM
|
||||||
|
- Laisser de la marge pour Ollama (~6GB)
|
||||||
|
- Les workflows peuvent être sauvegardés/chargés via l'interface
|
||||||
|
|
||||||
|
## 🆘 Support
|
||||||
|
|
||||||
|
En cas de problème:
|
||||||
|
1. Vérifier `docker logs comfyui`
|
||||||
|
2. Vérifier `rocm-smi` sur l'hôte
|
||||||
|
3. Consulter https://github.com/comfyanonymous/ComfyUI
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# ComfyUI avec ROCm pour RX 7800 XT
|
||||||
|
# Architecture: gfx1101 (Navi 32)
|
||||||
|
|
||||||
|
services:
|
||||||
|
comfyui:
|
||||||
|
image: yanwk/comfyui-boot:rocm
|
||||||
|
container_name: comfyui
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8188:8188"
|
||||||
|
volumes:
|
||||||
|
- ./models/checkpoints:/home/user/ComfyUI/models/checkpoints:Z
|
||||||
|
- ./models/vae:/home/user/ComfyUI/models/vae:Z
|
||||||
|
- ./models/loras:/home/user/ComfyUI/models/loras:Z
|
||||||
|
- ./output:/home/user/ComfyUI/output:Z
|
||||||
|
- ./input:/home/user/ComfyUI/input:Z
|
||||||
|
- ./custom_nodes:/home/user/ComfyUI/custom_nodes:Z
|
||||||
|
- ./workflows:/home/user/ComfyUI/workflows:Z
|
||||||
|
devices:
|
||||||
|
- /dev/kfd:/dev/kfd
|
||||||
|
- /dev/dri:/dev/dri
|
||||||
|
group_add:
|
||||||
|
- video
|
||||||
|
- render
|
||||||
|
environment:
|
||||||
|
- HIP_VISIBLE_DEVICES=0
|
||||||
|
- HSA_OVERRIDE_GFX_VERSION=11.0.1
|
||||||
|
- PYTORCH_HIP_ALLOC_CONF=expandable_segments:True
|
||||||
|
- COMFYUI_PORT=8188
|
||||||
|
- COMFYUI_EXTRA_ARGS=--listen 0.0.0.0 --port 8188
|
||||||
|
security_opt:
|
||||||
|
- seccomp:unconfined
|
||||||
|
cap_add:
|
||||||
|
- SYS_PTRACE
|
||||||
|
shm_size: '8gb'
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
reservations:
|
||||||
|
devices:
|
||||||
|
- driver: amd
|
||||||
|
count: 1
|
||||||
|
capabilities: [gpu]
|
||||||
|
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
name: effi-network
|
||||||
Executable
+93
@@ -0,0 +1,93 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Script de téléchargement des modèles Stable Diffusion
|
||||||
|
# Pour ComfyUI avec RX 7800 XT
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
MODELS_DIR="$(dirname "$0")/models/checkpoints"
|
||||||
|
VAE_DIR="$(dirname "$0")/models/vae"
|
||||||
|
|
||||||
|
mkdir -p "$MODELS_DIR" "$VAE_DIR"
|
||||||
|
|
||||||
|
echo "🎨 Téléchargement des modèles pour ComfyUI"
|
||||||
|
echo "=========================================="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Fonction de téléchargement avec barre de progression
|
||||||
|
download_model() {
|
||||||
|
local url=$1
|
||||||
|
local output=$2
|
||||||
|
local name=$3
|
||||||
|
|
||||||
|
if [ -f "$output" ]; then
|
||||||
|
echo "✓ $name déjà présent"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "📥 Téléchargement de $name..."
|
||||||
|
echo " URL: $url"
|
||||||
|
echo " Destination: $output"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
wget --progress=bar:force -O "$output" "$url" 2>&1 | tail -f -n +6
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "✓ $name téléchargé avec succès"
|
||||||
|
else
|
||||||
|
echo "✗ Erreur lors du téléchargement de $name"
|
||||||
|
rm -f "$output"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Menu de sélection
|
||||||
|
echo "Quel modèle souhaitez-vous télécharger ?"
|
||||||
|
echo ""
|
||||||
|
echo "1) SDXL Base 1.0 (6.9GB) - Recommandé, usage général"
|
||||||
|
echo "2) SDXL Base + VAE (7.2GB total) - Avec meilleur VAE"
|
||||||
|
echo "3) Annuler"
|
||||||
|
echo ""
|
||||||
|
read -p "Votre choix (1-3): " choice
|
||||||
|
|
||||||
|
case $choice in
|
||||||
|
1)
|
||||||
|
echo ""
|
||||||
|
download_model \
|
||||||
|
"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors" \
|
||||||
|
"$MODELS_DIR/sd_xl_base_1.0.safetensors" \
|
||||||
|
"SDXL Base 1.0"
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
echo ""
|
||||||
|
download_model \
|
||||||
|
"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors" \
|
||||||
|
"$MODELS_DIR/sd_xl_base_1.0.safetensors" \
|
||||||
|
"SDXL Base 1.0"
|
||||||
|
|
||||||
|
download_model \
|
||||||
|
"https://huggingface.co/stabilityai/sdxl-vae/resolve/main/diffusion_pytorch_model.safetensors" \
|
||||||
|
"$VAE_DIR/sdxl_vae.safetensors" \
|
||||||
|
"SDXL VAE"
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
echo "Annulation..."
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Choix invalide"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=========================================="
|
||||||
|
echo "✅ Téléchargement terminé !"
|
||||||
|
echo ""
|
||||||
|
echo "Prochaines étapes :"
|
||||||
|
echo " 1. Lancer ComfyUI : docker compose up -d"
|
||||||
|
echo " 2. Vérifier les logs : docker logs -f comfyui"
|
||||||
|
echo " 3. Accéder à l'interface : http://192.168.1.11:8188"
|
||||||
|
echo ""
|
||||||
|
echo "Espace disque utilisé :"
|
||||||
|
du -sh "$MODELS_DIR" "$VAE_DIR" 2>/dev/null | head -2
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
{
|
||||||
|
"last_node_id": 9,
|
||||||
|
"last_link_id": 9,
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"id": 6,
|
||||||
|
"type": "CLIPTextEncode",
|
||||||
|
"pos": [415, 186],
|
||||||
|
"size": [400, 200],
|
||||||
|
"inputs": [{"name": "clip", "type": "CLIP", "link": 3}],
|
||||||
|
"outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [4], "slot_index": 0}],
|
||||||
|
"widgets_values": ["beautiful scenery nature glass bottle landscape, purple galaxy bottle, fantasy, intricate detail, 8k"],
|
||||||
|
"title": "Prompt (Positive)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 7,
|
||||||
|
"type": "CLIPTextEncode",
|
||||||
|
"pos": [415, 426],
|
||||||
|
"size": [400, 200],
|
||||||
|
"inputs": [{"name": "clip", "type": "CLIP", "link": 5}],
|
||||||
|
"outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [6], "slot_index": 0}],
|
||||||
|
"widgets_values": ["text, watermark, blurry, low quality, distorted"],
|
||||||
|
"title": "Prompt (Negative)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"type": "CheckpointLoaderSimple",
|
||||||
|
"pos": [26, 474],
|
||||||
|
"size": [320, 98],
|
||||||
|
"outputs": [
|
||||||
|
{"name": "MODEL", "type": "MODEL", "links": [1], "slot_index": 0},
|
||||||
|
{"name": "CLIP", "type": "CLIP", "links": [3, 5], "slot_index": 1},
|
||||||
|
{"name": "VAE", "type": "VAE", "links": [8], "slot_index": 2}
|
||||||
|
],
|
||||||
|
"widgets_values": ["sd_xl_base_1.0.safetensors"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"type": "EmptyLatentImage",
|
||||||
|
"pos": [26, 627],
|
||||||
|
"size": [320, 106],
|
||||||
|
"outputs": [{"name": "LATENT", "type": "LATENT", "links": [2], "slot_index": 0}],
|
||||||
|
"widgets_values": [1024, 1024, 1]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"type": "KSampler",
|
||||||
|
"pos": [863, 186],
|
||||||
|
"size": [320, 474],
|
||||||
|
"inputs": [
|
||||||
|
{"name": "model", "type": "MODEL", "link": 1},
|
||||||
|
{"name": "positive", "type": "CONDITIONING", "link": 4},
|
||||||
|
{"name": "negative", "type": "CONDITIONING", "link": 6},
|
||||||
|
{"name": "latent_image", "type": "LATENT", "link": 2}
|
||||||
|
],
|
||||||
|
"outputs": [{"name": "LATENT", "type": "LATENT", "links": [7], "slot_index": 0}],
|
||||||
|
"widgets_values": [0, "randomize", 20, 8, "euler", "normal", 1]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 8,
|
||||||
|
"type": "VAEDecode",
|
||||||
|
"pos": [1209, 188],
|
||||||
|
"size": [210, 46],
|
||||||
|
"inputs": [
|
||||||
|
{"name": "samples", "type": "LATENT", "link": 7},
|
||||||
|
{"name": "vae", "type": "VAE", "link": 8}
|
||||||
|
],
|
||||||
|
"outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [9], "slot_index": 0}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 9,
|
||||||
|
"type": "SaveImage",
|
||||||
|
"pos": [1474, 189],
|
||||||
|
"size": [320, 270],
|
||||||
|
"inputs": [{"name": "images", "type": "IMAGE", "link": 9}],
|
||||||
|
"widgets_values": ["ComfyUI"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[1, 4, 0, 3, 0, "MODEL"],
|
||||||
|
[2, 5, 0, 3, 3, "LATENT"],
|
||||||
|
[3, 4, 1, 6, 0, "CLIP"],
|
||||||
|
[4, 6, 0, 3, 1, "CONDITIONING"],
|
||||||
|
[5, 4, 1, 7, 0, "CLIP"],
|
||||||
|
[6, 7, 0, 3, 2, "CONDITIONING"],
|
||||||
|
[7, 3, 0, 8, 0, "LATENT"],
|
||||||
|
[8, 4, 2, 8, 1, "VAE"],
|
||||||
|
[9, 8, 0, 9, 0, "IMAGE"]
|
||||||
|
],
|
||||||
|
"groups": [],
|
||||||
|
"config": {},
|
||||||
|
"extra": {},
|
||||||
|
"version": 0.4
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user