Les GPU grand public haut de gamme sont-ils adaptés à l'inférence de diffusion stable à grande échelle ? Si oui, quel serait le coût quotidien pour générer des millions d’images ? Avez-vous vraiment besoin d’A10, d’A100 ou de H100 ?
Dans ce benchmark, nous répondons à ces questions en lançant une application optimisée basée sur la diffusion stable sur SaladCloud.
Le résultat : nous avons augmenté jusqu'à 750 répliques (GPU) et généré plus de 9,2 millions d'images en utilisant 3,62 To de stockage en 24 heures pour un coût total de 1 872 $ .
En générant 4 954 images par dollar , ce benchmark montre que l'inférence générative d'IA à grande échelle sur des GPU grand public est pratique, abordable et constitue un moyen de réduire les coûts du cloud. Dans cet article, nous passerons en revue l'architecture de l'application et les détails du modèle, le déploiement sur SaladCloud avec des détails d'invite et les résultats d'inférence du benchmark. Dans un article ultérieur, nous fournirons une présentation technique et un code de référence que vous pourrez utiliser pour reproduire ce benchmark.
Ce test a été exécuté pour un outil de génération d'images génératives d'IA de style SaaS pour des illustrations personnalisées. Les utilisateurs finaux parcourent les catégories de modèles affinés, sélectionnent un modèle, personnalisent l'invite et les paramètres et soumettent une tâche pour générer une ou plusieurs images. Une fois générées, les images sont présentées à l'utilisateur final. Nous avons aidé à développer le conteneur d'inférence pour démontrer le potentiel des nœuds SaladCloud pour ce cas d'utilisation. Le diagramme suivant fournit une représentation générale de l'architecture du système :
Les principaux composants comprennent une application Web (frontend et backend), une file d'attente de tâches dédiée, un conteneur d'inférence et un service de stockage par blocs. Azure Queue Storage a été utilisé pour la file d’attente des tâches et a fourni une planification FIFO. Azure Blob Storage a été utilisé pour fournir le stockage par blocs. Le diagramme suivant fournit une représentation de haut niveau de l'architecture du conteneur d'inférence :
Le conteneur était basé sur l'interface utilisateur Web de diffusion stable d'Automatic1111 . Nous avons créé et ajouté un travailleur personnalisé au conteneur écrit en Go qui implémentait le pipeline de traitement des tâches. Le travailleur a exploité le SDK Azure pour Go pour communiquer avec les services Azure Queue Storage et Azure Blob Storage. Le travailleur interroge séquentiellement la file d'attente pour une tâche, utilise le point de terminaison de l'API text2img fourni par le serveur d'interface utilisateur Web Stable Diffusion pour générer les images et télécharge les images dans le conteneur blob.
Après avoir créé l'image du conteneur d'inférence, nous avons créé un déploiement de conteneur géré par SaladCloud à l'aide du portail Web.
Le déploiement ciblait 750 nœuds uniques avec au moins 4 processeurs virtuels, au moins 8 Go de RAM et un GPU NVIDIA RTX 2000, 3000 ou 4000 avec au moins 8 Go de VRAM. Bien que SaladCloud permette une sélection de nœuds plus ciblée, nous avons décidé de permettre au planificateur de prendre les premiers nœuds disponibles avec un GPU compatible en fonction de la capacité réseau inutilisée. Il convient également de noter que nous n'avons pas limité la répartition géographique du déploiement.
La file d'attente des tâches était remplie de 10 000 000 d'invites de génération d'images variables . Voici un exemple d'un des emplois :
{"prompt": "photo of a jump rope, lora:magic-fantasy-forest-v2:0.35, magic-fantasy-forest, digital art, most amazing artwork in the world, ((no humans)), volumetric light, soft balanced colours, forest scenery, vines, uhd, 8k octane render, magical, amazing, ethereal, intricate, intricate design, ultra sharp, shadows, cooler colors, trending on cgsociety, ((best quality)), ((masterpiece)), (detailed)","negative_prompt": "oversaturation, oversaturated colours, (deformed, distorted, disfigured:1.3), distorted iris, poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, (mutated hands and fingers:1.4), disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation, human, man, woman", "sampler_name": "k_euler_a", "steps": 15, "cfg_scale": 7}
Chaque tâche comprenait une définition LoRA intégrée dans l'invite de texte, et chaque tâche utilisait des noms concrets et des descriptions d'environnement légèrement variables. Les images produites ont été fixées à une taille de 512x512 pixels, l'échantillonneur a été fixé à Euler Ancestral, le nombre de pas fixé à 15 et l'échelle CFG fixée à 7.
Sur une période de 24 heures, nous avons traité un total de 9 274 913 demandes de génération d’images , produisant 3,62 To de contenu. Les échecs de traitement ont été minimes (par exemple, problèmes de réseau transitoires) et seules 523 tâches ont été retraitées une seconde fois. En moyenne, nous avons atteint un temps de cycle de génération d'images de 7 secondes . La mosaïque suivante est un exemple de quelques-unes des images générées :
Un échantillon d'images générées à partir du benchmark d'inférence Stable Diffusion. L'invite comprenait différents noms définis dans une forêt de style fantastique.
C'était amusant de parcourir les images générées et d'observer la qualité relative compte tenu du manque de temps passé à régler et à optimiser les paramètres.
Cette démonstration a donné des résultats passionnants montrant que pour l'inférence de diffusion stable à grande échelle, les GPU grand public sont non seulement performants, mais aussi plus rentables. Cela dit, c'était loin d'être optimisé. Il existe un certain nombre de tâches techniques que nous pourrions entreprendre pour améliorer les performances. Notamment, nous avons rapidement implémenté le travailleur et opté pour une boucle qui extrait séquentiellement une tâche, génère une image et télécharge l'image. Avec cette implémentation, pendant que nous attendons les E/S réseau, le GPU reste inactif.
Si nous adoptions une approche consistant à pipeliner les tâches, en en retirant une supplémentaire de la file d'attente et en parallélisant les E/S réseau avec une autre demande de génération d'image, nous estimons une amélioration d'au moins 10 % du débit global des tâches. Sans ajuster le coût total, cela nous ferait augmenter de plus de 10 millions d’images générées en une journée.
L'IA générative est un type d'intelligence artificielle qui peut créer de nouveaux contenus, comme des peintures, de la musique et de l'écriture. Il fonctionne en apprenant des informations existantes pour développer un modèle de modèles et de relations, et il a des applications pratiques dans la génération de contenu unique et personnalisé. Cette technologie est devenue de plus en plus populaire grâce à la publication d’un certain nombre de modèles de base open source, dont beaucoup sont développés sur des ensembles de données à très grande échelle. Combinée à la relative facilité de développement et d’application de réglages précis et au faible coût d’exécution de l’inférence à grande échelle, la démocratisation de l’IA générative ouvre la voie à de nouvelles applications à un rythme incroyable.
Spécifiquement liés à l'inférence, de nombreux modèles nécessitent encore des ressources informatiques importantes pour générer efficacement du contenu. Cependant, les progrès en matière de puissance de traitement et de capacité de ressources des GPU grand public ont rattrapé de nombreuses applications de modèles d’IA génératifs.
Au lieu de se tourner vers de grands fournisseurs de cloud computing et de rivaliser pour un accès limité aux GPU d'entreprise comme les A10, A100 ou H100, un nombre croissant de clients se tournent vers SaladCloud, un environnement de cloud computing distribué composé des PC de jeu les plus puissants au monde. .
Une application en pleine expansion de l’IA générative comprend la création d’images à partir d’une description textuelle. Le flux de travail « texte vers image » peut être utilisé pour générer des actifs pour des jeux, des campagnes publicitaires et marketing, des storyboards et bien plus encore. Stable Diffusion est un modèle de base open source populaire dans l'espace « texte en image ».
Nous prévoyons actuellement des démonstrations et des tests de flux de travail « image à image » et « audio vers texte », et nous espérons partager davantage de résultats via notre blog dans un avenir proche.
Ce benchmark a été exécuté sur SaladCloud, le cloud GPU le plus abordable au monde pour l'inférence d'IA générative et d'autres applications gourmandes en calcul. Avec plus de 10 000 GPU à partir de 0,10 $/heure, SaladCloud propose les prix de GPU les plus bas du marché.
Si les factures cloud élevées et la disponibilité des GPU entravent votre croissance et votre rentabilité, SaladCloud peut vous aider avec des prix bas et une disponibilité à la demande.
Récemment, Daniel Sarfati , notre chef de produit, s'est entretenu avec Clay Pascal de LLM Utils (ressource LLM hautement recommandée), pour discuter de la manière de choisir le bon GPU pour une diffusion stable. Pour en savoir plus sur le choix du GPU pour Stable Diffusion, vous pouvez écouter l' interview audio complète .
Contactez-nous pour une démo personnalisée. Pour exécuter vos propres modèles ou des recettes préconfigurées de modèles populaires (Stable Diffusion, Whisper, BERT, etc.), consultez le portail SaladCloud pour un essai gratuit.
Également publié ici .