1 Punkte von GN⁺ 2023-07-19 | 1 Kommentare | Auf WhatsApp teilen
  • Das Stable-Diffusion-WebGPU-Demo muss in der neuesten Version von Chrome mit aktivierten Flags für „Experimentelles WebAssembly“ und „Experimentelle WebAssembly JavaScript Promise Integration (JSPI)“ ausgeführt werden.
  • Jeder Inferenzschritt des Demos dauert etwa 1 Minute, und für die Ausführung des VAE-Decoders zur Bilderzeugung werden zusätzlich etwa 10 Sekunden benötigt.
  • Wenn DevTools geöffnet ist, wird das Demo etwa doppelt so langsam.
  • Das im Demo verwendete UNET-Modell läuft nur auf der CPU; der Browser-Tab kann einfrieren, ist aber 10 % schneller als die Ausführung auf der GPU.
  • Die minimale Anzahl an Schritten für akzeptable Ergebnisse im Demo beträgt 20. Zu Demonstrationszwecken reichen jedoch 3 Schritte aus.
  • Die Modelldateien werden zwischengespeichert, sodass sie nicht bei jeder Ausführung des Demos erneut heruntergeladen werden müssen.
  • Wenn der Fehler „protobuf parsing failed“ auftritt, können Sie in DevTools unter Application -> Storage die Site-Daten löschen.
  • Wenn der Fehler „sbox_fatal_memory_exceeded“ auftritt, steht nicht genügend RAM zur Verfügung, um das Demo auszuführen. Sie können versuchen, den Tab oder den Browser neu zu laden.
  • Das Demo wurde ermöglicht, indem StableDiffusionPipeline von Python nach JS portiert und onnxruntime sowie emscripten+binaryen gepatcht wurden, damit mehr als 4 GB Speicher zugewiesen und genutzt werden können.
  • Derzeit unterstützt das Demo kein Multithreading und verwendet nur einen CPU-Kern, weshalb es langsam ist. Eine weitere Einschränkung ist die fehlende Unterstützung für 64-Bit-Speicher über den WebAssembly.Memory-Konstruktor.
  • Das Demo läuft auf der GPU, aber webgpu und onnxruntime befinden sich noch in einem frühen Stadium, daher ist vieles noch nicht implementiert. Daten werden fortlaufend über JS zwischen GPU und CPU übertragen, was die Verarbeitung verlangsamt. Wenn mehr Aufgaben JS-Kernel erhalten, wird das Demo schneller werden.
  • Das Demo kann lokal mit dem auf GitHub verfügbaren Code ausgeführt werden.
  • Mit dem gepatchten onnxruntime lassen sich große LLMs mit transformers.js ausführen, allerdings begrenzt auf 8 GB Speicher. Mit diesem Paket können Gewichte von bis zu etwa 4 GB geladen werden.
  • Der Autor hat zuvor bereits GPU-Beschleunigung zu den node.js-Bindings hinzugefügt und plant daher, einen Pull Request für das onnxruntime-Repository einzureichen.

1 Kommentare

 
GN⁺ 2023-07-19
Hacker-News-Kommentare
  • Das MLC-Team hat bereits Unterstützung für Stable Diffusion und große Sprachmodelle implementiert.
  • Browser haben sich so weit entwickelt, dass sie komplexe Aufgaben wie Stable Diffusion verarbeiten können.
  • Für die Nutzung von Stable Diffusion ist die neueste Version von Chrome mit aktivierten bestimmten Flags erforderlich.
  • Stable Diffusion wurde auch in andere Websites integriert, etwa in Generatoren für benutzerdefinierte Hintergründe.
  • Erwägen Sie die Nutzung eines Service Workers, um zu verhindern, dass der Main Thread bei CPU-gebundenen Prozessen hängen bleibt.
  • Zu den Anwendungsfällen von Stable Diffusion gehört die Echtzeit-Bilderzeugung ohne Neuladen der Seite.
  • Es gibt Potenzial für zukünftige Anwendungen wie WebGPU-Chatbots oder Bitcoin-Mining während ungenutzter GPU-Zeit.
  • Einige Nutzer warten darauf, dass WebGPU in Firefox verfügbar wird.
  • Ein Internet ohne Werbung wird als Möglichkeit ins Spiel gebracht.