35 points par GN⁺ 2024-05-20 | 1 commentaires | Partager sur WhatsApp
  • Implémentation de Llama3 à partir de zéro à l’aide d’un seul tenseur et de multiplications matricielles.
  • Chargement direct des tenseurs depuis les fichiers du modèle Llama3 fournis par Meta.

Résumé de l’implémentation from scratch du modèle LLaMA-3

Configuration du tokenizer

  • Configuration du tokenizer avec la bibliothèque Tiktoken.
  • Définition des tokens spéciaux et ajout au tokenizer.

Lecture des fichiers du modèle

  • Chargement du fichier du modèle (consolidated.00.pth) avec PyTorch.
  • Lecture de la configuration du modèle depuis le fichier params.json.
    • Inclut des informations comme le nombre de dimensions (dim), le nombre de couches (n_layers) et le nombre de têtes (n_heads).

Conversion du texte en tokens

  • Conversion du texte du prompt en séquence de tokens à l’aide du tokenizer.
  • Conversion de chaque token en son embedding correspondant.
  • Normalisation des embeddings avec RMS normalization.

Implémentation de l’attention

  • Chargement depuis le modèle des matrices de requête (wq), de clé (wk), de valeur (wv) et de sortie (wo).
  • Calcul des vecteurs de requête, de clé et de valeur pour chaque token.
  • Ajout des informations de position avec RoPE (Rotary Positional Embedding).
  • Calcul des scores d’attention à partir du produit scalaire entre requêtes et clés.
  • Masquage des scores d’attention pour les tokens futurs.
  • Application de la fonction Softmax pour calculer la distribution d’attention.
  • Calcul du résultat de l’attention en multipliant la distribution d’attention par les vecteurs de valeur.

Attention multi-têtes

  • Exécution du calcul d’attention pour toutes les têtes d’attention.
  • Concaténation des résultats de chaque tête pour produire le résultat final de l’attention.

Réseau feed-forward

  • Implémentation d’un réseau feed-forward utilisant la fonction d’activation SwiGLU (Swish Gated Linear Unit).
  • Génération de l’embedding final en additionnant le résultat de l’attention et la sortie du réseau feed-forward.

Répétition sur l’ensemble des couches

  • Répétition des calculs d’attention et du réseau feed-forward pour toutes les couches du transformer.
  • Normalisation finale des embeddings avec RMS normalization.

Prédiction du token

  • Calcul des logits en multipliant l’embedding final par la matrice de sortie.
  • Prédiction du token suivant comme celui ayant la valeur la plus élevée dans les logits.
  • Décodage du token prédit pour produire la sortie.

L’avis de GN⁺

  • Cet article est très utile pour comprendre la structure interne et le fonctionnement du modèle Llama3. En particulier, le fait de l’implémenter à partir de zéro permet de voir clairement comment chaque composant du modèle interagit avec les autres.
  • Cela peut être assez complexe pour un ingénieur logiciel débutant. Cependant, l’explication est bien structurée étape par étape, ce qui permet de suivre en prenant son temps.
  • Il permet d’apprendre comment améliorer les performances du modèle en introduisant des concepts avancés comme RoPE (Rotary Positional Embedding). Cela peut être utile pour implémenter ou améliorer d’autres modèles de NLP.
  • Cet article permet de comprendre en profondeur la structure interne et le fonctionnement des modèles de deep learning. Cela sera d’une grande aide pour optimiser ou déboguer un modèle.

1 commentaires

 
2147483647 2024-05-23

Anya est mignonne.