SmolGPT : implémentation PyTorch minimale pour entraîner un petit LLM depuis zéro
(github.com/Om-Alve)- Un projet simple d’entraînement de LLM basé sur PyTorch, conçu à des fins pédagogiques, qui applique un entraînement efficace et des techniques d’échantillonnage modernes
Fonctionnalités
- Base de code minimale : implémentée en PyTorch, sans abstractions complexes
- Architecture moderne : modèle GPT avec Flash Attention, RMSNorm, SwiGLU et techniques d’échantillonnage efficaces
- Fonctionnalités d’entraînement :
- précision mixte (
bfloat16/float16) - accumulation de gradients
- décroissance du taux d’apprentissage avec warmup
- weight decay et gradient clipping
- précision mixte (
- Prise en charge des jeux de données : traitement intégré du jeu de données TinyStories
- Tokenizer personnalisé : intégration de l’entraînement du tokenizer SentencePiece
Installation
- Python 3.8+
- PyTorch 2.0+ et CUDA
- GPU récent recommandé
Démarrage rapide 🚀
Option 1 : cycle complet d’entraînement
- Préparer le jeu de données
- Démarrer l’entraînement
- Générer du texte
Option 2 : utiliser un modèle préentraîné
- Télécharger les ressources
- Lancer l’inférence
Détails du modèle préentraîné
- Entraîné sur le jeu de données TinyStories
- Vocabulaire de 4096 tokens, transformeur à 8 têtes et 8 couches, dimension d’embedding de 512
- Entraîné pendant 18,5 heures sur environ 400 millions de tokens
- Perte de validation : 1.0491
Spécifications de la machine d’entraînement
- GPU : NVIDIA L4 Tensor Core
- vCPU : 16
- RAM : 64 GB
- VRAM : 24 GB
Remarque : cette implémentation a été conçue à des fins pédagogiques en s’inspirant des pratiques modernes d’entraînement des LLM. En environnement de production, il est recommandé d’augmenter la taille du modèle et du jeu de données.
1 commentaires
Avis sur Hacker News
Un utilisateur mentionne qu’en travaillant sur une implémentation de GPT en C, il a appris l’importance de la gestion de la mémoire et des données. Le projet est composé d’environ 1 500 lignes de code, et il partage un lien GitHub
Un autre utilisateur explique que l’étape suivante consiste à l’implémenter soi-même avec numpy. Il souligne qu’on peut commencer avec des abstractions puissantes, puis les retirer progressivement pour comprendre complètement le système
Un projet utilisant un notebook Google Colab est partagé, avec un temps d’exécution d’environ 2 heures sur un GPU A100. Il est mentionné que cela pourrait aussi fonctionner avec un compte gratuit
Il est expliqué qu’il existe sur GitHub plusieurs projets comme nanoGPT d’Andrej Karpathy, ainsi que d’autres projets implémentant le MoE
Un utilisateur demande s’il est possible d’entraîner un modèle spécifique sur un jeu de données précis et d’en tester les résultats. Il dit chercher un projet open source, souhaitant savoir si l’utilisation d’un GPU est possible, et vouloir un conteneur Docker pouvant être remplacé par un CPU
Un autre utilisateur partage son expérience d’implémentation avec son propre tokenizer multicanal. Il mentionne que le nom du protagoniste se répète souvent, au point de soupçonner un bug
Om Alve remercie en disant que le billet est devenu viral et que cela donne de la valeur à ses efforts
Il est mentionné qu’il est intéressant qu’une telle technologie puisse être implémentée en quelques centaines de lignes de code. Il est proposé d’essayer de deviner le nombre de lignes de code des modèles de pointe
Il est précisé que cela n’a pas de lien avec SmolLM, et un lien vers le blog de HuggingFace est partagé
Il est demandé si des exemples de jeux de données d’entraînement et de cas d’usage pourraient être partagés