实战精选 | 如何利用 OpenVINO™ 在本地运行 Qwen 2.5-VL 系列模型

用OpenVINO本地运行Qwen 2.5-VL系列模型
部署运行你感兴趣的模型镜像

点击蓝字

关注我们

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

介绍

近期阿里通义实验室在 Hugging Face 和 ModelScope 上开源了 Qwen2.5-VL 的 Base 和 Instruct 模型,包含 3B、7B 和 72B 在内的 3 个模型尺寸。其中,Qwen2.5-VL-7B-Instruct 在多个任务中超越了 GPT-4o-mini,而 Qwen2.5-VL-3B 作为端侧 AI 的潜力股,甚至超越了之前版本 的Qwen2-VL 7B 模型。Qwen2.5-VL 增强了模型对时间和空间尺度的感知能力,在空间维度上,Qwen2.5-VL 不仅能够动态地将不同尺寸的图像转换为不同长度的 token,使用图像的实际尺寸来表示检测框和点等坐标,这也使得Qwen2.5-VL模型可以直接作为一个视觉 Agent,推理并动态地使用工具,具备了使用电脑和使用手机的能力。

本文将分享如何利用英特尔 OpenVINO™ 工具套件在本地加速Qwen2.5-VL系列模型的推理任务。

内容列表

  1. 环境准备

  2. 模型下载和转换

  3. 加载模型

  4. 准备模型输入

  5. 运行图像理解任务

1

环境准备

该示例基于Jupyter Notebook编写,因此我们需要准备好相对应的Python环境。基础环境可以参考以下链接安装,并根据自己的操作系统进行选择具体步骤。

https://github.com/openvinotoolkit/openvino_notebooks?tab=readme-ov-file#-getting-started

图片

图:基础环境安装导航页面

此外本示例将依赖qwen-vl-utils以及optimum-intel组件,其中安装optimum-intel过程中将自动安装OpenVINO™ runtime, NNCF及Transformers等相关依赖库。

2

模型下载和转换

这一步中,我们需要完成将Qwen2.5-VL .safetensor格式模型转化为OpenVINO™ IR格式,并对其进行INT4权重量化,实现对模型体积的压缩。为了达到这一目的,optimum-intel提供了命令行工具:optimum-cli,基于该工具,我们只需一行命令便可实现上述步骤:

optimum-cli export openvino --model Qwen/Qwen2.5-VL-3B-Instruct Qwen2.5-VL-3B-Instruct/INT4 --weight-format int4

其中“—model”参数后的“Qwen/Qwen2.5-VL-3B-Instruct”为模型在HuggingFace上的model id,这里我们也提前下载原始模型,并将model id替换为原始模型的本地路径,针对国内开发者,推荐使用ModelScope魔搭社区作为原始模型的下载渠道,具体加载方式可以参考ModelScope官方指南:https://www.modelscope.cn/docs/models/download

3

加载模型

接下来需要完成对模型推理任务的初始化,并将模型载入到指定硬件的内存中,同样的,我们可以利用optimum-intel封装好的OpenVINO™ 视觉多模态任务对象 OVModelForVisualCausalLM 对象完成该操作。

from optimum.intel.openvino import OVModelForVisualCausalLM
model = OVModelForVisualCausalLM.from_pretrained(model_dir, device.value)

如示例代码所示,通过OVModelForVisualCausalLM的from_pretrained函数接口,可以很方便地根据用户提供的模型路径,将模型载入到指定的硬件平台,完成视觉多模态任务的初始化。

4

准备模型输入

第四步需要根据Qwen2.5-VL模型要求的prompt template准备模型的输入数据。数据格式如下:

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

其中:

  • “role“字段用于指定对话角色,包括system, user以及assistant三种类型;

  • "content"字段表示对话角色输出的内容,其中”type”为内容类别,包含image,video,text三种类型,支持多张image输入。

接下来可以通过Qwen官方提供的方法将用户输入的text和image编码为模型的输入tensor。

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",
)

5

运行图像理解任务

最后一步需要调用模型对象的generation函数,进行答案生成,这里可以通过添加TextStreamer迭代器的方式,在命令行中流式输出文本内容。

from transformers import TextStreamer
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 serene beach scene at sunset. A person is sitting on the sandy beach, facing a light-colored dog, likely a Labrador Retriever, which is also sitting and facing the person. The dog appears to be wearing a harness with a leash attached, suggesting that it might be a pet. The person is dressed in a plaid shirt and shorts, and they are smiling, indicating a happy and relaxed moment. The background shows the ocean with gentle waves and the sun setting, casting

图片

图:Gradio示例界面

6

总结

Qwen2.5-VL 系列模型的发布带来了更精准的视觉定位,文字理解以及Agent智能体能力。OpenVINO™ 则可以以更低的资源占用,高效地在本地运行Qwen2.5-VL视觉多模态模型,激发AIPC异构处理器的潜能。相信构建面向桌面操作系统的本地智能体应用已不再遥远。

参考示例

https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/qwen2.5-vl

---------------------------------------

*OpenVINO and the OpenVINO logo are trademarks of Intel Corporation or its subsidiaries.

-----------------------------

 OpenVINO 中文社区 

微信号 : openvinodev

B站:OpenVINO中文社区

“开放、开源、共创”

致力于通过定期举办线上与线下的沙龙、动手实践及开发者交流大会等活动,促进人工智能开发者之间的交流学习。

○ 点击 “ 在看 ”,让更多人看见

您可能感兴趣的与本文相关的镜像

Qwen3-8B

Qwen3-8B

文本生成
Qwen3

Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展

### 本地部署 Qwen2.5-VL 模型的完整指南 Qwen2.5-VL 是由阿里云 Qwen 团队开发的多模态大语言模型,支持本地部署和推理。以下是基于本地环境部署 Qwen2.5-VL 模型的详细步骤,涵盖显卡配置、模型下载和推理部署。 --- #### 1. 硬件与软件要求 在部署 Qwen2.5-VL 模型之前,确保本地环境满足以下硬件和软件要求: - **显卡配置**:建议使用至少一块 NVIDIA GPU,推荐使用 NVIDIA A100 或更高规格的显卡,以支持大规模模型的推理。 - **CUDA 驱动**:安装与显卡匹配的 NVIDIA 驱动,并安装 CUDA Toolkit(建议版本 11.8 或更高)。 - **Python 环境**:推荐使用 Python 3.10 或更高版本,并安装必要的依赖库(如 `torch`、`transformers` 等)。 - **存储空间**:确保有足够的存储空间(至少 100GB),以存放模型文件和相关依赖。 --- #### 2. 获取 Qwen2.5-VL 模型 Qwen2.5-VL 模型的源代码和模型权重可以通过以下方式获取: - **克隆 GitHub 仓库**:使用 Git 克隆 Qwen2.5-VL 的官方仓库: ```bash git clone https://github.com/QwenLM/Qwen2.5-VL ``` - **下载模型权重**:根据仓库中的说明,从指定的模型存储位置下载 Qwen2.5-VL 模型的权重文件。通常,模型权重会以 `.bin` 或 `.safetensors` 格式提供。 --- #### 3. 安装依赖库 进入克隆的仓库目录,并安装所需的 Python 依赖库: ```bash cd Qwen2.5-VL pip install -r requirements.txt ``` 此外,还需要安装以下关键库: - **PyTorch**:用于模型推理。 - **Transformers**:Hugging Face 提供的库,用于加载和运行模型- **Gradio**:用于构建可视化界面,支持用户与模型交互。 --- #### 4. 配置模型推理环境 完成依赖安装后,需要对模型进行配置以支持本地推理: - **加载模型权重**:使用 `transformers` 库加载模型权重,并指定本地路径。例如: ```python from transformers import AutoTokenizer, AutoModelForCausalLM model_path = "./Qwen2.5-VL-7B" tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModelForCausalLM.from_pretrained(model_path) ``` - **设置推理设备**:将模型加载到 GPU 上,以加速推理过程: ```python model.to("cuda") ``` --- #### 5. 使用 vLLM 加速推理 为了进一步提升推理效率,可以使用 vLLM 库来部署 Qwen2.5-VL-7B-Instruct 模型- **安装 vLLM**:通过以下命令安装 vLLM: ```bash pip install vLLM ``` - **启动推理服务**:使用 vLLM 提供的 API 启动推理服务,并指定模型路径和推理参数: ```bash vLLM serve --model ./Qwen2.5-VL-7B-Instruct --host 0.0.0.0 --port 8080 ``` - **调用推理接口**:通过 HTTP 请求与推理服务交互,发送输入数据并获取模型输出。 --- #### 6. 构建可视化界面 为了方便用户与模型交互,可以使用 Gradio 构建一个简单的 Web 界面: - **安装 Gradio**: ```bash pip install gradio ``` - **创建 Web 应用**:编写一个简单的 Python 脚本,加载模型并创建 Gradio 界面: ```python import gradio as gr from transformers import AutoTokenizer, AutoModelForCausalLM model_path = "./Qwen2.5-VL-7B" tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModelForCausalLM.from_pretrained(model_path).to("cuda") def generate_response(prompt): inputs = tokenizer(prompt, return_tensors="pt").to("cuda") outputs = model.generate(**inputs, max_length=512) return tokenizer.decode(outputs[0], skip_special_tokens=True) interface = gr.Interface(fn=generate_response, inputs="text", outputs="text") interface.launch() ``` - **运行 Web 应用**:执行上述脚本后,打开浏览器访问 Gradio 提供的本地地址,即可与模型进行交互。 --- #### 7. 验证与优化 完成部署后,可以通过以下方式验证和优化模型性能: - **测试推理速度**:记录模型生成响应的时间,评估推理效率。 - **调整推理参数**:根据实际需求调整 `max_length`、`temperature` 等参数,以平衡生成质量和速度。 - **监控资源使用**:使用 `nvidia-smi` 等工具监控 GPU 使用情况,确保资源分配合理。 --- #### 8. 常见问题与解决方案 - **模型加载失败**:检查模型权重路径是否正确,并确保文件完整性。 - **显存不足**:尝试降低 `max_length` 或使用更小的模型版本。 - **推理速度慢**:优化模型参数,或升级硬件配置。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值