Transformers documentation
Llama3
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
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
Llama3se entrenaron usandobfloat16, pero la inferencia original utilizafloat16. Los puntos de control subidos al Hub usandtype = 'float16', que se utilizará por la API deAutoModelpara convertir los puntos de control detorch.float32atorch.float16.El
dtypede los pesos en línea es mayormente irrelevante, a menos que estés usandodtype="auto"al inicializar un modelo conmodel = AutoModelForCausalLM.from_pretrained("path", dtype = "auto"). La razón es que el modelo primero se descarga (usando eldtypede los checkpoints en línea), luego se convierte aldtypepredeterminado detorch(se convierte entorch.float32, device_map=“auto”) y, finalmente, si se proporciona undtypeotorch_dtypeen la configuración, se utilizará.No se recomienda entrenar el modelo en
float16y se sabe que producenan; por lo tanto, el modelo debe entrenarse enbfloat16.
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 usandotokenizer.add_special_tokens({"pad_token":"<pad>"})y redimensiona la capa de incrustación de tokens en consecuencia. También debes establecermodel.config.pad_token_id. La capaembed_tokensdel modelo se inicializa conself.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 3Tras 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 pasesdtypeal método de clasefrom_pretrainedy utiliza el entrenamiento con precisión mixta automática. Al usarTrainer, basta con especificarfp16obf16comoTrue. En caso contrario, asegúrate de estar usandotorch.autocast. Esto es necesario porque Flash Attention solo admite los tipos de datosfp16ybf16.
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