- rasbt/LLMs-from-scratch est un dépôt contenant le code pour développer, préentraîner et affiner un LLM similaire à GPT, et constitue le dépôt de code officiel du livre Manning Build a Large Language Model (From Scratch)
- L’approche d’apprentissage consiste à construire depuis zéro un petit modèle fonctionnel à visée pédagogique, en suivant un déroulé similaire à celui utilisé pour créer les grands modèles de fondation derrière ChatGPT
- Le contenu fournit, chapitre par chapitre, du code et des notebooks couvrant le traitement des données textuelles, les mécanismes d’attention, l’implémentation de GPT, le préentraînement sur des données non étiquetées, l’affinage pour la classification de texte et l’affinage pour le suivi d’instructions
- Le code des chapitres principaux est conçu pour s’exécuter sur un notebook classique dans un temps raisonnable, utilise automatiquement le GPU lorsqu’il est disponible, et est implémenté en PyTorch sans bibliothèque LLM externe
- Les annexes et bonus s’étendent à LoRA, au KV Cache, au MoE, aux implémentations des familles Llama/Qwen/Gemma, à l’évaluation, au DPO et à des exemples d’interface, pour élargir l’apprentissage des LLM de manière très pratique
Objectif du dépôt et lien avec le livre
- rasbt/LLMs-from-scratch est un dépôt de code pour implémenter depuis zéro un LLM similaire à GPT
- Il est proposé comme dépôt de code officiel du livre Manning Build a Large Language Model (From Scratch)
- Le livre est conçu pour comprendre, par le code et étape par étape, comment un LLM fonctionne en interne
- Les explications incluent du texte, des diagrammes et des exemples
- Il fait développer et entraîner directement un petit modèle fonctionnel à visée pédagogique
- Le dépôt inclut aussi du code pour charger des poids de modèles préentraînés plus volumineux puis les affiner
- Informations sur le livre :
Installation et utilisation du code
- Le dépôt peut être récupéré en téléchargeant le ZIP ou via
git clone
git clone --depth 1 https://github.com/rasbt/LLMs-from-scratch.git
- Si vous avez récupéré l’archive de code depuis le site de Manning, il est indiqué de consulter le dépôt officiel sur GitHub pour les mises à jour les plus récentes
- L’installation de Python et des paquets, ainsi que la configuration de l’environnement, sont traitées dans setup/README.md
- Un document de résolution de problèmes est disponible sous la forme du Troubleshooting Guide
Parcours d’apprentissage par chapitre
- Le livre et le dépôt découpent l’implémentation d’un LLM en curriculum progressif
- Structure principale des chapitres :
- Ch 1 : Comprendre les LLM, sans code
- Ch 2 : Manipuler des données textuelles
- Ch 3 : Implémenter les mécanismes d’attention
- Ch 4 : Implémenter un modèle GPT depuis zéro
- Ch 5 : Préentraînement sur des données non étiquetées
- Ch 6 : Affinage pour la classification de texte
- Ch 7 : Affinage pour le suivi d’instructions
- Les annexes incluent une introduction à PyTorch, les références bibliographiques, les corrigés des exercices, l’amélioration de la boucle d’entraînement et l’affinage efficace en paramètres basé sur LoRA
Prérequis et environnement d’exécution
- Le prérequis le plus important est une base en programmation Python
- Une expérience des réseaux neuronaux en deep learning peut rendre certains concepts plus familiers
- Le code est implémenté depuis zéro en PyTorch, sans bibliothèque LLM externe
- Une maîtrise de PyTorch n’est pas indispensable
- Des bases en PyTorch sont utiles
- L’Appendix A fournit une brève introduction à PyTorch
- Le code des chapitres principaux est conçu pour s’exécuter sur un notebook classique dans un temps raisonnable
- Aucun matériel spécialisé n’est requis, et le GPU est utilisé automatiquement s’il est disponible
Cours vidéo et livre de suivi
- Manning propose un cours vidéo compagnon de 17 h 15 qui suit la structure du livre
- Il reprend la structure de chaque chapitre et section du livre
- Il peut servir d’alternative autonome ou de ressource complémentaire pour coder en suivant le livre
- Le livre Build A Reasoning Model (From Scratch), de nature complémentaire, est également présenté
- C’est un livre autonome, mais il peut être vu comme une suite à Build A Large Language Model (From Scratch)
- Il part d’un modèle préentraîné pour implémenter des approches visant à améliorer les capacités de raisonnement
- Approches incluses : inference-time scaling, apprentissage par renforcement, distillation
- Dépôt associé : rasbt/reasoning-from-scratch
Exercices et contenus bonus
- Chaque chapitre comprend plusieurs exercices
- Les réponses sont résumées dans l’Appendix C, et les notebooks de code correspondants se trouvent dans le dossier de chaque chapitre
- Un PDF gratuit de 170 pages, Test Yourself On Build a Large Language Model (From Scratch), peut être téléchargé depuis le site de Manning
- Il contient environ 30 quiz par chapitre avec leurs réponses
-
Principaux thèmes bonus
- Setup:
- Conseils de configuration Python
- Installation des paquets et bibliothèques
- Configuration d’un environnement Docker
- Ch 2:
- Implémenter un tokenizer BPE depuis zéro
- Comparer plusieurs implémentations de BPE
- Différence entre couche d’embedding et couche linéaire
- Intuition du dataloader avec des exemples numériques simples
- Ch 3:
- Comparer des implémentations efficaces de multi-head attention
- Comprendre les buffers PyTorch
- Ch 4:
- Analyse des FLOPs
- KV Cache
- Grouped-Query Attention, Multi-Head Latent Attention, Sliding Window Attention
- Gated DeltaNet, DeepSeek Sparse Attention, Cross-Layer KV Sharing
- Mixture-of-Experts
- Ch 5:
- Méthodes alternatives de chargement des poids
- Préentraînement sur le dataset Project Gutenberg
- Amélioration de la boucle d’entraînement
- Optimisation des hyperparamètres
- UI pour interagir avec un LLM préentraîné
- Convertir GPT en Llama
- Chargement des poids du modèle avec optimisation mémoire
- Extension du tokenizer BPE Tiktoken
- Conseils de performance PyTorch pour un entraînement LLM rapide
- Implémentations de Llama 3.2, Qwen3, Gemma 3, Olmo 3, Tiny Aya, Qwen3.5, Gemma 4
- Ch 6:
- Expériences supplémentaires d’affinage sur d’autres couches et des modèles plus grands
- Affinage pour la classification sur le dataset de 50k critiques de films IMDb
- UI de classifieur de spam basé sur GPT
- Ch 7:
- Utilitaires de dataset pour la détection de quasi-doublons et la génération d’éléments à la voix passive
- Évaluation des réponses à des instructions avec l’API OpenAI et Ollama
- Génération et amélioration de datasets d’affinage sur instructions
- Génération d’un preference dataset avec Llama 3.1 70B et Ollama
- Implémenter l’alignement de LLM avec le DPO
- UI d’un modèle GPT affiné sur instructions
Contributions et citation
- Les retours et questions sont accueillis sur le Manning Forum ou via les GitHub Discussions
- Comme il s’agit du dépôt de code correspondant à un livre imprimé, les contributions qui étendent le contenu du main chapter code ne peuvent pas être acceptées pour le moment
- Cette restriction vise à éviter toute divergence entre le livre physique et le code
- Si le livre ou le code vous sont utiles dans un cadre de recherche, il est recommandé de les citer
- Une citation au format Chicago et une entrée BibTeX sont fournies
1 commentaires
Avis Hacker News
Pour l’instant, le guide de fine-tuning semble être la meilleure ressource.
https://ravinkumar.com/GenAiGuidebook/language_models/finetu...
Les LLM sont un sujet important, mais il existe beaucoup de vidéos et d’articles qui les survolent. Je pense qu’encoder un LLM depuis les fondations rend beaucoup de concepts plus clairs.
En second lieu, l’objectif est aussi d’aider ceux qui en ont besoin à créer leur propre LLM. Dans le livre, j’implémente tout le pipeline, y compris le préentraînement et le fine-tuning, mais comme le préentraînement d’un LLM n’est pas réaliste financièrement, je compte aussi montrer comment charger des poids de préentraînement.
Tout est implémenté de zéro avec un LLM proche de GPT-2, et il sera possible de charger des poids allant d’un modèle 124M qui tourne sur un notebook à un modèle 1558M qui tourne sur un petit GPU. En pratique, on utiliserait sans doute des frameworks comme HF transformers ou axolotl, mais j’espère que cette approche en implémentation directe rendra le processus moins opaque
import torch, on ne peut pas vraiment parler d’une implémentation à partir de zéro :-)Personne travaillant dans ce domaine ne calcule à la main les dérivées de tels modèles. Penser en termes de programmation différentiable est une hypothèse de base, et dans ce cas on peut tout à fait parler de “from scratch”.
Chaque fois que je vois ce genre de commentaire, je me dis que la personne ne comprend probablement pas très bien ce qui se passe sous le capot ni comment fonctionne le machine learning moderne.
[1] https://karpathy.ai/zero-to-hero.html
C’est bien plus accessible pour les développeurs généralistes et cela ne suppose pas de bagage en mathématiques. C’est un très bon point de départ, après lequel d’autres ressources similaires deviennent beaucoup plus faciles à comprendre
Créer du matériel pédagogique demande une quantité de travail absurde, et même si ce livre rencontre un grand succès, si rasbt compare les revenus au temps investi, son taux horaire sera probablement dérisoire.
Beaucoup de gens comprennent ce sujet, mais qu’en ont-ils fait ? Ils ont gardé ce savoir pour eux, sont allés chez OpenAI, ont gardé leurs connaissances privées et ont gagné bien plus d’argent.
Si vous voulez vivre dans un monde où ce type de savoir reste ouvert, il vaut mieux éviter de se plaindre publiquement d’un livre qui coûte à peu près le prix d’un dîner correct
Mon objectif serait de faire apprendre à quelque chose à atterrir, comme un alunisseur. L’idée serait de commencer simplement, à 100 pieds d’altitude, avec de la poussée dans une seule direction, et de continuer les essais jusqu’à ce que ça fasse moins de cratères.
Ensuite, j’aimerais ajouter des variables comme le déplacement horizontal, ajouter des propulseurs latéraux, puis plus tard retirer ces propulseurs latéraux et permettre à l’alunisseur de pivoter.
Je n’ai absolument aucune idée d’où commencer, et comme ce livre a l’air plutôt orienté machine learning “mainstream”, je me demande si cela pourrait m’aider.
La bibliothèque gymnasium[1] de Python propose un environnement d’alunisseur, donc cela peut être utile comme point de départ. C’est l’environnement sur lequel je me suis le plus concentré en apprenant, et j’ai essayé de le résoudre de plusieurs façons.
Tu peux aussi jeter un œil à mon notebook2, que j’ai utilisé récemment pour implémenter Soft Actor Critic avec PyTorch. Ce n’est pas une très bonne ressource pédagogique, mais tu y trouveras peut-être quelque chose d’utile.
[0]: https://www.manning.com/books/grokking-deep-reinforcement-le...
[1]: https://gymnasium.farama.org/environments/box2d/
Même quelque chose comme AlphaGo peut au fond être vu comme un travail où l’on utilise des réseaux neuronaux profonds comme entrée de techniques classiques de renforcement par apprentissage
Reinforcement Learning: An Introduction de Sutton et Barto est largement considéré comme l’ouvrage d’introduction de référence sur le sujet
Il existe aussi des livres généraux de machine learning/deep learning avec un long chapitre d’introduction au renforcement par apprentissage (https://github.com/rasbt/machine-learning-book/tree/main/ch1...). Mais même dans ce cas, comme l’ont dit d’autres personnes, un ouvrage spécialisé en renforcement par apprentissage sera plus adapté
https://www.ida.liu.se/~TDDC17/info/labs/rl.en.shtml
[0] https://www.youtube.com/watch?v=kCc8FmEb1nY
Au lieu d’implémenter un LLM au niveau des caractères, il implémente un vrai LLM au niveau des mots, montre le chargement de poids de préentraînement après le préentraînement, puis effectue un instruction fine-tuning sur ce LLM
Il code aussi l’alignement du LLM après instruction fine-tuning, et montre également un fine-tuning pour des tâches de classification. Le livre contient beaucoup d’illustrations, et rien que le chapitre 3 en compte 26 :)
La vidéo a aussi l’air excellente. En 2 heures, elle semble constituer un bon complément d’introduction. Lire le livre prendra probablement environ 10 fois plus de temps
J’ai moi-même dû la regarder plusieurs fois pour bien comprendre la majeure partie
Il faut évidemment aussi très bien connaître PyTorch, ainsi que la multiplication matricielle, la rétropropagation, etc. Et il parle très vite
Par exemple, je sais que l’attention est utilisée dans divers modèles, et que les Transformers servent aussi en dehors des modèles de langage
Je me demande si ce livre permettrait de comprendre suffisamment bien l’attention et les Transformers pour les utiliser en dehors des modèles de langage
La différence, c’est que dans les LLM, on transforme le texte en tokens, puis ces tokens en embeddings vectoriels qui entrent dans le LLM. Dans les Vision Transformers, au lieu de considérer l’image entière comme des tokens, on utilise des patchs d’image comme tokens, puis on les transforme en embeddings vectoriels
Que ce soit pour le texte ou la vision, c’est le même mécanisme d’attention, et dans les deux cas, l’entrée est constituée d’embeddings vectoriels
(*J’ai déjà remis le chapitre 3 la semaine dernière et il devrait bientôt apparaître dans le MEAP. En attendant, le code est disponible ici avec le notebook : https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01...)