eclipse
Appareil de distillation au niveau octet pour Ornith 1.5 9B. Cibles EOT exactes, un étudiant de 48 Mo et une étude de faisabilité reproductible.
Transforme la distribution de jetons d'un enseignant 9B en cibles exactes d'octets/fin de jeton, puis mesure ce qu'un élève de petit octet apprend réellement.
Chargement des derniers commits…
Tenu à l'écart BPB
0.818
Enseignant KL
0.317
Top 1 observé
0.865
Étudiant octet
48M
Problème
La distillation au niveau du jeton suppose que l’élève partage le tokeniseur de l’enseignant. Ce n’est pas le cas d’un étudiant au niveau octet, donc la distribution du jeton suivant de l’enseignant doit être convertie en une distribution de l’octet suivant avec un état terminal bien défini.
Ce projet teste si cette conversion peut être exacte, si un étudiant en petits octets peut en tirer des leçons et si les cibles de fin de jeton battent Marginalize-It et l'entropie croisée des octets simples dans une comparaison contrôlée.
Configuration
Le teacher est Ornith-1.5-9B, un modèle hybride Qwen3.5 de 9B, quantifié en Q5_K_M pour l'extraction massive et Q8_0 pour l'audit de précision. Le student est un Transformer byte dense de ~48M avec un contexte de 1 024 octets et un vocabulaire de 260 symboles. Le corpus fait ~20 Mo de texte et de code normalisés NFC : 6 592 718 tokens d'entraînement et 136 916 de validation. L'entraînement tourne sur une seule RTX 3070 8 Go.
Méthode
Les logs de l'enseignant sont diffusés à partir de llama.cpp et sont convertis par rapport à un essai d'octets du vocabulaire de 248 000 jetons dans l'ordre DFS, de sorte que chaque sous-arbre de préfixes constitue une plage contiguë. Les distributions d'octets proviennent de masses de sous-arbres enfants ; le nœud terminal reçoit p(token) / mass(prefix) sur le symbole EOT.
Marginaliser-Il est dérivé de la même ligne à 260 dimensions en mettant à zéro EOT et en renormalisant. Les logits bruts ne sont jamais conservés ; les cibles sont stockées sous forme de fragments fp16 avec des étiquettes explicites de symbole suivant.
Conversion des cibles
Une somme cumulée en float32 du convertisseur Python pouvait mal allouer les cibles de préfixes rares (jusqu’à 0,789 contre une référence float64). Le convertisseur C++ est le chemin de référence et correspond au float64 à 1,3e-7.
L’extraction 1M a produit 4 014 129 positions à partir de 1 000 497 tokens du teacher : 2,087 Go, 431 tokens/s, 38,7 minutes. Cinq positions sous-débordent en fp16 ; le shard valide avec des sommes de lignes et des comptes exacts.
Comparaison des objectifs
| Objectif | BPB val | BPB incl. EOT | KL teacher | Top-1 |
|---|---|---|---|---|
| EOT | 0,860 | 0,921 | 0,348 | 0,862 |
| Marginalize-It | 0,771 | 6,418 | 0,404 | 0,637 |
| Byte CE | 0,872 | 0,937 | 0,488 | 0,865 |
1M tokens, 2 000 pas, 300 653 octets de validation. Marginalize-It gagne le BPB de contenu en supprimant la masse EOT, ce qui le rend non déployable.
Documents retenus
| Objectif | BPB | BPB incl. EOT | KL teacher | Top-1 | Préfixe greedy |
|---|---|---|---|---|---|
| EOT | 1,362 | 1,473 | 0,617 | 0,790 | 2,5 |
| Marginalize-It | 1,228 | 6,562 | 3,287 | 0,583 | 2,9 |
| Byte CE | 1,483 | 1,615 | 0,826 | 0,787 | 14,2 |
36 documents inédits, 420 313 octets évalués. Les mêmes documents ont servi à choisir l’objectif : il n’y a pas de split de test intact.
Entraînement sur données complètes
| Métrique | 1M positions | 26,2M positions |
|---|---|---|
| BPB | 1,276 | 0,818 |
| BPB incl. EOT | 1,378 | 0,879 |
| KL teacher | 0,575 | 0,317 |
| Top-1 observé du symbole suivant | 0,801 | 0,865 |
| UTF-8 valide | 0,90 | 1,00 |
| Préfixe greedy (octets) | 6,35 | 7,25 |
Run complet : 10 000 pas, ~3,1 époques. La courbe de validation s’aplatit après ~8k pas ; la documentation atteint BPB 0,764 et Python 1,143.
Ce que ça prouve
Le pipeline fonctionne de bout en bout
Un étudiant de 48 Mo apprend la répartition des octets suivants de l'enseignant de 9 Mo sur des documents invisibles, et la conversion cible est exacte.
Le choix objectif compte
EOT + 10 % CE bat le EOT pur et l'octet pur CE dans la comparaison contrôlée 1M, et EOT est la seule méthode avec des limites de jetons utilisables.
Limites
- Pas un modèle de langage utilisable : la génération libre accumule encore l'erreur (correspondance greedy de 7,25 octets)
- Pas de split de test intact ; les 36 documents de validation ont aussi servi à choisir l'objectif
- Le contexte du teacher (4 096 tokens) dépasse la fenêtre de 1 024 symboles du student, et les fenêtres peuvent traverser des documents
- Validé sur une seule RTX 3070 8 Go ; l'échelle reste le levier dominant
- Le résultat prouve le pipeline, pas le modèle
Travaux suivants
Ensuite : une voie GPU 24 Go avec un student de 100–300M et des cibles à la volée, un objectif centré sur la génération, et une seconde graine ou un contrôle token-student. Le résultat actuel est une étude de faisabilité, pas un produit entraîné.