Use o Pixtral 12B para consultas de IA multimodais em Python com o watsonx

Publicado 10/12/2024
A digital visualization of a neural network featuring interconnected pathways illuminated by a glowing central node. The image showcases binary code patterns across the network, emphasizing a futuristic and technological theme. The palette includes dark tones with subtle blue and gold highlights.
By Anna Gutowska and Erika Russi

Neste tutorial, você descobrirá como aplicar o modelo multimodal Pixtral 12B da Mistral IA, agora disponível em watsonx.ai para tarefas multimodais, como legendas de imagens e respostas a perguntas visuais.

Pixtral 12B

Em setembro de 2024, a Mistral IA lançou o Pixtral 12B, um grande modelo de linguagem (LLM) de código aberto sob a licença Apache 2.0.grandes modelos de linguagem (LLM).

Com 12 bilhões de parâmetros, o modelo multimodal é desenvolvido no Nemo 12B LLM da Mistral IA. O Pixtral 12B tem dois componentes: o codificador de visão para tokenizar imagens e um decodificador transformador multimodal para prever o seguinte token de texto dada uma sequência de texto e imagens. O codificador de visão tem 400 milhões de parâmetros e é compatível com tamanhos de imagem variáveis.

O modelo se destaca em vários casos de uso, incluindo a compreensão de gráficos, diagramas, gráficos e documentos em alta resolução, que podem ser usados para responder a perguntas sobre documentos, seguir instruções ou tarefas de geração aumentada de recuperação (RAG). Além disso, o Pixtral 12B possui uma janela de contexto de 128.000 token, que permite o consumo de várias imagens simultaneamente.

Em termos de benchmarks, o Pixtral 12B supera o desempenho de vários modelos, incluindo o Qwen2-VL, Gemini-1.5 Flash 8B e Claude-3 Haiku. Para determinados benchmarks, incluindo DocVQA (ANLS) e VQAv2 (VQA Match), o modelo supera o GPT-4o e o Claude-3.5 Sonnet da OpenAI.

Além de poder executar o Pixtral 12B no watsonx.ai, o modelo também está disponível via Hugging Face, no Le Chat, o chatbot conversacional da Mistral, ou via endpoint de API por meio do La Plateforme da Mistral.

Etapas

Consulte este vídeo da IBM Technology no YouTube que mostra as instruções de configuração a seguir nas etapas 1 e 2.

Etapa 1. Configure seu ambiente

Embora seja possível escolher entre várias ferramentas, este tutorial é mais adequado para um Jupyter Notebook. Os Jupyter Notebooks são amplamente utilizados na ciência de dados para combinar código com várias fontes de dados, como texto, imagens e visualização de dados.

Este tutorial vai orientar você em como configurar uma conta IBM para usar um Jupyter Notebook.

  1. Faça login no watsonx.ai usando sua conta do IBM Cloud. Observe que, no momento, o Pixtral 12B está disponível apenas nas regiões da IBM Europe Frankfurt e Londres.

  2. Criar um projeto do watsonx.ai.

    Você pode obter a ID do projeto a partir de seu projeto. Clique na guia Gerenciar. Em seguida, copie a ID do projeto da seção Detalhes da página Geral. Você precisa dessa ID para este tutorial.

  3. Crie um Jupyter Notebook.

    Esta etapa abrirá um ambiente de notebook onde você pode copiar o código deste tutorial para implementar o ajuste de prompt por conta própria. Ou então, você pode baixar esse Notebook em seu sistema local e carregá-lo como um ativo em seu projeto do watsonx.ai. Esse Jupyter Notebook , juntamente com os conjuntos de dados utilizados, pode ser encontrado no GitHub.

    Para evitar conflitos de dependência de pacotes Python, recomendamos configurar um ambiente virtual.

Etapa 2. Configure o serviço watsonx.ai Runtime e a chave de API

  1. Crie uma instância do serviço watsonx.ai Runtime (escolha o plano Lite, que é uma instância gratuita).
  2. Gere uma chave de API.
  3. Associe o serviço watsonx.ai Runtime ao projeto que você criou no watsonx.ai.

Etapa 3. Instale e importe bibliotecas relevantes e configure suas credenciais

Precisaremos de algumas bibliotecas e módulos para este tutorial. Não deixe de importar os seguintes itens; se eles não estiverem instalados, você poderá resolver isso com uma instalação rápida.

#installations
%pip install image | tail -n 1
%pip install -U "ibm_watsonx_ai>=1.1.14" | tail -n 1

#imports
import requests
import base64
import getpass

from PIL import Image
from ibm_watsonx_ai import Credentials
from ibm_watsonx_ai.foundation_models import ModelInference

Insira seu WATSONX_EU_APIKEY e WATSONX_EU_PROJECT_ID que você criou nas etapas 1 e 2 ao executar a seguinte célula. Também definiremos a URL como o endpoint da API.

WATSONX_EU_APIKEY = getpass.getpass("Please enter your watsonx.ai Runtime API key (hit enter): ")
WATSONX_EU_PROJECT_ID = getpass.getpass("Please enter your project ID (hit enter): ")
URL = "https://eu-gb.ml.cloud.ibm.com"

Podemos usar a classe Credentials para encapsular nossas credenciais passadas.

credentials = Credentials(
    url=URL,
    api_key=WATSONX_EU_APIKEY
)

Etapa 4. Codifique imagens

Neste tutorial, trabalharemos com várias imagens para aplicações de IA multimodal, como legendas de imagens e detecção de objetos. As imagens que usaremos podem ser acessadas usando as seguintes URLs. Podemos armazenar essas URLs em uma lista para codificá-las de forma iterativa.

url_image_1 = 'https://assets.ibm.com/is/image/ibm/img_2803copy?$original$'
url_image_2 = 'https://assets.ibm.com/is/image/ibm/img_2857?$original$'
url_image_3 = 'https://assets.ibm.com/is/image/ibm/1ab001c5-751d-45aa-8a57-d1ce31ea0588?$original$'
url_image_4 = 'https://assets.ibm.com/is/image/ibm/langchain?$original$&fmt=png-alpha'

image_urls = [url_image_1, url_image_2, url_image_3, url_image_4]

Para entender melhor nossa entrada de dados, vamos exibir as imagens.

for idx, url in enumerate(image_urls):
    print(f'url_image_{idx}')
    display(Image.open(requests.get(url, stream=True).raw))

Saídas:

url_image_0

Um campo de flores rosa

url_image_1

Mulher trabalhando no notebook

url_image_2

Uma mulher e seu carro na neve

url_image_3

Um diagrama

Para codificar essas imagens de uma maneira que seja digerível para o LLM, codificaremos as imagens em bytes que, em seguida, decodificamos para representação UTF-8.

encoded_images = []

for url in image_urls:
    encoded_images.append(base64.b64encode(requests.get(url).content).decode("utf-8"))

Etapa 5. Configure a solicitação de API e o LLM

Agora que as imagens podem ser enviadas para o LLM, vamos configurar uma função para as chamadas de API do watsonx. A função augment_api_request_body recebe a consulta e a imagem do usuário como parâmetros e aumenta o corpo da solicitação de API. Usaremos essa função em cada iteração.

def augment_api_request_body(user_query, image):
    messages = [
        {
            "role": "user",
            "content": [{
                "type": "text",
                "text": 'You are a helpful assistant. Answer the following user query in 1 or 2 sentences: ' + user_query
            },
            {
                "type": "image_url",
                "image_url": {
                    "url": f"data:image/jpeg;base64,{image}",
                }
            }]
        }
    ]

return messages

Vamos instanciar a interface do modelo usando a classe TheModelInference. Neste tutorial, usaremos o modelo mistralai/pixtral-12b.

model = ModelInference(
    model_id="mistralai/pixtral-12b",
    credentials=credentials,
    project_id=WATSONX_EU_PROJECT_ID,
    params={
        "max_tokens": 200
        }
    )

Etapa 6. Legenda da imagem

Agora, podemos percorrer nossas imagens para ver as descrições de texto produzidas pelo modelo em resposta à consulta "O que está acontecendo nesta imagem?"

for i in range(len(encoded_images)):
        image = encoded_images[i]
        user_query = "What is happening in this image?"
        messages = augment_api_request_body(user_query, image)
        response = model.chat(messages=messages)
        print(response['choices'][0]['message']['content'])

Saída: 

A imagem mostra um campo vibrante de flores em plena floração sob um céu azul límpido, com o sol brilhando forte, criando uma cena serena e pitoresco.

Na imagem, uma pessoa está sentada em uma mesa, usando um notebook enquanto segura um cartão de crédito. Há algumas maçãs em uma tigela na mesa ao lado do notebook.

Uma pessoa está ao lado de um carro fortemente coberto de neve, segurando um guarda-chuva vermelho para se proteger da neve que cai.

A imagem descreve um fluxo de trabalho para processar e armazenar dados, provavelmente para aprendizado de máquina ou análise de dados. Começa com o carregamento de dados de origem (como documentos HTML ou XML), transformando os dados em um formato adequado, incorporando-os por meio do embedding em um armazenamento de vetores, armazenando esses vetores em um banco de dados e, finalmente, recuperando os dados quando necessário.

O modelo Pixtral 12B conseguiu legendar com sucesso cada imagem com detalhes significativos.

Etapa 7. Detecção de objetos

Agora que mostramos a capacidade do modelo de realizar legendas de imagens na etapa anterior, vamos fazer ao modelo algumas perguntas que exigem detecção de objeto. Em relação à segunda imagem que mostra a mulher fazendo compras on-line, perguntaremos ao modelo "O que a mulher tem na mão?"

image = encoded_images[1]
user_query = "What does the woman have in her hand?"
messages = augment_api_request_body(user_query, image)
response = model.chat(messages=messages)
print(response['choices'][0]['message']['content'])

Saída: a mulher está segurando um cartão de crédito na mão.

O modelo identificou corretamente o objeto na mão da mulher. Agora, vamos perguntar sobre o problema na imagem do carro coberto de neve.

image = encoded_images[2]
user_query = "What is likely the issue with this car?"
messages = augment_api_request_body(user_query, image)
response = model.chat(messages=messages)
print(response['choices'][0]['message']['content'])

Saída: o carro provavelmente está preso na neve profunda, dificultando ou impossibilitando sua movimentação.

Essa resposta destaca o valor que a IA multimodal tem para domínios como o de seguros. O modelo conseguiu detectar o problema com o carro preso na neve. Essa pode ser uma ferramenta poderosa para melhorar o tempo de processamento de pedidos de seguro.

Em seguida, vamos perguntar ao modelo sobre as etapas que estão na imagem do fluxograma.

image = encoded_images[3]
user_query = "Name the steps in this diagram"
request_body = augment_api_request_body(user_query, image)
messages = augment_api_request_body(user_query, image)
response = model.chat(messages=messages)
print(response['choices'][0]['message']['content'])

Saída: o diagrama ilustra um processo que envolve várias etapas: "Carregar", "Transformar", "Incorporar", "Armazenar" e "Recuperar". Essa sequência provavelmente representa um fluxo de trabalho para processar e armazenar dados, transformando-os em vetores incorporados para armazenamento e recuperação eficientes.

Ótimo! O modelo foi capaz de discernir objetos dentro das imagens após consultas de usuários. Incentivamos que você faça mais consultas para demonstrar melhor o desempenho do modelo.

Resumo

Neste tutorial, você usou o modelo Pixtral 12B para realizar operações multimodais, incluindo legendas de imagens e respostas a perguntas visuais.

Para experimentar outros modelos multimodais, consulte este tutorial sobre o modelo multimodal Llama 3.2 da Meta no watsonx.ai.

Autores

Anna Gutowska

AI Engineer, Developer Advocate

IBM

Erika Russi

Data Scientist

IBM

Soluções relacionadas
IBM watsonx.ai

Treine, valide, ajuste e implemente recursos de IA generativa, modelos de base e recursos de aprendizado de máquina com o IBM watsonx.ai, um estúdio empresarial de última geração para construtores de IA. Crie aplicações de IA em uma fração do tempo com uma fração dos dados.

Conheça o watsonx.ai
Soluções de inteligência artificial

Use a IA a serviço de sua empresa com a experiência e o portfólio de soluções líder do setor da IBM à sua disposição.

Explore as soluções de IA
Serviços de IA

Reinvente os fluxos de trabalho e operações críticos adicionando IA para maximizar experiências, tomadas de decisão em tempo real e valor de negócios.

Explore os serviços de IA
Dê o próximo passo

Obtenha acesso completo aos recursos que abrangem o ciclo de vida do desenvolvimento da IA. Produza soluções poderosas de IA com interfaces fáceis de usar, fluxos de trabalhos e acesso a APIs e SDKs padrão do setor.

  1. Explore o watsonx.ai
  2. Agende uma demonstração em tempo real