1 puntos por GN⁺ 2023-07-19 | 1 comentarios | Compartir por WhatsApp
  • Debes ejecutar la demo de Stable Diffusion WebGPU en la versión más reciente de Chrome con las flags "Experimental WebAssembly" y "Experimental WebAssembly JavaScript Promise Integration (JSPI)" habilitadas.
  • Cada paso de inferencia de la demo toma alrededor de 1 minuto, y ejecutar el decodificador VAE para generar una imagen requiere unos 10 segundos adicionales.
  • Si dejas DevTools abierto, la demo se vuelve aproximadamente 2 veces más lenta.
  • El modelo UNET usado en la demo se ejecuta solo en la CPU, y la pestaña del navegador puede congelarse, pero es un 10% más rápido que ejecutarlo en la GPU.
  • La cantidad mínima de pasos para obtener resultados aceptables en la demo es 20. Sin embargo, para fines de demostración, 3 pasos son suficientes.
  • Los archivos del modelo se almacenan en caché, así que no es necesario descargarlos cada vez que ejecutes la demo.
  • Si aparece el error "protobuf parsing failed", puedes ir a Application -> Storage en DevTools y borrar los datos del sitio.
  • Si aparece el error "sbox_fatal_memory_exceeded", significa que no hay suficiente RAM para ejecutar la demo. Puedes intentar recargar la pestaña o el navegador.
  • La demo fue posible al portar StableDiffusionPipeline de Python a JS y al parchear onnxruntime y emscripten+binaryen para permitir asignar y usar más de 4 GB de memoria.
  • Actualmente la demo no soporta multithreading y usa solo un núcleo de CPU, por eso es lenta. La falta de soporte para memoria de 64 bits mediante el constructor WebAssembly.Memory también es una limitación.
  • La demo se ejecuta en la GPU, pero webgpu y onnxruntime están en una etapa temprana, así que todavía faltan muchas implementaciones. Los datos se transfieren continuamente entre la GPU y la CPU a través de JS, lo que ralentiza el procesamiento. Cuando más tareas tengan kernels de JS, la demo será más rápida.
  • Puedes ejecutar la demo localmente usando el código disponible en GitHub.
  • Con el onnxruntime parcheado se pueden ejecutar LLMs grandes con transformers.js, pero están limitados a 8 GB de memoria. Con ese paquete se pueden cargar pesos de hasta aproximadamente 4 GB.
  • El autor ya había agregado antes aceleración por GPU a los bindings de node.js, así que planea enviar un pull request al repositorio de onnxruntime.

1 comentarios

 
GN⁺ 2023-07-19
Comentarios de Hacker News
  • El equipo de MLC ya implementó soporte para Stable Diffusion y modelos de lenguaje grandes.
  • Los navegadores han evolucionado hasta el punto de poder manejar tareas complejas como Stable Diffusion.
  • Para usar Stable Diffusion, se necesita la versión más reciente de Chrome con ciertas flags específicas activadas.
  • Stable Diffusion también se ha integrado en otros sitios web, como generadores de fondos personalizados.
  • Considera usar service workers para evitar que el hilo principal se congele durante procesos limitados por CPU.
  • Entre los casos de uso de Stable Diffusion está la generación de imágenes en tiempo real sin recargar la página.
  • Existe potencial para futuras aplicaciones como chatbots con WebGPU o minería de bitcoin durante el tiempo ocioso de la GPU.
  • Algunos usuarios están esperando hasta que WebGPU esté disponible en Firefox.
  • Se plantea la posibilidad de un internet sin anuncios.