Meio Bit » Robótica e IA » WebGPU — mais que só mais uma API

WebGPU — mais que só mais uma API

WebGPU é uma API para desenvolver aplicações acessando de um navegador, os recursos de hardware de uma GPU arretada, permitindo aplicações impossíveis rodando no browser

31/08/2024 às 19:18

WebGPU é, a rigor, uma API (Application Programming Interface) para processamento gráfico, principalmente em navegadores web. Ainda é considerada experimental e não funciona em todo navegador, mas já faz mágica.

WebGPU é o bicho! (Crédito: Flux)

Muitos, muitos anos atrás eu passei o dia estudando uma nova tecnologia. Cheguei em casa, montei o circo, esperei minha ex chegar. Chamei “vem ver uma coisa”. Na tela do PC, uma página HTML comum. Uma tabela com alguns dados, um campo de entrada. Mudei um valor, cliquei no botão, a tabela se alterou. Sem reload.

Ela metaforicamente pegou um crucifixo tentando me exorcizar, acusando de bruxaria e pacto demoníaco. Na época era uma atitude razoável. Eu havia usado um controle ActiveX para violar uma regra sacrossanta: páginas HTML são estáticas.

Hoje qualquer página muda dinamicamente, não há nada demais, raramente uma página força um reload completo, mesmo assim há coisas que ainda parecem bruxaria. WebGPU é uma delas.

WebGPU – Breve história

Antigamente, lá nos primórdios, quando um programa precisava usar um recurso gráfico, acessava diretamente o hardware. Ou seja: O software precisava identificar (ou ser informado) do modelo da placa gráfica e suas capacidades. E escrever drivers para cada um dos modelos existentes no mercado.

Era um inferno, e quando as primeiras GPUs surgiram, isso só complicou.

Começaram a surgir então as APIs como OpenGL, da Silicon Graphics, DirectX, da Microsoft, e outras. Uma API dessas funciona como uma camada de abstração. Você quer desenhar um ponto no meio da tela? Não precisa saber a resolução, modelo de GPU, nada. Você usa a API, pega as dimensões, divide por dois, usa a função de plotar um ponto na tela com os valores X, Y da conta anterior, the end.

Com o tempo essas APIs foram se sofisticando, o DirectX, por exemplo, engloba dezenas de APIs secundárias, de controle de mídia a controle de, bem, controles como joysticks e gamepads. A evolução foi tão grande que atingiram um platô. Hoje a versão estável é a DirectX 12 Ultimate, lançada em 2014, a última evolução da DirectX 12 inicial de 2014. A última versão principal anterior, DirectX 11, saiu em 2009.

Hoje as principais APIs gráficas são:

  1. DirectX 12 (Microsoft): Usada principalmente no Windows para jogos e aplicações multimídia.
  2. Vulkan (Khronos Group): Uma API multiplataforma conhecida por oferecer acesso de baixo nível à GPU, proporcionando alto desempenho.
  3. Metal (Apple): Uma API gráfica para macOS e iOS que oferece acesso direto e otimizado à GPU.
  4. OpenGL (Khronos Group): Uma API multiplataforma amplamente usada, embora esteja sendo gradualmente substituída pelo Vulkan.

A WebGPU vem correndo por fora, com uma premissa poderosa: dar acesso, via browser, aos recursos da GPU, incluindo capacidade de computação.

Isso permite rodar, direto do browser, aplicações sem a complicação de instalar ambientes virtuais, Python, Pytorch, Docker e similares. Sem preocupação com módulos e componentes incompatíveis, eternas atualizações e forks.

WebGPU tem a vantagem de excelente performance, o que possibilita coisas insanas como o povo que portou o Unreal Engine 5 para... browsers. É como se você dormisse com os antigos joguinhos em Flash, e acordasse com um console de última geração no seu navegador.

Claro, o destaque mesmo é na área das aplicações “sérias”, que dão a um aplicativo rodando 100% no Browser, o poder da GPU (céus, pareço o Doutor Octopus)!

Um bom exemplo é esta demonstração de um algoritmo de remoção de fundo de imagens. No screenshot, algumas imagens escolhidas aleatoriamente da Internet.

Exemplo de remoção de fundo de imagens, com fotos aleatórias da Internet (Crédito: Meio Bit)

Outro: Lembra do Whisper, aquela aplicação de IA para transcrever áudios, gerando arquivos em texto? Sem instalar nada, rodando direto no seu navegador, acesse este link aqui.

Use a URL ou suba um arquivo local -pode ser um vídeo- e veja a magia acontecer, em tempo real, direto do seu navegador.

Whisper rodando no navegador (Crédito: Meio Bit)

Stable Diffusion? Gerando imagens? Sim, dá pra implementar em WebGPU, acesse este site de exemplo. Só não se anime, ele usa o Stable Diffusion 1.5, então as imagens são mais simples. Há outras implementações com versões mais modernas, se você quiser procurar.

Funciona bem melhor que isso, acredite (Crédito: Meio Bit)

Chat com um Large Language Model? Também é possível. Ou mesmo com um pequeno. O Secret Llama é um site que demonstra o uso de WebGPU para rodar inferência de um LLM, ou em português: Ele carrega um modelo e executa uma IA para você bater papo, consultar, etc, tudo rodando no seu navegador. No GitHub do projeto você acessa o código-fonte, se quiser olhar debaixo do capô.

Um Mini-ChatGPT para chamar de seu (Crédito: Meio Bit)

As desvantagens do WebGPU

Já dizia Buda: Excetuando o motorista e o trocador, tudo na vida é passageiro. As aplicações WebGPU, como toda aplicação web, são transientes, efêmeras, e somem para o lindo quando você fecha o navegador.

Isso significa que a cada vez que você abrir uma dessas aplicações, ela irá recarregar os arquivos com os modelos, e estamos falando de vários Gigabytes, no caso dos LLMs maiores e do Stable Diffusion.

Isso apresenta um pênalti bem alto em termos de tempo e consumo de banda. Se você estiver mobile então, isso pode doer, e muito.

Provavelmente serão desenvolvidas extensões para WebGPU manter arquivos em cache de forma mais eficiente, o que viabilizará aplicações mais sérias.

O desenvolvimento experimental continuará sendo feito em Python principalmente, por causa da flexibilidade e agilidade, mas com a evolução da especificação da WebGPU (disponível neste link do W3.org) muita coisa boa virá por aí.

A outra desvantagem é que WebGPU por enquanto só roda no Edge e no Chrome, e somente em versão desktop, mas como sempre, é só uma questão de tempo.

Leia mais sobre: , , .

relacionados


Comentários