Le mur des 60 : neuf tentatives contre un plafond, et la variable qui le fait tomber.

27 juillet 2026

Dans le premier article de cette campagne, un RNN local de 2,9 milliards de paramètres atteignait la parité avec Qwen3-30B en tool-calling pour 0,53 $ d'entraînement. Restait à savoir si on pouvait faire mieux que 61 sur 82. La réponse courte : pas avec ce modèle. Nous avons passé une semaine à essayer, six méthodes et neuf mesures sont venues s'écraser entre 58 et 61, et il a fallu changer la seule chose que l'entraînement ne peut pas changer pour comprendre ce qui bloquait.

Brut, un RWKV-7 de 7,2 milliards fait 29/82, à peu près comme le 2,9B brut (28). Le même state-tuning qu'au premier article, appliqué tel quel pour environ 3 $, l'amène à 69/82. C'est onze points au-dessus de Qwen3-30B dans sa configuration de production, et deux points sous le même Qwen quand on lui prête notre échafaudage de retrieval. Comme d'habitude, tout est vérifiable : générations brutes, états entraînés, empreintes, recettes, et cette fois le code de la boucle RL aussi.

Neuf tentatives, trois points d'écart

Après le premier article, nous avons attaqué le plafond avec ce qu'on avait sous la main. Chaque tentative est dans le banc public, générations comprises :

TentativeScore
State-tuning, données ciblées v3 (le champion)61
LoRA v359
Composition état + LoRA (hors distribution)59
Composition native (état entraîné sur le LoRA)59
Données chirurgicales v4 (135 exemples anti-erreurs)58
GRPO sur l'état60
GRPO sur LoRA59
Checkpoints de pic (early stopping, ×3)58-60
Neuf tentatives 2,9B confinées dans la bande 58-61, le 7,2B state-tuné à 69 au-dessus
Le mur, vu d'un coup : six méthodes différentes atterrissent dans une bande de trois points. Changer la taille du backbone en sort de huit.

Quelques leçons sont sorties de cette série, et elles valent la peine d'être détaillées parce qu'elles disent ce qu'un petit modèle sait et ne sait pas apprendre.

Les données ciblées n'ont pas fait ce qu'on attendait d'elles. Nous avions construit 135 exemples visant précisément les sept erreurs récurrentes de sélection, validés contre les schémas, filtrés contre le juge. Aucune des sept n'a été corrigée. Les mauvaises réponses se sont déplacées, model_get_info devenant model_manage, pendant que l'abstention montait à la perfection sans qu'on la vise. Un état de 11 Mo apprend très bien quand se taire. Il n'apprend pas lequel de deux noms proches est le bon.

Le RL n'a pas percé non plus, mais il a échoué de façon instructive. Nous avons monté une boucle GRPO (avantages normalisés par groupe, surrogate clippé, notre scoreur mécanique comme récompense) au-dessus du champion, en deux versions : continuer d'entraîner l'état, ou geler l'état et poser un LoRA frais par-dessus. Cinq millions de paramètres entraînables d'un côté, trente de l'autre. Les deux convergent vers presque le même profil, arguments 13, sélection difficile 16, simple autour de 14, pour un total de 60 et 59. Le RL a bougé ce que les données n'arrivaient pas à bouger, la sélection simple passe de 12 à 15, et l'a payé en précision d'arguments, au tarif exact de notre récompense qui payait la sélection le double des arguments. Les modèles ont maximisé ce qu'on a payé, rien d'autre.

C'est le point important de cette série : la bande 58-61 se comporte comme une frontière. L'entraînement choisit où l'on se place dessus, jamais son niveau. On le voit round après round dans la version LoRA, les arguments font 16, 17, puis 13 pendant que la sélection simple fait 12, 12, 14, et le total ne bouge pas. L'early stopping n'y change rien, les checkpoints pris au pic de la récompense interne scorent 58 à 60 sur le juge.

Deux notes pratiques pour qui réutilisera le code : à LR 1e-4 le LoRA détruit la politique en un round, l'abstention passe de 8/8 à 1/8 (2e-5 est stable) ; et une sonde de 24 cas ne prédit pas un juge de 82, n'en faites jamais un critère de sélection de checkpoint.

La variable qui restait

Quand six méthodes plafonnent au même endroit, le suspect n'est plus la méthode. Nous avons donc changé la taille, et rien d'autre. Le checkpoint RWKV-7 G1g 7,2B est de la même génération que notre 2,9B, publié trois jours avant lui. Mêmes 2 920 exemples, même recette de state-tuning, un epoch, mêmes hyperparamètres, même juge figé. Environ 3 $ de L40S.

Et pour que le résultat veuille dire quelque chose, le contrôle exigé avant publication : évaluer aussi le 7,2B nu, sans entraînement.

Catégorie (n)7,2B brutPlafond 2,9B (9 runs)7,2B state-tunéQwen3-30B (231 bruts)Qwen3-30B (+ top-40)
Abstention (17)016-17171717
Arguments (22)9≤18211720
Sélection difficile (23)12≤17181417
Sélection simple (18)8≤15131016
Multi-étapes (2)00001
Total (82)29 (35 %)58-6169 (84 %)5871
Brut contre state-tuné, aux deux tailles : 28 → 61 et 29 → 69
Nus, les deux checkpoints sont jumeaux. Le même entraînement à ~1 $ les emmène à 61 et 69 : l'effet grandit avec la taille.

Le mur était donc bien le backbone. Six méthodes n'avaient pas acheté un point au-dessus de 61 ; le changement de taille en achète huit. Et les catégories qui bougent sont celles que la série précédente avait désignées : les arguments passent de 18 à 21, au-dessus du Qwen équipé de notre top-40, et la sélection difficile atteint 18/23, le meilleur score de la campagne.

Le contrôle raconte l'autre moitié de l'histoire. Nus, les deux checkpoints sont jumeaux, 28 et 29 sur 82, avec la même signature, zéro abstention et des sorties non parsables. Le 7,2B brut n'appelle pas mieux les outils que le 2,9B brut. La taille seule ne donne rien sur cette tâche. C'est l'état entraîné qui va chercher ce que le gros modèle sait latentement, et son effet grandit avec la taille : +33 points au 2,9B, +40 au 7,2B.

Reste le classement qui intéresse tout le monde. Le RNN de 7,2 milliards bat Qwen3-30B dans sa configuration de production, celle où un opérateur l'utiliserait vraiment, 69 contre 58. À échafaudage égal il s'approche à deux points d'un modèle quatre fois plus gros. L'artefact qui porte tout ça est un état initial de 17 Mo, chargeable à chaud sur le checkpoint public.

Les statistiques, pour finir. L'effet de la méthode ne se discute pas : tuné contre brut à 7,2 milliards, 42 cas discordants gagnés contre 2, p = 1,1×10⁻¹⁰ en McNemar exact. Le saut de taille pris isolément, 69 contre 61, donne 12 gagnés contre 4 et p = 0,077, au bord de ce qu'un juge de 82 cas peut trancher seul. Ce qui rend le constat solide n'est pas ce test isolé, c'est la convergence : neuf tentatives enfermées dans trois points, puis un changement de backbone qui en sort de huit. Les deux chiffres sont publiés, avec les fichiers pour les recalculer.

Ce qui survit à l'échelle

Deux faiblesses traversent le changement de taille. La sélection simple reste moyenne (13/18) : les collisions de namespace, linear_search_issues contre github_search_issues, survivent au scaling, ce qui suggère un problème de format ou de retriever plus que de capacité. Et le multi-étapes reste à zéro partout, sans mystère : notre harnais est un tour, un appel, par construction.

Les limites du protocole restent celles du premier article, un seul banc, une seule tâche, nos outils, et le run 7,2B n'a pas encore été répliqué de bout en bout comme l'avait été le rung 1. Une question ouverte s'y ajoute, qu'on offre volontiers : un transformer de 3 milliards, tuné sur les mêmes données avec le même juge, ferait-il mieux que 60 ? C'est le contrôle qui séparerait une limite des petits modèles d'une limite de cette famille. Il coûte environ 3 $.

Reproduire

Tout est dans le dépôt du banc (miroir Forgejo) : le juge de 82 cas, les schémas, les générations brutes de chaque mesure de cet article, y compris celles qui ne nous arrangent pas, les états entraînés avec leurs SHA-256, les recettes de pod, la boucle GRPO, et les scripts qui régénèrent les figures depuis les JSON commités. La campagne complète, neuf mesures, deux runs de RL, l'ascension 7,2B et son contrôle, a coûté environ 25 $ de GPU loué. Le protocole détaillé du juge et de l'anti-fuite est dans le premier article.

Un trou dans le protocole ? Écrivez-nous : contact@scarletwolf.ai. C'est à ça que sert la publication.

Une question, un désaccord, une envie d'essayer ? Écrivez-moi, c'est le fondateur qui répond.