Tamanho de fonte
Alto contraste
Altura de linha

Rodando Modelos de LLM com HuggingFace e Python

Avatar de Adriano Soares Adriano Soares
9 minutos de leitura 4 meses atrás

Os modelos de linguagem de grande porte, ou LLMs (Large Language Models), têm revolucionado a forma como interagimos com a inteligência artificial. Eles são capazes de realizar uma variedade de tarefas, desde a geração de texto até a tradução automática. Neste artigo, vamos explorar como rodar modelos de llm de forma eficiente utilizando a biblioteca HuggingFace e Python. Vamos abordar desde a configuração do ambiente até a personalização da inferência, passando pelo carregamento de modelos pré-treinados e a utilização da API de inferência do HuggingFace.

HuggingFace

Introdução

O que são LLMs (Large Language Models)?

LLMs, ou Large Language Models, são modelos de linguagem de grande escala que utilizam redes neurais para processar e gerar textos. Esses modelos são treinados com enormes quantidades de dados textuais e possuem bilhões de parâmetros, permitindo-lhes compreender e produzir linguagem natural de forma sofisticada. Exemplos conhecidos de LLMs incluem o ChatGPT. Eles são capazes de prever a sequência de palavras mais provável em um texto, completando frases e respondendo perguntas com base em padrões aprendidos durante o treinamento.

Por que usar HuggingFace para LLMs?

A HuggingFace é uma escolha popular para trabalhar com Large Language Models (LLMs) devido à sua versatilidade e facilidade de uso. A plataforma oferece uma vasta coleção de modelos pré-treinados que podem ser facilmente integrados em aplicações, economizando tempo e recursos. Além disso, a HuggingFace fornece ferramentas como o pipeline, que simplificam a utilização de modelos de machine learning sem a necessidade de conhecimentos técnicos profundos. A possibilidade de rodar modelos localmente ou utilizar a Inference API para execução remota oferece flexibilidade para diferentes necessidades de desenvolvimento e produção.

Requisitos e pré-requisitos

Antes de começarmos, certifique-se de ter o Python instalado em sua máquina. Além disso, será necessário instalar algumas bibliotecas, como transformers e torch. Vamos abordar isso na próxima seção.

Configurando o Ambiente

Instalando as bibliotecas necessárias

Para começar, vamos instalar as bibliotecas essenciais. Abra o terminal e execute os seguintes comandos:

pip install transformers torch

Configurando o ambiente de desenvolvimento

Certifique-se de que seu ambiente de desenvolvimento está configurado corretamente. Recomendamos o uso de um ambiente virtual para evitar conflitos de dependências. Você pode criar um ambiente virtual com os seguintes comandos:

python -m venv myenv
source myenv/bin/activate  # No Windows, use `myenv\Scripts\activate`

Verificando a instalação

Após instalar as bibliotecas, é importante verificar se tudo está funcionando corretamente. Você pode fazer isso executando um pequeno script de teste:

from transformers import pipeline

generator = pipeline("text-generation", model="gpt2")
print(generator("Hello, world!", max_length=10))

Se o script rodar sem erros, você está pronto para seguir em frente.

Carregando Modelos Pré-treinados

O que são modelos pré-treinados?

Modelos pré-treinados são modelos que já foram treinados em grandes conjuntos de dados e estão prontos para serem usados em diversas tarefas. Eles economizam tempo e recursos, pois você não precisa treinar um modelo do zero.

Como encontrar e selecionar um modelo no HuggingFace Hub

O HuggingFace Hub é um repositório onde você pode encontrar milhares de modelos pré-treinados. Você pode navegar pelo site HuggingFace Hub para encontrar o modelo que melhor se adapta às suas necessidades. Você também pode selecionar modelos através da págin de leaderboard, que compara e classifica os melhores modelos de linguagem aramazenado no HuggingFace.

Carregando um modelo pré-treinado com transformers

Vamos carregar um modelo pré-treinado usando a biblioteca transformers. Aqui está um exemplo de como carregar o modelo Qwen/Qwen2-1.5B-Instruct:

from transformers import AutoModelForSequenceClassification, AutoTokenizer

model_name = "Qwen/Qwen2-1.5B-Instruct"
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

Realizando Inferência com Modelos de LLM

O que é inferência?

Inferência é o processo de usar um modelo treinado para fazer previsões ou gerar saídas com base em novos dados de entrada. No contexto de LLMs, isso pode incluir tarefas como geração de texto, tradução e classificação.

Usando pipelines para inferência

A biblioteca transformers facilita a realização de inferência através do uso de pipelines. Aqui está um exemplo de como usar um pipeline para geração de texto:

from transformers import pipeline

generator = pipeline("text-generation", model=model, tokenizer=tokenizer)
result = generator("Era uma vez", max_length=50)
print(result)

Você pode também passar diretamente o nome do modelo para o pipeline:

from transformers import pipeline

generator = pipeline("text-generation", model="Qwen/Qwen2-1.5B-Instruct")
result = generator("Era uma vez", max_length=50)
print(result)

Mas lembre-se que, caso você já fez o carregamento prévio do modelo, dessa forma o modelo será importado novamente, ocupando o dobro de memória ram.

Exemplos de inferência com diferentes tarefas

Geração de Texto

from transformers import pipeline

generator = pipeline("text-generation", model="Qwen/Qwen2-1.5B-Instruct")
result = generator("Era uma vez", max_length=50)
print(result)

Classificação de Texto

from transformers import pipeline

classifier = pipeline("sentiment-analysis")
result = classifier("I love using HuggingFace!")
print(result)

Personalizando a Inferência

Ajustando parâmetros de geração

Você pode ajustar os parâmetros de geração para controlar a saída do modelo. Por exemplo, você pode usar o parâmetro max_length para definir o comprimento máximo do texto gerado:

result = generator("Era uma vez", max_length=100)
print(result)

Utilizando generate() para controle avançado

Para um controle mais avançado, você pode usar o método generate() diretamente no modelo. Aqui está um exemplo:

input_ids = tokenizer.encode("Era uma vez", return_tensors="pt")
output = model.generate(input_ids, max_length=100, num_beams=5, early_stopping=True)
print(tokenizer.decode(output[0], skip_special_tokens=True))

Lidando com diferentes modos de geração

Existem diferentes modos de geração, como greedy e sampling. Você pode especificar o modo de geração usando parâmetros como do_sample e top_k:

output = model.generate(input_ids, max_length=100, do_sample=True, top_k=50)
print(tokenizer.decode(output[0], skip_special_tokens=True))

Trabalhando com Modelos de Conversação

O que são modelos de conversação?

Modelos de conversação são LLMs treinados especificamente para gerar respostas em um contexto de diálogo. Eles são usados em chatbots e assistentes virtuais.

Configurando e utilizando templates de chat

Os templates de chat ajudam a formatar as entradas e saídas de um modelo de conversação. Aqui está um exemplo de como configurar um template de chat:

from transformers import AutoModelForSequenceClassification, AutoTokenizer

model_name = "Qwen/Qwen2-1.5B-Instruct"
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

messages = []
for step in range(5):
    messages.append({"role": "user", "content": input('Fale algo: ')})
    text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
    inputs = tokenizer([text], return_tensors="pt")
    outputs = model.generate(inputs.input_ids, max_length=500, do_sample=True)
    generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
    messages.append({"role": "assistant", "content": generated_text.split('assistant')[-1].strip('\n')})
    print(f'==========\n{generated_text}\n')

Utilizando a API de Inferência do HuggingFace

O que é a API de Inferência?

A API de Inferência do HuggingFace permite que você faça inferência em modelos hospedados na plataforma HuggingFace sem precisar baixá-los localmente. Isso é útil para economizar recursos e facilitar a escalabilidade.

Configurando e utilizando a API de Inferência

Para usar a API de Inferência, você precisa de um token de API, que pode ser obtido na sua conta HuggingFace. Aqui está um exemplo de como configurar e usar a API:

from huggingface_hub import InferenceClient

api = InferenceClient(model="Qwen/Qwen2-1.5B-Instruct", token="YOUR_API_TOKEN")

messages = [{"role": "user", "content": "Olá, tudo bom?"}]
response = api.chat_completion(messages)
print(response.choices[0].message.content)

Dicas e Boas Práticas

Otimização de desempenho e memória

Para otimizar o desempenho e a memória, considere usar técnicas como quantização e paralelismo. A biblioteca transformers oferece suporte para essas técnicas, permitindo que você execute modelos maiores em hardware limitado.

Evitando armadilhas comuns

Algumas armadilhas comuns incluem não ajustar corretamente os parâmetros de geração e não usar o formato de entrada correto para o modelo. Certifique-se de ler a documentação do modelo e ajustar os parâmetros conforme necessário.

Recursos adicionais e comunidade

A comunidade HuggingFace é muito ativa e oferece uma variedade de recursos adicionais, incluindo tutoriais, fóruns e exemplos de código. Aproveite esses recursos para aprofundar seu conhecimento e resolver problemas específicos.

Troubleshooting

Problemas comuns e soluções

Erro de memória insuficiente

Se você encontrar um erro de memória insuficiente, tente reduzir o tamanho do batch ou usar um modelo menor. Outra opção é utilizar a API de Inferência do HuggingFace para rodar o modelo remotamente.

Problemas de compatibilidade de versão

Certifique-se de que todas as bibliotecas estão atualizadas e compatíveis entre si. Verifique a documentação do HuggingFace para as versões recomendadas.

Saídas incoerentes

Se as saídas do modelo não fizerem sentido, ajuste os parâmetros de geração, como temperature e top_p, para obter resultados mais coerentes.

Conclusão

Neste artigo, exploramos como rodar modelos de LLM com a biblioteca HuggingFace e Python. Aprendemos a configurar o ambiente, carregar modelos pré-treinados, realizar inferência, personalizar a geração de texto e utilizar a API de Inferência do HuggingFace. Essas habilidades são fundamentais para quem deseja trabalhar com inteligência artificial e aproveitar o poder dos modelos de linguagem de grande porte.

Se você está interessado em aprender mais, recomendamos explorar a documentação oficial do HuggingFace e participar da comunidade. Há sempre algo novo para aprender e muitas oportunidades para aplicar essas tecnologias em projetos do mundo real.

E claro, fica o convite para conhecer nossa trilha de Aplicações de IA com Python. Esta trilha foi cuidadosamente projetada para você entrar de vez no mundo da Inteligência Artificial ao aprender a integrar todo o poder das IAs com a flexibilidade e capacidade de automação infinita de Python!

Um grande abraço é até o próximo tutorial!

Referências

Imagem de um notebook

Cursos de programação gratuitos com certificado

Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:

  • Conteúdos gratuitos
  • Projetos práticos
  • Certificados
  • +20 mil alunos e comunidade exclusiva
  • Materiais didáticos e download de código
Inicie agora

Comentários

Comentar
Faça parte da discussão Crie sua conta gratuita e compartilhe
sua opinião nos comentários
Entre para a Asimov
Rapaz, eu não consigo rodar o modelo. Já testei dodos os models='****', mas todos dizem que não tenho mais cota. Tetei o que está no tutorial - model="gpt2" - mas da a mensagem que o modelo não existe. Qualquer ajuda é bem vinda.
Avatar de Jonatapaulino
Jonatapaulino 05/12/2024