Articles · Fonctionnement interne des IA · série terminée
Smallem : un LLM en Rust et CUDA, à partir de zéro
Cette série raconte la construction d'un modèle de langage de type GPT, écrit en Rust, dont chaque calcul sur GPU est fait par un kernel écrit à la main. Elle suit l'ordre dans lequel le projet a été construit : chaque article ajoute une brique, la teste, puis mesure ce qu'elle apporte.
Sommaire
-
1
Le projet et ses règles
Le but, les contraintes, la route
-
2
Un premier kernel sur le GPU
L'environnement CUDA Rust et l'exemple vecadd
-
3
Des données et un premier modèle
Le corpus, les tokens, le bigramme, la perte
-
4
Un tenseur sur CPU
Formes, pas, broadcasting, matmul, softmax
-
5
Les mêmes opérations sur GPU
Les kernels, un par opération
-
6
La rétropropagation
Un autograd à tape, vérifié par différences finies
-
7
Un premier réseau qui apprend
Paramètres, couches, optimiseurs, MLP
-
8
L'attention et le Transformer
L'architecture GPT, pièce par pièce
-
9
Entraîner, sauvegarder, générer
Un vrai entraînement, et GPT-2 chargé dans notre code
-
10
Des sous-mots et un entraînement à l'échelle
Le tokeniseur BPE et un modèle de 30 millions de paramètres
-
11
Rendre le GPU rapide
Matmul par tuiles, Tensor Cores, cache de génération
-
12
Trois pièces modernes, et comment mesurer une idée
RMSNorm, SwiGLU, RoPE, et le bruit d'un entraînement
-
13
L'attention latente : compresser le cache
MLA, le RoPE découplé, et un résultat négatif disséqué
-
14
Un mélange d'experts
Aiguillage, experts clairsemés, équilibrage de la charge
-
15
Prédire plus loin, optimiser autrement
La prédiction multi-token et l'optimiseur Muon
-
16
À durée égale
Les comparaisons refaites à la minute, Muon rendu rentable, deux idées d'après DeepSeek-V4
-
17
L'attention fusionnée
Le softmax en ligne, des kernels sur Tensor Cores, et la fin du mur de mémoire
-
18
Bilan
Ce qui marche, ce qui reste, ce qu'on a appris
Les chiffres en un coup d'œil
Perte de validation, en nats par octet de texte (plus c'est bas, mieux le modèle prédit) :
| Modèle | Article | Perte |
|---|---|---|
| Hasard uniforme | 3 | 5,55 |
| Bigramme | 3 | 2,53 |
| MLP à contexte fixe | 7 | 1,90 |
| GPT de 0,8 million de paramètres, octets | 9 | 1,36 |
| GPT de 11 millions de paramètres, octets | 9 | 1,20 |
| GPT de 30 millions de paramètres, sous-mots | 10 | 0,94 |
Temps d'un pas d'entraînement du plus gros modèle sur une RTX 3090 : 652 ms au départ, 157 ms à la fin de l'article 11.
Les articles 12 à 15 comparent des variantes d'architecture sur un budget court et fixe (16 minutes). De 1,000 pour l'architecture GPT-2, la perte passe à 0,959 avec RoPE, à 0,940 avec un mélange d'experts, à 0,925 avec l'optimiseur Muon, et à 0,900 en entraînant simplement 2,3 fois plus longtemps.
L'article 16 reprend ces comparaisons à durée égale. Une seule idée y bat la référence : Muon, une fois son orthogonalisation réécrite, avec 0,882 en 36 minutes. L'article 17 écrit l'attention fusionnée : 16 % de débit en plus, et des contextes de 8 192 positions dans 7 Gio.
Bibliographie
Les travaux originaux sur lesquels s'appuie la série. Chacun est aussi cité dans l'article où son idée est expliquée.
Les fondations :
- Bengio et al., A Neural Probabilistic Language Model, 2003 → article 7.
- Loshchilov et Hutter, Decoupled Weight Decay Regularization, 2017 : AdamW → article 7.
- Vaswani et al., Attention Is All You Need, 2017 : le Transformer → article 8.
- Radford et al., Language Models are Unsupervised Multitask Learners, 2019 : GPT-2 → article 9.
- Sennrich, Haddow et Birch, Neural Machine Translation of Rare Words with Subword Units, 2016 : le BPE → article 10.
Les pièces modernes :
- Zhang et Sennrich, Root Mean Square Layer Normalization, 2019 → article 12.
- Shazeer, GLU Variants Improve Transformer, 2020 : SwiGLU → article 12.
- Su et al., RoFormer: Enhanced Transformer with Rotary Position Embedding, 2021 : RoPE → article 12.
DeepSeek :
- DeepSeek-AI, DeepSeek-V2, 2024 : l'attention latente → article 13.
- Shazeer et al., Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer, 2017 → article 14.
- Dai et al., DeepSeekMoE, 2024 : experts fins et partagés → article 14.
- Wang et al., Auxiliary-Loss-Free Load Balancing Strategy for Mixture-of-Experts, 2024 → article 14.
- DeepSeek-AI, DeepSeek-V3 Technical Report, 2024 : équilibrage par biais, prédiction multi-token → articles 14 et 15.
- Gloeckle et al., Better & Faster Large Language Models via Multi-token Prediction, 2024 → article 15.
- Keller Jordan, Muon: An optimizer for hidden layers in neural networks, 2024 → article 15.
- DeepSeek-AI, DeepSeek-V3.2, 2025, et DeepSeek-V4, 2026 : attention clairsemée, Muon, mHC → article 15.
Après DeepSeek-V4 :
- Practical Efficiency of Muon for Pretraining, 2025 → article 16.
- Spectral Allocation: Why Muon Outperforms Adam, and How to Improve Muon, 2026 : SAMuon, et les coefficients à quatre itérations → article 16.
- NorMuon: Making Muon more efficient and scalable, 2025 → article 16.
- Scaling Muon for Diffusion Transformers, 2026 : le Muon périodique par lignes → article 16.
- Rapport technique de Nanbeige 4.2, 2026 : les couches traversées deux fois → article 16.
- Sebastian Raschka, Recent Developments in LLM Architectures : le partage des clés de Gemma 4, seule source lue sur ce point → article 16.
- Compressed Convolutional Attention, 2025 : ZAYA1 → article 16.
- Yang, Kautz et Hatamizadeh, Gated Delta Networks: Improving Mamba2 with Delta Rule, 2024 → article 16.
L'attention fusionnée :
- Milakov et Gimelshein, Online normalizer calculation for softmax, 2018 : le softmax en ligne → article 17.
- Dao et al., FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness, 2022 → article 17.
- Dao, FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning, 2023 → article 17.