Transformers documentation
Llama3
Ce modèle a été publié dans HF papers le 2024-07-31 et contribué à Hugging Face Transformers le 2024-04-24.
Llama3
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
Llama3ont été entraînés en utilisantbfloat16, mais l'inférence d'origine utilisefloat16. Les points de contrôle téléversés sur le Hub utilisentdtype = 'float16', ce qui sera utilisé par l'APIAutoModelpour convertir les points de contrôle detorch.float32verstorch.float16.Le
dtypedes poids en ligne est généralement sans importance, sauf si vous utilisezdtype="auto"lors de l’initialisation d’un modèle viamodel = AutoModelForCausalLM.from_pretrained("path", dtype = "auto"). La raison en est que le modèle est d’abord téléchargé (en utilisant ledtypedes points de contrôle en ligne), puis converti audtypepar défaut detorch(devienttorch.float32, device_map=“auto”), et enfin, si undtypeou untorch_dtypeest fourni dans la configuration, celui-ci est utilisé.L’entraînement du modèle en
float16n’est pas recommandé et est connu pour produire desnan; le modèle doit donc être entraîné enbfloat16.
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 detokenizer.add_special_tokens({"pad_token":"<pad>"})et redimensionnez l’incorporation des jetons en conséquence. Vous devez également définirmodel.config.pad_token_id. La coucheembed_tokensdu modèle est initialisée avecself.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 3Aprè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 pasdtypeà la méthode de classefrom_pretrainedet utilisez l’entraînement en précision mixte automatique. AvecTrainer, il suffit de définirfp16oubf16surTrue. Sinon, assurez-vous d’utilisertorch.autocast. Cela est nécessaire car Flash Attention ne prend en charge que les types de donnéesfp16etbf16.
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