Après six années de développement, WebGPU est sur le point d'être lancé sur la plupart des principaux navigateurs Web. C'est énorme : les applications Web ont désormais un accès quasi natif au GPU, avec la capacité supplémentaire des shaders de calcul.
WebGPT est une implémentation Vanilla JS et HTML d'un modèle de transformateur, conçue comme une preuve de concept ainsi qu'une ressource pédagogique. WebGPT a été testé pour fonctionner avec des modèles allant jusqu'à 500 M de paramètres, mais pourrait probablement en prendre en charge beaucoup plus avec des tests/optimisations plus poussés.
Mac M1 2020 : 3 ms/jeton avec des paramètres de 5 M avec une précision de f32.
Mac M1 2020 : 30 ms/jeton à 117 M de paramètres avec une précision f32.
Mac M1 2020 : 70 ms/jeton à 377 M de paramètres avec une précision f32.
Mac M1 2020 : 120 ms/jeton à 775 M de paramètres avec une précision f32.
1,5B fonctionne mais instable, se situant autour de 1 000 ms/jeton en raison d'inefficacités.
L'exécution de WebGPT est remarquablement simple, car il ne s'agit que d'un ensemble de fichiers HTML + JS. Étant donné que WebGPU est encore en cours de publication, vous devrez l'ouvrir avec un navigateur compatible. WebGPU est actuellement disponible sur Chrome v113, mais le moyen le plus simple de garantir un bon fonctionnement consiste à installer Chrome Canary ou Edge Canary.
J'ai inclus deux modèles différents : un modèle jouet GPT-Shakespeare (qui est très sous-entraîné haha) et le GPT-2 117M. Voir main.js pour plus d'informations sur la façon d'exécuter ces modèles. Si vous souhaitez importer des modèles personnalisés, jetez un œil à misc/conversion_scripts.
Si vous souhaitez essayer WebGPT, visitez le site Web de démonstration ici KMeans.org. Je recommanderais généralement de cloner le dépôt et de l'exécuter localement, simplement parce que le chargement des poids à distance est nettement plus lent.
Remarque : Vous devrez utiliser Git LFS pour télécharger les fichiers de modèle, après avoir cloné le référentiel.
Quand j'ai commencé ce projet, je n'avais aucune idée du fonctionnement des transformateurs ni de la façon de les implémenter (ou des GPU ou des noyaux matmul ou du WebGPU ou de la tokenisation d'ailleurs), donc la série d'Andrej Karpathy sur les réseaux neuronaux et la construction de GPT à partir de zéro étaient inestimables : le Youtube d'Andrej. J'ai également utilisé du code du référentiel nanoGPT : nanoGPT.
J'ai copié l'implémentation par LatitudeGames du tokenizer GPT-3 d'OpenAI en Javascript : GPT-3-Encoder.