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 foi publicado no HF papers em 2024-07-31 e contribuído para o Hugging Face Transformers em 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?")

Visão geral

O modelo Llama3 foi proposto em Introducing Meta Llama 3: The most capable openly available LLM to date pela equipe de IA da Meta.

O resumo do post no blog é o seguinte:

Hoje, estamos animados em compartilhar os dois primeiros modelos da próxima geração do Llama, o Meta Llama 3, disponíveis para uso amplo. Este lançamento apresenta modelos de linguagem pré-treinados e ajustados por instrução com 8B e 70B parâmetros, capazes de suportar uma ampla variedade de casos de uso. Esta nova geração do Llama demonstra desempenho de estado da arte em uma ampla gama de benchmarks do setor e oferece novas capacidades, incluindo raciocínio aprimorado. Acreditamos que estes são os melhores modelos de código aberto de sua classe, ponto final. Em apoio à nossa abordagem aberta de longa data, estamos colocando o Llama 3 nas mãos da comunidade. Queremos impulsionar a próxima onda de inovação em IA em toda a pilha — de aplicativos a ferramentas de desenvolvimento, avaliações, otimizações de inferência e muito mais. Mal podemos esperar para ver o que vocês vão construir e aguardamos ansiosos pelos seus comentários.

Confira todos os checkpoints dos modelos Llama3 aqui. O código original dos autores pode ser encontrado aqui.

Dicas de uso

Os modelos Llama3 foram treinados usando bfloat16, mas a inferência original usa float16. Os checkpoints enviados no Hub usam dtype = 'float16', que será usado pela API AutoModel para converter os checkpoints de torch.float32 para torch.float16.

O dtype dos pesos online é, em grande parte, irrelevante, a menos que você esteja usando dtype="auto" ao inicializar um modelo com model = AutoModelForCausalLM.from_pretrained("path", dtype = "auto"). A razão é que o modelo será primeiro baixado (usando o dtype dos checkpoints online), em seguida será convertido para o dtype padrão do torch (torna-se torch.float32, device_map="auto") e, por fim, se houver um dtype ou torch_dtype fornecido na configuração, ele será utilizado.

Treinar o modelo em float16 não é recomendado e é conhecido por produzir nan; portanto, o modelo deve ser treinado em bfloat16.

Dicas:

  • Os pesos dos modelos Llama3 podem ser obtidos preenchendo este formulário

  • A arquitetura é exatamente a mesma do Llama2.

  • O tokenizer é um modelo BPE baseado em tiktoken (em oposição ao baseado na implementação sentencepiece para Llama2). A principal diferença é que ele ignora as regras de mesclagem BPE quando um token de entrada faz parte do vocabulário. Isso significa que, se não existir nenhuma mesclagem para produzir "hugging", em vez de ter as menores unidades, como ["hug","ging"] formando 2 tokens, se "hugging" fizer parte do vocabulário, ele será automaticamente retornado como um token.

  • O modelo original usa pad_id = -1, o que significa que não há token de padding. Não podemos usar a mesma lógica; certifique-se de adicionar um token de padding usando tokenizer.add_special_tokens({"pad_token":"<pad>"}) e redimensione o embedding de tokens de acordo. Você também deve definir o model.config.pad_token_id. A camada embed_tokens do modelo é inicializada com self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.config.padding_idx), o que garante que a codificação do token de padding resulte em zeros, portanto, é recomendável passá-lo durante a inicialização.

  • O checkpoint original pode ser convertido usando o script de conversão. O script pode ser chamado com o seguinte comando (exemplo):

    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
  • Após a conversão, o modelo e o tokenizador podem ser carregados por meio de:

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

    Observe que a execução do script requer RAM de CPU suficiente para hospedar o modelo inteiro em precisão float16 (mesmo que as versões maiores venham em vários checkpoints, cada um contém uma parte de cada peso do modelo, portanto, precisamos carregá-los todos na RAM). Para o modelo de 75B, são necessários 145GB de RAM.

  • Ao usar Flash Attention 2 via attn_implementation="flash_attention_2", não passe dtype para o método de classe from_pretrained e use treinamento com precisão mista automática. Ao usar Trainer, basta especificar fp16 ou bf16 como True. Caso contrário, verifique se está usando torch.autocast. Isso é necessário porque o Flash Attention suporta apenas os tipos de dados fp16 e bf16.

Recursos

Uma grande quantidade de recursos interessantes já está disponível na página de documentação do Llama2, convidando os contribuidores a adicionar novos recursos curados para o Llama3 aqui! 🤗

Update on GitHub