Ys-17M

Un petit modèle de langage français, entraîné depuis zéro sur un seul GPU.

Ys-17M est le premier modèle publié par AmauryLC. Il compte 17 135 616 paramètres et a été préentraîné sur 500 millions de tokens de textes français. Ce projet de laboratoire sert à explorer concrètement l'apprentissage d'un modèle de langage : prédiction du prochain token, influence des données et évolution des résultats pendant l'entraînement.

Le nom 17M désigne la taille du réseau. Les 500M tokens correspondent à la quantité de tokens cibles effectivement utilisée pendant l'entraînement.

Ys-17M est un modèle de base destiné à compléter du texte. Cette version n'a pas reçu d'entraînement au dialogue ou au suivi de consignes. Ses générations restent expérimentales et peuvent être répétitives, incohérentes ou factuellement fausses.

Caractéristiques

Élément Valeur
Auteur AmauryLC
Langue d'entraînement Français
Architecture Transformer causal de type GPT, décodeur seul
Initialisation Poids aléatoires, entraînement depuis zéro
Paramètres 17 135 616, avec partage des poids d'entrée et de sortie
Couches / têtes d'attention 6 / 6
Dimension cachée / MLP 384 / 1 536
Fenêtre de contexte 512 tokens
Positions Embeddings positionnels appris
Normalisation / activation Pre-LayerNorm / GELU
Tokenizer BPE ByteLevel, vocabulaire de 16 384 tokens
Tokens d'entraînement 500 000 000
Checkpoint publié best.pt, étape 30 520, à 500 000 000 tokens
Format des poids Checkpoint PyTorch personnalisé, tenseurs FP32, environ 68,6 Mo

Les réglages complets sont dans config.json. Le code de l'architecture est fourni dans model.py.

Essayer le modèle

Le dépôt fournit generate.py, un script autonome qui charge le modèle avec PyTorch et son tokenizer. Il utilise les fichiers présents dans le même dossier et ne demande aucun corpus d'entraînement.

Dans un environnement Python, installer les dépendances, puis télécharger le dépôt dans un nouveau dossier :

python -m pip install "torch==2.10.0" "tokenizers==0.22.2" "huggingface_hub==1.31.0"
hf download AmauryLC/Ys-17M --local-dir Ys-17M
cd Ys-17M
python generate.py --prompt "Il était une fois" --max-new-tokens 80

Le script choisit automatiquement CUDA si disponible, sinon le CPU. Pour imposer le CPU ou essayer un décodage glouton :

python generate.py --device cpu --prompt "La mer était calme" --temperature 0 --max-new-tokens 40

Par défaut, la génération utilise temperature=0.8, top_k=50, top_p=0.95 et une graine de 42. Le texte affiché inclut l'amorce. La sortie peut varier selon le matériel et les versions des bibliothèques. Le chargement et la génération ont été vérifiés avec Python 3.12.2, PyTorch 2.10.0 et Tokenizers 0.22.2.

Le checkpoint utilise une implémentation PyTorch propre à ce projet : il ne se charge pas directement avec AutoModelForCausalLM.from_pretrained() ou pipeline() de Transformers. La génération ci-dessus est exécutée localement.

Données et tokenizer

Les données ont été lues progressivement depuis trois jeux de données Hugging Face. Les proportions sont définies en tokens d'entraînement :

Source Sous-ensemble Part visée Tokens effectivement appris
FineWeb2 — HuggingFaceFW fra_Latn 75 % 375 000 064
Wikipédia — Wikimedia 20231101.fr 20 % 100 000 000
French-PD-Books — PleIAs default 5 % 24 999 936
Total 100 % 500 000 000

Ces compteurs mesurent les tokens utilisés par le réseau ; les compteurs du cache peuvent être légèrement supérieurs en raison de la préparation en avance. Les révisions exactes des trois sources sont enregistrées dans config.json.

Le tokenizer a été appris séparément sur 5 millions de caractères, répartis en 3,75M pour FineWeb2, 1M pour Wikipédia et 0,25M pour les livres, puis figé pour l'entraînement du réseau. Sa provenance est décrite dans tokenizer_metadata.json.

Ses tokens spéciaux sont <|pad|> (0), <|bos|> (1), <|eos|> (2) et <|unk|> (3). Le pipeline d'entraînement exclut les documents de moins de 80 caractères et mélange les documents dans un tampon borné. Les documents longs sont traités par passages en conservant la suite du texte.

Entraînement

L'entraînement s'est déroulé en trois phases successives, avec prolongation du même modèle et conservation de son état d'apprentissage :

Phase Intervalle de tokens cumulés Warmup enregistré
1 0 → 100 000 000 2 000 000 tokens
2 100 000 000 → 300 000 000 4 000 000 tokens
3 300 000 000 → 500 000 000 4 000 000 tokens

L'historique de cette expérience enregistre un taux maximal de 0.0006, suivi d'une décroissance cosinus vers 0.00006, dans chaque phase. Les prolongations repartent du taux atteint par la phase précédente, puis effectuent le warmup enregistré. Ce parcours diffère d'un calendrier unique planifié dès le départ sur 500M tokens.

Réglage Valeur
Objectif Prédire le prochain token, entropie croisée
Optimiseur AdamW, betas (0.9, 0.95)
Micro-lot / accumulation de gradients 4 séquences / 8 micro-lots
Tokens par mise à jour complète 16 384 (4 × 8 × 512)
Weight decay / dropout 0,1 / 0,1
Limite de norme des gradients 1,0
Graine 42
Matériel 1 × NVIDIA GeForce RTX 4080
Précision de calcul Précision mixte BF16
Environnement enregistré Python 3.12.2, PyTorch 2.10.0+cu126, CUDA 12.6
Durée cumulée enregistrée par la boucle Environ 4 h 50 min (17 428 secondes)

Cette durée est celle enregistrée par le programme ; elle ne représente pas le temps total de préparation du projet, des données et du tokenizer. Le rapport final est d'environ 29,18 tokens d'entraînement par paramètre.

Résultats de validation

Le checkpoint publié est celui sélectionné pour la plus faible loss de validation. Dans cette expérience, il correspond aussi à l'étape finale, après 500M tokens. Les valeurs ci-dessous proviennent de evaluation-best.json.

Source de validation Loss ↓ Perplexité ↓ Bits par octet ↓ Précision du prochain token ↑
FineWeb2 français 3,5826 35,97 1,2802 34,30 %
Wikipédia français 3,3681 29,02 1,2715 37,01 %
Livres français 3,9912 54,12 1,7438 31,26 %
Agrégation à poids égaux par source 3,6473 38,37 1,4318 34,19 %

La validation porte sur 199 documents, 251 877 tokens de texte et 900 000 caractères, avec 300 000 caractères par source. Elle utilise des fenêtres de contexte de 512 tokens et un pas de 256 ; chaque token cible du texte est compté une fois. Le protocole est documents-bos-text-only-stride-v1, profil 1333bc2bf9c3a7cf0f4d.

Les scores agrégés donnent le même poids aux trois sources, indépendamment du mélange d'entraînement 75/20/5. La perplexité agrégée est l'exponentielle de la loss moyenne ; les bits par octet et la précision sont des moyennes par source. La précision mesure la proportion de prochains tokens correctement prédits en premier choix.

Les documents de validation et de test ont été réservés avant l'apprentissage du tokenizer et du réseau. Leur exclusion est vérifiée par empreinte du document complet après normalisation des espaces. Cette vérification ne détecte pas les quasi-doublons ni les reprises partielles de textes.

Ces résultats servent à décrire cette validation interne, utilisée pour sélectionner le checkpoint. Aucun résultat sur le jeu de test réservé ni sur un benchmark externe n'est publié dans cette version. Les perplexités ne sont comparables entre modèles qu'avec un tokenizer, des textes et un protocole identiques. Les textes d'évaluation et le programme d'entraînement complet ne sont pas inclus dans ce dépôt.

Usages et limites

Ys-17M peut servir à expérimenter la complétion de textes français, à étudier un petit Transformer ou à construire des expériences d'adaptation. Son intérêt est pédagogique et expérimental.

  • La petite taille du réseau et son budget d'entraînement limitent la cohérence des textes longs. Des répétitions et des erreurs factuelles apparaissent dans les générations de suivi.
  • Le modèle prolonge une amorce de texte ; il n'a pas été entraîné à tenir une conversation ou à répondre fidèlement à des instructions.
  • La génération utilise au plus les 512 derniers tokens disponibles. Dépasser cette longueur fait perdre l'accès direct au début du texte.
  • Les corpus web et les livres peuvent transmettre des biais, du contenu inapproprié et des erreurs de numérisation. Aucun entraînement spécifique de modération n'est documenté pour cette version.
  • Les capacités de raisonnement, de programmation et les performances multilingues n'ont pas été évaluées. Les scores présentés ne constituent pas une mesure générale de fiabilité.

Fichiers du dépôt

Fichier Rôle
best.pt Poids du checkpoint sélectionné et métadonnées associées
model.py Implémentation PyTorch de l'architecture utilisée
generate.py Script de génération autonome
tokenizer.json Tokenizer figé
tokenizer_metadata.json Paramètres et provenance de l'apprentissage du tokenizer
config.json Architecture, sources, hyperparamètres et historique des phases
evaluation-best.json Résultats et protocole de validation du checkpoint publié
latest_metrics.json Dernières métriques et compteurs de l'entraînement

best.pt ne contient pas l'état de l'optimiseur nécessaire à une reprise exacte de l'entraînement.

Licence et attribution

Aucune licence de réutilisation du modèle ou du code n'est précisée dans ce dépôt à ce stade. Les sources de données et leurs conditions respectives sont accessibles via les liens ci-dessus.

Pour référencer cette expérience : AmauryLC, « Ys-17M », 2026, en indiquant le dépôt Hugging Face et la révision utilisée.

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Datasets used to train AmauryLC/Ys-17M