microgpt
(karpathy.github.io)- Une architecture de modèle de langage minimaliste qui implémente l’ensemble du processus d’entraînement et d’inférence d’un modèle GPT dans un fichier unique en pur Python de 200 lignes
- Inclut l’ensemble : jeu de données, tokenizer, moteur d’autodifférentiation, réseau de neurones de type GPT-2, optimiseur Adam, ainsi que les boucles d’entraînement et d’inférence
- Entraîne un jeu de données de prénoms pour générer de nouveaux noms, et met en lumière les principes fondamentaux de GPT grâce à une implémentation maison de l’autograd et de l’architecture Transformer
- Contrairement aux LLM à grande échelle, fonctionne en pur Python sans dépendances en ne conservant que l’essence algorithmique
- Comprendre microgpt permet de comprendre la structure algorithmique fondamentale des grands modèles comme ChatGPT
Aperçu de microgpt
- microgpt est une implémentation GPT minimaliste écrite en 200 lignes de code Python, sans dépendance à des bibliothèques externes
- Elle inclut le jeu de données, le tokenizer, l’autodifférentiation, une architecture proche de GPT-2, l’optimiseur Adam, ainsi que les boucles d’entraînement et d’inférence
- Il s’agit d’un projet artistique créé par Karpathy pour simplifier les LLM jusqu’à leur essence, dans la continuité de micrograd, makemore et nanogpt
- Le code complet est disponible sur GitHub Gist, sur une page web et dans Google Colab
Jeu de données
- Utilise un fichier texte contenant environ 32 000 noms, un par ligne
- Chaque nom est considéré comme un document, et le modèle apprend ce motif pour générer de nouveaux noms
- Exemples de génération après entraînement : kamon, ann, karai, jaire, vialan
Tokenizer
- Un tokenizer simple basé sur les caractères qui attribue un identifiant entier à chaque caractère unique
- Inclut les lettres a–z et le token BOS (beginning of sequence), soit 27 tokens au total
- Chaque document est encadré sous la forme
[BOS, e, m, m, a, BOS]pour l’entraînement
Autodifférentiation (Autograd)
- La classe
Valuesuit des valeurs scalaires et leurs gradients tout en construisant un graphe d’opérations - Elle stocke les dérivées locales (local gradient) des opérations de base comme l’addition, la multiplication, la puissance, le logarithme, l’exponentielle et ReLU
- La méthode
backward()exécute la rétropropagation en appliquant la règle de la chaîne - Le même algorithme que
.backward()de PyTorch est implémenté manuellement au niveau scalaire
Initialisation des paramètres
- Le modèle possède environ 4 192 paramètres
- Ils comprennent la table d’embedding, les poids d’attention, les poids du MLP et la projection de sortie
- Chaque paramètre est initialisé avec des valeurs aléatoires suivant une distribution gaussienne
Architecture du modèle
- Une forme simplifiée de l’architecture GPT-2, utilisant RMSNorm, ReLU et des connexions résiduelles (residual connection)
- Principaux composants :
- Étape d’embedding : addition des embeddings de tokens et de position
- Attention multi-tête : calcul des vecteurs Q, K, V puis utilisation des informations des tokens passés via le cache KV
- Bloc MLP : réseau feedforward à 2 couches pour le calcul local
- Étape de sortie : génération des logits pour la taille de vocabulaire (27)
- Le cache KV reste actif même pendant l’entraînement, et la rétropropagation traverse le cache
Boucle d’entraînement
- À chaque étape, un document est sélectionné puis tokenisé sous la forme
[BOS, ... , BOS] - Le modèle prédit la probabilité du token suivant et calcule la perte d’entropie croisée
- Après calcul des gradients avec
loss.backward(), les paramètres sont mis à jour avec l’optimiseur Adam - Le taux d’apprentissage suit une décroissance linéaire (linear decay)
- En 1 000 étapes, la perte diminue d’environ 3,3 → 2,37
Inférence
- Une fois l’entraînement terminé, de nouveaux noms sont générés en commençant par le token BOS
- À chaque étape, le token suivant est échantillonné selon les probabilités softmax
- La valeur de temperature permet d’ajuster la créativité (plus basse = plus conservatrice, plus élevée = plus variée)
- Exemples de sortie : kamon, ann, karai, jaire, vialan, karia, yeran, anna
Exécution
- L’exécution est possible avec Python seul (
python train.py) - L’entraînement se termine en environ une minute, avec affichage de la perte à chaque étape
- Exécution identique également possible dans un notebook Colab
Étapes d’évolution du code
- Extension progressive de
train0.pyàtrain5.py- Bigram → MLP → Autograd → Attention → Multi-head → Adam
- Chaque étape peut être consultée dans les révisions de build_microgpt.py du Gist
Différences avec les vrais LLM
- Données : microgpt utilise 32K noms, contre des milliers de milliards de tokens pour les vrais LLM
- Tokenizer : au niveau caractère vs. sous-mots basés sur BPE
- Autograd : Python scalaire vs. opérations sur tenseurs GPU
- Architecture : 4K paramètres vs. des centaines de milliards de paramètres
- Entraînement : répétition sur document unique vs. entraînement à grande échelle en batch et en précision mixte
- Optimisation : Adam simple vs. hyperparamètres et scheduling finement optimisés
- Post-traitement : évolution vers une forme type ChatGPT via des étapes SFT et RL
- Infrastructure d’inférence : distribution GPU, gestion du cache KV, quantification, speculative decoding, etc.
Résumé de la FAQ
- Le modèle est une fonction mathématique qui transforme des tokens d’entrée en probabilités du token suivant
- Il n’y a pas de véritable « compréhension », seulement une apprentissage de règles statistiques pour effectuer des prédictions
- La même boucle de prédiction de tokens que ChatGPT est implémentée ici sous une forme réduite
- Les « hallucinations » sont un résultat naturel de l’échantillonnage probabiliste
- C’est lent, mais cela reproduit intégralement l’algorithme central des LLM
- Pour de meilleurs résultats, on peut ajuster le nombre d’étapes d’entraînement, la taille du modèle et le jeu de données
- En remplaçant le jeu de données, il est possible d’apprendre divers motifs comme des noms de villes, des noms de Pokémon ou de la poésie
microgpt est un modèle pédagogique et expérimental qui implémente tous les algorithmes essentiels des LLM à leur plus petite échelle, et constitue un exemple qui révèle entièrement le principe de fonctionnement des grands modèles de langage.
Aucun commentaire pour le moment.