Após seis anos de desenvolvimento, o WebGPU está prestes a ser lançado na maioria dos principais navegadores da web. Isso é enorme: os aplicativos da web agora têm acesso quase nativo à GPU, com a capacidade adicional de sombreadores de computação.
WebGPT é uma implementação JS e HTML simples de um modelo de transformador, destinado a ser uma prova de conceito e também um recurso educacional. O WebGPT foi testado para funcionar com modelos de até 500 M de parâmetros, embora provavelmente possa suportar muito mais com testes/otimização adicionais.
2020 M1 Mac: 3ms/token em parâmetros de 5M com precisão f32.
2020 M1 Mac: 30ms/token em parâmetros de 117M com precisão de f32.
2020 M1 Mac: 70ms/token em parâmetros de 377M com precisão de f32.
2020 M1 Mac: 120ms/token em parâmetros de 775M com precisão f32.
1.5B está funcionando, mas instável, ficando em torno de 1000ms/token devido a ineficiências.
Executar o WebGPT é extremamente simples, pois é apenas um conjunto de arquivos HTML + JS. Como o WebGPU ainda está em processo de lançamento, você precisará abri-lo com um navegador compatível. Atualmente, o WebGPU está disponível no Chrome v113, mas a maneira mais direta de garantir a funcionalidade adequada é instalar o Chrome Canary ou Edge Canary.
Incluí dois modelos diferentes: um modelo de brinquedo GPT-Shakespeare (que está muito mal treinado, haha) e um GPT-2 117M. Consulte main.js para obter mais informações sobre como executar esses modelos. Se você deseja importar modelos personalizados, dê uma olhada em misc/conversion_scripts.
Se você quiser experimentar o WebGPT, visite o site de demonstração aqui KMeans.org. Geralmente, recomendo clonar o repositório e executá-lo localmente, apenas porque carregar os pesos remotamente é significativamente mais lento.
Nota: Você precisará usar o Git LFS para baixar os arquivos do modelo, após clonar o repositório.
Quando comecei este projeto, eu não tinha ideia de como os transformadores funcionavam ou como implementá-los (ou GPUs ou kernels matmul ou WebGPU ou tokenização), então a série de Andrej Karpathy sobre redes neurais e construção de GPT do zero foi inestimável: o Youtube de Andrej. Também usei alguns códigos do repositório nanoGPT: nanoGPT.
Copiei da implementação do tokenizer GPT-3 da OpenAI pela LatitudeGames em Javascript: GPT-3-Encoder.