Honest resultsRésultats honnêtes

Tiny LLM benchmark: where ternary wins, and where it losesBenchmark de petit LLM : où le ternaire gagne, et où il perd

2026-06-03 · Tilelli Lab · 7 min read7 min de lecture

Most model pages show you the benchmark they win and quietly drop the rest. This one shows both directions, because the place where Atome loses is the single most useful thing we know about the architecture. All numbers below come from the public training logs in the repository and are reproducible on a CPU.La plupart des pages de modèles montrent le benchmark qu'elles gagnent et passent le reste sous silence. Celle-ci montre les deux directions, car l'endroit où Atome perd est la chose la plus utile que nous sachions sur l'architecture. Tous les chiffres ci-dessous proviennent des journaux d'entraînement publics du dépôt et sont reproductibles sur un CPU.

The setupLe protocole

Both models are trained on TinyStories with a byte-level tokenizer, and the vanilla baseline is a standard pre-norm FP32 decoder-only transformer brute-forced to land within a handful of parameters of the Atome target (parameter-fair) or within the same flash budget (flash-fair). This is a like-for-like comparison, not a strawman: the baseline is the same architecture every public tiny-LM paper uses.Les deux modèles sont entraînés sur TinyStories avec un tokeniseur au niveau de l'octet, et la référence « vanilla » est un transformeur décodeur FP32 pré-norm standard, ajusté par force brute pour tomber à quelques paramètres près de la cible Atome (à paramètres égaux) ou dans le même budget flash (à flash égal). C'est une comparaison à armes égales, pas un homme de paille : la référence est l'architecture qu'utilisent tous les articles publics sur les petits LM.

The win: 60K parameters (the MCU regime)La victoire : 60K paramètres (le régime MCU)

ModelParamsDiskPerplexity (lower is better)
Atome 3-pathway, ternary60,80015.1 KB6.31
Vanilla GPT FP32 (param-fair)60,808237.5 KB8.12
Vanilla GPT FP32 (flash-fair)5,96823.3 KB13.10
ModèleParamètresDisquePerplexité (plus bas = mieux)
Atome 3-pathway, ternary60,80015.1 KB6.31
Vanilla GPT FP32 (param-fair)60,808237.5 KB8.12
Vanilla GPT FP32 (flash-fair)5,96823.3 KB13.10

At a matched parameter count, Atome reaches 6.31 perplexity versus 8.12 for the FP32 transformer — about 22% lower — while using roughly 16× less disk. At a matched flash budget, where the float model can only afford about 6K parameters, the gap widens to 6.31 versus 13.10, about 52% lower. The win also survives three seeds in a separate shorter run (mean perplexity 7.77 versus 9.82), so it is not a single lucky seed.À nombre de paramètres égal, Atome atteint 6,31 de perplexité contre 8,12 pour le transformeur FP32 — environ 22 % de moins — tout en utilisant environ 16× moins de disque. À budget flash égal, où le modèle flottant ne peut s'offrir qu'environ 6K paramètres, l'écart se creuse à 6,31 contre 13,10, soit environ 52 % de moins. La victoire survit aussi à trois graines dans un run plus court séparé (perplexité moyenne 7,77 contre 9,82), ce n'est donc pas une seule graine chanceuse.

The reversal: 944K parametersLe renversement : 944K paramètres

ModelParamsVal lossPerplexity
Atome 3-pathway, ternary944,6401.05452.87
Vanilla GPT FP32 (param-fair)950,6080.93372.54
ModèleParamètresPerte valPerplexité
Atome 3-pathway, ternary944,6401.05452.87
Vanilla GPT FP32 (param-fair)950,6080.93372.54

Scale the same recipe to about 944K parameters and the result flips. The FP32 baseline reaches 0.9337 validation loss and 2.54 perplexity, beating Atome's 1.0545 and 2.87 by roughly 11% — same corpus, same validation split, same seed. We publish this prominently because hiding it would be dishonest and, frankly, less useful.Portez la même recette à environ 944K paramètres et le résultat s'inverse. La référence FP32 atteint 0,9337 de perte de validation et 2,54 de perplexité, battant les 1,0545 et 2,87 d'Atome d'environ 11 % — même corpus, même découpe de validation, même graine. Nous le publions bien en évidence parce que le cacher serait malhonnête et, franchement, moins utile.

Why the reversal is the important numberPourquoi le renversement est le chiffre important

The flip tells you exactly what the architecture is for. The three-pathway ternary block is an inductive bias that substitutes for capacity when capacity is scarce, and gets in the way once you have enough of it. So Atome's bet is the sub-1M-parameter, microcontroller-class regime — not “tiny ternary beats everything.” Knowing the crossover is what lets you choose correctly: below roughly a million parameters, Atome; above it, a plain transformer if your hardware can afford one.Le renversement dit exactement à quoi sert l'architecture. Le bloc ternaire à trois voies est un biais inductif qui compense la capacité quand elle est rare, et qui gêne dès qu'on en a assez. Le pari d'Atome est donc le régime sous le million de paramètres, classe microcontrôleur — pas « le petit ternaire bat tout ». Connaître le point de bascule permet de choisir correctement : en dessous d'environ un million de paramètres, Atome ; au-dessus, un transformeur classique si votre matériel peut se le permettre.

What the benchmark does not claimCe que le benchmark n'affirme pas

What the ablations tell usCe que disent les ablations

Beyond the head-to-head, the public three-seed run includes ablations that remove one pathway at a time, and they explain where the win comes from. With all three pathways the mean perplexity is 7.77; remove the local convolution and it rises to 8.99, remove the state-space model and it is 8.05, remove the sparse attention and it is 7.93. Every pathway contributes, and the local convolution — the cheapest of the three — matters most at this scale. That is a useful design signal: the routed combination is not redundant decoration, it is doing real work, and the router is learning to lean on the convolution for the short-range structure that dominates byte-level text.Au-delà du duel, le run public à trois graines inclut des ablations qui retirent une voie à la fois, et elles expliquent d'où vient la victoire. Avec les trois voies, la perplexité moyenne est de 7,77 ; retirez la convolution locale et elle monte à 8,99, retirez le modèle d'état et elle est de 8,05, retirez l'attention parcimonieuse et elle est de 7,93. Chaque voie contribue, et la convolution locale — la moins chère des trois — compte le plus à cette échelle. C'est un signal de conception utile : la combinaison routée n'est pas une décoration redondante, elle fait un vrai travail, et le routeur apprend à s'appuyer sur la convolution pour la structure à courte portée qui domine le texte au niveau de l'octet.

Reading perplexity without fooling yourselfLire la perplexité sans se tromper

Perplexity is a proxy, not a product metric. A 22% perplexity reduction at 60K parameters is a meaningful architectural signal under a controlled comparison, but it does not by itself mean the model writes good prose — at this scale neither model does, because TinyStories at kilobyte scale is a structure benchmark, not a fluency one. The honest way to read these numbers is comparative: under identical training, the same corpus and the same seed, the ternary routed block extracts more from a fixed parameter or flash budget than a plain transformer does, up to about a million parameters, after which the plain model pulls ahead. The benchmark tells you about the architecture's efficiency in a regime, not about chatbot quality.La perplexité est un indicateur, pas une métrique produit. Une réduction de 22 % de perplexité à 60K paramètres est un signal architectural significatif dans une comparaison contrôlée, mais elle ne signifie pas en soi que le modèle écrit une bonne prose — à cette échelle, aucun des deux ne le fait, car TinyStories à l'échelle du kilooctet est un benchmark de structure, pas de fluidité. La manière honnête de lire ces chiffres est comparative : à entraînement identique, même corpus et même graine, le bloc ternaire routé tire davantage d'un budget fixe de paramètres ou de flash qu'un transformeur classique, jusqu'à environ un million de paramètres, après quoi le modèle classique prend l'avantage. Le benchmark renseigne sur l'efficacité de l'architecture dans un régime, pas sur la qualité conversationnelle.

If you want to reproduce any of this, the repository ships the trained checkpoints and the step-by-step training logs, and the 60K comparison runs in about half an hour on a laptop CPU. We would rather you check the numbers than trust them.Si vous voulez reproduire tout cela, le dépôt fournit les points de contrôle entraînés et les journaux d'entraînement pas à pas, et la comparaison 60K tourne en environ une demi-heure sur un CPU portable. Nous préférons que vous vérifiiez les chiffres plutôt que de les croire.

How to run the comparison yourselfComment lancer la comparaison vous-même

The strongest thing we can say about these numbers is that you do not have to take our word for them. The repository bundles the trained checkpoints for both the Atome and the vanilla baseline, the exact training configuration, and the step-by-step logs behind every figure on this page, so the comparison is auditable rather than asserted. The 60K parameter-fair and flash-fair sweep reproduces in roughly half an hour on an ordinary laptop CPU, with no GPU required, and the larger 944K reversal is documented with its own logs. We publish results this way on purpose: a benchmark you can regenerate is a claim you can trust, and one you cannot is just a number on a slide. If you find a discrepancy, that is a bug report we want, not a result we will defend.La chose la plus forte que nous puissions dire de ces chiffres, c'est que vous n'avez pas à nous croire sur parole. Le dépôt regroupe les points de contrôle entraînés pour Atome et pour la référence vanilla, la configuration d'entraînement exacte, et les journaux pas à pas derrière chaque chiffre de cette page, de sorte que la comparaison est auditable plutôt qu'affirmée. Le balayage 60K à paramètres égaux et à flash égal se reproduit en environ une demi-heure sur un CPU portable ordinaire, sans GPU, et le renversement plus grand à 944K est documenté avec ses propres journaux. Nous publions les résultats ainsi à dessein : un benchmark que vous pouvez régénérer est une affirmation à laquelle vous pouvez vous fier, et un que vous ne pouvez pas régénérer n'est qu'un chiffre sur une diapositive. Si vous trouvez un écart, c'est un rapport de bug que nous voulons, pas un résultat que nous défendrons.

Bottom lineEn résumé

The two-directional benchmark is the honest one: a ternary routed block beats a parameter-matched FP32 transformer by about 22% at 60K parameters and loses to it by about 11% at 944K, with the ablations showing every pathway contributes. The reversal is the useful part, because it tells you exactly where the architecture belongs — the sub-million-parameter, microcontroller-class regime — and where it does not. Read perplexity as a comparative efficiency signal, not a fluency claim, and reproduce the numbers from the bundled checkpoints and logs rather than trusting them. That is what a benchmark is for.Le benchmark bidirectionnel est l'honnête : un bloc ternaire routé bat un transformeur FP32 à nombre de paramètres égal d'environ 22 % à 60K paramètres et perd contre lui d'environ 11 % à 944K, les ablations montrant que chaque voie contribue. Le renversement est la partie utile, car il dit exactement où se situe l'architecture — le régime sous le million de paramètres, classe microcontrôleur — et où elle ne se situe pas. Lisez la perplexité comme un signal comparatif d'efficacité, pas comme une affirmation de fluidité, et reproduisez les chiffres à partir des points de contrôle et journaux fournis plutôt que de les croire. C'est à cela que sert un benchmark.

Frequently asked questionsQuestions fréquentes

Does a ternary LLM beat a normal transformer?Un LLM ternaire bat-il un transformeur normal ?

At very small scale, yes: Atome beats a parameter-matched FP32 transformer by ~22% in perplexity at 60K parameters. At ~944K parameters the float model wins by ~11%. It depends on scale.À très petite échelle, oui : Atome bat un transformeur FP32 équivalent d'environ 22 % en perplexité à 60K paramètres. À environ 944K paramètres, le modèle flottant gagne d'environ 11 %. Cela dépend de l'échelle.

Are these tiny-LLM benchmark numbers reproducible?Ces chiffres de benchmark sont-ils reproductibles ?

Yes. The trained checkpoints and step-by-step training logs ship in the public repository, and the 60K comparison reproduces in about 30 minutes on a CPU.Oui. Les points de contrôle entraînés et les journaux d'entraînement pas à pas sont fournis dans le dépôt public, et la comparaison 60K se reproduit en environ 30 minutes sur un CPU.

← All posts← Tous les articles Source & data on GitHubCode & données sur GitHub