La Forge

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

Rôle
Tout : corpus, tokeniseur, modèle, entraînement
Outils
  • PyTorch (MPS)
  • BPE
  • RoPE
  • RMSNorm
  • SwiGLU
Statut
En cours
Pertes d’entraînement et de validation sur 4 000 pas, et débit mesuré.
Pertes d’entraînement et de validation sur 4 000 pas, et débit mesuré.
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

  1. 01 · EntréeCorpus279 livres Gutenberg en français, nettoyés, séparés 98/2
  2. 02 · OutilTokeniseur BPENiveau octets, 16 384 jetons, 3,64 caractères par jeton
  3. 03 · ModèleTransformeurÉcrit de zéro : RoPE, RMSNorm, SwiGLU, embeddings liés
  4. 04 · OutilEntraînementAdamW, warmup puis cosinus, micro-lots de 8
  5. 05 · DonnéesSauvegardesTous les 1 000 pas, journal CSV, reprise
  6. 06 · SortieÉchantillonsTexte généré et courbes de perte

Étages suivants au programme : SFT et DPO, GRPO, puis service quantifié.

Fabrication 4 étapes

  1. Pré-entraînementFait : 4 000 pas, le 19/10/2026.
  2. SFT + DPOÀ venir : LoRA sur Qwen2.5-0.5B (un autre modèle, plus grand), DPO écrit à la main.
  3. GRPOÀ venir : renforcement à récompense vérifiable.
  4. ServiceÀ venir : GGUF, quantification, latences P50/P95.

Décisions le choix, la raison, l’alternative écartée

  1. D1
    Accumuler 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é.

  2. D2
    Sauvegarder 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.

  3. D3
    Un 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é.

  4. 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. »
Échantillon brut au pas 4 000 : la forme du français littéraire est apprise.

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.

01

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.

02

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.

03

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.