8 points par GN⁺ 2024-01-28 | 1 commentaires | Partager sur WhatsApp
  • 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

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

 
GN⁺ 2024-01-28
Avis Hacker News
  • Je suis en train d’écrire un guide complémentaire, mais il est encore en cours de finalisation en plusieurs étapes.
    Pour l’instant, le guide de fine-tuning semble être la meilleure ressource.
    https://ravinkumar.com/GenAiGuidebook/language_models/finetu...
  • Ça a l’air vraiment génial. Je me demande si l’objectif principal est d’améliorer la compréhension et de lever le voile de mystère, ou si c’est plutôt d’aider les gens à construire eux-mêmes de petits modèles adaptés à leurs besoins.
    • La motivation principale est plutôt pédagogique, pour aider les gens à comprendre comment fonctionnent les LLM en les construisant eux-mêmes.
      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
  • Écrire un livre technique en public me semble anxiogène au-delà du concevable, donc bravo à l’auteur.
    • Dans une certaine mesure, oui, mais en même temps c’est aussi assez motivant :)
    • En fait, le risque est peut-être moindre. On peut bénéficier des avantages d’écrire un livre sans jamais le terminer réellement. Idéalement, il ne serait peut-être même pas nécessaire d’écrire beaucoup plus d’un chapitre
  • Si le premier exemple de code est import torch, on ne peut pas vraiment parler d’une implémentation à partir de zéro :-)
    • C’est vrai, mais sinon ce serait devenu trop verbeux et difficile à lire. Cela dit, dans le livre, il montre quand même comment implémenter LayerNorm, Softmax, des couches Linear, GeLU, etc., au lieu d’utiliser les versions torch déjà packagées.
    • Grâce à la différenciation automatique, on peut construire des modèles complexes comme les Transformer. Avec les énormes volumes de données et les ressources de calcul massives, c’est même l’une des raisons clés qui ont rendu possible la révolution actuelle de l’IA.
      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.
    • Pour apprendre le fonctionnement des Transformer, implémenter autograd me semble peu pertinent et hors périmètre. Je n’ose même pas imaginer écrire à la main les gradients d’un Transformer
  • Je pensais que ce serait une ressource gratuite, donc je suis allé directement sur GitHub. Je respecte le travail de l’auteur, mais je me demande s’il y a des ressources gratuites recommandables qui suivent une approche from scratch.
    • Andrej Karpathy, Neural Networks: Zero to Hero[1]
      [1] https://karpathy.ai/zero-to-hero.html
    • Pour un moteur d’inférence GPT-2 en NumPy, il y a https://jaykmody.com/blog/gpt-from-scratch/ ; puis pour ajouter une implémentation du KV cache, voir https://www.dipkumar.dev/becoming-the-unbeatable/posts/gpt-k...
    • Je recommanderais https://course.fast.ai/
      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
    • Honnêtement, j’ai du mal à comprendre pourquoi quelqu’un qui travaille dans l’IA trouverait que 50 $ est encore trop cher pour acquérir une compréhension plus profonde du sujet.
      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
    • J’ai ajouté des notes explicatives dans les notebooks Jupyter, donc j’espère que le dépôt pourra aussi se lire de façon autonome
  • Je me demande si ce livre permettrait d’apprendre le reinforcement learning.
    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.
    • J’ai beaucoup aimé "Grokking Deep Reinforcement Learning"[0]. Il ne parle pas des Transformer.
      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/
  • Le renforcement par apprentissage est un domaine de recherche entièrement distinct des LLM. On le voit souvent comme une sous-partie du machine learning, et le classique Machine Learning de Tom Mitchell contient aussi une excellente section sur le Q-learning, mais cela a peu de lien avec les travaux modernes en machine learning
    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
  • Dans ce cas, je recommanderais plutôt un livre dédié au renforcement par apprentissage. La partie sur le renforcement par apprentissage dans les LLM est très spécifique aux LLM, et ne traitera sans doute que des éléments de contexte strictement pertinents
    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é
  • Cela vaut la peine d’essayer Spinning Up d’OpenAI : https://spinningup.openai.com/en/latest/
  • Le TP de Q-learning de ce cours traite exactement de cela
    https://www.ida.liu.se/~TDDC17/info/labs/rl.en.shtml
  • Je me demande comment cela se compare à la vidéo de Karpathy[0]. J’essaie de débuter avec les LLM et de voir quelle est la meilleure ressource pour acquérir ce niveau de compréhension
    [0] https://www.youtube.com/watch?v=kCc8FmEb1nY
    • Je n’ai pas regardé la vidéo jusqu’au bout, mais d’après ce que j’en ai parcouru rapidement, le livre présente quelques différences
      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
    • C’est difficile à comprendre si l’on ne connaît pas déjà l’essentiel du contenu
      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
  • Je ne m’intéresse pas particulièrement aux modèles de langage en eux-mêmes, mais certaines techniques utilisées dans les modèles de langage m’intéressent pour d’autres usages
    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
    • Le mécanisme d’attention implémenté dans ce livre est spécifique aux LLM dans la mesure où l’entrée est du texte, mais fondamentalement, c’est le même mécanisme d’attention que celui utilisé dans les Vision Transformers
      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...)
  • L’architecture du modèle elle-même n’est pas si compliquée, surtout avec torch. L’ensemble du processus est aussi assez linéaire, donc cela semble être un projet réalisable à tenter