模型简介
模型特点
模型能力
使用案例
🚀 Magma-8B GGUF模型
Magma-8B GGUF模型是一个多模态智能体AI模型,可基于输入的文本和图像生成文本。该模型专为研究目的而设计,旨在促进多模态AI领域的知识共享和研究加速。
🚀 快速开始
要开始使用该模型,首先需要确保安装了transformers
和torch
,以及以下依赖项:
pip install torchvision Pillow open_clip_torch
请注意,你需要安装我们定制的transformers库:
pip install git+https://github.com/jwyang/transformers.git@dev/jwyang-v4.48.2
具体原因可参考此处。
然后,你可以运行以下代码:
import torch
from PIL import Image
from io import BytesIO
import requests
from transformers import AutoModelForCausalLM, AutoProcessor
# 加载模型和处理器
dtype = torch.bfloat16
model = AutoModelForCausalLM.from_pretrained("microsoft/Magma-8B", trust_remote_code=True, torch_dtype=dtype)
processor = AutoProcessor.from_pretrained("microsoft/Magma-8B", trust_remote_code=True)
model.to("cuda")
# 推理
url = "https://assets-c4akfrf5b4d3f4b7.z01.azurefd.net/assets/2024/04/BMDataViz_661fb89f3845e.png"
image = Image.open(BytesIO(requests.get(url, stream=True).content))
image = image.convert("RGB")
convs = [
{"role": "system", "content": "You are agent that can see, talk and act."},
{"role": "user", "content": "<image_start><image><image_end>\nWhat is in this image?"},
]
prompt = processor.tokenizer.apply_chat_template(convs, tokenize=False, add_generation_prompt=True)
inputs = processor(images=[image], texts=prompt, return_tensors="pt")
inputs['pixel_values'] = inputs['pixel_values'].unsqueeze(0)
inputs['image_sizes'] = inputs['image_sizes'].unsqueeze(0)
inputs = inputs.to("cuda").to(dtype)
generation_args = {
"max_new_tokens": 128,
"temperature": 0.0,
"do_sample": False,
"use_cache": True,
"num_beams": 1,
}
with torch.inference_mode():
generate_ids = model.generate(**inputs, **generation_args)
generate_ids = generate_ids[:, inputs["input_ids"].shape[-1] :]
response = processor.decode(generate_ids[0], skip_special_tokens=True).strip()
print(response)
✨ 主要特性
- 跨数字与物理世界:Magma是首个用于多模态AI智能体的基础模型,能够处理虚拟和现实环境中的复杂交互。
- 功能多样:作为单一模型,不仅具备通用的图像和视频理解能力,还能生成目标驱动的视觉计划和动作,适用于不同的智能体任务。
- 性能卓越:在各种多模态任务中达到了先进水平,包括UI导航、机器人操作以及通用的图像和视频理解,特别是在空间理解和推理方面表现出色。
- 可扩展预训练策略:除了现有的智能体数据外,还能从大量未标记的视频中进行可扩展学习,具有强大的泛化能力,适合实际应用。
📦 安装指南
安装时需确保安装transformers
和torch
,以及以下依赖项:
pip install torchvision Pillow open_clip_torch
同时,需要安装定制的transformers库:
pip install git+https://github.com/jwyang/transformers.git@dev/jwyang-v4.48.2
💻 使用示例
基础用法
import torch
from PIL import Image
from io import BytesIO
import requests
from transformers import AutoModelForCausalLM, AutoProcessor
# 加载模型和处理器
dtype = torch.bfloat16
model = AutoModelForCausalLM.from_pretrained("microsoft/Magma-8B", trust_remote_code=True, torch_dtype=dtype)
processor = AutoProcessor.from_pretrained("microsoft/Magma-8B", trust_remote_code=True)
model.to("cuda")
# 推理
url = "https://assets-c4akfrf5b4d3f4b7.z01.azurefd.net/assets/2024/04/BMDataViz_661fb89f3845e.png"
image = Image.open(BytesIO(requests.get(url, stream=True).content))
image = image.convert("RGB")
convs = [
{"role": "system", "content": "You are agent that can see, talk and act."},
{"role": "user", "content": "<image_start><image><image_end>\nWhat is in this image?"},
]
prompt = processor.tokenizer.apply_chat_template(convs, tokenize=False, add_generation_prompt=True)
inputs = processor(images=[image], texts=prompt, return_tensors="pt")
inputs['pixel_values'] = inputs['pixel_values'].unsqueeze(0)
inputs['image_sizes'] = inputs['image_sizes'].unsqueeze(0)
inputs = inputs.to("cuda").to(dtype)
generation_args = {
"max_new_tokens": 128,
"temperature": 0.0,
"do_sample": False,
"use_cache": True,
"num_beams": 1,
}
with torch.inference_mode():
generate_ids = model.generate(**inputs, **generation_args)
generate_ids = generate_ids[:, inputs["input_ids"].shape[-1] :]
response = processor.decode(generate_ids[0], skip_special_tokens=True).strip()
print(response)
📚 详细文档
模型生成细节
该模型使用llama.cpp在提交版本5e7d95e2
时生成。
选择合适的模型格式
选择正确的模型格式取决于你的硬件能力和内存限制。
BF16(Brain Float 16)—— 若支持BF16加速则使用
- 一种16位浮点格式,旨在实现更快的计算,同时保持良好的精度。
- 提供与FP32相似的动态范围,但内存使用更低。
- 如果你的硬件支持BF16加速(请查看设备规格),则推荐使用。
- 与FP32相比,适用于高性能推理且内存占用减少。
使用BF16的情况:
- 你的硬件具有原生BF16支持(例如,较新的GPU、TPU)。
- 你希望在节省内存的同时获得更高的精度。
- 你计划将模型重新量化为其他格式。
避免使用BF16的情况:
- 你的硬件不支持BF16(可能会回退到FP32并运行较慢)。
- 你需要与缺乏BF16优化的旧设备兼容。
F16(Float 16)—— 比BF16更广泛支持
- 一种16位浮点格式,具有高精度,但取值范围比BF16小。
- 适用于大多数支持FP16加速的设备(包括许多GPU和一些CPU)。
- 数值精度略低于BF16,但通常足以进行推理。
使用F16的情况:
- 你的硬件支持FP16但不支持BF16。
- 你需要在速度、内存使用和准确性之间取得平衡。
- 你在GPU或其他针对FP16计算优化的设备上运行。
避免使用F16的情况:
- 你的设备缺乏原生FP16支持(可能会比预期运行得慢)。
- 你有内存限制。
量化模型(Q4_K、Q6_K、Q8等)—— 用于CPU和低VRAM推理
量化可以在尽可能保持准确性的同时减小模型大小和内存使用。
- 低比特模型(Q4_K) —— 内存使用最少,但精度可能较低。
- 高比特模型(Q6_K、Q8_0) —— 准确性更高,但需要更多内存。
使用量化模型的情况:
- 你在CPU上运行推理,并且需要优化的模型。
- 你的设备VRAM较低,无法加载全精度模型。
- 你希望在保持合理准确性的同时减少内存占用。
避免使用量化模型的情况:
- 你需要最高的准确性(全精度模型更适合)。
- 你的硬件有足够的VRAM来支持更高精度的格式(BF16/F16)。
极低比特量化(IQ3_XS、IQ3_S、IQ3_M、Q4_K、Q4_0)
这些模型针对极端内存效率进行了优化,非常适合低功耗设备或大规模部署,其中内存是关键限制因素。
- IQ3_XS:超低比特量化(3位),具有极高的内存效率。
- 用例:最适合超低内存设备,即使Q4_K也太大的情况。
- 权衡:与高比特量化相比,准确性较低。
- IQ3_S:小块大小,以实现最大内存效率。
- 用例:最适合低内存设备,当IQ3_XS过于激进时。
- IQ3_M:中等块大小,比IQ3_S具有更好的准确性。
- 用例:适用于低内存设备,当IQ3_S过于受限的情况。
- Q4_K:4位量化,具有逐块优化以提高准确性。
- 用例:最适合低内存设备,当Q6_K太大的情况。
- Q4_0:纯4位量化,针对ARM设备进行了优化。
- 用例:最适合基于ARM的设备或低内存环境。
模型格式选择总结表
模型格式 | 精度 | 内存使用 | 设备要求 | 最佳用例 |
---|---|---|---|---|
BF16 | 最高 | 高 | 支持BF16的GPU/CPU | 减少内存的高速推理 |
F16 | 高 | 高 | 支持FP16的设备 | 当BF16不可用时的GPU推理 |
Q4_K | 中低 | 低 | CPU或低VRAM设备 | 内存受限环境的最佳选择 |
Q6_K | 中 | 中等 | 内存更多的CPU | 量化模型中准确性更好 |
Q8_0 | 高 | 中等 | 有足够VRAM的CPU或GPU | 量化模型中最佳准确性 |
IQ3_XS | 非常低 | 非常低 | 超低内存设备 | 极端内存效率和低准确性 |
Q4_0 | 低 | 低 | ARM或低内存设备 | llama.cpp可针对ARM设备进行优化 |
包含的文件及详情
Magma-8B-bf16.gguf
- 模型权重保存为BF16格式。
- 如果你想将模型重新量化为不同的格式,请使用此文件。
- 如果你的设备支持BF16加速,则为最佳选择。
Magma-8B-f16.gguf
- 模型权重存储为F16格式。
- 如果你的设备支持FP16,特别是当BF16不可用时,请使用此文件。
Magma-8B-bf16-q8_0.gguf
- 输出和嵌入保持为BF16格式。
- 所有其他层量化为Q8_0。
- 如果你的设备支持BF16,并且你想要一个量化版本,请使用此文件。
Magma-8B-f16-q8_0.gguf
- 输出和嵌入保持为F16格式。
- 所有其他层量化为Q8_0。
Magma-8B-q4_k.gguf
- 输出和嵌入量化为Q8_0。
- 所有其他层量化为Q4_K。
- 适合内存有限的CPU推理。
Magma-8B-q4_k_s.gguf
- 最小的Q4_K变体,以牺牲准确性为代价减少内存使用。
- 最适合极低内存设置。
Magma-8B-q6_k.gguf
- 输出和嵌入量化为Q8_0。
- 所有其他层量化为Q6_K。
Magma-8B-q8_0.gguf
- 完全Q8量化的模型,以提高准确性。
- 需要更多内存,但提供更高的精度。
Magma-8B-iq3_xs.gguf
- IQ3_XS量化,针对极端内存效率进行了优化。
- 最适合超低内存设备。
Magma-8B-iq3_m.gguf
- IQ3_M量化,提供中等块大小以提高准确性。
- 适用于低内存设备。
Magma-8B-q4_0.gguf
- 纯Q4_0量化,针对ARM设备进行了优化。
- 最适合低内存环境。
- 若追求更高准确性,可优先选择IQ4_NL。
测试模型
如果你觉得这些模型有用:
- 如果你觉得有用,请点击“点赞”! 帮助我测试我的支持量子安全检查的AI网络监控助手: 免费网络监控器
测试方法: 选择一种AI助手类型:
TurboLLM
(GPT-4o-mini)HugLLM
(Hugginface开源模型)TestLLM
(仅支持CPU的实验性模型)
测试内容
我正在探索小型开源模型在AI网络监控中的极限,具体包括:
- 针对实时网络服务进行函数调用
- 模型可以小到什么程度,同时仍能处理:
- 自动Nmap扫描
- 量子就绪检查
- 网络监控任务
TestLLM —— 当前的实验性模型(在2个CPU线程上运行llama.cpp)
- 零配置设置
- 加载时间约30秒(推理速度慢,但无API成本)
- 寻求帮助! 如果你对边缘设备AI感兴趣,让我们一起合作!
其他助手
- TurboLLM —— 使用gpt-4o-mini进行:
- 创建自定义cmd处理器,在免费网络监控代理上运行.net代码
- 实时网络诊断和监控
- 安全审计
- 渗透测试 (Nmap/Metasploit)
- 通过登录或下载我们集成了AI助手的免费网络监控代理获取更多令牌。
- HugLLM —— 最新的开源模型:
- 在Hugging Face推理API上运行
示例测试命令
"Give me info on my websites SSL certificate"
"Check if my server is using quantum safe encyption for communication"
"Run a comprehensive security audit on my server"
"Create a cmd processor to .. (what ever you want)"
注意,你需要安装免费网络监控代理才能运行.net代码。这是一个非常灵活和强大的功能,请谨慎使用!
模型详情
模型描述
Magma是一个多模态智能体AI模型,可基于输入的文本和图像生成文本。该模型专为研究目的而设计,旨在促进多模态AI领域的知识共享和研究加速,特别是多模态智能体AI。该模型的主要创新在于引入了两项技术创新:Set-of-Mark和Trace-of-Mark,并利用了大量未标记的视频数据来学习时空定位和规划。更多技术细节请参考我们的论文。
亮点
- 跨数字与物理世界:Magma是首个用于多模态AI智能体的基础模型,能够处理虚拟和现实环境中的复杂交互!
- 功能多样:作为单一模型,不仅具备通用的图像和视频理解能力,还能生成目标驱动的视觉计划和动作,适用于不同的智能体任务!
- 性能卓越:在各种多模态任务中达到了先进水平,包括UI导航、机器人操作以及通用的图像和视频理解,特别是在空间理解和推理方面表现出色!
- 可扩展预训练策略:除了现有的智能体数据外,还能从大量未标记的视频中进行可扩展学习,具有强大的泛化能力,适合实际应用!
智能体应用
UI导航
What's weather in Seattle? & turn on flight mode
Share and message this to Bob Steve. Click send button
机器人操作
Pick Place Hotdog Sausage
Put Mushroom Place Pot
Push Cloth Left to Right (Out-of-Dist.)
游戏
任务:模型控制机器人收集绿色方块。
Magma v.s. LLaVA-OneVision
Magma v.s. GPT4o-minni
模型架构

🔧 技术细节
训练数据
我们的训练数据包括:
- 通用图像SFT数据:LLaVA-Next、InfoGrpahicVQA、ChartQA_Augmented、FigureQA、TQA、ScienceQA。
- 通用视频SFT数据:ShareGPT4Video和LLaVA-Video。
- 指令视频数据:Ego4d、Somethingv2、Epic-Kitchen和其他相关指令视频。
- 机器人操作数据:Open-X-Embodiment。
- UI定位数据:SeeClick。
- UI导航数据:Mind2web和AITW。
数据收集过程涉及从公开可用的文档中获取信息,并精心过滤掉不良文档和图像。为了保护隐私,我们仔细过滤了各种图像和文本数据源,以从训练数据中删除或清理任何潜在的个人数据。更多详细信息请参考我们的论文。 微软隐私声明
训练过程
预处理
除了与文本相关的预处理外,我们主要进行以下图像和视频预处理步骤:
- UI定位和导航数据:对于每个UI截图,我们提取UI元素的边界框,并应用Set-of-Mark Prompting在原始图像上叠加数字标记。模型根据图像和Set-of-Mark提示进行训练,以生成UI定位文本。
- 指令视频数据:对于每个视频片段,我们应用Co-Tracker提取网格轨迹,然后应用过滤算法去除嘈杂或静态点。对于有相机运动的视频,我们进一步应用单应性变换来稳定视频片段。最后,我们为每个轨迹分配一个数字标记,从而得到一组trace-of-mark。模型根据视频片段和指令文本进行训练,以生成trace-of-mark。
- 机器人操作数据:对于Open-X Embodiment中的机器人数据,我们提取7自由度机器人抓手状态,并从视频片段中提取trace-of-mark。对视频片段应用类似的过滤和稳定步骤。模型根据视频片段和指令文本进行训练,以生成机器人操作动作以及trace-of-mark。
经过所有这些预处理后,我们将它们与现有的文本注释相结合,形成最终的多模态训练数据。更多技术细节请参考我们的论文。
训练超参数
我们在H100和MI300上使用bf16混合精度进行训练。使用以下超参数:
- 批量大小:1024
- 学习率:1e-5
- 最大序列长度:4096
- 分辨率:图像最大为1024x1024,视频帧为512x512。
- 预训练轮数:3
评估
我们以零样本方式在广泛的任务上评估模型,主要是与智能体相关的任务。
测试数据、因素和指标
我们在以下数据集上评估模型的零样本性能:
- UI定位:ScreenSpot和VisualWebArena。
- 机器人操作:SimplerEnv和WidowX真实机器人。
- 空间理解和推理:VSR、BLINK和SpatialEval。
我们还在以下数据集上评估模型微调后的性能:
- UI导航:Mind2Web和AITW。
- 机器人操作:SimplerEnv和WidowX真实机器人。
- 多模态图像理解和推理:VQAv2、GQA、MME、POPE、TextVQA、ChartQA、DocVQA。
- 多模态视频理解和推理:Next-QA、VideoMME、MVBench。
我们遵循各个数据集的评估指标进行评估。更多详细信息请参考原始数据集。
智能体智能评估结果
对智能体智能进行零样本评估。我们报告了未经任何特定领域微调的预训练Magma的结果。Magma是唯一能够执行全任务范围的模型。
模型 | VQAv2 | TextVQA | POPE | SS-Mobile | SS-Desktop | SS-Web | VWB-Ele-G | VWB-Act-G | SE-Google Robot | SE-Bridge |
---|---|---|---|---|---|---|---|---|---|---|
GPT-4V | 77.2 | 78.0 | n/a | 23.6 | 16.0 | 9.0 | 67.5 | 75.7 | - | - |
GPT-4V-OmniParser | n/a | n/a | n/a | 71.1 | 45.6 | 58.5 | - | - | - | - |
LLava-1.5 | 78.5 | 58.2 | 85.9 | - | - | - | 12.1 | 13.6 | - | - |
LLava-Next | 81.3 | 64.9 | 86.5 | - | - | - | 15.0 | 8.7 | - | - |
Qwen-VL | 78.8 | 63.8 | n/a | 6.2 | 6.3 | 3.0 | 14.0 | 0.7 | - | - |
Qwen-VL-Chat | 78.2 | 61.5 | n/a | - | - | - | - | - | - | - |
Fuyu | 74.2 | n/a | n/a | 21.2 | 20.8 | 19.2 | 19.4 | 15.5 | - | - |
SeeClick | - | - | - | 65.0 | 51.1 | 44.1 | 9.9 | 1.9 | - | - |
Octo | - | - | - | - | - | - | - | - | - | - |
RT-1-X | - | - | - | - | - | - | - | - | 6.0 | 15.9 |
OpenVLA | - | - | - | - | - | - | - | - | 34.2 | 1.1 |
Magma-8B | 80.0 | 66.5 | 87.4 | 59.5 | 64.1 | 60.6 | 96.3 | 71.8 | 52.3 | 35.4 |
注:SS - ScreenSpot,VWB - VisualWebArena,SE - SimplerEnv
技术规格
模型架构和目标
- 语言模型:我们使用Meta LLama-3作为骨干大语言模型。
- 视觉编码器:我们使用由LAION团队训练的CLIP-ConvneXt-XXLarge作为视觉编码器,对图像和视频进行分词。
整个流程遵循多模态大语言模型的常见做法,即使用视觉编码器对图像和视频进行分词,然后将视觉标记与文本标记一起输入到大语言模型中,以生成文本输出。
计算基础设施
我们使用Azure ML进行模型训练。
硬件
我们的模型在以下两种GPU上进行训练:
- Nvidia H100
- AMD MI300
软件
我们的模型基于以下软件构建:
预期用途
直接使用
模型以图像和文本作为输入,并生成文本输出,用于以下用途:
- 图像/视频条件文本生成:模型可以根据输入的文本和图像生成文本(例如,描述、答案)。
- 视觉规划能力:模型还可以生成视觉轨迹,作为完成任务的未来规划(例如,将物体从一个地方移动到另一个地方)。
- 智能体能力:模型还可以生成UI定位(例如,点击“搜索”按钮)和机器人操作(例如,机器人抓手的7自由度)。
下游使用
模型可以进一步针对不同的下游任务进行微调,例如:
- 图像字幕和问答:我们可以在多模态大语言模型的流程下进一步微调该模型,用于图像字幕和问答任务。根据我们的实验,该模型在这些任务上可以取得有竞争力的性能,同时在空间理解和推理方面表现更好。
- 视频字幕和问答:我们可以在多模态大语言模型的流程下进一步微调该模型,用于视频字幕和问答任务。根据我们的实验,该模型在这些任务上可以取得有竞争力的性能,同时在时间理解和推理方面表现更好。
- UI导航:我们可以针对特定的UI导航任务(如网页导航或移动导航)对该模型进行微调。该模型在这些任务上可以取得卓越的性能。
- 机器人操作:鉴于该模型作为视觉-语言-动作模型的通用智能体能力,我们可以进一步针对机器人任务对其进行微调。微调后,我们的模型在机器人操作任务上显著优于OpenVLA等先进模型。
偏差、风险和局限性
请注意,该模型并非专门为所有下游用途而设计或评估。该模型不适合部署在生产环境中,不应在高风险场景中使用,如军事和国防、金融服务和关键基础设施系统。
开发者在选择用例时应考虑多模态模型的常见局限性,并在特定下游用例中使用之前评估和缓解准确性、安全性和公平性问题。开发者应了解并遵守适用于其用例的相关法律法规(包括隐私、贸易合规等)。与其他多模态模型一样,Magma可能会出现不公平、不可靠或冒犯性的行为。模型的输出不反映微软的意见。
需要注意的一些局限性包括:
- 服务质量:模型主要在英文文本上进行训练。非英文语言的性能会较差。训练数据中代表性较少的英语变体的性能可能比标准美式英语差。Magma不支持多语言使用。
- 伤害表示和刻板印象延续:这些模型可能会过度或不足地表示某些人群,抹去某些群体的代表性,或强化贬低性或负面的刻板印象。尽管进行了安全后训练,但由于不同群体的表示水平不同或训练数据中反映现实世界模式和社会偏见的负面刻板印象示例普遍存在,这些局限性可能仍然存在。
- 不适当或冒犯性内容:这些模型可能会产生其他类型的不适当或冒犯性内容,因此在没有针对特定用例进行额外缓解措施的情况下,不适合在敏感环境中部署。
- 信息可靠性:多模态模型可能会生成无意义的内容或编造听起来合理但不准确或过时的内容。
开发者应应用负责任的AI最佳实践,并负责确保特定用例符合相关法律法规(如隐私、贸易等)。强烈建议使用Azure AI Content Safety等具有先进防护机制的安全服务。
建议
Magma仅用于研究目的。直接和下游用户都应了解该模型的风险、偏差和局限性。
微调模型的推荐使用场景是在其训练的研究环境中,即:
- 在计算机上运行的安卓模拟器中进行UI操作。
- 在配备机械臂和日常物品的封闭环境中进行机器人操作。
对于UI导航任务,研究人员应确保有人在操作循环中对智能体系统生成的每个动作进行控制。由于模型本身无法执行操作,研究人员用于实际执行UI导航动作的子模块应确保执行模型提出的UI动作不会产生意外后果。
对于机器人操作任务,在操作机械臂时,为保障人员安全可采取以下缓解策略:
- 安全区域和屏障:在机器人工作空间周围设置物理屏障或安全区域,防止未经授权的进入。
- 紧急停止系统:为机械臂配备易于操作的紧急停止按钮。实施故障安全机制,在紧急情况下立即停止操作。
- 安全标准和合规性:遵守工业机器人和协作机器人的既定安全标准(如ISO 10218、ISO/TS 15066)。
- 用户培训和意识:为所有在机械臂周围工作的人员提供全面培训,使其了解机械臂的功能、安全特性和紧急程序。提高对机器人操作潜在风险的认识。
📄 许可证
该模型由微软开发,由微软研究院资助。模型由微软研究院共享,并遵循MIT许可证。
📖 引用
@misc{yang2025magmafoundationmodelmultimodal,
title={Magma: A Foundation Model for Multimodal AI Agents},
author={Jianwei Yang and Reuben Tan and Qianhui Wu and Ruijie Zheng and Baolin Peng and Yongyuan Liang and Yu Gu and Mu Cai and Seonghyeon Ye and Joel Jang and Yuquan Deng and Lars Liden and Jianfeng Gao},
year={2025},
eprint={2502.13130},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2502.13130},
}








