Présentation du projet

Le dépôt Show HN propose un guide détaillé pour créer un modèle de langage de grande taille (LLM) en utilisant uniquement Node.js et TypeScript. Chaque composant, du jeu de données au boucle d’entraînement, est développé à la main, sans recours à des bibliothèques propriétaires. L’objectif affiché est de rendre visible le fonctionnement interne d’un LLM, en évitant les boîtes noires typiques des frameworks de deep learning.

Architecture et implémentation

Le cœur du projet repose sur une implémentation du mécanisme d’attention, suivi d’un bloc transformeur conforme à la description originale de Vaswani et al. (2017). Le code source décrit la construction d’un attention matrix à partir de requêtes, clés et valeurs, puis la normalisation via softmax. Cette étape est suivie par la création d’un bloc transformeur qui empile plusieurs têtes d’attention et ajoute des couches de normalisation et de feed‑forward. Le tout est écrit en TypeScript, ce qui impose une typage strict et facilite la lecture du flux de données.

Le projet intègre également un dataloader capable de lire un jeu de données texte, de le tokeniser et de le convertir en tenseurs numériques compatibles avec les opérations de matrice. Le format de stockage reste simple (fichiers texte ou JSON), ce qui permet de contrôler la pré‑traitement et la gestion de la mémoire.

Entraînement et exécution

Le guide inclut une boucle d’entraînement complète : initialisation des poids, propagation avant, calcul de la perte (cross‑entropy), rétro‑propagation et mise à jour des gradients via l’optimiseur Adam. Toutes ces étapes sont exécutées sur le runtime JavaScript, mais le projet exploite l’API WebGPU via le package @node-llm/playground pour accélérer les opérations matricielles sur le GPU. Les démonstrations interactives, intégrées dans le texte, montrent comment les tenseurs sont déplacés vers le GPU, comment les kernels sont compilés et comment les performances varient selon la taille du modèle.

Le modèle final correspond à une version réduite de GPT, avec un nombre limité de couches et de têtes d’attention, afin de rester exécutable sur des machines de bureau. Le processus d’entraînement est itératif et montre clairement l’impact du taux d’apprentissage, du batch size et du nombre d’époques sur la perte et la perplexité.

Limites et perspectives

Bien que le projet réussisse à reproduire les étapes fondamentales d’un LLM, plusieurs contraintes apparaissent. Le runtime JavaScript impose une surcharge de gestion de la mémoire qui limite la taille maximale du modèle. De plus, l’accès à WebGPU reste dépendant du support matériel et du pilote, ce qui peut réduire la portabilité. Le guide ne fournit pas de benchmark quantitatif comparant les temps d’entraînement à ceux obtenus avec PyTorch ou TensorFlow, ce qui rend difficile l’évaluation de l’efficacité réelle.

En dépit de ces limites, le projet offre une plateforme pédagogique solide pour explorer les mécanismes internes d’un LLM, tester des variantes d’architecture et expérimenter avec le pipeline complet, du pré‑traitement des données à la génération de texte.