4 points par GN⁺ 2023-10-04 | 1 commentaires | Partager sur WhatsApp
  • Cet article traite de l’exécution de Stable Diffusion XL 1.0 sur un micro-ordinateur Raspberry Pi Zero 2 doté de 512 Mo de RAM.
  • Le défi consiste à faire tourner Stable Diffusion 1.5, un grand modèle Transformer de près d’un milliard de paramètres, sans augmenter l’espace de swap ni déporter les résultats intermédiaires sur disque.
  • L’auteur a créé OnnxStream, une petite bibliothèque d’inférence modifiable et orientée vers le bidouillage, conçue pour minimiser la consommation mémoire.
  • OnnxStream sépare le moteur d’inférence et le composant qui fournit les poids du modèle, ce qui permet différents types de chargement, de mise en cache et de préchargement des paramètres du modèle.
  • OnnxStream consomme 55 fois moins de mémoire que OnnxRuntime, tout en n’étant que 0,5 à 2 fois plus lent.
  • L’article inclut des images générées par une implémentation d’exemple de Stable Diffusion utilisant OnnxStream, avec différentes précisions pour le décodeur VAE.
  • L’implémentation d’exemple Stable Diffusion d’OnnxStream prend désormais en charge SDXL 1.0, qui coûte plus cher en calcul que SD 1.5 mais peut générer des images plus grandes.
  • OnnxStream peut exécuter SDXL 1.0 avec moins de 300 Mo de RAM, ce qui le rend adapté au Raspberry Pi Zero 2.
  • L’article présente des optimisations spécifiques à SDXL 1.0, notamment l’utilisation du décodage en tuiles pour réduire la consommation mémoire de 4,4 Go à 298 Mo.
  • Parmi les fonctionnalités d’OnnxStream figurent la séparation entre le moteur d’inférence et le WeightsProvider, l’attention slicing, la quantification dynamique et statique, ainsi que la prise en charge du FP16.
  • L’article fournit des instructions détaillées pour compiler l’exemple Stable Diffusion sur différents systèmes d’exploitation.
  • L’implémentation Stable Diffusion de sd.cpp repose sur deux autres projets et a été modifiée pour utiliser OnnxStream à la place de NCNN.

1 commentaires

 
GN⁺ 2023-10-04
Avis sur Hacker News
  • Un article sur l’utilisation de OnnxStream indique qu’il consomme 55 fois moins de mémoire que OnnxRuntime, tout en étant 0,5 à 2 fois plus lent.
  • Le compromis entre utilisation mémoire et temps d’inférence peut être avantageux dans certains scénarios et permettre des tailles de batch plus grandes avec la même quantité de RAM.
  • Certains utilisateurs utilisent Stable Diffusion sur MacBook Pro via invoke.ai, mais cherchent des recommandations pour une meilleure paramétrisation.
  • L’article mentionne qu’il faut beaucoup de temps pour générer une image avec cette méthode, et le Readme précise que cela prend 11 heures.
  • Le compromis entre utilisation mémoire et temps d’inférence peut être un frein pour les applications en temps réel ou quasi temps réel, où la latence est un facteur important.
  • Il existe une confusion autour de l’expression « 0,5 à 2 fois plus lent », ce qui suggère un manque de clarté dans la communication au sein de la communauté.
  • Certains utilisateurs recherchent un résumé des exigences minimales pour exécuter et générer avec les principaux modèles open source.
  • Les progrès rapides dans ce domaine sont soulignés, en particulier l’amélioration de la vitesse au cours des 6 à 18 derniers mois, jugée impressionnante.
  • Il est suggéré que les tentatives de réglementer les technologies de type Stable Diffusion pourraient être vaines, car ces modèles et leur infrastructure d’inférence pourraient être réduits à une taille permettant une exécution sur PS2.
  • Malgré le long temps de génération, certains utilisateurs sont impressionnés par le fait que Stable Diffusion puisse fonctionner sur un matériel comme le Pi Zero.