0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用OpenVINO部署Qwen2多模态模型

英特尔物联网 来源:英特尔物联网 2024-10-18 09:39 次阅读

作者

杨亦诚英特尔 AI 软件工程师

Ekaterina Aidova AI 框架工程师

多模态大模型的核心思想是将不同媒体数据(如文本、图像、音频视频等)进行融合,通过学习不同模态之间的关联,实现更加智能化的信息处理。简单来说,多模态大模型可以可以理解多种不同模态的输入数据,并输出相应反馈结果,例如图像理解,语音识别,视觉问题等。

多模态大模型都会将文本生成模型作为底座模型,以支持对话能力,其中千问团队近期发布的 Qwen2-Audio 和 Qwen2-VL 便是以 Qwen2 为底座的多模态大模型,分别支持语音/文本以及图像/文本作为多模态输入,相比上一代的 Qwen-VL 和 Qwen-Audio ,基于 Qwen2 的多模态模型具备更强大的视觉理解以语音理解能力,并实现了多语种的支持。本文将分享如何利用 OpenVINO 工具套件在轻薄本上部署 Qwen2-Audio 以及 Qwen2-VL 多模态模型。

1Qwen2-VL

1. 模型转换与量化

目前 Qwen2-VL 的推理任务还没有被完全集成进 Optimum 工具中,因此我们需要手动完成模型的转换和量化,其中包含语言模型 lang_model,图像编码模型 image_embed,文本 token 编码模型 embed_token 模型以及图像特征映射模型 image_embed_merger。

为了简化转化步骤,我们提前对这些转化任务行进行了封装,开发者只需要调用 Qwen2-VL 示例地址中提供的函数便可完成这些模型的转换,并对其中负载最大的语言模型进行量化。这里以 Qwen2-VL-2B-Instruct 为例。

from ov_qwen2_vl import convert_qwen2vl_model
import nncf


compression_configuration = {  
  "mode": nncf.CompressWeightsMode.INT4_ASYM,  
  "group_size": 128,  
  "ratio": 1.0,
}


convert_qwen2vl_model("Qwen/Qwen2-VL-2B-Instruct", model_dir, compression_configuration)

2.图片内容理解

此外在该示例中,我们也对模型的推理任务进行封装,通过以下代码便可快速部署图像理解任务,并实现文字的流式输出。由于 Qwen2-VL 对于输入数据有格式上的要求,因此我们需要提前将图片和文本包装为指定的字典格式,并调用模型自带的 processor 脚本将其转换为 prompt 输入。

question = "Describe this image."


messages = [
  {
    "role": "user",
    "content": [
      {
        "type": "image",
        "image": f"file://{example_image_path}",
      },
      {"type": "text", "text": question},
    ],
  }
]

你可以将以下推理代码中的 device 设置为“GPU“,以激活系统中 Intel 集显或是独显的能力。

from ov_qwen2_vl import OVQwen2VLModel
model = OVQwen2VLModel(model_dir, device)


processor = AutoProcessor.from_pretrained(model_dir, min_pixels=min_pixels, max_pixels=max_pixels)


text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
image_inputs, video_inputs = process_vision_info(messages)
inputs = processor(  
 text=[text],  
 images=image_inputs,  
 videos=video_inputs,  
 padding=True,  
 return_tensors="pt",
 )
 
generated_ids = model.generate(**inputs, max_new_tokens=100, streamer=TextStreamer(processor.tokenizer, skip_prompt=True, skip_special_tokens=True))

示例输出效果如下:

Question:

Describe this image.

Answer:

The image depicts a woman sitting on a sandy beach with a large dog. The dog is standing on its hind legs, reaching up to give the woman a high-five. The woman is smiling and appears to be enjoying the moment. The background shows the ocean with gentle waves, and the sky is clear with a soft light, suggesting it might be either sunrise or sunset. The scene is serene and joyful, capturing a heartwarming interaction between the woman and her dog.

3. 视频内容理解

由于 Qwen2-VL 可以同时支持对多个图像输入,因此可以基于这一特性实现视频内容理解,实现方法也特别简单,仅需对视频文件抽帧后保存为图片,并将这些图片基于 Qwen2-VL 提供的预处理脚本合并后,转化为 Prompt 模板,送入模型流水线进行推理。值得注意的是,当你将"type"设置为 "video"后,processor 会自动将两张图片拼接为一张,进行处理,以优化推理性能,并降低多图任务的内存占用。

question = "描述一下这段视频"
messages = [
  {
    "role": "user",
    "content": [
      {
        "type": "video",
        "video": [
          "file://./examples/keyframe_1.jpg",
          "file://./examples/keyframe_2.jpg",
          "file://./examples/keyframe_3.jpg",
          "file://./examples/keyframe_4.jpg",
        ],
        "fps": 1.0,
      },
      {"type": "text", "text": question},
    ],
  }
]

2Qwen2-Audio

1. 模型转换与量化

针对 Qwen2-Audio,我们同样在 Qwen2-VL 示例地址中对模型的转换和量化步骤进行了接口封装,其中包含语言模型 lang_model,音频编码模型 audio_embed,文本 token 编码模型 embed_token 模型以及音频特征映射模型 projection。使用方法如下:

from ov_qwen2_audio_helper import convert_qwen2audio_model
import nncf
compression_configuration = {
  "mode": nncf.CompressWeightsMode.INT4_ASYM,
  "group_size": 128,
  "ratio": 1.0,
}
convert_qwen2audio_model("Qwen/Qwen2-Audio-7B-Instruct", model_dir, compression_configuration)

2. 语音对话

Qwen2-Audio 提供语音对话和音频分析两种任务模式。在语音对话模式中,用户只需输入语音而无需输入文字,指令则通过语音直接传达给模型。下面则是一个音频分析的例子。

conversation = [
  {"role": "system", "content": "You are a helpful assistant."},
  {
    "role": "user",
    "content": [
      {"type": "audio", "audio_url": audio_chat_url},
    ],
  },
]
text = processor.apply_chat_template(conversation, add_generation_prompt=True, tokenize=False)
audios = [librosa.load(audio_chat_file, sr=processor.feature_extractor.sampling_rate)[0]]
inputs = processor(text=text, audios=audios, return_tensors="pt", padding=True)
generate_ids = ov_model.generate(**inputs, max_new_tokens=50, streamer=TextStreamer(processor.tokenizer, skip_prompt=True, skip_special_tokens=True))

和 Qwen2-VL 一样,我们需要在构建输入 Prompt 前,提前准备好字典格式的数据,可以看到在语音对话模式下,我们仅需提供音频文件的地址或路径。该示例的输出如下:

Answer:

Yes, I can guess that you are a female in your twenties.

从输出结果可以看到 Qwen2-Audio 不光可以理解音频内容,并且可以识别对话者的音色和语调。

3. 音频分析

在音频分析模式下,Qwen2-Audio则支持多模态输入,此时我们可以将文本和音频拼接在一起,作为prompt送入模型中进行推理。

question = "What does the person say?"
conversation = [
  {"role": "system", "content": "You are a helpful assistant."},
  {
    "role": "user",
    "content": [
      {"type": "audio", "audio_url": audio_url},
      {"type": "text", "text": question},
    ],
  },
]

示例输入结果:

Answer:

The person says: 'Mister Quilter is the apostle of the middle classes, and we are glad to welcome his gospel.'

3总结与展望

通过 OpenVINO 封装后的 API 函数,开发者可以非常便捷地对预训练模型进行转化压缩,并实现本地化的推理任务部署。同时基于 Qwen2 系列多模态模型强大的音频与图像理解能力,我们仅在轻薄本上便可以构建起一个完整的语言模型应用,在保护用户数据隐私的同时,降低硬件门槛。后期我们也计划将 Qwen2 多模态系列模型的流水线集成进 Optimum 组件中,方便开发者更灵活地进行调用,敬请期待。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 英特尔
    +关注

    关注

    61

    文章

    9915

    浏览量

    171587
  • AI
    AI
    +关注

    关注

    87

    文章

    30348

    浏览量

    268602
  • 模型
    +关注

    关注

    1

    文章

    3184

    浏览量

    48763
  • OpenVINO
    +关注

    关注

    0

    文章

    90

    浏览量

    184

原文标题:如何利用 OpenVINO™ 部署 Qwen2 多模态模型|开发者实战

文章出处:【微信号:英特尔物联网,微信公众号:英特尔物联网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何使用OpenVINO C++ API部署FastSAM模型

    象的位置和边界。本文将介绍如何使用 OpenVINO C++ API 部署 FastSAM 模型,以实现快速高效的语义分割。在前文中我们发表了《基于 OpenVINO Python A
    的头像 发表于 11-17 09:53 881次阅读
    如何使用<b class='flag-5'>OpenVINO</b> C++ API<b class='flag-5'>部署</b>FastSAM<b class='flag-5'>模型</b>

    使用OpenVINO部署PaddleSeg模型库中的DeepLabV3+模型

    Movidius MyraidX VPU上,请参考第一篇文章: Ubuntu20.04环境下使用OpenVINO部署BiSeNetV2模型   那么我们重述一下什么是语义分割:  
    的头像 发表于 11-22 14:58 9857次阅读
    使用<b class='flag-5'>OpenVINO</b>™ <b class='flag-5'>部署</b>PaddleSeg<b class='flag-5'>模型</b>库中的DeepLabV3+<b class='flag-5'>模型</b>

    在C++中使用OpenVINO工具包部署YOLOv5模型

    下载并转换YOLOv5预训练模型的详细步骤,请参考:《基于OpenVINO™2022.2和蝰蛇峡谷优化并部署YOLOv5模型》,本文所使用的Open
    的头像 发表于 02-15 16:53 4595次阅读

    VisCPM:迈向多语言模态模型时代

    可以大致分为两类: 1. 在图生文(image-to-text generation)方面,以 GPT-4 为代表的模态模型,可以面向图像进行开放域对话和深度推理; 2. 在文生图
    的头像 发表于 07-10 10:05 695次阅读
    VisCPM:迈向多语言<b class='flag-5'>多</b><b class='flag-5'>模态</b>大<b class='flag-5'>模型</b>时代

    基于OpenVINO Python API部署RT-DETR模型

    平台实现 OpenVINO 部署 RT-DETR 模型实现深度学习推理加速, 在本文中,我们将首先介绍基于 OpenVINO Python API
    的头像 发表于 10-20 11:15 920次阅读
    基于<b class='flag-5'>OpenVINO</b> Python API<b class='flag-5'>部署</b>RT-DETR<b class='flag-5'>模型</b>

    基于OpenVINO C# API部署RT-DETR模型

    Python API 部署 RT-DETR 模型 | 开发者实战》和《基于 OpenVINO C++ API 部署 RT-DETR 模型
    的头像 发表于 11-10 16:59 723次阅读
    基于<b class='flag-5'>OpenVINO</b> C# API<b class='flag-5'>部署</b>RT-DETR<b class='flag-5'>模型</b>

    NNCF压缩与量化YOLOv8模型OpenVINO部署测试

    OpenVINO2023版本衍生出了一个新支持工具包NNCF(Neural Network Compression Framework – 神经网络压缩框架),通过对OpenVINO IR格式模型的压缩与量化更好的提升
    的头像 发表于 11-20 10:46 1548次阅读
    NNCF压缩与量化YOLOv8<b class='flag-5'>模型</b>与<b class='flag-5'>OpenVINO</b><b class='flag-5'>部署</b>测试

    简单两步使用OpenVINO™搞定Qwen2的量化与部署任务

    英特尔 OpenVINO™ 工具套件是一款开源 AI 推理优化部署的工具套件,可帮助开发人员和企业加速生成式人工智能 (AIGC)、大语言模型、计算机视觉和自然语言处理等 AI 工作负载,简化深度学习推理的开发和
    的头像 发表于 04-26 09:39 1599次阅读
    简单两步使用<b class='flag-5'>OpenVINO</b>™搞定<b class='flag-5'>Qwen2</b>的量化与<b class='flag-5'>部署</b>任务

    阿里通义千问Qwen2模型发布

    阿里巴巴最近发布了其通义千问系列的新成员——Qwen2模型,并在Hugging Face和ModelScope两大平台上实现了同步开源。这一举措无疑为人工智能领域的研究者和开发者们提供了更多选择和可能。
    的头像 发表于 06-07 15:59 744次阅读

    阿里通义千问Qwen2模型发布并同步开源

    阿里巴巴集团旗下的通义千问团队宣布,全新的Qwen2模型正式发布,并在全球知名的开源平台Hugging Face和ModelScope上同步开源。这一里程碑式的事件标志着中国在人工智能领域的又一次重要突破。
    的头像 发表于 06-11 15:33 1053次阅读

    Qwen2强势来袭,AIBOX支持本地化部署

    Qwen2是阿里通义推出的新一代多语言预训练模型,经过更深入的预训练和指令调整,在多个基准评测结果中表现出色,尤其在代码和数学方面有显著提升,同时拓展了上下文长度支持,最高可达128K。目前
    的头像 发表于 06-27 08:02 1006次阅读
    <b class='flag-5'>Qwen2</b>强势来袭,AIBOX支持本地化<b class='flag-5'>部署</b>

    基于Qwen-Agent与OpenVINO构建本地AI智能体

    Qwen2 是阿里巴巴集团 Qwen 团队研发的大语言模型和大型模态模型系列。
    的头像 发表于 07-26 09:54 747次阅读
    基于<b class='flag-5'>Qwen</b>-Agent与<b class='flag-5'>OpenVINO</b>构建本地AI智能体

    阿里Qwen2-Math系列震撼发布,数学推理能力领跑全球

    阿里巴巴近期震撼发布了Qwen2-Math系列模型,这一系列模型基于其强大的Qwen2 LLM构建,专为数学解题而生,展现了前所未有的数学推理能力。
    的头像 发表于 08-12 15:19 703次阅读

    通义千问发布第二代视觉语言模型Qwen2-VL

    Qwen2-VL系列模型模态处理领域取得了突破性进展,于多个权威测评中崭露头角,刷新了多项最佳成绩记录,展现出强大的视觉理解与语言交互能力。
    的头像 发表于 09-03 16:31 541次阅读

    号称全球最强开源模型 ——Qwen2.5 系列震撼来袭!PerfXCloud同步上线,快来体验!

    最新的大规模数据集上进行了预训练,该数据集包含多达18Ttokens。相较于Qwen2Qwen2.5获得了显著更多的知识(MMLU:85+),并在编程能力(Human
    的头像 发表于 09-25 16:52 549次阅读
    号称全球最强开源<b class='flag-5'>模型</b> ——<b class='flag-5'>Qwen</b>2.5 系列震撼来袭!PerfXCloud同步上线,快来体验!