Megrez-3B-Omni:无问芯穹端侧全模态大模型技术剖析与应用指南

发布于 2025-1-6 11:24
浏览
0收藏

在人工智能领域,技术的创新不断推动着行业的发展。前段时间,无问芯穹发布的Megrez-3B-Omni模型引起了广泛关注,它作为全球首款端侧全模态理解开源模型,为智能设备的交互体验带来了全新的变革。本文将对Megrez-3B-Omni进行详细介绍,包括项目概述、技术特点、性能优势、应用场景、快速使用以及项目地址等,希望能帮助读者更好地了解这一创新技术。

一、项目概述

Megrez-3B-Omni是由无问芯穹发布的全球首款端侧全模态理解开源模型。它支持图片、音频和文本三种模态的数据处理,参数量达30亿,主干网络参数仅2.3B,却在精度上超越了14B模型,并在推理速度上领先同级模型300%。该模型专为手机、平板等端侧设备进行了优化,旨在实现图像、音频和文本三种模态数据的无缝融合,让用户在端侧设备上就能享受到更加智能、便捷的交互体验。

二、技术特点

1、创新的架构设计:采用多层多头注意力机制,能够更好地捕捉不同模态数据中的长程依赖关系,提高模型的理解能力和泛化能力。同时,将图像、音频和文本三种不同模态的数据进行深度融合,自动学习不同模态数据之间的关联和转换,从而实现更加准确和全面的理解,跨模态的信息整合能力是传统单一模态模型所无法比拟的。

2、高效的模型优化:运用模型剪枝、量化等技术,减少模型的大小和计算量,同时保持其精度和泛化能力,使其能够在资源受限的设备上运行,如智能手机、嵌入式系统等。此外,还采用了先进的训练算法,如分布式训练、自适应学习率调整等,可加速模型的收敛速度,提高训练效率,并减少过拟合的风险。同时,采用迁移学习、元学习等技术,能更快地适应新的应用场景和任务需求。

3、先进的模态处理:在图像理解方面,利用Siglip-400m技术,将图像转化为易于理解的token,在OpenCompass评测中以高分领先。在语音理解方面,搭载了Qwen2-Audio/Whisper-Large-V3的encoder,能够理解中英文语音输入,并支持多轮对话。

三、性能优势

1、卓越的图像理解:在OpenCompass、MME等测试中,展现了超强的图像分析能力,能够快速且准确地识别和理解图像内容,在场景理解、光学字符识别等应用中表现优异,精度在同行中处于领先地位,甚至能在一些测试集中超越34B模型。

2、出色的文本理解:在C-eval、MMLU等多个权威测试中取得了最佳结果,将上一代14B大模型的能力压缩至3B规模,同时显著降低计算成本,实现了性能与资源利用的最佳平衡,确保用户获得高效的文本处理体验。

3、良好的语音理解:支持中文和英文的语音输入,能够熟练应对复杂的多轮对话场景,可通过语音输入与模型进行自然互动,实现更自然和流畅的沟通体验。

4、快速的推理速度:单模态版本Megrez-3B-Instruct在推理速度上相比同类精度模型领先高达300%,即使在复杂场景下也能流畅运行,能让用户在各类实时应用中获得更及时的响应,提升工作和生活的效率。

四、应用场景

  • 智能家居领域:可应用于智能音箱、智能电视等设备的智能助手中,用户能通过语音、文字或图片与智能助手进行交互,获取信息、设置提醒、控制设备等。
  • 媒体领域:用于图像、音频和文本内容的分析和理解,能更准确地识别视频中的关键帧、提取音频中的关键词、生成文本摘要等,为媒体的内容推荐和搜索提供支持。
  • 自动驾驶领域:可用于车辆的环境感知和决策控制,融合图像、雷达、激光雷达等多种传感器的数据,更准确地识别道路标志、行人、障碍物等,为车辆的安全行驶提供保障。
  • 医疗健康领域:用于医学影像的分析、病历报告的生成等,辅助医生进行疾病诊断和治疗方案的制定,自动识别X光片、CT扫描等医学影像中的异常区域,并提供初步的诊断意见。
  • 教育领域:用于个性化学习系统的开发,根据学生的学习行为、学习进度、兴趣偏好和知识水平等信息,为学生提供定制化的学习资源和教学策略。

五、快速使用

1. 安装相关依赖

安装所需的依赖库

git clone https://github.com/infinigence/Infini-Megrez-Omni.git
pip install -r requirements.txt

音频功能依赖`ffmpeg`进行音频处理,如果使用Debian相关系统,可以通过以下命令安装

sudo apt-get install ffmpeg

对于其他操作系统,请参考`ffmpeg`官方文档进行安装。

2. 下载模型权重文件

使用 modelscope 中的 snapshot_download 函数下载模型(提前安装modelscope :pip install modelscope)。第一个参数为模型名称,参数 cache_dir 用于指定模型的下载路径。在 /root/autodl-tmp 路径下新建 download.py 文件,并在其中输入以下内容:

# 模型下载 
from modelscope import snapshot_download
model_dir = snapshot_download('InfiniAI/Megrez-3B-Omni', cache_dir='/root/autodl-tmp', revision='master')

运行 python /root/autodl-tmp/download.py 执行下载。

3. 使用transformers 推理模型

使用多模态数据进行多轮对话,示例代码如下(请将`<PATH_TO_PRETRAINED_MODEL>`替换为下载的模型权重的路径):

import torch
from transformers import AutoModelForCausalLM
 
path = "/mnt/algorithm/user_dir/zhoudong/workspace/models/megrez-o"  # Change this to the path of the model.
 
model = (
    AutoModelForCausalLM.from_pretrained(
        path,
        trust_remote_code=True,
        torch_dtype=torch.bfloat16,
        attn_implementatinotallow="flash_attention_2",
    )
    .eval()
    .cuda()
)
prompt = "hi" * (128 - 1) 
# Chat with text and image
messages = [
    {
        "role": "user",
        "content": {
            "text": prompt,
            "image": "./data/sample_image.jpg",
        },
    },
]
 
# Chat with audio and image
# messages = [
#     {
#         "role": "user",
#         "content": {
#             "image": "./data/sample_image.jpg",
#             "audio": "./data/sample_audio.m4a",
#         },
#     },
# ]
 
MAX_NEW_TOKENS = 100
response = model.chat(
    messages,
    sampling=False,
    max_new_tokens=MAX_NEW_TOKENS,
)
print(response)

4. 使用vLLM进行推理

首先安装vLLM及其相关依赖(需要特定版本以确保兼容性):

pip install vLLM==0.6.3.post1 flash_attn==2.5.8 xformers==0.0.27.post2

推理脚本如下:

from PIL import Image
from vllm import LLM
from vllm import ModelRegistry
from vllm import SamplingParams
 
from megrezo import MegrezOModel
 
ModelRegistry.register_model("MegrezO", MegrezOModel)
 
# Load the model.
# model_path = "{{PATH_TO_HF_PRETRAINED_MODEL}}"  # Change this to the path of the model.
model_path = "/mnt/algorithm/user_dir/zhoudong/workspace/models/megrez-o"  # Change this to the path of the model.
llm = LLM(
    model_path,
    trust_remote_code=True,
    gpu_memory_utilizatinotallow=0.5,
)
 
sampling_params = SamplingParams(
    temperature=0,
    max_tokens=1000,
    repetition_penalty=1.2,
    stop=["<|turn_end|>", "<|eos|>"],
)
 
img = Image.open("../data/sample_image.jpg")
 
conversation = [
    {
        "role": "user",
        "content": {
            "text": "图片的内容是什么?",
            "image": img,
        },
    },
]
 
# Convert the conversation to vLLM acceptable format.
prompt = llm.get_tokenizer().apply_chat_template(
    conversation,
    tokenize=False,
    add_generation_prompt=True,
)
vllm_inputs = [
    {
        "prompt": prompt,
        "multi_modal_data": {
            "image": img,
        },
    }
]
 
# Generate the outputs.
outputs = llm.generate(
    vllm_inputs,
    sampling_params,
)
 
# Print the outputs.
for output in outputs:
    print(output.outputs[0].text)

5. 在线体验 Gradio 应用

在线Demo:​​https://huggingface.co/spaces/Infinigence/Megrez-3B-Omni​

用户可以直接在网页上输入文本或上传图片、音频,与模型进行交互,模型会根据输入的多模态信息生成相应的回复。

6. 启动 Gradio 应用

您需要在命令行中指定 model_path 和 port。model_path 是模型的路径,port 是本地服务器的端口号。默认情况下,port 是 7860。

python gradio_app.py --model_path {model_path} --port {port}

然后,您可以在浏览器中访问​​ http://localhost:7860 ​​与模型对话。

六、结语

Megrez-3B-Omni的发布是人工智能领域的一次重大突破,它为端侧设备的智能化处理树立了全新标杆,开启了端侧全模态理解的新时代。无问芯穹的这一创新成果不仅展示了其在智能设备领域的强大实力,也为广大开发者和用户提供了一个极具潜力的工具。

项目地址

本文转载自​小兵的AI视界​,作者: AGI小兵 ​​



收藏
回复
举报
回复
相关推荐