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
|
||||
*.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