1 points par GN⁺ 1 시간 전 | 1 commentaires | Partager sur WhatsApp
  • Train Your Own LLM From Scratch est un atelier pratique où l’on écrit soi-même chaque élément du pipeline d’entraînement de GPT afin de comprendre ce que fait chaque composant et pourquoi il est nécessaire
  • L’objectif est de générer un texte dans le style de Shakespeare avec un modèle GPT entraîné depuis zéro sur un notebook, et le modèle a été réduit à environ 10M de paramètres pour pouvoir être terminé en une seule session d’atelier
  • Alors que nanoGPT vise à reproduire GPT-2 avec 124M de paramètres, ce projet ne conserve que l’essentiel et a été conçu pour pouvoir être entraîné sur un notebook en moins d’une heure
  • Les composants à écrire soi-même sont le tokenizer, l’architecture de modèle basée sur Transformer, la boucle d’entraînement et la génération de texte ; à la fin, on complète directement model.py, train.py et generate.py
  • Les prérequis se limitent à être à l’aise avec la lecture de code Python ; aucune expérience en machine learning n’est nécessaire, et Python 3.12+ est requis
  • L’environnement d’exécution prend en charge les notebooks et ordinateurs de bureau sur Mac, Linux et Windows, et l’entraînement utilise automatiquement MPS sur GPU Apple Silicon, CUDA sur GPU NVIDIA, ou le CPU
  • Pour l’installation en local, le flux recommandé consiste à exécuter uv sync avec uv ; sans environnement local, il est possible d’importer les fichiers dans Google Colab et d’exécuter !python train.py
  • L’atelier couvre successivement un tokenizer au niveau des caractères, les embeddings, la self-attention, LayerNorm, les blocs MLP, la fonction de perte, AdamW, le gradient clipping, le scheduling du taux d’apprentissage, ainsi que l’échantillonnage avec temperature et top-k
  • L’architecture de base convertit le texte d’entrée en IDs de tokens au niveau des caractères, le fait passer par des embeddings de tokens et de position, puis à travers plusieurs blocs Transformer avant de produire les logits servant à calculer les probabilités du token suivant
  • Les configurations de modèle proposées sont Tiny avec environ 0.5M de paramètres et environ 5 minutes sur un M3 Pro, Small avec environ 4M et environ 20 minutes, et la valeur par défaut Medium avec environ 10M et environ 45 minutes d’entraînement
  • Toutes les configurations utilisent une tokenisation au niveau des caractères avec vocab_size=65 et block_size=256, adaptées à de petits jeux de données d’environ 1 Mo comme Shakespeare
  • La tokenisation BPE est également abordée : avec un vocabulaire volumineux comme les 50,257 tokens de GPT-2, la plupart des bigrammes de tokens deviennent trop rares sur un petit jeu de données, ce qui rend l’apprentissage des motifs difficile ; le passage au BPE est envisagé pour des jeux de données plus grands
  • Parmi les principales références figurent nanoGPT, build-nanogpt video lecture, Karpathy's microgpt, nanochat, Attention Is All You Need (2017), GPT-2 paper (2019) et le TinyStories paper

1 commentaires

 
GN⁺ 1 시간 전
Commentaires sur Hacker News
  • Si ce contenu vous intéresse, je recommande aussi vivement le cours CS336 de Stanford. Il couvre un programme similaire, mais beaucoup plus en profondeur, et présente aussi bien l’intuition théorique sur des sujets comme les lois de scaling que la perspective systèmes avec l’optimisation de noyaux et le profiling
    Cela dit, il faut faire les devoirs soi-même : https://cs336.stanford.edu/

    • Je ne sais pas où voir les cours. Je ne vois pas d’option pour les suivre
  • Petite autopromo : il existe une série de notebooks Jupyter qui expliquent le fonctionnement du machine learning depuis les bases
    https://github.com/nickyreinert/DeepLearning-with-PyTorch-fr...
    Et bien sûr, elle montre aussi comment construire un LLM à partir de zéro
    https://github.com/nickyreinert/basic-llm-with-pytorch/blob/...

  • Je viens justement de commencer le dépôt/livre/cours de Sebastian Raschka, Build a Large Language Model (From Scratch). Devoir choisir entre plusieurs ressources d’apprentissage est sans doute un bon problème à avoir
    [0] https://github.com/rasbt/LLMs-from-scratch
    [1] https://www.manning.com/books/build-a-large-language-model-f...
    [2] https://magazine.sebastianraschka.com/p/coding-llms-from-the...

    • J’ai vraiment beaucoup aimé ce livre. Il est très bien pour celles et ceux qui veulent comprendre la structure interne réelle et voir des exemples concrets d’exécution de tous les calculs
  • Je fais ça depuis ma naissance. Le début a été difficile, mais je m’améliore progressivement

    • En réalité, j’ai surtout entraîné des modèles physiques, avec un LLM greffé dessus
  • Je l’avais fait à l’époque où fast.ai était encore relativement nouveau, avec ULMFiT. BERT était probablement alors l’état de l’art du moment, et l’architecture permettait d’entraîner un modèle de base puis de le spécialiser avec une tête
    Pour le modèle de base, on utilisait l’intégralité de Wikipedia, plus quelques Go de tweets récupérés via firehose. J’avais accès à un labo avec une vingtaine de machines destinées au développement de jeux, probablement de l’ordre de GTX 2080. Il fallait environ une demi-journée pour faire passer une version tokenisée de Wikipedia, donc je lançais des configurations différentes sur chaque machine pour faire du tuning d’hyperparamètres, puis le lendemain je repartais du meilleur résultat. C’était toujours amusant d’arriver le matin et de découvrir les résultats
    L’ingénierie était affreuse et totalement improvisée, mais j’ai énormément appris. Les résultats étaient corrects sans plus, on faisait de la classification de tweets, mais cela m’a donné une idée de la quantité de puissance GPU et des difficultés d’ingénierie nécessaires pour faire ça sérieusement. Je n’avais pas complètement saisi le potentiel de la génération, mais je me suis bien amusé à rire devant les tweets que j’avais fait générer par curiosité

  • On dirait presque une transcription à l’écrit de cette vidéo d’Andrej Karpathy (https://youtu.be/kCc8FmEb1nY), non ? Ou bien j’ai raté quelque chose ?

    • La page explique la relation avec nanoGPT
      En gros : « nanoGPT vise à reproduire GPT-2 (124 millions de paramètres) et couvre énormément de sujets. Ce projet en extrait l’essentiel et le réduit à un modèle d’environ 10 millions de paramètres, entraînable sur un notebook en moins d’une heure… »
    • Oui, tu as raté quelque chose
  • Pour ajouter du contexte, c’est l’un des développeurs de MLX et un chercheur en machine learning compétent

    • Source ? Ça ne me semble pas correct
  • Il est présenté comme un « atelier pratique où l’on écrit soi-même chaque brique du pipeline d’entraînement d’un GPT afin de comprendre ce que fait chaque composant et pourquoi il est nécessaire », mais comme torch apparaît dans les dépendances, j’imagine que les tenseurs et la rétropropagation ne sont pas implémentés à la main mais simplement pris comme acquis. Du coup, je ne suis pas sûr qu’on puisse vraiment parler de “from scratch”
    J’ai fait quelque chose de similaire en Rust, avec un peu d’aide de l’IA, mais en me limitant strictement à la bibliothèque standard, sans dépendances. Du coup, il a fallu implémenter bien davantage : conception des tenseurs, notions de noyaux, un simple optimiseur par descente de gradient, un parseur JSON maison, une abstraction de parallélisme de données CPU façon rayon, etc. C’était très amusant une fois que tout a été relié et que ça fonctionnait. C’était extrêmement lent, mais ça marchait

  • Je ne suis plus très sûr qu’utiliser PyTorch puisse encore être considéré comme “from scratch”. Je ne dis pas qu’il faut pousser le raisonnement jusqu’à éviter même la bibliothèque standard, mais à partir du moment où l’on importe une bibliothèque parfaitement adaptée au besoin, ça ne donne plus vraiment l’impression de partir de zéro

    • Ce n’est pas faux, mais pour la plupart des gens en machine learning, PyTorch est de fait la bibliothèque standard
  • « Entraîner un LM from scratch » serait peut-être plus exact. Je doute qu’ils aient les machines nécessaires pour construire quelque chose d’assez grand pour mériter le terme “Large”

    • Avec une carte de crédit aux plafonds classiques, on peut louer suffisamment de ressources chez des fournisseurs de néocloud comme HuggingFace ou Mistral Forge
      Je ne dis pas que ça en vaut la peine, mais il n’est pas nécessaire d’acheter soi-même des GPU pour apprendre
    • On peut entraîner de bout en bout un modèle de 1,6 milliard de paramètres sur une seule 3090. C’est déjà un modèle assez grand
    • Moi aussi j’ai un demi-téraoctet de RAM ! C’est de la DDR4, mais ça reste de la RAM
      Et j’ai aussi 48 cœurs processeur ! Pas d’AVX512, mais on peut quand même calculer
      On devrait pouvoir entraîner un LLM suffisant. Ou du moins notre famille devrait pouvoir le faire… Il faudra peut-être que mon enfant reprenne le projet et le poursuive
      Plus sérieusement, j’ai l’impression que soit tu rates l’essentiel, soit tu pinailles inutilement, soit tu te trompes. Ici, il s’agit d’apprendre les concepts, et le reste est largement secondaire
      Si l’on part sur l’idée que c’est du pinaillage ou une erreur, quelle est la référence documentée pour décider ce qui mérite le qualificatif de “large” dans “large language model” ? GPT-2 était qualifié de “large language model” à l’époque, et l’est encore aujourd’hui, avec 1,5 milliard de paramètres. De nos jours, on peut trouver des GPU grand public capables d’entraîner ce genre de modèle pour environ 400 $