La Forge
Un petit modèle de langue français (16,9 M de paramètres), écrit et entraîné de zéro

- paramètres
- 16,9 M
- jetons, 279 livres du domaine public
- 51,6 M
- perte de validation au pas 4 000
- 3,80
- par pas sur GPU Apple
- 1,1–1,4 s
- Le problème
- Maîtriser toute la chaîne d’un modèle de langue, du corpus au service, sans cloud et sur un portable de 16 Go.
- Pour qui
- Projet de recherche personnel : montrer la maîtrise de bout en bout attendue d’un ingénieur IA.
- Le résultat
- Étage 1 terminé : 16,9 M de paramètres pré-entraînés sur 51,6 M de jetons, perte de validation 3,80 au pas 4 000.
Contexte
Faire la chaîne complète d’un modèle de langue sur un MacBook 16 Go, sans cloud : pré-entraîner, puis aligner (SFT, DPO, GRPO), puis servir en mesurant débits et latences.
Ce que j’ai construit
- Corpus Gutenberg français nettoyé, séparé 98/2.
- Tokeniseur BPE au niveau octets, 16 384 jetons (3,64 caractères par jeton).
- Transformeur écrit de zéro : RoPE, RMSNorm, SwiGLU, embeddings liés.
- Boucle avec sauvegardes, reprise, journal CSV et échantillonneur.
Architecture 6 briques
- 01 · EntréeCorpus279 livres Gutenberg en français, nettoyés, séparés 98/2
- 02 · OutilTokeniseur BPENiveau octets, 16 384 jetons, 3,64 caractères par jeton
- 03 · ModèleTransformeurÉcrit de zéro : RoPE, RMSNorm, SwiGLU, embeddings liés
- 04 · OutilEntraînementAdamW, warmup puis cosinus, micro-lots de 8
- 05 · DonnéesSauvegardesTous les 1 000 pas, journal CSV, reprise
- 06 · SortieÉchantillonsTexte généré et courbes de perte
Étages suivants au programme : SFT et DPO, GRPO, puis service quantifié.
Fabrication 4 étapes
- Pré-entraînementFait : 4 000 pas, le 19/10/2026.
- SFT + DPOÀ venir : LoRA sur Qwen2.5-0.5B (un autre modèle, plus grand), DPO écrit à la main.
- GRPOÀ venir : renforcement à récompense vérifiable.
- ServiceÀ venir : GGUF, quantification, latences P50/P95.
Décisions le choix, la raison, l’alternative écartée
- D1Accumuler le gradient en micro-lots de 8, avec purge périodique du cache MPS.
Logits d’environ 1 Go par pas et cache MPS menaient le processus à 11 Go : mémoire divisée par quatre, calcul identique.
ÉcartéLe lot complet de 32 d’un coup : 17–19 s par pas, mesuré.
- D2Sauvegarder tous les 1 000 pas et prévoir la reprise.
Quand la machine s’est mise en veille au pas 3 750, l’entraînement a repris depuis le pas 3 000.
ÉcartéUn entraînement d’un seul tenant, à refaire en cas d’arrêt.
- D3Un tokeniseur BPE au niveau octets, entraîné sur le corpus.
3,64 caractères par jeton sur le français littéraire, aller-retour exact vérifié.
- D4Écrire le modèle de zéro, en PyTorch seul.
Chaque brique est comprise et contrôlée : perte initiale de 9,65, conforme à ln 16 384 ≈ 9,70.
ÉcartéPartir d’une bibliothèque de modèles existante.
Résultats
« En l’an de grâce, un homme de raison vint à la ville et le trouva toujours comme un autre. »
Livrables 4
- Code complet : téléchargement du corpus, tokeniseur, modèle, boucle d’entraînement, échantillonneur.
- Courbe de perte (entraînement et validation) et débit mesuré sur 4 000 pas.
- Échantillons bruts au pas 4 000.
- Journaux du diagnostic mémoire, conservés.
Environnement
Matériel et conditions de mesure
- Pré-entraîné sur MacBook Pro 16 Go, GPU Apple (MPS) : 1,1 à 1,4 s par pas, environ 1 h 20 de calcul cumulé.
- Diagnostic mémoire : accumulation de gradient en micro-lots de 8, mémoire divisée par quatre, calcul identique.
- Reprise sur sauvegarde validée en conditions réelles : après une mise en veille au pas 3 750, l’entraînement repart du pas 3 000.
Reproduire commandes du README
Code privé : accès en lecture sous accord de confidentialité, ou démo en direct de 30 minutes. Demander l’accès →
P=~/Documents/ComfyUI/.venv/bin/python
$P corpus/telecharger.py --objectif-mo 200
$P corpus/preparer.py
$P tokeniseur/entrainer.py
$P train/entrainer.py --pas 4000 --micro 8
$P train/entrainer.py --reprendre train/sortie/dernier.pt
$P train/echantillonner.py --invite "Il était une fois"- Environ 1 h 20 de calcul cumulé sur GPU Apple (MPS), 1,1 à 1,4 s par pas.
- Code et documents versionnés ; corpus et sorties régénérés par les scripts.
Ce que ce projet change pour vous
Le même savoir-faire, sur votre sujet.
Former vos équipes
J’ai écrit chaque brique d’un LLM : je peux expliquer à vos équipes ce qui se passe réellement dans un modèle, chiffres à l’appui.
Entraîner sous contrainte
Diagnostic mémoire, reprise sur sauvegarde, journal de chaque pas : la même méthode pour entraîner ou affiner un modèle sur votre matériel.
Juger un modèle sans illusion
Distinguer ce qu’un modèle imite (la forme) de ce qu’il sait (le sens) : une lecture utile avant de lui confier une tâche.