Projet IA - Un LLM construit from scratch, de la donnée brute à un entraînement reproductible
Tokenizer, pipeline de données, modèle et boucle d'entraînement résiliente, pensés pour être rejoués à l'identique et repris après une interruption
Contexte
Dans le cadre de ma montée en compétences, j'ai construit une ia micro, un petit modèle de langage de type Transformer, écrit en PyTorch sans dépendre d'une bibliothèque tierce pour son cœur : attention, normalisation, tokenizer, optimiseur et boucle d'entraînement sont écrits à la main.
L'objectif n'était pas d'obtenir un modèle performant, mais de construire la chaîne complète qu'exige un entraînement sérieux : des données versionnables, une configuration validée, un entraînement reproductible, des sauvegardes fiables et des métriques exploitables.
Avant de dépenser du GPU, j'ai donc validé toute la chaîne sur une version réduite, ia_micro (5,3 millions de paramètres), entraînée en local.
Les grandes étapes du projet
Principes d'architecture
Deux règles ont structuré tout le projet :
- séparation des responsabilités : chaque module a une seule fonction et ignore les autres ;
- configuration pilotant tout : aucun hyperparamètre dans le code, tout est dans des fichiers YAML.
Un Transformer écrit from scratch
Le modèle est assemblé à partir de briques indépendantes, chacune avec son fichier et ses tests :
Entraînement de bas niveau et test de santé
J'ai écrit moi-même les composants de l'entraînement :
- fonction de perte sur le token suivant ;
- planning de learning rate (warmup puis décroissance en cosinus) ;
- optimiseur AdamW avec deux groupes de paramètres ;
- accumulation de gradient, clipping, précision mixte avec mise à l'échelle des gradients.
Tokenizer BPE écrit from scratch
Le tokenizer fonctionne au niveau des octets : il peut donc encoder n'importe quel texte sans jamais échouer, et le décodage restitue exactement le texte d'origine (aller-retour vérifié par test).
Prochaine étape : industrialisation sur AWS (à venir)
L'infrastructure cible est définie, mais pas encore mise en œuvre :
- entraînement du modèle de 136 millions de paramètres sur une instance GPU Spot ;
- détection de l'interruption Spot par interrogation périodique du service de métadonnées ;
- stockage des données et des checkpoints sur S3 ;
- suivi des expériences avec MLflow ;
- conteneurisation avec Docker et publication dans un registre ECR.
Ces éléments sont planifiés. Le projet est construit pour qu'ils s'ajoutent sans réécrire l'existant : la reprise après interruption, les checkpoints et la configuration sont déjà en place.