Déploiement de Stable-Diffusion-v1-5-archive sur une seule carte A10 24 Go de mémoire vive

Découvrez comment mettre en place rapidement un service Stable Diffusion 1.5 performant et stable. Cette solution préemballée élimine la complexité de l'installation et de la configuration, vous permettant de générer des images en quelques minutes sur un matériel accessible. Notre test a été réalisé sur une carte graphique NVIDIA A10 équipée de 24 Go de VRAM.

Configuration initiale et lancement

L'ensemble de la solution est conteneurisée via Docker. Assurez-vous d'avoir installé Docker et le NVIDIA Container Toolkit sur votre serveur pour permettre l'accès au GPU. L'exécution repose sur une seule commande qui télécharge l'image et lance le service.

# Téléchargement et démarrage du conteneur
docker run -d \
  --name sd-service \
  --gpus all \
  -p 8080:7860 \
  -v ~/generated-images:/app/outputs \
  mon-registre/sd-legacy-v1.5:latest

Petite explication des arguments :

  • --gpus all : Accorde l'accès au(s) GPU du système hôte au conteneur.
  • -p 8080:7860 : Associe le port 7860 du conteneur au port 8080 de votre machine. L'interface sera donc accessible via http://<votre-ip>:8080.
  • -v : Monte un répertoire local pour stocker durablement les images créées.

Après le lancement, le modèle (~4 Go) se charge en mémoire. Attendez 1 à 3 minutes. La disponibilité du service peut être vérifiée soit en consultant les logs (docker logs -f sd-service), soit en accédant directement à l'URL dans un navigateur. Un gestionnaire de processus interne assure la relance automatique du service en cas d'incident.

Utilisation de l'interface et génération d'images

L'interface web se compose de deux sections principales : les paramètres à gauche et l'aperçu des résultats à droite. Le processus de création est intuitif :

  1. Rédiger une description (Prompt) en anglais pour de meilleurs résultats. Exemple : cyberpunk city street at night, neon lights, rainy, detailed.
  2. (Optionnel) Spécifier une Negative Prompt pour éviter les défauts courants : blurry, distorted, low resolution.
  3. Ajuster les paramètres techniques (étapes, échelle de guidage, résolution).
  4. Cliquer sur "Générer".

Optimisation des paramètres et conseils

La maîtrise des paramètres est cruciale pour guider le modèle.

  • Steps (Étapes) : Définit le nombre d'itérations de raffinement. 20 à 30 étapes offrent un excellent compromis qualité/vitesse. Au-delà de 40, les gains sont minimes.
  • Guidance Scale (Échelle de guidage) : Contrôle la fidélité au prompt. Une valeur entre 7.0 et 8.0 équilibre bien créativité et précision. Évitez les extrêmes (< 5 ou > 10).
  • Width / Height : La résolution doit être un multiple de 64. Les formats 512x512, 512x768 ou 768x512 sont standards. La mémoire de 24 Go permet d'explorer des résolutions plus élevées comme 1024x1024 sans risque de saturation.
  • Seed : Un nombre fixe permet de reproduire exactement une image. Le paramètre -1 génère un résultat aléatoire à chaque fois.

La rédaction de prompts efficaces est un art. Pour SD 1.5, l'anglais est indispensable. Structurez votre description : sujet, action, style artistique, qualité technique, éclairage. Utilisez systématiquement une negative prompt pour affiner le résultat.

Performances et stabilité mesurées sur A10 24 Go

Les tests de charge ont été réalisés sur la carte A10 24 Go.

Benchmark de génération unique

  • 512x512, 20 étapes : ~3 secondes par image.
  • 768x768, 30 étapes : ~7 secondes.
  • 1024x1024, 50 étapes : ~18 secondes, avec une utilisation VRAM d'environ 18 Go.

Test de endurance et consommation

Un script de test a envoyé 100 requêtes successives au service via son API.

import asyncio
import aiohttp

async def generate_image(session, index):
    params = {
        "prompt": "a serene forest landscape, morning light, 8k",
        "steps": 20,
        "width": 512,
        "height": 512,
        "seed": index  # Seed unique pour chaque itération
    }
    async with session.post("http://localhost:8080/sdapi/v1/txt2img", json=params) as resp:
        result = await resp.json()
        print(f"Image {index+1} générée - Seed: {params['seed']}")

async def main():
    async with aiohttp.ClientSession() as session:
        tasks = [generate_image(session, i) for i in range(100)]
        await asyncio.gather(*tasks)

if __name__ == "__main__":
    asyncio.run(main())

Résultats après 12h de fonctionnement continu :

  • Stabilité : Aucun crash observé. Le processus de supervision a fonctionné comme prévu.
  • Température GPU : Maintenue entre 68°C et 76°C, plage normale pour une A10 sous charge.
  • Mémoire : Environ 6 Go de RAM système et 3.5 Go de VRAM en mode veille (modèle chargé).

Dépannage rapide

  • Interface inaccessible : Vérifiez l'état du conteneur (docker ps) et le port exposé (ss -tlnp | grep 8080). Consultez les logs pour les erreurs de téléchargement du modèle.
  • Ralentissements soudains : Exécutez nvidia-smi pour détecter d'autres processus utilisant le GPU. Redémarrer le conteneur (docker restart sd-service) peut résoudre des problèmes temporaires.
  • Reproduire une image : Notez la valeur du "Seed" indiquée dans les métadonnées d'une image générée. Entrez-la manuellement dans le champ dédié, avec tous les autres paramètres identiques, pour obtenir une copie quasi parfaite.

Étiquettes: Stable-Diffusion-1-5 Docker NVIDIA-A10 Déploiement GPU

Publié le 1 juin à 21h59