跳到正文
北京时间
原文
Mistral AI:News·· 2024-09-17精选AI 评分73

Mistral 发布开源多模态模型 Pixtral 12B,采用 Apache 2.0 许可

Research Announcing Pixtral 12B September 17, 2024 By Mistral team

AI 导读

Mistral 发布开源多模态模型 Pixtral 12B,以 Apache 2.0 许可提供,可作为 Mistral Nemo 12B 的直接替换。

推荐理由

官方发布开源多模态模型,给出了架构细节、MMMU 分数和统一评测对比,可作为同规模开源模型选型的参考。

正文 · AI 翻译

Pixtral 12B 已不再维护,已被我们最新、更强大的视觉和多模态模型所取代。

探索我们当前的视觉能力

Pixtral 12B 简介:

原生多模态,使用交错的图像和文本数据进行训练

在多模态任务上表现强劲,擅长遵循指令

在纯文本基准测试中保持最先进的性能

架构:

全新 4 亿参数视觉编码器,从头开始训练

基于 Mistral Nemo 的 120 亿参数多模态解码器

支持可变图像尺寸和宽高比

在 128k token 的长上下文窗口中支持多张图像

使用:

许可证:Apache 2.0

在 La Plateforme 或 Le Chat 上试用

Pixtral 经过训练,能够理解自然图像和文档,在 MMMU 推理基准测试中达到 52.5%,超越了许多更大的模型。该模型在图表理解、文档问答、多模态推理和指令遵循等任务中展现出强大能力。Pixtral 能够以自然分辨率和宽高比摄取图像,让用户灵活选择处理图像所用的 token 数量。Pixtral 还能在其 128K token 的长上下文窗口中处理任意数量的图像。与之前的开源模型不同,Pixtral 不会为了在多模态任务中表现出色而牺牲文本基准性能。

Pixtral 经过训练,可作为 Mistral Nemo 12B 的直接替代品。它与现有开源模型的关键区别在于,它提供了同类最佳的多模态推理能力,同时不牺牲指令遵循、编码和数学等关键文本能力。

评估协议

我们通过相同的评估工具重新评估了一系列开源和闭源模型。对于每个数据集,我们选择的提示词能够复现领先多模态模型(GPT-4o 和 Claude-3.5-Sonnet)的结果。然后使用相同的提示词对所有模型进行评估。总体而言,Pixtral 大幅超越了其规模附近的所有开源模型,并且在许多情况下超越了 Claude 3 Haiku 等闭源模型。在多模态基准测试中,Pixtral 甚至超越或匹敌 LLaVa OneVision 72B 等大得多的模型。所有提示词都将开源。

Pixtral 与闭源及更大规模多模态模型的性能对比。[所有模型均通过相同的评估工具和相同的提示词进行基准测试。我们验证了提示词能够复现 GPT-4o 和 Claude 3.5 Sonnet 所报告的性能(提示词将在技术报告中提供)]。

指令遵循

与其他开源多模态模型相比,Pixtral 在多模态和纯文本指令遵循方面尤为出色。在指令遵循方面,它大幅超越 Qwen2-VL 7B、LLaVa-OneVision 7B 和 Phi-3.5 Vision,在文本 IF-Eval 和 MT-Bench 上相比最接近的开源模型有 20% 的相对提升。为了进一步评估其在多模态用例中的能力,我们创建了这些基准测试的多模态版本:MM-IF-Eval 和 MM-MT-Bench。Pixtral 在多模态指令遵循基准测试中也超越了开源替代方案。我们将向社区开源 MM-MT-Bench。

Pixtral 与开源多模态模型的性能对比。所有模型均通过相同的评估工具和相同的提示词进行基准测试。

架构

可变图像尺寸:Pixtral 的设计兼顾速度和性能。我们训练了一个新的视觉编码器,原生支持可变图像尺寸:

我们只是将图像以其原生分辨率和宽高比通过视觉编码器,将其转换为图像中每个 16x16 图块的图像标记

然后这些标记被展平以创建一个序列,在行之间和图像末尾添加了[IMG BREAK]和[IMG END]标记。

[IMG BREAK]标记让模型能够区分具有相同标记数量但不同宽高比的图像。

通过这种方式,Pixtral 可用于准确理解高分辨率的复杂图表、图形和文档,同时在图标、剪贴画和方程等小图像上提供快速推理速度。

Pixtral 使用从头开始训练的新视觉编码器,原生支持可变图像尺寸。

最终架构:Pixtral 有两个组件:视觉编码器,用于标记化图像;多模态 Transformer 解码器,用于在给定文本和图像序列的情况下预测下一个文本标记。该模型在交错的图像和文本数据上训练以预测下一个文本标记。这种架构允许 Pixtral 在其 128K 标记的大上下文窗口中处理任意数量的任意大小的图像。

定性示例

对复杂图形的推理

此表合并了两个表的数据,确保所有模型及其各自基准的分数都包含在一个统一、连贯的格式中。

提示:

列出欧洲 GDP 最高的前 5 个国家

响应:

根据图像,欧洲 GDP 最高的前 5 个国家是:

1. 德国

2. GDP:3.99 万亿美元

百分比:4.65%

3. 英国

4. GDP:2.82 万亿美元

百分比:3.29%

5. 法国

6. GDP:2.78 万亿美元

百分比:3.24%

7. 意大利

8. GDP:2.07 万亿美元

百分比:2.42%

9. 西班牙

10. GDP:1.43 万亿美元

百分比:1.66%

这些国家在图中以绿色突出显示。

图表理解与分析

图像:

提示:

dark dragon 什么时候开始出问题的?

响应:

该图像是一个标题为“train/loss”的折线图,显示了四个不同模型在步骤上的训练损失:dark-dragon-50、dainty-sunset-49、different-haze-34 和 morning-field-33。x 轴表示步骤,范围从 0 到 60k,y 轴表示损失,采用从 1e-5 到 1e+5 的对数刻度。

要确定 dark-dragon-50 模型何时开始出问题,我们需要查看代表该模型的红色线。最初,损失下降,表明模型正在有效学习。然而,在大约 10k 步骤标记处,损失开始显著飙升。这种飙升表明模型的性能正在恶化。损失继续飙升和波动,达到非常高的值,这表明模型没有有效学习,很可能过拟合或遇到其他问题。

因此,dark-dragon-50 模型开始出问题的关键点大约在 10k 步骤标记处。

多图像指令跟随

图像:

提示:

将两个表中的信息合并到一个 markdown 表中

响应:

要将两个表中的信息合并到一个表中,我们需要对齐模型及其各自基准的相应分数。以下是合并后的表:

| 模型 | 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 |

此表合并了两个表格的数据,确保所有模型及其在各基准测试中的相应分数都包含在一个统一、连贯的格式中。

图像到代码

图像:

提示:

编写 HTML 代码来创建一个像这样的网站

响应:

当然!以下是一个 HTML 代码示例,用于创建一个简单的网页,允许用户选择冰淇淋口味。此示例包含一个用于选择口味的下拉菜单和一个“下一步”按钮。

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="cookiedough">Cookie Dough</option> <option value="mintchocolate">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>

解释:

HTML 结构:该网页由一个容器 div 组成,其中包含标题、下拉菜单和一个按钮。

CSS 样式:应用了基本样式来居中内容并设置元素样式。

JavaScript 函数:当点击“下一步”按钮时,会调用 next 函数。它从下拉菜单中获取所选口味,并显示一个包含所选口味的警告框。

您可以将此代码复制并粘贴到 HTML 文件中,然后在网页浏览器中打开以查看结果。

生成的网站:

自然场景理解

提示:这个人是真的很大,还是这栋建筑只是超级小?

响应:

图片显示一个人把拇指放在比萨斜塔前面,使拇指看起来比塔大得多。这造成了一种视觉错觉,让塔显得比实际更小。实际上,比萨斜塔是一座巨大且标志性的建筑,而人的拇指远没有图片中看起来那么大。这张照片的目的是通过将塔与熟悉的物体(如拇指)进行比较,来展示塔令人印象深刻的高度和大小。

如何运行 Pixtral?

Le Chat

你可以通过 Le Chat 轻松免费地试用 Pixtral,这是我们用户友好的对话式聊天界面。你可以在模型列表中选择 Pixtral,上传图片,然后开始就图片提问。

La Plateforme

Pixtral 也可在 La Plateforme 上使用。你可以通过 API 调用利用 Pixtral 的能力,实现与各种应用程序和工作流的无缝集成。下面是一个简单示例。更多详情请参阅我们的文档。

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

mistral-inference

在本地运行 Pixtral 最简单的方法是使用 mistral-inference。安装 mistralinference 后,你可以使用下面的代码下载模型、加载模型并运行模型。详细信息请参见此处。

下载模型from huggingfacehub import snapshotdownloadfrom pathlib import Path mistralmodelspath = Path.home().joinpath('mistralmodels', 'Pixtral')mistralmodelspath.mkdir(parents=True, existok=True) snapshotdownload(repoid="mistralai/Pixtral-12B-2409", allowpatterns=["params.json", "consolidated.safetensors", "tekken.json"], localdir=mistralmodelspath) 加载模型from mistralinference.transformer import Transformerfrom mistralinference.generate import generate from mistralcommon.tokens.tokenizers.mistral import MistralTokenizerfrom mistralcommon.protocol.instruct.messages import UserMessage, TextChunk, ImageURLChunkfrom mistralcommon.protocol.instruct.request import ChatCompletionRequest tokenizer = MistralTokenizer.fromfile(f"{mistralmodelspath}/tekken.json")model = Transformer.fromfolder(mistralmodelspath) 运行模型url = "https://huggingface.co/datasets/patrickvonplaten/randomimg/resolve/main/yosemite.png"prompt = "Describe the image." completionrequest = ChatCompletionRequest(messages=[UserMessage(content=[ImageURLChunk(imageurl=url), TextChunk(text=prompt)])]) encoded = tokenizer.encodechatcompletion(completionrequest) images = encoded.imagestokens = encoded.tokens outtokens, = generate([tokens], model, images=[images], maxtokens=256, temperature=0.35, eosid=tokenizer.instructtokenizer.tokenizer.eosid)result = tokenizer.decode(outtokens[0]) print(result)

vLLM

如果你选择在本地服务 Pixtral,我们还建议将 Pixtral 与 vLLM 库一起使用,这是实现更高服务吞吐量的绝佳选择。我们感谢 vLLM 团队对快速集成 Pixtral 的支持。下面是一个简单的使用示例。更多信息请参见此处。

from vllm import LLMfrom vllm.samplingparams import SamplingParams modelname = "mistralai/Pixtral-12B-2409" samplingparams = SamplingParams(maxtokens=8192) llm = LLM(model=modelname, tokenizermode="mistral") prompt = "用一句话描述这张图片。"imageurl = "https://picsum.photos/id/237/200/300" messages = [ { "role": "user", "content": [{"type": "text", "text": prompt}, {"type": "imageurl", "imageurl": {"url": imageurl}}] },] outputs = vllmmodel.model.chat(messages, samplingparams=samplingparams) print(outputs[0].outputs[0].text)

来源:Mistral AI:News · mistral.ai