Pixtral은 자연 이미지와 문서를 이해하도록 학습되어 MMMU 추론 벤치마크에서 52.5%를 달성, 여러 대형 모델을 능가하였다고 하고, 차트와 그림 이해, 문서 질의응답, 멀티모달 추론 및 지시 따르기 등의 작업에서 좋은 성능을 보였습니다. Pixtral은 이미지를 원래 해상도와 종횡비로 처리할 수 있어 사용자가 이미지 처리에 사용되는 토큰 수를 유연하게 조절할 수 있으며, 128K 토큰의 긴 컨텍스트 윈도우에서 여러 이미지를 처리할 수 있습니다. 기존 오픈소스 모델과 달리 Pixtral은 멀티모달 작업에서 뛰어난 성능을 보이면서도 텍스트 벤치마크 성능을 타협하지 않았다고 합니다.
상세 벤치마크
성능
Pixtral은 Mistral Nemo 12B의 드롭인 대체품으로 학습되었습니다. 기존 오픈소스 모델과의 주요 차이점은 지시 따르기, 코딩, 수학과 같은 핵심 텍스트 기능을 손상시키지 않으면서 최고 수준의 멀티모달 추론을 제공한다는 것입니다.
평가 프로토콜
다양한 오픈 및 클로즈드 모델들을 동일한 평가 프레임워크를 통해 재평가했습니다. 각 데이터셋에 대해 주요 멀티모달 모델(GPT-4o 및 Claude-3.5-Sonnet)의 결과를 재현할 수 있는 프롬프트를 선택했습니다. 그 후 모든 모델을 동일한 프롬프트로 평가했습니다. 전반적으로 Pixtral은 비슷한 규모의 모든 오픈 모델을 크게 능가하며, 많은 경우 Claude 3 Haiku와 같은 클로즈드 모델도 능가합니다. Pixtral은 심지어 LLaVa OneVision 72B와 같은 훨씬 더 큰 모델의 성능을 멀티모달 벤치마크에서 능가하거나 일치시킵니다. 모든 프롬프트는 오픈소스로 공개될 예정입니다.
지시 따르기
Pixtral은 다른 오픈 멀티모달 모델에 비해 멀티모달 및 텍스트 전용 지시 따르기에서 특히 뛰어납니다. Qwen2-VL 7B, LLaVa-OneVision 7B, Phi-3.5 Vision보다 지시 따르기에서 상당히 뛰어나며, 텍스트 IF-Eval 및 MT-Bench에서 가장 가까운 OSS 모델보다 20% 상대적 개선을 보였습니다. 이 능력을 멀티모달 사용 사례에 대해 더 평가하기 위해 MM-IF-Eval 및 MM-MT-Bench라는 이 벤치마크의 멀티모달 버전을 만들었습니다. Pixtral은 멀티모달 지시 따르기 벤치마크에서도 오픈소스 대안들을 능가합니다. MM-MT-Bench를 커뮤니티에 공개할 예정입니다.
아키텍처
가변 이미지 크기
Pixtral은 속도와 성능을 모두 최적화하도록 설계되었습니다. 원본 해상도와 종횡비를 지원하는 새로운 비전 인코더를 학습했습니다.
이렇게 하여 Pixtral은 복잡한 다이어그램, 차트, 문서를 고해상도로 정확하게 이해하면서도 아이콘, 클립아트, 방정식과 같은 작은 이미지에 대해 빠른 추론 속도를 제공할 수 있습니다.
최종 아키텍처
Pixtral은 두 가지 구성 요소로 이루어져 있습니다. 이미지를 토큰화하는 비전 인코더와 텍스트 및 이미지 시퀀스가 주어졌을 때 다음 텍스트 토큰을 예측하는 멀티모달 트랜스포머 디코더입니다. 모델은 섞인 이미지와 텍스트 데이터에서 다음 텍스트 토큰을 예측하도록 학습됩니다. 이 아키텍처를 통해 Pixtral은 128K 토큰의 큰 컨텍스트 윈도우에서 임의 크기의 여러 이미지를 처리할 수 있습니다.
정성적 예시
Architecture:
Use:
Pixtral is trained to understand both natural images and documents, achieving 52.5% on the MMMU reasoning benchmark, surpassing a number of larger models. The model shows strong abilities in tasks such as chart and figure understanding, document question answering, multimodal reasoning and instruction following. Pixtral is able to ingest images at their natural resolution and aspect ratio, giving the user flexibility on the number of tokens used to process an image. Pixtral is also able to process any number of images in its long context window of 128K tokens. Unlike previous open-source models, Pixtral does not compromise on text benchmark performance to excel in multimodal tasks.
Detailed benchmarks Performance Pixtral was trained to be a drop-in replacement for Mistral Nemo 12B. Its key distinguishing factor from existing open-source models is the delivery of best-in-class multimodal reasoning without compromising on key text capabilities such as instruction following, coding, and math.
Evaluation protocol We re-evaluate a range of open and closed models through the same evaluation harness. For each dataset, the prompt was chosen such that we could reproduce the results of leading multimodal models (GPT-4o and Claude-3.5-Sonnet). All models were then evaluated with this same prompt. Overall, Pixtral substantially outperforms all open models around its scale and, in many cases, outperforms closed models such as Claude 3 Haiku. Pixtral even outperforms or matches the performance of much larger models like LLaVa OneVision 72B on multimodal benchmarks. All prompts will be open-sourced.
Detailed benchmarks Performance of Pixtral compared to closed and larger multimodal models. [All models were benchmarked through the same evaluation harness and with the same prompt. We verify that prompts reproduce the performance reported for GPT-4o and Claude 3.5 Sonnet (prompts will be provided in technical report)].
Instruction following Pixtral particularly excels at both multimodal and text-only instruction following as compared to other open multimodal models. It substantially outperforms Qwen2-VL 7B, LLaVa-OneVision 7B and Phi-3.5 Vision in instruction following, with a 20% relative improvement in text IF-Eval and MT-Bench over the nearest OSS model. To further evaluate this ability for multimodal use cases, we create multimodal versions of these benchmarks: MM-IF-Eval and MM-MT-Bench. Pixtral outperforms open-source alternatives on multimodal instruction following benchmarks as well. We will open-source MM-MT-Bench to the community.
Detailed benchmarks Performance of Pixtral compared to open multimodal models. All models were benchmarked through the same evaluation harness and with the same prompt.
Architecture **Variable image size: ** Pixtral is designed to optimize for both speed and performance. We trained a new vision encoder that natively supports variable image sizes:
In this way, Pixtral can be used to accurately understand complex diagrams, charts and documents in high resolution, while providing fast inference speeds on small images like icons, clipart, and equations.
**Final architecture: ** Pixtral has two components: the Vision Encoder, which tokenizes images, and a Multimodal Transformer Decoder, which predicts the next text token given a sequence of text and images. The model is trained to predict the next text token on interleaved image and text data. This architecture allows Pixtral to process any number of images with arbitrary sizes in its large context window of 128K tokens.
Qualitative Examples
How to run Pixtral? Le Chat You can try Pixtral easily and freely via Le Chat, our user-friendly conversational chat interface. You can choose Pixtral in the model list, upload an image, and start asking questions about the image.
La Plateforme Pixtral is also available on La Plateforme. You can leverage Pixtral’s capabilities through API calls, enabling seamless integration with various applications and workflows. Below is a simple example. Please find more details in our docs.
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
The easiest way to run Pixtral locally is to use mistral-inference. After installing mistral_inference, you can download the model, load the model, and run the model using the code below. For detailed information, please see here.
# 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 If you choose to serve Pixtral locally, we also recommend using Pixtral with the vLLM library as a fantastic option to reach higher serving throughput. We thank the vLLM team for their support to integrate Pixtral quickly. Below is a simple usage example. Please find more information here.
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)