12 points par GN⁺ 2024-05-29 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Explication de la méthode pour reproduire le modèle GPT-2 (124M) avec llm.c en 90 minutes pour 20 $
  • GPT-2 (124M) est le plus petit modèle publié par OpenAI en 2019
  • En utilisant un nœud Lambda équipé de 8X A100 80GB SXM, le coût est d’environ 14 $/heure, soit environ 20 $ au total
    • L’entraînement est aussi possible sur un seul GPU, mais cela prend plus de temps (4 à 24 heures)

Comparaison des résultats

  • Sur le jeu de validation FineWeb, les performances sont meilleures que celles du checkpoint publié par OpenAI
    • Cela dit, GPT-2 a été entraîné sur WebText, la comparaison n’est donc pas totalement équitable
  • La précision sur HellaSwag a également été mesurée, avec un score de 29,9, proche des 33,7 de GPT-3 Small (124M)
    • Le score de GPT-2 (124M), à 29,4, est déjà dépassé
    • Ici toutefois, l’entraînement a été fait sur 10B tokens, contre 300B tokens pour GPT-3

Configuration minimale

  • GPU requis (Lambda Labs recommandé)
  • Guide basé sur Linux x86 64 bits Ubuntu 22.04 avec CUDA 12
  • Installation de miniconda puis de la version nightly de PyTorch (optionnel)
  • Installation des paquets nécessaires pour le tokenizer
  • Installation de cuDNN pour de meilleures performances (optionnel)
  • Installation de MPI en cas d’utilisation de plusieurs GPU (optionnel)
  • Prétraitement du jeu de données FineWeb 10B tokens (~1 heure)
  • Compilation de llm.c (précision mixte, utilisation de cuDNN FlashAttention)

Lancer l’entraînement

  • Exemple de commande pour l’utilisation sur un seul GPU
  • Exécution via mpirun pour une configuration multi-GPU (8 GPU)
  • Explication des principaux arguments
    • -i, -j : chemins des données d’entraînement / validation
    • -o : chemin de sauvegarde des logs et checkpoints
    • -e : initialisation du modèle (GPT-2 depth 12)
    • -b : taille du micro-batch (à réduire en cas de manque de mémoire)
    • -t : longueur maximale de séquence
    • -d : taille totale du batch (voir l’article GPT-3)
    • -r : paramètre Recompute (économie de mémoire)
    • -z : ZeRO-1 (sharding de l’état de l’optimiseur)
    • Autres paramètres comme le weight decay, le learning rate, la fréquence des checkpoints, etc.

Processus d’entraînement

  • Avec 10B tokens d’entraînement et une taille de batch de 0.5M, environ 20K étapes sont prévues
  • Sur un GPU A100 40GB PCIe, le temps par étape, le MFU et le débit de traitement des tokens sont affichés
  • Au début de l’entraînement, un phénomène de gradient exploding apparaît, mais il est résolu par clipping

Visualisation

  • Un notebook Jupyter est fourni pour parser les logs et visualiser les courbes d’entraînement

Tokenizer

  • Nécessaire pour convertir des tokens entiers en chaînes de caractères
  • Peut être généré via un script PyTorch

Sampling

  • Pour l’instant, ce n’est pas optimisé pour l’inférence
  • Avec quelques modifications de code, le sampling unconditional/conditional est possible

Structure du code

  • L’essentiel de l’implémentation se trouve dans le fichier train_gpt2.cu
  • Les 500 premières lignes concernent la configuration de MPI, NCCL, cuDNN, cuBLAS, etc.
  • Les 1500 lignes suivantes couvrent le forward/backward du Transformer
  • Les 1000 lignes suivantes implémentent le modèle GPT-2
  • Les 1000 dernières lignes couvrent la boucle d’entraînement, le parsing des arguments, etc.

Modèle 350M

  • 10B tokens ne suffisent pas, 30B tokens sont utilisés
  • Avec 8X A100 80GB, l’entraînement dure 14 heures pour un coût d’environ 200 $

FAQ

  • Sampling possible ? : Oui, mais c’est inefficace.
  • Possibilité de chat ? : Pour l’instant, seul le préentraînement est possible ; le fine-tuning pour le chat n’est pas pris en charge.
  • Entraînement distribué multi-nœuds : Possible, mais pas encore testé.
  • Déterminisme au bit près : Presque déterministe, mais certains patchs de kernel sont nécessaires.
  • Entraînement en FP8 possible ? : Actuellement l’entraînement se fait en BF16, le support FP8 est prévu bientôt.
  • Prise en charge des GPU non NVIDIA ? : Pour l’instant, seul C/CUDA est pris en charge.

L’avis de GN⁺

  • GPT-2 est un modèle extrêmement important comme point de départ des LLM modernes. Par la suite, GPT-3 et les autres LLM ne diffèrent pas fondamentalement de GPT-2.
  • Ce projet permet à tout le monde d’entraîner directement un modèle de niveau GPT-2 à un coût raisonnable. Cela devrait beaucoup aider à mieux comprendre les LLM.
  • En revanche, comme ce n’est pas encore optimisé pour l’inférence, son utilisation dans un service réel reste limitée. Le fine-tuning en modèle conversationnel n’est pas non plus pris en charge.
  • À l’heure actuelle, seuls les GPU NVIDIA sont pris en charge, mais on peut espérer à l’avenir un support de plateformes variées comme AMD ou Apple Silicon.
  • Parmi les projets open source poursuivant des objectifs similaires, on peut citer Megatron-LM, DeepSpeed et FairSeq. Chacun a ses avantages et ses inconvénients, et le choix dépendra de l’usage visé.
  • C’est un projet très encourageant pour dynamiser l’écosystème de développement des LLM. La suite est très prometteuse.

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.