Soluzioni

Presentazione di Pixtral 12B

September 17, 2024

By Mistral AI team

Avviso: questo modello è deprecato

Pixtral 12B non è più mantenuto ed è stato sostituito dai nostri modelli vision e multimodali più recenti e potenti.

Esplori le nostre attuali capacità vision

Pixtral 12B in breve:

  • Nativamente multimodale, addestrato con dati immagine e testo intercalati

  • Prestazioni elevate nei task multimodali, eccelle nel rispetto delle istruzioni

  • Mantiene prestazioni allo stato dell'arte sui benchmark solo testuali

  • Architettura:

    • Nuovo vision encoder da 400M parametri addestrato da zero

    • Decoder multimodale da 12B parametri basato su Mistral Nemo

    • Supporta dimensioni e rapporti d'aspetto variabili delle immagini

    • Supporta più immagini nella lunga finestra di contesto da 128k token

  • Utilizzo:

Pixtral è addestrato per comprendere sia immagini naturali sia documenti, raggiungendo il 52,5% sul benchmark di reasoning MMMU e superando diversi modelli più grandi. Il modello dimostra forti capacità in task come la comprensione di grafici e figure, il question answering su documenti, il reasoning multimodale e il rispetto delle istruzioni. Pixtral può acquisire immagini alla loro risoluzione e al loro rapporto d'aspetto naturali, offrendo flessibilità sul numero di token utilizzati per elaborare un'immagine. Pixtral è inoltre in grado di elaborare qualsiasi numero di immagini nella sua lunga finestra di contesto da 128K token. A differenza dei precedenti modelli open source, Pixtral non sacrifica le prestazioni sui benchmark testuali per eccellere nei task multimodali.

Pixtral Benchmarks

Prestazioni

Pixtral è stato addestrato per essere un sostituto drop-in di Mistral Nemo 12B. Il suo principale elemento distintivo rispetto ai modelli open source esistenti è l'offerta di reasoning multimodale best-in-class senza compromessi sulle principali capacità testuali, come rispetto delle istruzioni, coding e matematica.

Protocollo di valutazione

Rivalutiamo una serie di modelli aperti e chiusi tramite lo stesso harness di valutazione. Per ciascun dataset, il prompt è stato scelto in modo da poter riprodurre i risultati dei principali modelli multimodali (GPT-4o e Claude-3.5-Sonnet). Tutti i modelli sono poi stati valutati con questo stesso prompt. Nel complesso, Pixtral supera nettamente tutti i modelli aperti di dimensioni comparabili e, in molti casi, supera modelli chiusi come Claude 3 Haiku. Pixtral supera persino, o eguaglia, le prestazioni di modelli molto più grandi come LLaVa OneVision 72B sui benchmark multimodali. Tutti i prompt saranno resi open source.

Pixtral Comparison

Prestazioni di Pixtral rispetto a modelli multimodali chiusi e più grandi. [Tutti i modelli sono stati benchmarkati tramite lo stesso harness di valutazione e con lo stesso prompt. Verifichiamo che i prompt riproducano le prestazioni riportate per GPT-4o e Claude 3.5 Sonnet (i prompt saranno forniti nel report tecnico)].

Rispetto delle istruzioni

Pixtral eccelle in particolare nel rispetto delle istruzioni, sia multimodale sia solo testuale, rispetto ad altri modelli multimodali aperti. Supera nettamente Qwen2-VL 7B, LLaVa-OneVision 7B e Phi-3.5 Vision nel rispetto delle istruzioni, con un miglioramento relativo del 20% in IF-Eval testuale e MT-Bench rispetto al modello OSS più vicino. Per valutare ulteriormente questa capacità nei casi d'uso multimodali, creiamo versioni multimodali di questi benchmark: MM-IF-Eval e MM-MT-Bench. Pixtral supera le alternative open source anche nei benchmark di rispetto delle istruzioni multimodali. Renderemo MM-MT-Bench open source per la community.

Pixtral Comparison 2

Prestazioni di Pixtral rispetto ai modelli multimodali aperti. Tutti i modelli sono stati benchmarkati tramite lo stesso harness di valutazione e con lo stesso prompt.

Architettura

Dimensione variabile delle immagini: Pixtral è progettato per ottimizzare sia velocità sia prestazioni. Abbiamo addestrato un nuovo vision encoder che supporta nativamente dimensioni variabili delle immagini:

  • Passiamo semplicemente le immagini attraverso il vision encoder alla loro risoluzione e al loro rapporto d'aspetto nativi, convertendole in token immagine per ogni patch 16x16 dell'immagine

  • Questi token vengono poi appiattiti per creare una sequenza, con token [IMG BREAK] e [IMG END] aggiunti tra le righe e alla fine dell'immagine.

  • I token [IMG BREAK]

In questo modo, Pixtral può essere utilizzato per comprendere con precisione diagrammi, grafici e documenti complessi ad alta risoluzione, offrendo al contempo velocità di inference elevate su immagini piccole come icone, clipart ed equazioni.

Pixtral Architecture

Pixtral utilizza un nuovo vision encoder addestrato da zero che supporta nativamente dimensioni variabili delle immagini.

Architettura finale: Pixtral ha due componenti: il Vision Encoder, che tokenizza le immagini, e un Multimodal Transformer Decoder, che predice il token di testo successivo data una sequenza di testo e immagini. Il modello è addestrato a predire il token di testo successivo su dati immagine e testo intercalati. Questa architettura consente a Pixtral di elaborare qualsiasi numero di immagini con dimensioni arbitrarie nella sua ampia finestra di contesto da 128K token.

Pixtral Model Architecture

Esempi qualitativi

Reasoning su figure complesse

Questa tabella combina i dati di entrambe le tabelle, assicurando che tutti i modelli e i rispettivi punteggi di ciascun benchmark siano inclusi in un unico formato coerente.

Gdp

Prompt:

Elenca i 5 Paesi in Europa con il PIL più alto

Risposta:

I 5 Paesi in Europa con il PIL più alto, in base all'immagine, sono:

  1. Germania

    • PIL: 3,99 mila miliardi di $

    • Percentuale: 4,65%

  2. Regno Unito

    • PIL: 2,82 mila miliardi di $

    • Percentuale: 3,29%

  3. Francia

    • PIL: 2,78 mila miliardi di $

    • Percentuale: 3,24%

  4. Italia

    • PIL: 2,07 mila miliardi di $

    • Percentuale: 2,42%

  5. Spagna

    • PIL: 1,43 mila miliardi di $

    • Percentuale: 1,66%

Questi Paesi sono evidenziati in verde nel diagramma.

Comprensione e analisi dei grafici

Immagine:

Loss Curve

Prompt:

Quando hanno iniziato ad andare male le cose per dark dragon?

Risposta:

L'immagine è un grafico a linee intitolato 'train/loss' che mostra la training loss sugli step per quattro modelli diversi: dark-dragon-50, dainty-sunset-49, different-haze-34 e morning-field-33. L'asse x rappresenta gli step, da 0 a 60k, e l'asse y rappresenta la loss su una scala logaritmica da 1e-5 a 1e+5.

Per determinare quando le cose hanno iniziato ad andare male per il modello dark-dragon-50, dobbiamo osservare la linea rossa che rappresenta questo modello. Inizialmente, la loss diminuisce, indicando che il modello sta apprendendo in modo efficace. Tuttavia, intorno ai 10k step, la loss inizia ad aumentare bruscamente. Questo picco indica che le prestazioni del modello stanno peggiorando. La loss continua a registrare picchi e a fluttuare, raggiungendo valori molto elevati, il che suggerisce che il modello non stia apprendendo in modo efficace e che probabilmente stia andando in overfitting o incontrando altri problemi.

Pertanto, il punto critico in cui le cose hanno iniziato ad andare male per il modello dark-dragon-50 è intorno ai 10k step.

Rispetto delle istruzioni multi-immagine

Immagini:

Multi Images

Prompt:

Combina le informazioni di entrambe le tabelle in un'unica tabella Markdown

Risposta:

Per combinare le informazioni di entrambe le tabelle in un'unica tabella, dobbiamo allineare i modelli e i relativi punteggi di ciascun benchmark. Ecco la tabella combinata:

| Model | MMMU (CoT) | Mathvista (CoT) | ChartQA (CoT) | DocVQA (ANLS) | VQAv2 (VQA Match) |
|------------------------|------------|-----------------|---------------|---------------|-------------------|
| Pixtral 12B | 52.5 | 58.0 | 81.8 | 90.7 | 78.6 |
| Claude-3 Haiku | 50.4 | 44.8 | 69.6 | 74.6 | 68.4 |
| Gemini-1.5 Flash 8B (0827) | 50.7 | 56.9 | 78.0 | 79.5 | 65.5 |
| LLaVA-OV 72B | 54.4 | 57.2 | 66.9 | 91.6 | 83.8 |
| GPT-4o | 68.6 | 64.6 | 85.1 | 88.9 | 77.8 |
| Claude-3.5 Sonnet | 68.0 | 64.4 | 87.6 | 90.3 | 70.7 |
| Qwen2-VL 7B | 47.6 | 54.4 | 38.6 | 94.5 | 75.9 |
| LLaVA-OV 7B | 45.1 | 36.1 | 67.1 | 90.5 | 78.3 |
| Phi-3 Vision | 40.3 | 36.4 | 72.0 | 84.9 | 42.4 |
| Phi-3.5 Vision | 38.3 | 39.3 | 67.7 | 74.4 | 56.1 |

Questa tabella combina i dati di entrambe le tabelle, assicurando che tutti i modelli e i rispettivi punteggi di ciascun benchmark siano inclusi in un unico formato coerente.

Da immagine a codice

Immagine:

Image to Code

Prompt:

Scrivi codice HTML per creare un sito web come questo

Risposta:

Certamente. Di seguito è riportato un esempio di codice HTML per creare una semplice pagina web che consente agli utenti di scegliere un gusto di gelato. Questo esempio include un menu a discesa per selezionare il gusto e un pulsante "Avanti".

```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pick an Ice Cream Flavor</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background-color: #f0f0f0;
}
.container {
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
h1 {
text-align: center;
}
select {
width: 100%;
padding: 10px;
margin-top: 10px;
margin-bottom: 20px;
}
button {
width: 100%;
padding: 10px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
button:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<div class="container">
<h1>Pick An Ice Cream Flavor</h1>
<select id="flavorSelect">
<option value="vanilla">Vanilla</option>
<option value="chocolate">Chocolate</option>
<option value="strawberry">Strawberry</option>
<option value="cookie_dough">Cookie Dough</option>
<option value="mint_chocolate">Mint Chocolate</option>
</select>
<button onclick="next()">Next</button>
</div>
<footer style="position: fixed; bottom: 0; width: 100%; text-align: center; font-size: 12px;">
&copy; copyright MistralAI
</footer>
<script>
function next() {
const selectedFlavor = document.getElementById('flavorSelect').value;
alert('You selected: ' + selectedFlavor);
}
</script>
</body>
</html>

Spiegazione:

  • Struttura HTML: La pagina web è composta da un div contenitore che include il titolo, un menu a discesa e un pulsante.

  • Stile CSS: Viene applicato uno stile di base per centrare il contenuto e definire l'aspetto degli elementi.

  • Funzione JavaScript: La funzione `next` viene chiamata quando si fa clic sul pulsante "Avanti". Recupera il gusto selezionato dal menu a discesa e mostra un avviso con il gusto scelto.

Può copiare e incollare questo codice in un file HTML e aprirlo in un browser web per vedere il risultato.

Sito web generato:

Screenshot of the generated website

Comprensione di scene naturali

Pisa Tower

Prompt: Questa persona è davvero enorme o questo edificio è semplicemente piccolissimo?

Risposta:

L'immagine mostra una persona che tiene il pollice davanti alla Torre di Pisa, facendolo apparire molto più grande della torre. Questo crea un'illusione ottica, facendo sembrare la torre più piccola di quanto sia realmente. In realtà, la Torre di Pisa è una struttura grande e iconica, e il pollice della persona non è nemmeno lontanamente grande quanto appare nell'immagine. Lo scopo di questa foto è dimostrare l'altezza e le dimensioni imponenti della torre confrontandola con un oggetto familiare, come un pollice.

Come eseguire Pixtral?

Le Chat

Può provare Pixtral in modo semplice e gratuito tramite Le Chat, la nostra interfaccia di chat conversazionale intuitiva. Può scegliere Pixtral nell'elenco dei modelli, caricare un'immagine e iniziare a porre domande sull'immagine.

La Plateforme

Pixtral è disponibile anche su La Plateforme. Può sfruttare le capacità di Pixtral tramite chiamate API, abilitando un'integrazione fluida con varie applicazioni e workflow. Di seguito è riportato un esempio semplice. Per maggiori dettagli, consulti la nostra documentazione.

curl https://api.mistral.ai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $MISTRAL_API_KEY" \
-d '{
"model": "pixtral-12b-2409",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What’s in this image?"
},
{
"type": "image_url",
"image_url": "https://tripfixers.com/wp-content/uploads/2019/11/eiffel-tower-with-snow.jpeg"
}
]
}
],
"max_tokens": 300
}'

mistral-inference

Il modo più semplice per eseguire Pixtral in locale è usare mistral-inference. Dopo aver installato mistral_inference, può scaricare il modello, caricarlo ed eseguirlo usando il codice seguente. Per informazioni dettagliate, consulti qui.

# download the model
from huggingface_hub import snapshot_download
from pathlib import Path
mistral_models_path = Path.home().joinpath('mistral_models', 'Pixtral')
mistral_models_path.mkdir(parents=True, exist_ok=True)
snapshot_download(repo_id="mistralai/Pixtral-12B-2409", allow_patterns=["params.json", "consolidated.safetensors", "tekken.json"], local_dir=mistral_models_path)
# load the model
from mistral_inference.transformer import Transformer
from mistral_inference.generate import generate
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.protocol.instruct.messages import UserMessage, TextChunk, ImageURLChunk
from mistral_common.protocol.instruct.request import ChatCompletionRequest
tokenizer = MistralTokenizer.from_file(f"{mistral_models_path}/tekken.json")
model = Transformer.from_folder(mistral_models_path)
# Run the model
url = "https://huggingface.co/datasets/patrickvonplaten/random_img/resolve/main/yosemite.png"
prompt = "Describe the image."
completion_request = ChatCompletionRequest(messages=[UserMessage(content=[ImageURLChunk(image_url=url), TextChunk(text=prompt)])])
encoded = tokenizer.encode_chat_completion(completion_request)
images = encoded.images
tokens = encoded.tokens
out_tokens, _ = generate([tokens], model, images=[images], max_tokens=256, temperature=0.35, eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id)
result = tokenizer.decode(out_tokens[0])
print(result)

vLLM

Se sceglie di servire Pixtral in locale, consigliamo anche di usare Pixtral con la libreria vLLM come opzione eccellente per ottenere un serving throughput più elevato. Ringraziamo il team vLLM per il supporto nell'integrare rapidamente Pixtral. Di seguito è riportato un esempio di utilizzo semplice. Trovi ulteriori informazioni qui.

from vllm import LLM
from vllm.sampling_params import SamplingParams
model_name = "mistralai/Pixtral-12B-2409"
sampling_params = SamplingParams(max_tokens=8192)
llm = LLM(model=model_name, tokenizer_mode="mistral")
prompt = "Describe this image in one sentence."
image_url = "https://picsum.photos/id/237/200/300"
messages = [
{
"role": "user",
"content": [{"type": "text", "text": prompt}, {"type": "image_url", "image_url": {"url": image_url}}]
},
]
outputs = vllm_model.model.chat(messages, sampling_params=sampling_params)
print(outputs[0].outputs[0].text)