Ce qu'un Modèle de Langue Prédit
Un Moteur de Continuation Probabiliste
Un modèle de langue prend une séquence de tokens & assigne une distribution de probabilité sur le token qui vient ensuite. Fournissez-lui the cat sat on the & il produit des probabilités sur tout le vocabulaire : forte masse sur mat, floor, couch ; faible masse sur xylophone, Tuesday.
Échantillonner cette distribution, ajouter un token, & le renvoyer : cette boucle génère du texte token par token. Génération autorégressive, nommée ainsi car chaque étape régresse sur sa propre sortie précédente.
Trois nombres définissent un modèle de langage
Taille du vocabulaire (V). Combien de tokens distincts un modèle peut produire. ANDREA-12M utilise 4 353 tokens ; ANDREA-120M utilise 8 449.
Fenêtre de contexte (T). Combien de tokens rentrent dans un passage avant. Les modèles ANDREA utilisent T = 1 024.
Nombre de paramètres (P). Combien de poids appris se trouvent à l'intérieur. 12M, 120M et 480M nomment une famille par P.
Une famille de trois
| Variante | d_model | Têtes | Couches | Contexte | Params |
|---|---|---|---|---|---|
| ANDREA-12M | 384 | 12 | 6 | 1024 | 12,8M |
| ANDREA-120M | 768 | 12 | 12 | 1024 | ~120M |
| ANDREA-480M | 1536 | 24 | 16 | 1024 | ~480M |
Trois molettes de réglage : d_model (largeur de chaque vecteur interne), n_layer (profondeur des blocs transformer empilés), n_head (projections d'attention parallèles). Le vocabulaire et le contexte restent fixes dans la famille.
Lecture du tableau de la famille
Pourquoi le petit compte
La contrainte comme libération
Les grands modèles de langage avec des centaines de milliards de paramètres nécessitent des milliers de GPU, des ensembles de données propriétaires et des budgets d'entreprise. Peu de personnes peuvent en entraîner un. Peu de personnes peuvent en réparer un.
Un petit modèle de langage sur un seul GPU renverse cela. N'importe qui avec une 4090 (ou une 3060) peut reproduire ANDREA à partir de données ouvertes. La recette d'entraînement fait aussi office de fiche modèle. Code ouvert, poids ouverts, données ouvertes ; traçabilité complète en 72 heures de calcul.
Capacité vs Qualité
Les modèles plus petits ne peuvent pas mémoriser leur corpus d'entraînement. ANDREA-12M, avec 12,8M de paramètres, manque de capacité pour stocker du contenu factuel ; il apprend la structure des tours, la distribution du vocabulaire et la forme des réponses. ANDREA-120M, avec une capacité 10× supérieure, apprend le rappel factuel, la cohérence multi-paragraphes et l'étendue du domaine (vérifié par évaluation externe à 9,5/10 sur des échantillons de biologie et de traitement du signal).
Le point clé : la capacité fixe un plafond. Le curriculum décide si le plafond est atteint. Les activités 14-23 couvrent le curriculum. [TITLE decoder_only/]
Trois saveurs de Transformer
Encodeur, Décodeur, Les deux
Le Transformer original (Vaswani et al., 2017) incluait un encodeur & un décodeur, collés ensemble pour la traduction. Trois lignées architecturales descendent de cet article :
Encodeur uniquement (lignée BERT). Attention bidirectionnelle, pas de masque causal. Optimisé pour la classification, pas pour la génération. Un token voit à la fois son passé & son futur pendant l'entraînement.
Encodeur-décodeur (T5, BART). L'encodeur lit l'entrée ; le décodeur génère la sortie, en se référant à l'encodeur via une attention croisée. Utilisé pour la traduction, la summarisation.
Décodeur uniquement (GPT, ANDREA). Masque causal : chaque token ne voit que son passé. Entraîné à prédire le token suivant. La génération est gratuite ; l'entraînement & l'inférence partagent le même passage avant.
Pourquoi le Décodeur Uniquement Gagne sur un GPU
Trois raisons :
1. Objectif unique. La prédiction du token suivant fonctionne sur n'importe quel texte. Pas besoin de source/cible appariée.
2. Symétrie entraînement & inférence. Même passage avant, pas de logique de génération spéciale.
3. Simplicité mémoire. Pas d'attention croisée ; une pile de couches ; un flux d'activations.
ANDREA hérite du choix decoder-only de microGPT, qui l'a hérité de nanoGPT, qui l'a hérité de GPT-2. La lignée reste standard ; ce qui change réside dans la tokenisation, l'infrastructure d'entraînement, & le curriculum.
Pourquoi Decoder-Only pour ANDREA
Ce qui tient dans 24 GB
Octets Par Paramètre
Une RTX 4090 est livrée avec 24 GB de VRAM. L'entraînement d'ANDREA-12M a utilisé 1,4 GB. ANDREA-120M en a utilisé beaucoup plus. L'écart provient d'un simple exercice comptable : chaque paramètre apparaît plusieurs fois en mémoire pendant l'entraînement.
Pour chaque paramètre, l'entraînement conserve :
- Le poids lui-même (1× poids)
- Premier moment Adam (m) : même forme que le poids (1× poids)
- Deuxième moment Adam (v) : même forme que le poids (1× poids)
- Gradients : même forme que le poids (1× poids)
- Activations & temporaires : ~2-4× poids (varie selon le batch & contexte)
Total : ~6-8× le nombre de poids, en octets déterminés par la précision.
La Précision Multiplie Tout
| Précision | Octets/param | Total pour 120M poids | Notes |
|---|---|---|---|
| FP32 | 4 | 480 Mo | Base ; le plus sûr, le plus lent |
| FP16 | 2 | 240 Mo | cuBLAS, moitié de mémoire |
| FP8 E4M3 | 1 | 120 Mo | Cœurs tenseurs, risque NaN |
Multiplier par 6-8× pour l'empreinte complète à l'entraînement. ANDREA-120M s'entraîne confortablement en FP16 (~2 Go pour poids + optimiseur + grads) ; FP8 E4M3 divise le temps d'entraînement par deux sur les cœurs tenseurs RTX 4090.
L'activité 13 (grow_a_language_model_precision) détaille les compromis de précision FP.
Dimensionnement de l'état de l'optimiseur d'ANDREA-120M
Vingt-Cinq Activités
Deux Moitiés
Ce cours se divise clairement. La première moitié couvre ce que microGPT a enseigné au domaine : un transformateur qui s'exécute sur un seul GPU. La seconde moitié couvre la véritable contribution d'ANDREA : un curriculum qui apprend.
Moitié 1 : Un Transformateur sur Un GPU (activités 2-13)
| # | Activité | Progression |
|---|---|---|
| 2 | Tokeniseur de morphèmes Harris | segmentation distributionnelle, vocab 256+N+1 |
| 3 | Alignement tokenizer-diet | point de saturation, pourquoi 12M gaspillés 63,6 % |
| 4 | Embeddings & position | lookup token + position appris |
| 5 | Attention produit scalaire | Q·Kᵀ/√d, masque causal, softmax |
| 6 | Attention multi-têtes | divisions des têtes, projections parallèles |
| 7 | Bloc Transformer | MLP, résiduels, normalisation de couche |
| 8 | Entropie croisée & perplexité | log-vraisemblance, perte SMMA |
| 9 | Backprop dans CUDA personnalisé | règle de la chaîne à travers microgpt_cuda.cu |
| 10 | AdamW | décroissance de poids découplée ; pourquoi l'Adam vanilla a échoué |
| 11 | Échauffement LR + décroissance cosinus | rampe de 2000 étapes ; pourquoi un pic instantané détruit 120M |
| 12 | Limitation des gradients | norme L2 globale ; 3 noyaux CUDA |
| 13 | FP32 / FP16 / FP8 E4M3 | compromis de précision ; cœurs tenseurs |
Moitié 2 : Un Curriculum Qui Apprend (activités 14-24)
| # | Activité | Astuce |
|---|---|---|
| 14 | Multi-armed bandits | UCB1, exploration vs exploitation |
| 15 | Contrôle des dés par phases | phases 7/14/21/28/42, dés 1d3/1d4 |
| 16 | Attribution des récompenses & EMA | EMA de perte par source, mise à l'échelle 1000× |
| 17 | Planchers par source & pénalité d'époque | 1/(1+époques) empêche la mémorisation |
| 18 | Bonus de couverture | suivi au niveau document, fraîcheur 1.3× |
| 19 | Échauffement par curriculum | 7 sources chat/prose premières 20K étapes |
| 20 | Filtrage par forme, pas par caractères | has_system_prompt_shape() |
| 21 | Arrêt anticipé à cohérence fermée | bigram/trigram/word/char auto-halt |
| 22 | Point de contrôle, reprise, signaux | format, SIGTERM/SIGUSR1, continuité loss.json |
| 23 | Audit d'échantillon & notation externe | lecture d'une exécution, territoire 9.5/10 |
| 24 | De microGPT à ANDREA-120M | effondrement v1, corrections v2, patch v2.5, polissage v3 |
Plus un compagnon : geometry_of_andrea considère chaque couche comme une géométrie (espace d'intégration, attention comme projection, surface de perte, bandit comme une marche sur un simplexe discret).
Ordre suggéré
Les activités 2-13 permettent de construire un transformeur fonctionnel. Passez directement à la moitié 2 si vous avez déjà entraîné des transformeurs ; revenez quand la curiosité vous prendra.
Chaque activité est autonome autant que possible. Les références mathématiques renvoient aux activités précédentes par leur nom (voir activité 5 : attention scaled dot-product). Les références de code pointent vers microgpt/microgpt_cuda.cu & microgpt/training_proxy.py dans ~/git/uncloseai-cli/.