1 points par GN⁺ 2023-07-19 | 1 commentaires | Partager sur WhatsApp
  • Il faut exécuter la démo WebGPU de Stable Diffusion avec les flags « Experimental WebAssembly » et « Experimental WebAssembly JavaScript Promise Integration (JSPI) » activés dans la dernière version de Chrome.
  • Chaque étape d’inférence de la démo prend environ 1 minute, et l’exécution supplémentaire du décodeur VAE pour générer une image prend environ 10 secondes.
  • Si DevTools reste ouvert, la démo devient environ 2 fois plus lente.
  • Le modèle UNET utilisé dans la démo s’exécute uniquement sur le CPU, et l’onglet du navigateur peut se figer, mais il est 10 % plus rapide qu’une exécution sur le GPU.
  • Le nombre minimal d’étapes pour obtenir un résultat acceptable dans la démo est de 20. Cependant, à des fins de démonstration, 3 étapes suffisent.
  • Les fichiers du modèle sont mis en cache, il n’est donc pas nécessaire de les télécharger à chaque exécution de la démo.
  • Si l’erreur « protobuf parsing failed » survient, vous pouvez aller dans Application -> Storage dans DevTools pour effacer les données du site.
  • Si l’erreur « sbox_fatal_memory_exceeded » survient, cela signifie qu’il n’y a pas assez de RAM pour exécuter la démo. Vous pouvez essayer de recharger l’onglet ou le navigateur.
  • La démo a été rendue possible en portant StableDiffusionPipeline de Python vers JS, et en modifiant onnxruntime ainsi que emscripten+binaryen pour permettre l’allocation et l’utilisation de plus de 4 Go de mémoire.
  • La démo est actuellement lente, car elle ne prend pas en charge le multithreading et n’utilise qu’un seul cœur CPU. L’absence de prise en charge de la mémoire 64 bits via le constructeur WebAssembly.Memory constitue également une limite.
  • La démo s’exécute sur le GPU, mais webgpu et onnxruntime en sont encore à leurs débuts, si bien que de nombreux éléments ne sont pas encore implémentés. Les données transitent en permanence entre le GPU et le CPU via JS, ce qui ralentit le traitement. À mesure que davantage d’opérations disposeront de kernels JS, la démo deviendra plus rapide.
  • Il est possible d’exécuter la démo en local avec le code disponible sur GitHub.
  • En utilisant l’onnxruntime modifié, il est possible d’exécuter de grands LLMs avec transformers.js, mais avec une limite de 8 Go de mémoire. Ce package permet de charger jusqu’à environ 4 Go de poids.
  • L’auteur a déjà de l’expérience dans l’ajout de l’accélération GPU aux bindings node.js et prévoit donc de soumettre une pull request au dépôt onnxruntime.

1 commentaires

 
GN⁺ 2023-07-19
Commentaires sur Hacker News
  • L’équipe MLC a déjà mis en place la prise en charge de Stable Diffusion et des grands modèles de langage.
  • Les navigateurs ont évolué au point de pouvoir gérer des tâches complexes comme Stable Diffusion.
  • Pour utiliser Stable Diffusion, il faut une version récente de Chrome avec certains flags activés.
  • Stable Diffusion a aussi été intégré à d’autres sites web, comme des générateurs d’arrière-plan personnalisés.
  • Envisagez d’utiliser des service workers pour éviter que le thread principal ne se bloque pendant les processus limités par le CPU.
  • Parmi les cas d’usage de Stable Diffusion, on trouve la génération d’images en temps réel sans rechargement de page.
  • Il existe un potentiel pour de futures applications, comme des chatbots WebGPU ou le minage de bitcoins pendant les temps d’inactivité du GPU.
  • Certains utilisateurs attendent que WebGPU soit disponible sur Firefox.
  • La possibilité d’un Internet sans publicité est également évoquée.