Pular para o conteúdo principal

Llama 3.2 e Tutorial do Gradio: Crie um aplicativo da Web multimodal

Saiba como usar o modelo de visão Llama 3.2 11B com o Gradio para criar um aplicativo da Web multimodal que funciona como um assistente de suporte ao cliente.
Actualizado 9 de out. de 2024  · 10 min de leitura

Já se foi o tempo em que ficávamos satisfeitos com grandes modelos de linguagem que só podem processar texto. Agora exigimos multimodais multimodais, capazes de compreender e interagir com textos, imagens e vídeos.

Entre Modelos de visão Llama 3.2 11B e 90BVocê pode usar os primeiros modelos multimodais de código aberto da Meta AI, capazes de processar entradas de texto e imagem.

Neste guia prático, mostrarei a você o processo de criação de um assistente de suporte ao cliente multimodal com a ajuda do Llama 3.2 e do Gradio. Ao final deste tutorial, você terá um aplicativo da Web totalmente funcional que pode analisar descrições textuais e imagens carregadas para gerar soluções úteis - exatamente como um assistente de tíquete de suporte faria!

Se você precisar de uma rápida introdução à Llama 3.2 antes de começarmos, recomendo a leitura deste Guia do Llama 3.2.

Configuração inicial

Nesta demonstração prática, usaremos o modelo Llama3.2-11B-Vision (multimodal). Antes de começar a codificar, vamos nos certificar de que temos todas as dependências necessárias.

Precisamos de algumas bibliotecas para que tudo funcione. Os principais são:

  • Transformers: A biblioteca principal para trabalhar com modelos como o Llama 3.2.
  • Tocha: A biblioteca de aprendizagem profunda que alimenta nosso modelo.
  • Gradio: Para criar nossa interface de usuário.

Execute os seguintes comandos para instalar as dependências necessárias:

!pip3 install -U torch transformers bitsandbytes accelerate peft -q
!pip3 install gradio -q

Carregar o modelo e o processador do Llama 3.2

Agora, vamos carregar o modelo e o processador do Llama 3.2. Usaremos Hugging Facepara carregar o modelo e o processador, certificando-se de que o modelo seja executado na GPU, se estiver disponível, ou que o padrão seja a CPU, caso contrário. Por ser um modelo de parâmetro 11B, ele funciona bem em uma GPU A100 no Google Colab.

No bloco de código abaixo:

  • Configuramos as importações necessárias.
  • Carregamos o modelo e o processador com suporte a GPU, se disponível. Isso garante que o aplicativo seja executado com eficiência, especialmente ao processar grandes quantidades de dados.
  • Uma parte importante do código que você deve observar aqui é tie_weight(), que garante que os pesos das camadas de incorporação de entrada e saída sejam idênticos. Isso reduz o consumo de memória e pode melhorar o desempenho.
import torch
from PIL import Image
import gradio as gr
from transformers import MllamaForConditionalGeneration, AutoProcessor

def load_model():
    model_id = "meta-llama/Llama-3.2-11B-Vision-Instruct"  
    device = "cuda" if torch.cuda.is_available() else "cpu"  # Check if GPU is available

    model = MllamaForConditionalGeneration.from_pretrained(
        model_id,
        torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,  
        device_map="auto",  # Automatically map to available device
        offload_folder="offload",  # Offload to disk if necessary
    )
    
    model.tie_weights()  # Tying weights for efficiency
    processor = AutoProcessor.from_pretrained(model_id)
    print(f"Model loaded on: {device}")
    
    return model, processor

Por que o Gradio?

Gradio é uma biblioteca Python leve que nos permite criar rapidamente aplicativos de aprendizado de máquina com interfaces baseadas na Web. Em vez de escrever HTML ou JavaScript complexos, podemos definir os componentes do nosso aplicativo (como caixas de texto, botões ou imagens) diretamente no Python.

Esta é a aparência de uma interface de usuário básica do Gradio:

Interface UI do Gradio

O Gradio tem alguns benefícios:

  • Sem problemas de instalação: Os aplicativos Gradio são hospedados e compartilhados com algumas linhas de código Python. O compartilhamento integrado permite o acesso por meio de um link público.
  • Interface colaborativa: Permite demonstrações ao vivo de modelos compartilhados com colaboradores ou com o público. Vários usuários podem interagir simultaneamente.
  • Suporte a vários tipos de entrada e saída: Oferece uma variedade de componentes de entrada/saída além de texto e imagens.
  • Configuração mínima para hospedagem na nuvem: Fácil implementação em plataformas como o Hugging Face Spaces ou outros serviços de nuvem.
  • Integração entre plataformas: As interfaces podem ser incorporadas a outros aplicativos da Web, Jupyter Notebooks ou publicações em blogs.
  • Geração automática de API: Gera automaticamente uma API para o aplicativo.
  • Segurança integrada: Inclui limites de tamanho de arquivo e outras medidas para evitar o uso malicioso.

Para esta demonstração, o Gradio simplifica para os usuários a inserção de texto e imagens e a visualização do resultado (análise de texto e imagem, neste caso) em tempo real. É perfeito para mostrar o poder de modelos como o Llama 3.2 em um ambiente fácil de usar.

Desenvolver aplicativos de IA

Aprenda a criar aplicativos de IA usando a API OpenAI.
Comece a treinar gratuitamente

Criando o aplicativo multimodal Llama 3.2

Agora que já definimos nossas importações e configuramos nosso modelo com sucesso, vamos avançar para a parte principal do aplicativo: processar as entradas (texto e imagem) e gerar a resposta.

Geração de texto para texto

Começamos definindo uma função que recebe o texto do usuário e, opcionalmente, uma imagem. Em seguida, essa função usa o modelo Llama 3.2 para gerar uma resposta.

def process_ticket(text, image=None):
    model, processor = load_model()
    
    try:
        if image:
            # Resize the image for consistency
            image = image.convert("RGB").resize((224, 224))
            prompt = f"<|image|><|begin_of_text|>{text}"
            # Process both the image and text input
            inputs = processor(images=[image], text=prompt, return_tensors="pt").to(model.device)
        else:
            prompt = f"<|begin_of_text|>{text}"
            # Process text-only input
            inputs = processor(text=prompt, return_tensors="pt").to(model.device)
        
        # Generate response (restrict token length for faster output)
        outputs = model.generate(**inputs, max_new_tokens=200)
        # Decode the response from tokens to text
        response = processor.decode(outputs[0], skip_special_tokens=True)
        return response
    
    except Exception as e:
        print(f"Error processing ticket: {e}")
        return "An error occurred while processing your request."

Essa função lida com dois tipos de entrada dentro do loop:

  • Somente texto: Se nenhuma imagem for fornecida, o modelo gera uma resposta com base na entrada de texto.
  • Texto + imagem: Se uma imagem for fornecida, o modelo processará o texto e a imagem antes de gerar a resposta.

Depois que o tipo de entrada é identificado, ele é passado para um processador proveniente da biblioteca de transformadores para processar a entrada. Em seguida, o modelo gera um resultado no intervalo de max_new_tokens.

Criando a interface do Gradio

A interface Gradio une tudo e nos permite executar testes em um formato baseado na Web. Essa interface permite que os usuários enviem textos e imagens de um problema que estejam enfrentando e vejam a solução gerada pela IA.

Vamos dar uma olhada no código e depois explicá-lo.

def create_interface():
    text_input = gr.Textbox(
        label="Describe your issue",
        placeholder="Describe the problem you're experiencing",
        lines=4,
    )
    
    image_input = gr.Image(label="Upload a Screenshot (Optional)", type="pil")
    
    # Output element
    output = gr.Textbox(label="Suggested Solution", lines=5)
    
    # Create the Gradio interface
    interface = gr.Interface(
        fn=process_ticket,  # Function to process inputs
        inputs=[text_input, image_input],  # User inputs (text and image)
        outputs=output,  # AI-generated output
        title="Multimodal Customer Support Assistant",
        description="Submit a description of your issue, along with an optional screenshot, and get AI-powered suggestions.",
    )
    
    # Launch the interface with debug mode
    interface.launch(debug=True)

No código acima, nós:

  • Defina duas entradas:
    • text_input para texto
    • image_input para imagem
  • Especifique uma caixa de saída para exibir a resposta.
  • Crie a interface, passando parâmetros como:
    • Entradas
    • Função para processar a entrada
    • Saída gerada do modelo
    • Título da interface
    • Descrição (se necessário)
  • Configure a interface básica do usuário.
  • Inicie a interface com debug = True para depurar os erros. Quando o código funcionar bem, mude-o novamente para False.

A interface final terá a seguinte aparência:

Interface final do Gradio

Nosso aplicativo Gradio, assistente multimodal de suporte ao cliente, está pronto! Para obter a resposta desejada, tente alterar o parâmetro max_new_tokens ou brincar um pouco com o prompt.

Casos de uso para Llama 3.2 e Gradio

Além da demonstração que criamos neste tutorial, há alguns outros casos de uso que exigem um esforço mínimo. Isso inclui:

  • Educação e tutoria: Os alunos podem fazer upload de recursos visuais, como gráficos ou diagramas, juntamente com suas perguntas, e o modelo pode gerar respostas abrangentes que incorporam informações visuais e textuais.
  • Criação de conteúdo: Melhore a criação de legendas, publicações em blogs e conteúdo de mídia social gerando texto com base em imagens.
  • Assistência virtual para imóveis: Auxiliar agentes e clientes processando imagens de propriedades e respondendo a perguntas relacionadas. Gerar descrições de propriedades ou analisar detalhes visuais de fotos.

Práticas recomendadas para o desenvolvimento com o Llama 3.2 e o Gradio

Para cada caso de uso, há algumas dicas que todo desenvolvedor pode usar ao desenvolver um aplicativo como o que já criamos. Aqui estão algumas práticas recomendadas que um desenvolvedor pode adotar ao trabalhar com modelos como o llama3.2.

Lidar com a latência

Como as tarefas multimodais podem exigir muitos recursos, a redução da latência é fundamental. Considere otimizar o modelo para obter respostas mais rápidas usando o cache, a poda do modelo ou limitando o número de tokens gerados.

Tratamento de erros

É importante que você crie mecanismos para lidar com erros. Nos casos em que o modelo não consegue gerar uma resposta significativa (por exemplo, devido à baixa qualidade da imagem), podemos fornecer respostas alternativas ou mensagens de erro. Podemos até optar pelo feedback humano, que, em troca, ajuda a aprimorar o modelo.

Monitoramento de desempenho

O acompanhamento do desempenho do aplicativo, como tempos de resposta e dados de interação do usuário, pode ajudar a otimizar a interface e até mesmo melhorar a experiência do usuário. Ao observar o tempo de desempenho, podemos tentar otimizar a latência do modelo usando bibliotecas como bits and bytes.

Conclusão

Neste guia, aprendemos como combinar os recursos multimodais do Llama 3.2 e a interface intuitiva do Gradio. Do suporte ao cliente à educação e à criação de conteúdo, os aplicativos em potencial são vastos e variados.

Ao aderir às práticas recomendadas, como gerenciamento de latência, tratamento de erros e monitoramento de desempenho, podemos garantir que nossos aplicativos Llama 3.2 e Gradio sejam robustos, eficientes e fáceis de usar.

Para saber mais, recomendo estes tutoriais:

Obtenha uma das melhores certificações de IA

Demonstre que você pode usar a IA de forma eficaz e responsável.

Aashi Dutt's photo
Author
Aashi Dutt
LinkedIn
Twitter

Sou Google Developers Expert em ML (Gen AI), Kaggle 3x Expert e Women Techmakers Ambassador com mais de 3 anos de experiência em tecnologia. Fui cofundador de uma startup de tecnologia de saúde em 2020 e estou fazendo mestrado em ciência da computação na Georgia Tech, com especialização em machine learning.

Temas

Aprenda IA com estes cursos!

Curso

Working with Llama 3

4 hr
4.4K
Explore the latest techniques for running the Llama LLM locally, fine-tuning it, and integrating it within your stack.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

Tutorial

RAG With Llama 3.1 8B, Ollama e Langchain: Tutorial

Aprenda a criar um aplicativo RAG com o Llama 3.1 8B usando Ollama e Langchain, configurando o ambiente, processando documentos, criando embeddings e integrando um retriever.
Ryan Ong's photo

Ryan Ong

12 min

Tutorial

Ajuste fino do Llama 3.1 para classificação de textos

Comece a usar os novos modelos Llama e personalize o Llama-3.1-8B-It para prever vários distúrbios de saúde mental a partir do texto.
Abid Ali Awan's photo

Abid Ali Awan

13 min

Tutorial

Como criar aplicativos LLM com o tutorial LangChain

Explore o potencial inexplorado dos modelos de linguagem grandes com o LangChain, uma estrutura Python de código aberto para criar aplicativos avançados de IA.
Moez Ali's photo

Moez Ali

12 min

Tutorial

Llama.cpp Tutorial: Um guia completo para inferência e implementação eficientes de LLM

Este guia abrangente sobre o Llama.cpp guiará você pelos fundamentos da configuração do seu ambiente de desenvolvimento, compreendendo suas principais funcionalidades e aproveitando seus recursos para solucionar casos de uso no mundo real.
Zoumana Keita 's photo

Zoumana Keita

11 min

Tutorial

Guia para iniciantes do LlaMA-Factory WebUI: Ajuste fino dos LLMs

Saiba como fazer o ajuste fino dos LLMs em conjuntos de dados personalizados, avaliar o desempenho e exportar e servir modelos com facilidade usando a estrutura com pouco ou nenhum código do LLaMA-Factory.
Abid Ali Awan's photo

Abid Ali Awan

12 min

Tutorial

Guia de Introdução ao Ajuste Fino de LLMs

O ajuste fino dos grandes modelos de linguagem (LLMs, Large Language Models) revolucionou o processamento de linguagem natural (PLN), oferecendo recursos sem precedentes em tarefas como tradução de idiomas, análise de sentimentos e geração de textos. Essa abordagem transformadora aproveita modelos pré-treinados como o GPT-2, aprimorando seu desempenho em domínios específicos pelo processo de ajuste fino.
Josep Ferrer's photo

Josep Ferrer

11 min

Ver maisVer mais