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

Este modelo se publicó en HF papers el 31 de julio de 2024 y se contribuyó a Hugging Face Transformers el 24 de abril de 2024.

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?")

Resumen

El modelo Llama3 fue propuesto en Introducing Meta Llama 3: The most capable openly available LLM to date por el equipo de IA de Meta.

El resumen del artículo de blog es el siguiente:

Hoy estamos emocionados de compartir los dos primeros modelos de la próxima generación de Llama, Meta Llama 3, disponibles para un uso amplio. Esta versión incluye modelos de lenguaje preentrenados y ajustados con instrucciones, con 8B y 70B parámetros, que pueden soportar una amplia gama de casos de uso. Esta nueva generación de Llama demuestra un rendimiento de vanguardia en una amplia variedad de benchmarks de la industria y ofrece nuevas capacidades, incluido un razonamiento mejorado. Creemos que estos son los mejores modelos de código abierto de su clase, sin discusión. En apoyo a nuestro enfoque abierto de larga data, estamos poniendo Llama 3 en manos de la comunidad. Queremos impulsar la próxima ola de innovación en IA en toda la pila: desde aplicaciones hasta herramientas para desarrolladores, evaluaciones, optimizaciones de inferencia y más. No podemos esperar a ver lo que construyan y esperamos sus comentarios.

Puedes consultar todos los puntos de control de los modelos Llama3 aquí. El código original de los autores se encuentra aquí.

Consejos de uso

Los modelos Llama3 se entrenaron usando bfloat16, pero la inferencia original utiliza float16. Los puntos de control subidos al Hub usan dtype = 'float16', que se utilizará por la API de AutoModel para convertir los puntos de control de torch.float32 a torch.float16.

El dtype de los pesos en línea es mayormente irrelevante, a menos que estés usando dtype="auto" al inicializar un modelo con model = AutoModelForCausalLM.from_pretrained("path", dtype = "auto"). La razón es que el modelo primero se descarga (usando el dtype de los checkpoints en línea), luego se convierte al dtype predeterminado de torch (se convierte en torch.float32, device_map=“auto”) y, finalmente, si se proporciona un dtype o torch_dtype en la configuración, se utilizará.

No se recomienda entrenar el modelo en float16 y se sabe que produce nan; por lo tanto, el modelo debe entrenarse en bfloat16.

Consejos:

  • Los pesos de los modelos Llama3 se pueden obtener completando este formulario

  • La arquitectura es exactamente la misma que la de Llama2.

  • El tokenizador es un modelo BPE basado en tiktoken (a diferencia del basado en la implementación de sentencepiece para Llama2). La principal diferencia es que ignora las reglas de fusión BPE cuando un token de entrada forma parte del vocabulario. Esto significa que, si no existe ninguna fusión para producir "hugging", en lugar de tener las unidades más pequeñas, como ["hug","ging"] que forman 2 tokens, si "hugging" forma parte del vocabulario, se devolverá automáticamente como un token.

  • El modelo original utiliza pad_id = -1, lo que significa que no hay un token de relleno. No podemos usar la misma lógica; asegúrate de añadir un token de relleno usando tokenizer.add_special_tokens({"pad_token":"<pad>"}) y redimensiona la capa de incrustación de tokens en consecuencia. También debes establecer model.config.pad_token_id. La capa embed_tokens del modelo se inicializa con self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.config.padding_idx), lo que garantiza que la codificación del token de relleno produzca ceros, por lo que se recomienda pasarlo durante la inicialización.

  • El checkpoint original se puede convertir usando el script de conversión. El script se puede llamar con el siguiente comando (ejemplo):

    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
  • Tras la conversión, el modelo y el tokenizador se pueden cargar mediante:

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

    Tenga en cuenta que la ejecución del script requiere suficiente RAM de CPU para alojar el modelo completo en precisión float16 (aunque las versiones más grandes se distribuyan en varios checkpoints, cada uno contiene una parte de cada peso del modelo, por lo que es necesario cargarlos todos en RAM). Para el modelo de 75B, se necesitan 145 GB de RAM.

  • Al usar Flash Attention 2 mediante attn_implementation="flash_attention_2", no pases dtype al método de clase from_pretrained y utiliza el entrenamiento con precisión mixta automática. Al usar Trainer, basta con especificar fp16 o bf16 como True. En caso contrario, asegúrate de estar usando torch.autocast. Esto es necesario porque Flash Attention solo admite los tipos de datos fp16 y bf16.

Recursos

Hay una gran cantidad de recursos interesantes ya disponibles en la página de documentación de Llama2, ¡invitando a los colaboradores a añadir aquí nuevos recursos curados para Llama3! 🤗

Update on GitHub