EUGEN 160M — mon modèle de code, touchez pour l'essayer
EUGEN 160M
EUGEN 160M est un petit modèle de langage qui aide à écrire du code: il le complète au fil de la frappe (autocomplétion) et suggère la ligne suivante. Il est aussi entraîné à compléter du code au milieu d'un fichier (fill-in-the-middle) et il est spécialisé dans la traduction du Python vers le C++. Il compte 164,5 millions de paramètres et est entraîné de zéro sur une seule carte graphique NVIDIA RTX PRO 6000 (96 Go). Sa petite taille lui permet de générer rapidement aussi sur un processeur ordinaire, jusqu'à environ 270 jetons par seconde. Le modèle peut être essayé dans le terminal: il suffit de cliquer sur le bouton ci-dessous.
Premiers résultats
L'entraînement en est à un stade précoce, et les résultats donnent déjà des raisons d'être optimiste. Sur HumanEval, où le modèle écrit une fonction Python à partir de sa description, les meilleurs résultats mesurés d'EUGEN sont de 18,9 % des tâches en une tentative et de 32,9 % en dix. En traduction vérifiée du Python vers le C++ – le compilateur et les tests choisissent une version fonctionnelle parmi plusieurs propositions du modèle – 77 programmes sur 100 compilent et 53 passent tous les tests. La pile du modèle veille à ce que seules les propositions de traduction ayant passé ces contrôles parviennent à l'utilisateur. Le graphique place les résultats d'EUGEN face aux modèles jusqu'à 0,5 milliard de paramètres.
Architecture du modèle
EUGEN est un transformer décodeur de 36 couches, entraîné avec MuonH, une variante de Muon qui maintient constante la norme des matrices de poids. Le modèle est en phase d'entraînement de base. Environ 0,35 % des données sont des données propres: des solutions STaR générées par EUGEN lui-même et validées par les tests, ainsi que des paires de traduction entre le Python et le C++, le Java, le Go et le Rust, contrôlées par compilation et tests.
FFN creux, kernel Triton
Je travaille aussi à optimiser et à accélérer l'entraînement du modèle grâce à un FFN creux, et j'ai développé à cette fin mon propre kernel GPU, écrit en Triton. Sur un modèle de 306 millions de paramètres (FFN 4 096), le kernel optimisé a atteint un débit supérieur de 36 % à celui de sa première version. Nos premiers tests montrent qu'avec un modèle plus grand et un FFN de 8 192, le kernel du projet EUGEN permet une accélération de plus de 40 % par rapport à un modèle dense. Reste à savoir si un modèle entraîné creux puis densifié à la fin égale un modèle dense, mais les premiers résultats m'incitent à entraîner ainsi le prochain modèle, plus grand.
TetherGate est un mécanisme qui empêche les portes apprises de se fermer. Une porte qui pondère une branche résiduelle – un expert, un adaptateur ou une couche nouvellement ajoutée – tend à être poussée progressivement vers zéro par l'optimiseur, après quoi la branche n'apporte plus rien au modèle. TetherGate combine un plancher piloté par l'étape d'entraînement et un ressort qui attire le seuil de la porte vers une ancre mobile calculée à partir du signal de commande courant. Le signal peut être n'importe quelle statistique. J'ai testé le mécanisme à titre expérimental sur mes modèles.
Je mène sans cesse mes propres recherches sur l'IA. Elles portent notamment sur les signaux internes du réseau: les activations des portes des couches FFN et l'indice GSI (Gate Sparseness Index) qui en découle et qui, selon des résultats préliminaires, pourrait aider, avant toute réponse, à distinguer les questions dont le modèle connaît la réponse de celles où il commence à confabuler. Une analyse ultérieure a montré qu'une partie de l'effet tient à la longueur des questions: une fois celle-ci prise en compte, le signal se maintient pour le modèle Llama, les autres résultats doivent être refaits. Je n'ai pas de formation formelle dans ce domaine, mais je m'efforce de travailler de la manière la plus professionnelle possible: données publiées, mesures reproductibles et limites clairement énoncées.
Comment je travaille avec l'IA
Je n'écris pas de code à la main. Je conçois les tâches et je dirige des équipes d'agents d'IA, et je vérifie chaque résultat. Une équipe travaille en trois étapes: recherche, exécution et vérification. L'exécution est surveillée par deux contrôleurs indépendants: l'un veille au périmètre de la tâche, l'autre à sa qualité technique.
Je mène deux ou trois équipes de ce type en parallèle: quand une tâche demande mon attention, les autres continuent d'avancer. Quand un modèle bloque, je soumets le problème à un modèle d'une autre entreprise.
Je délègue de grandes portions de travail, mais seulement jusqu'à la limite où je peux les vérifier sérieusement, puis je réserve du temps aux corrections. C'est un test ou une mesure qui décide si quelque chose est prêt, pas la déclaration du modèle.