Présentation de Würstchen Diffusion rapide pour la génération d’images
Würstchen Rapid image generation presentation
Qu’est-ce que Würstchen?
Würstchen est un modèle de diffusion dont le composant conditionnel de texte fonctionne dans un espace latent d’images hautement compressé. Pourquoi est-ce important? La compression des données peut réduire les coûts de calcul à la fois pour l’entraînement et l’inférence de plusieurs ordres de grandeur. L’entraînement sur des images de 1024×1024 est bien plus coûteux que l’entraînement sur du 32×32. Habituellement, d’autres travaux utilisent une compression relativement faible, dans la plage de 4x – 8x de compression spatiale. Würstchen pousse cela à l’extrême. Grâce à sa conception novatrice, il atteint une compression spatiale de 42x! Cela n’avait jamais été vu auparavant, car les méthodes courantes ne parviennent pas à reconstruire fidèlement des images détaillées après une compression spatiale de 16x. Würstchen utilise une compression en deux étapes, que nous appelons Stage A et Stage B. Stage A est un VQGAN, et Stage B est un Autoencodeur de Diffusion (plus de détails peuvent être trouvés dans l’article). Ensemble, Stage A et B sont appelés le Décodeur, car ils décodent les images compressées dans l’espace des pixels. Un troisième modèle, Stage C, est appris dans cet espace latent hautement compressé. Cet entraînement nécessite une fraction des calculs utilisés pour les modèles performants actuels, tout en permettant une inférence moins coûteuse et plus rapide. Nous appelons Stage C le Prior.
Pourquoi un autre modèle texte-vers-image?
Eh bien, celui-ci est assez rapide et efficace. Les principaux avantages de Würstchen proviennent du fait qu’il peut générer des images beaucoup plus rapidement que des modèles comme Stable Diffusion XL, tout en utilisant beaucoup moins de mémoire! Donc, pour tous ceux d’entre nous qui n’ont pas de A100 sous la main, cela sera utile. Voici une comparaison avec SDXL sur différentes tailles de lots:
- Naviguer dans le paysage des startups en robotique Un guide complet pour l’identification du marché, la gestion de la chaîne d’approvisionnement et le développement technologique
- Un bref guide sur l’intelligence artificielle en marketing
- Comment changer de carrière pour devenir un spécialiste en science des données à 30 ans ?
En plus de cela, un autre avantage très significatif de Würstchen réside dans la réduction des coûts de formation. Würstchen v1, qui fonctionne à 512×512, a nécessité seulement 9 000 heures de GPU pour l’entraînement. Comparer cela aux 150 000 heures de GPU dépensées pour Stable Diffusion 1.4 suggère que cette réduction de coût de 16x profite non seulement aux chercheurs lors de la réalisation de nouvelles expériences, mais ouvre également la porte à davantage d’organisations pour former de tels modèles. Würstchen v2 a utilisé 24 602 heures de GPU. Avec des résolutions allant jusqu’à 1536, cela reste 6x moins cher que SD1.4, qui n’a été entraîné qu’à 512×512.
Vous pouvez également trouver une vidéo explicative détaillée ici:
Comment utiliser Würstchen?
Vous pouvez l’essayer en utilisant la démo ici:
Sinon, le modèle est disponible via la bibliothèque Diffusers, vous pouvez donc utiliser l’interface avec laquelle vous êtes déjà familier. Par exemple, voici comment exécuter une inférence en utilisant le AutoPipeline
:
import torch
from diffusers import AutoPipelineForText2Image
from diffusers.pipelines.wuerstchen import DEFAULT_STAGE_C_TIMESTEPS
pipeline = AutoPipelineForText2Image.from_pretrained("warp-ai/wuerstchen", torch_dtype=torch.float16).to("cuda")
caption = "Chat anthropomorphe habillé en pompier"
images = pipeline(
caption,
height=1024,
width=1536,
prior_timesteps=DEFAULT_STAGE_C_TIMESTEPS,
prior_guidance_scale=4.0,
num_images_per_prompt=4,
).images
Sur quelles tailles d’image Würstchen fonctionne-t-il?
Würstchen a été entraîné sur des résolutions d’image entre 1024×1024 et 1536×1536. Nous observons parfois également de bons résultats à des résolutions telles que 1024×2048. N’hésitez pas à l’essayer. Nous avons également observé que le Prior (Stage C) s’adapte extrêmement rapidement aux nouvelles résolutions. Donc, le raffiner à 2048×2048 devrait être peu coûteux en termes de calcul.
Modèles sur le Hub
Tous les points de contrôle peuvent également être consultés sur le Hub Huggingface. Plusieurs points de contrôle, ainsi que des démonstrations futures et des poids de modèle, peuvent être trouvés là-bas. Pour l’instant, il y a 3 points de contrôle disponibles pour le Prior et 1 point de contrôle pour le Décodeur. Consultez la documentation pour savoir où se trouvent les points de contrôle et ce que sont les différents modèles Prior et à quoi ils peuvent être utilisés.
Intégration de Diffusers
Parce que Würstchen est entièrement intégré à diffusers, il est automatiquement livré avec divers avantages et optimisations. Cela inclut :
- Utilisation automatique de l’attention accélérée SDPA de PyTorch 2, comme décrit ci-dessous.
- Prise en charge de l’implémentation de l’attention flash xFormers, si vous avez besoin d’utiliser PyTorch 1.x au lieu de 2.
- Déchargement du modèle, pour déplacer les composants inutilisés vers le CPU lorsqu’ils ne sont pas utilisés. Cela permet d’économiser de la mémoire avec un impact de performance négligeable.
- Déchargement séquentiel du CPU, pour les situations où la mémoire est vraiment précieuse. L’utilisation de la mémoire sera minimisée, au détriment d’une inférence plus lente.
- Pondération des prompts avec la bibliothèque Compel.
- Prise en charge du périphérique mps sur les Mac Apple Silicon.
- Utilisation de générateurs pour la reproductibilité.
- Valeurs par défaut raisonnables pour l’inférence afin de produire des résultats de haute qualité dans la plupart des situations. Bien sûr, vous pouvez ajuster tous les paramètres comme vous le souhaitez !
Technique d’optimisation 1 : Attention Flash
À partir de la version 2.0, PyTorch a intégré une version hautement optimisée et peu gourmande en ressources du mécanisme d’attention appelée torch.nn.functional.scaled_dot_product_attention ou SDPA. Selon la nature de l’entrée, cette fonction exploite plusieurs optimisations sous-jacentes. Ses performances et son efficacité mémoire surpassent le modèle d’attention traditionnel. Remarquablement, la fonction SDPA reflète les caractéristiques de la technique d’attention flash, comme le souligne l’article de recherche Fast and Memory-Efficient Exact Attention with IO-Awareness rédigé par Dao et son équipe.
Si vous utilisez Diffusers avec PyTorch 2.0 ou une version ultérieure, et que la fonction SDPA est accessible, ces améliorations sont appliquées automatiquement. Commencez par configurer torch 2.0 ou une version plus récente en suivant les directives officielles !
images = pipeline(caption, height=1024, width=1536, prior_timesteps=DEFAULT_STAGE_C_TIMESTEPS, prior_guidance_scale=4.0, num_images_per_prompt=4).images
Pour une analyse approfondie de la manière dont diffusers exploite SDPA, consultez la documentation.
Si vous utilisez une version de PyTorch antérieure à 2.0, vous pouvez toujours obtenir une attention à efficacité mémoire en utilisant la bibliothèque xFormers :
pipeline.enable_xformers_memory_efficient_attention()
Technique d’optimisation 2 : Compilation Torch
Si vous recherchez une augmentation supplémentaire des performances, vous pouvez utiliser torch.compile. Il est préférable de l’appliquer à la fois sur le modèle principal du Prior et du Décodeur pour obtenir la plus grande augmentation des performances.
pipeline.prior_prior = torch.compile(pipeline.prior_prior , mode="reduce-overhead", fullgraph=True)
pipeline.decoder = torch.compile(pipeline.decoder, mode="reduce-overhead", fullgraph=True)
Gardez à l’esprit que l’étape d’inférence initiale prendra beaucoup de temps (jusqu’à 2 minutes) pendant que les modèles sont en cours de compilation. Après cela, vous pouvez simplement exécuter normalement l’inférence :
images = pipeline(caption, height=1024, width=1536, prior_timesteps=DEFAULT_STAGE_C_TIMESTEPS, prior_guidance_scale=4.0, num_images_per_prompt=4).images
Et la bonne nouvelle est que cette compilation n’est une exécution unique. Après cela, vous êtes prêt à bénéficier de façon constante d’inférences plus rapides pour les mêmes résolutions d’images. L’investissement initial en temps de compilation est rapidement compensé par les avantages de vitesse ultérieurs. Pour une plongée plus profonde dans torch.compile et ses subtilités, consultez la documentation officielle.
Ressources
- Vous trouverez de plus amples informations sur ce modèle dans la documentation officielle de diffusers.
- Tous les points de contrôle peuvent être trouvés sur le hub.
- Vous pouvez essayer la démo ici.
- Rejoignez notre serveur Discord si vous souhaitez discuter de futurs projets ou même contribuer avec vos propres idées !
We will continue to update IPGirl; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- Traitement du langage naturel dans les applications iOS fonctionnalités, cas d’utilisation de Siri et processus
- LLMOps Modèles d’ingénierie de prompt de production avec Hamilton
- La méthode Capture-ReCapture
- Vous voulez améliorer votre prévision à court terme ? Essayez la détection de la demande.
- Le Langage des Emplacements Évaluation de la Compétence de Géocodage de l’IA Générative
- Voici les premiers intervenants pour le sommet des affaires AiX cet automne.
- Optimisation bayésienne et Hyperband (BOHB) Réglage des hyperparamètres avec un exemple