Transformers documentation

Llama3

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Ce modèle a été publié dans HF papers le 2024-07-31 et contribué à Hugging Face Transformers le 2024-04-24.

Llama3

Tensor parallelism
import torch

import transformers


model_id = "meta-llama/Meta-Llama-3-8B"

pipeline = transformers.pipeline("text-generation", model=model_id, model_kwargs={"dtype": torch.bfloat16}, device_map="auto")
pipeline("Hey how are you doing today?")

Aperçu

Le modèle Llama3 a été proposé dans Introducing Meta Llama 3: The most capable openly available LLM to date par l'équipe Meta AI.

L’abstract du billet de blog est le suivant :

Aujourd’hui, nous avons le plaisir de partager les deux premiers modèles de la prochaine génération de Llama, Meta Llama 3, disponibles pour un usage large. Cette version propose des modèles de langage pré-entraînés et affinés par instruction, dotés de 8B et 70B paramètres, capables de soutenir une large gamme de cas d’usage. Cette nouvelle génération de Llama démontre des performances de pointe sur un large éventail de benchmarks sectoriels et offre de nouvelles capacités, notamment un raisonnement amélioré. Nous considérons qu’il s’agit des meilleurs modèles open source de leur catégorie, point final. Dans le cadre de notre approche ouverte de longue date, nous remettons Llama 3 entre les mains de la communauté. Nous souhaitons lancer la prochaine vague d’innovation en IA à travers toute la pile — des applications aux outils de développement, en passant par les évaluations et les optimisations d’inférence, et bien plus encore. Nous attendons avec impatience de voir ce que vous allez créer et nous réjouissons de recevoir vos retours.

Retrouvez tous les points de contrôle des modèles Llama3 ici. Le code original des auteurs est disponible ici.

Conseils d'utilisation

Les modèles Llama3 ont été entraînés en utilisant bfloat16, mais l'inférence d'origine utilise float16. Les points de contrôle téléversés sur le Hub utilisent dtype = 'float16', ce qui sera utilisé par l'API AutoModel pour convertir les points de contrôle de torch.float32 vers torch.float16.

Le dtype des poids en ligne est généralement sans importance, sauf si vous utilisez dtype="auto" lors de l’initialisation d’un modèle via model = AutoModelForCausalLM.from_pretrained("path", dtype = "auto"). La raison en est que le modèle est d’abord téléchargé (en utilisant le dtype des points de contrôle en ligne), puis converti au dtype par défaut de torch (devient torch.float32, device_map=“auto”), et enfin, si un dtype ou un torch_dtype est fourni dans la configuration, celui-ci est utilisé.

L’entraînement du modèle en float16 n’est pas recommandé et est connu pour produire des nan ; le modèle doit donc être entraîné en bfloat16.

Astuces :

  • Les poids des modèles Llama3 peuvent être obtenus en remplissant ce formulaire

  • L'architecture est exactement la même que celle de Llama2.

  • Le tokenizer est un modèle BPE basé sur tiktoken (par opposition à celui basé sur l'implémentation sentencepiece pour Llama2). La principale différence est qu'il ignore les règles de fusion BPE lorsqu'un jeton d'entrée fait partie du vocabulaire. Cela signifie que si aucune fusion n'existe pour produire "hugging", au lieu d'obtenir les plus petites unités, comme ["hug","ging"] formant 2 jetons, si "hugging" fait partie du vocabulaire, il sera automatiquement renvoyé en tant que jeton.

  • Le modèle d’origine utilise pad_id = -1, ce qui signifie qu’il n’y a pas de jeton de bourrage. Nous ne pouvons pas appliquer la même logique : assurez-vous d’ajouter un jeton de bourrage à l’aide de tokenizer.add_special_tokens({"pad_token":"<pad>"}) et redimensionnez l’incorporation des jetons en conséquence. Vous devez également définir model.config.pad_token_id. La couche embed_tokens du modèle est initialisée avec self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.config.padding_idx), ce qui garantit que l’encodage du jeton de bourrage produit des zéros ; il est donc recommandé de le passer lors de l’initialisation.

  • Le point de contrôle d'origine peut être converti à l'aide du script de conversion. Le script peut être appelé avec la commande (exemple) suivante :

    python src/transformers/models/llama/convert_llama_weights_to_hf.py \
        --input_dir /path/to/downloaded/llama/weights --model_size 7B --output_dir /output/path --llama_version 3
  • Après conversion, le modèle et le tokeniseur peuvent être chargés via :

    from transformers import AutoModelForCausalLM, AutoTokenizer
    
    tokenizer = AutoTokenizer.from_pretrained("/output/path")
    model = AutoModelForCausalLM.from_pretrained("/output/path", device_map="auto")

    Notez que l’exécution du script nécessite suffisamment de RAM CPU pour héberger l’ensemble du modèle en précision float16 (même si les plus grandes versions sont fournies sous forme de plusieurs points de contrôle, chacun contient une partie de chaque poids du modèle, il faut donc les charger tous en RAM). Pour le modèle 75B, il faut ainsi 145 Go de RAM.

  • Lors de l’utilisation de Flash Attention 2 via attn_implementation="flash_attention_2", ne passez pas dtype à la méthode de classe from_pretrained et utilisez l’entraînement en précision mixte automatique. Avec Trainer, il suffit de définir fp16 ou bf16 sur True. Sinon, assurez-vous d’utiliser torch.autocast. Cela est nécessaire car Flash Attention ne prend en charge que les types de données fp16 et bf16.

Ressources

De nombreuses ressources intéressantes sont déjà disponibles sur la page de documentation de Llama2, invitant les contributeurs à ajouter ici de nouvelles ressources sélectionnées pour Llama3 ! 🤗

Update on GitHub