- 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
Anya est mignonne.