Aller au contenu
Édition du soir · N° 574 · prochaine à 9 h
Compte

Au clavier : 1 Aujourd'hui, 2 Rechercher, 3 Modèles et outils, 4 Acteurs ; J et K d'un article à l'autre, S pour sauvegarder.


OUTILS

TRiP : un moteur transformer complet en C, développé from scratch par un seul auteur

Un développeur solo publie TRiP, une implémentation intégrale d'un moteur transformer en langage C, sans dépendances externes.

carlovalenti sur GitHub·repéré via Hacker News·30 avril 2026
TRiP : un moteur transformer complet en C, développé from scratch par un seul auteur
Image · Source originale
TRiP est un moteur transformer entièrement écrit en C, conçu et développé par un seul développeur. Le projet vise à proposer une implémentation from scratch, sans recours à des bibliothèques tierces, couvrant l'ensemble des composants d'un transformer standard. La démarche est principalement pédagogique et de démonstration technique.

Traduit et résumé par IA à partir de la page source ↗ · Comment Fellow travaille

Développement

· Généré par IA
↓ LIRE LE DÉVELOPPEMENT · 3 MIN← MASQUER LE DÉVELOPPEMENT

TRiP — pour "TRansformer in Progress" — est un moteur transformer complet écrit intégralement en langage C, développé par un seul auteur, Carlo Valenti, sur une période de dix-huit mois, de mars 2024 à août 2025, principalement lors de pauses déjeuner et de soirées de week-end. Le projet est publié sur GitHub sous licence CC BY-NC 4.0, autorisant un usage non commercial avec attribution.

L'ambition déclarée du projet est pédagogique : comprendre de l'intérieur le fonctionnement d'un transformer, depuis les multiplications matricielles jusqu'aux mécanismes d'attention, sans recourir à PyTorch, TensorFlow, ONNX ou toute autre bibliothèque de deep learning. Le code couvre l'inférence, l'entraînement complet par rétropropagation, la création de tokenizer, le mode chat interactif et l'inférence multimodale vision-langage. La seule dépendance réelle concerne l'affichage d'images en mode vision, qui requiert libjpeg et libx11 — deux bibliothèques système standard.

Sur le plan des architectures supportées, TRiP prend en charge Llama 2, Gemma 1.0 et 1.1, PaliGemma 1 (vision et langage) ainsi que GPT-2. Les formats de poids acceptés incluent SafeTensors (HuggingFace), ainsi que les formats définis par les projets de référence llama2.c et gpt2 d'Andrej Karpathy. Les types de données bf16, float16 et float32 sont supportés, avec une précision importante soulignée par l'auteur : sur CPU, float32 offre systématiquement de meilleures performances que bf16 ou float16, les processeurs actuels n'étant pas optimisés pour les opérations en virgule flottante dans ces formats réduits.

L'entraînement intègre la rétropropagation complète avec l'optimiseur AdamW, un scheduler de taux d'apprentissage par cosine annealing, et le gradient clipping. Le sampling à l'inférence couvre les stratégies greedy, top-k et nucleus (top-p). Un mode mmap permet de faire tourner des modèles larges sur des machines à mémoire limitée en évitant de charger l'intégralité des poids en RAM.

La structure du code est volontairement minimaliste : sept fichiers C totalisant environ 19 300 lignes. Le fichier math.c, le plus central, implémente les opérations tensorielles de base — matmul, softmax, layernorm, RMSnorm, RoPE, attention, activations FFN — en organisant systématiquement chaque opération comme une paire forward/backward placée côte à côte dans le code source. Cette organisation vise explicitement la lisibilité pédagogique : le lecteur peut suivre le flux du gradient inverse immédiatement après avoir lu le calcul direct.

L'auteur précise les parties du code générées par IA : le parseur JSON, la fonction de sauvegarde de checkpoints SafeTensors, la gestion JPEG/X11, le découpage final en fichiers multiples à partir d'un unique main.c initial, ainsi que certains commentaires et le README lui-même. Le reste — soit la grande majorité du moteur — est écrit à la main, ce qui constitue selon l'auteur la condition nécessaire pour atteindre l'objectif de compréhension profonde du transformer.

TRiP se distingue de projets comme llama.cpp, que l'auteur cite explicitement sans chercher à le concurrencer. Là où llama.cpp vise la performance et la compatibilité maximale sur une large gamme de matériel, TRiP assume une orientation différente : la clarté du code et la progression pédagogique priment sur l'optimisation. L'auteur s'inscrit dans la lignée des travaux d'Andrej Karpathy (llama2.c, nanoGPT), qu'il cite comme source d'inspiration directe.

Plusieurs questions restent ouvertes à ce stade. TRiP ne supporte pas les architectures récentes (Llama 3, Mistral, Gemma 2 et au-delà), ce que l'auteur assume délibérément pour éviter une course aux dernières sorties. L'absence de support GPU et d'optimisations SIMD limite les cas d'usage pratiques aux modèles légers ou aux environnements contraints. Enfin, la licence non commerciale restreint les usages en production. Pour l'heure, TRiP s'adresse avant tout à quiconque souhaite disposer d'une base de code annotée et autonome pour étudier les mécanismes internes d'un transformer de bout en bout, sans intermédiaire logiciel.

OUVRIR LA SOURCE ↗
#transformer#C#open-source#from-scratch#LLM

Une question sur cet article ?

Fellow répond à partir de ce qu'il a publié et cite chaque source. Réponses rédigées par une IA.

À lire aussi