Transformers documentation
Fundamentos do chat
Fundamentos do chat
Modelos de chat são modelos conversacionais aos quais você pode enviar uma mensagem e receber uma resposta. A maioria dos modelos de linguagem a partir de meados de 2023 são modelos de chat e podem ser chamados de modelos “instruct” ou “instruction-tuned”. Modelos que não suportam chat são frequentemente chamados de modelos “base” ou “pretrained”.
Modelos maiores e mais recentes são geralmente mais capazes, mas modelos especializados em determinados domínios (texto médico, jurídico, idiomas não ingleses, etc.) podem frequentemente superar esses modelos maiores. Experimente rankings como OpenLLM e LMSys Chatbot Arena para ajudá-lo a identificar o melhor modelo para o seu caso de uso.
Este guia mostra como carregar rapidamente modelos de chat no Transformers pela linha de comando, como construir e formatar uma conversa e como conversar usando o TextGenerationPipeline.
CLI de chat
Depois de instalar o Transformers, você pode conversar com um modelo diretamente pela linha de comando. O comando abaixo inicia uma sessão interativa com um modelo, com alguns comandos básicos listados no início da sessão.
Para os comandos a seguir, verifique se
transformers serveestá em execução.
transformers chat Qwen/Qwen2.5-0.5B-Instruct

Você pode iniciar o CLI com flags generate arbitrárias, no formato arg_1=value_1 arg_2=value_2 ...
transformers chat Qwen/Qwen2.5-0.5B-Instruct do_sample=False max_new_tokens=10
Para obter a lista completa de opções, execute o comando abaixo.
transformers chat -h
O chat é implementado sobre a AutoClass, utilizando ferramentas de text generation e chat. Ele usa o CLI transformers serve por baixo dos panos (docs).
TextGenerationPipeline
TextGenerationPipeline é uma classe de alto nível para geração de texto com um “modo de chat”. O modo de chat é ativado quando um modelo conversacional é detectado e o prompt de chat está corretamente formatado.
Modelos de chat aceitam uma lista de mensagens (o histórico do chat) como entrada. Cada mensagem é um dicionário com as chaves role e content.
Para iniciar o chat, adicione uma única mensagem de user. Você também pode incluir opcionalmente uma mensagem de system para dar ao modelo diretrizes sobre como se comportar.
chat = [
{"role": "system", "content": "You are a helpful science assistant."},
{"role": "user", "content": "Hey, can you explain gravity to me?"}
]Crie o TextGenerationPipeline e passe chat para ele. Para modelos grandes, definir device_map=“auto” ajuda a carregar o modelo mais rapidamente e o posiciona automaticamente no dispositivo mais rápido disponível.
import torch
from transformers import pipeline
pipeline = pipeline(task="text-generation", model="HuggingFaceTB/SmolLM2-1.7B-Instruct", dtype="auto", device_map="auto")
response = pipeline(chat, max_new_tokens=512)
print(response[0]["generated_text"][-1]["content"])Se isso funcionar com sucesso, você deve ver uma resposta do modelo! Se quiser continuar a conversa,
precisa atualizar o histórico do chat com a resposta do modelo. Você pode fazer isso adicionando o texto
a chat (usando o papel assistant) ou lendo response[0]["generated_text"], que contém
o histórico completo do chat, incluindo a resposta mais recente.
Depois de obter a resposta do modelo, você pode continuar a conversa adicionando uma nova mensagem de user ao histórico do chat.
chat = response[0]["generated_text"]
chat.append(
{"role": "user", "content": "Woah! But can it be reconciled with quantum mechanics?"}
)
response = pipeline(chat, max_new_tokens=512)
print(response[0]["generated_text"][-1]["content"])Ao repetir esse processo, você pode continuar a conversa por quanto tempo quiser, pelo menos até que o modelo esgote a janela de contexto ou até que a memória se esgote.
Desempenho e uso de memória
Os Transformers carregam modelos em precisão float32 por padrão, e, para um modelo de 8B, isso requer cerca de 32 GB de memória! Use o argumento torch_dtype="auto", que geralmente usa bfloat16 para modelos treinados com essa precisão, para reduzir o uso de memória.
Consulte a documentação de Quantization para obter mais informações sobre os diferentes backends de quantização disponíveis.
Para reduzir ainda mais o uso de memória, você pode quantizar o modelo para 8 bits ou 4 bits com bitsandbytes. Crie um BitsAndBytesConfig com as configurações de quantização desejadas e passe-o para o parâmetro model_kwargs dos pipelines. O exemplo abaixo quantiza um modelo para 8 bits.
from transformers import pipeline, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
pipeline = pipeline(task="text-generation", model="meta-llama/Meta-Llama-3-8B-Instruct", device_map="auto", model_kwargs={"quantization_config": quantization_config})Em geral, o tamanho do modelo e o desempenho estão diretamente correlacionados. Modelos maiores são mais lentos, além de exigirem mais memória, pois cada parâmetro ativo precisa ser lido da memória para cada token gerado. Isso é um gargalo para a geração de texto em LLMs e as principais opções para melhorar a velocidade de geração são quantizar um modelo ou usar hardware com maior largura de banda de memória. Adicionar mais poder de computação não ajuda de forma significativa.
Você também pode tentar técnicas como decodificação especulativa, em que um modelo menor gera tokens candidatos que são verificados pelo modelo maior. Se os tokens candidatos estiverem corretos, o modelo maior pode gerar mais de um token por vez. Isso alivia significativamente o gargalo de largura de banda e melhora a velocidade de geração.
Update on GitHubModelos Mixture-of-Expert (MoE), como Mixtral, Qwen2MoE e GPT-OSS, possuem muitos parâmetros, mas apenas “ativam” uma pequena fração deles para gerar cada token. Como resultado, os modelos MoE geralmente têm requisitos de largura de banda de memória muito menores e podem ser mais rápidos do que um LLM regular do mesmo tamanho. No entanto, técnicas como speculative decoding são ineficazes com modelos MoE, pois mais parâmetros são ativados a cada novo token especulado.