Andrej Karpathy a discrètement publié microgpt.py sur GitHub Gists cette semaine — un seul fichier Python qui entraîne et exécute l'inférence d'un GPT en utilisant uniquement `os`, `math` et `random` de la bibliothèque standard. Pas de PyTorch, pas de NumPy, pas de TensorFlow, pas de GPU. Le gist a dépassé 5 000 étoiles et 2 400 forks en quelques jours. Le cadrage de Karpathy dans la docstring du fichier est inhabituellement absolu : « La manière la plus atomique d'entraîner et d'exécuter l'inférence d'un GPT en Python pur, sans dépendances. Ce fichier est l'algorithme complet. Tout le reste n'est qu'efficacité. » Dans une interview sur le podcast No Priors, il ajoute l'origine : il l'a construit entièrement à la main parce qu'aucun agent LLM qu'il a essayé n'a pu distiller l'essence de l'entraînement GPT en un seul fichier clair.
L'architecture suit GPT-2 avec trois simplifications délibérées : RMSNorm au lieu de LayerNorm, aucun biais sur les couches linéaires, et ReLU au lieu de GeLU. Les paramètres par défaut sont minuscules — 1 couche, embeddings de 16 dimensions, 4 têtes d'attention (4 dimensions chacune), block size 16 — taillés pour entraîner au niveau du caractère sur le `names.txt` classique de Karpathy issu de makemore. L'autograd est une classe `Value` de 40 lignes (essentiellement le pattern micrograd), un backward pass par tri topologique, et un optimiseur Adam inline avec décroissance linéaire du LR sur 1 000 étapes. L'inférence échantillonne 20 noms hallucinés. Le tout tient à l'écran si tu as un moniteur assez large. Les forks ont déjà produit un port NumPy qui tourne environ 250× plus vite que l'autograd scalaire, une version matricielle Julia, un port JavaScript qui tourne dans le navigateur à ~4 000 paramètres, et un projet microgpt-denovo qui démontre qu'un agent peut maintenant reconstruire ce fichier à partir d'une spec haut niveau — bouclant la boucle que Karpathy disait que ses agents n'arrivaient pas à fermer au départ.
Le signal écosystème ici, c'est la pédagogie comme moat. La plupart de l'infrastructure de pretraining aujourd'hui est des couches d'abstraction — PyTorch sur CUDA sur des kernels spécifiques au matériel — qui cachent l'algorithme au praticien qui en dépend. microgpt.py est la dé-abstraction : ça rend visible en même temps le forward pass du transformer, la règle de chaîne en backward, le scaling RMSNorm, l'attention multi-tête, l'append au KV-cache, le softmax avec le truc max-subtract, et les buffers de moments d'Adam. Pour quiconque fine-tune un Llama, débogue un training run, ou écrit des kernels CUDA custom, ce seul écran est plus utile que la moitié des chapitres de manuel sur les transformers. Le pattern de forks communautaires — benchmarks, ports alt-langage, reconstructions par agents — est aussi une expérience en temps réel sur si le code éducatif lié aux LLM est devenu une couche de coordination en soi.
Pour le builder de lundi matin : clone le gist, exécute `python microgpt.py`, et regarde un transformer converger sur la génération de noms au niveau du caractère en quelques minutes sur CPU. Si tu as déjà livré du code contre l'API d'OpenAI ou Anthropic sans avoir tracé un forward pass de bout en bout, c'est la façon la moins chère possible de corriger ça. Si tu entraînes des modèles, donne-le à tes ingénieurs juniors comme exercice de lecture — ça enlève le voile du framework qui rend la question « qu'est-ce que cette loss fait? » difficile à répondre. L'interview no-priors accompagnante est aussi là où Karpathy explique pourquoi il pense que la capacité actuelle des agents plafonne encore sous le seuil d'écrire ce fichier from scratch sans prompt — un marqueur de capacité utile à suivre.
