diffusers.js WebGPU demo: Uma Abordagem Avançada para Geração de Imagens
O diffusers.js WebGPU demo traz uma série de recursos impressionantes para os usuários interessados em geração de imagens. Primeiramente, é necessário ter o Chrome mais recente com certas flags habilitadas, como a "Experimental WebAssembly" e a "Experimental WebAssembly JavaScript Promise Integration (JSPI)". Além disso, é recomendado o uso do Chrome Canary 119 ou mais recente, e para suporte a FP16, o Chrome Canary 121 ou superior. Também é essencial ter um navegador com suporte a WebGPU.
Este demo é construído com o diffusers.js e inclui várias funcionalidades interessantes. Por exemplo, existem configurações como Prompt, Negative Prompt, Number of inference steps, Guidance Scale e Seed, que permitem aos usuários controlar aspectos da geração de imagem.
Após baixar o modelo pressionando o botão correspondente, ele será armazenado no cache do navegador e todas as configurações acima se tornarão editáveis. Caso ocorram erros, como o protobuf parsing failed, é recomendado abrir o DevTools, ir para Application -> Storage e pressionar "Clear site data". Se o erro for sbox_fatal_memory_exceeded, isso significa que não há memória RAM suficiente para executar o SD. Nesse caso, pode-se tentar recarregar a guia ou o navegador.
Para tornar isso possível, foi necessário portar o StableDiffusionPipeline do python para o JS e fazer modificações no onnxruntime e em emscripten+binaryen (WebAssembly compiler toolchain) para suportar a alocação e uso de mais de 4GB de memória. Além disso, foram consideradas as especificações do WebAssembly e o motor V8.