原文链接

模型下载与转换

QWen-VL是主要是由QWen LLM、Vision Encoder、MLP-based Vision-Language Merger 三个组件组合完成的架构,完整的QWen-VL的架构图示如下:

Image

当前支持Qwen/Qwen2.5-VL-3B-Instruct与Qwen/Qwen2.5-VL-7B-Instruct两个模型可供下载

huggingface-cli download "Qwen/Qwen2.5-VL-3B-Instruct" --local-dir qwen2.5_3b

Image

下载完成以后需要使用optimum-cli工具把模型转换为OpenVINO支持格式,命令行格式如下:

optimum-cli export openvino --model <model_id_or_path> --task <task> <output_dir>

需要安装一下NNCF这个工具,

pip install nncf -i https://pypi.tuna.tsinghua.edu.cn/simple

帮助把大模型压缩量化支持INT8、INT4模式文件。转换的命令行如下:

optimum-cli export openvino --model ./qwen2.5_3b qwen2.5_3b/INT4 --task image-text-to-text --weight-format int4

官方文档给出转换命令行 没有--task参数会导致转换时候报错,错误提示就是必须指定--task参数,QWen2.5-VL模型支持的task参数如下:

--task image-text-to-text

表示多模态输入支持图像与文本。

Image

转换之后生成INT4格式的qwen2.5-openvino格式文件

Image

推理SDK与演示

首先需要安装QWen API工具支持包

pip install qwen-vl-utils[decord]

安装好以后,然后通过optimum openvino的插件OVModelForVisualCausalLM 加载模型,基于QWen API函数构建输入预处理与输出后处理,最终实现的代码如下:

import cv2 as cv
from transformers import AutoProcessor, AutoTokenizer
from qwen_vl_utils import process_vision_info
from transformers import TextStreamer
from optimum.intel.openvino import OVModelForVisualCausalLM
min_pixels = 256 * 28 * 28
max_pixels = 1280 * 28 * 28
model_dir = "D:/LLMs/qwen2.5_3b/INT4"
processor = AutoProcessor.from_pretrained(model_dir, min_pixels=min_pixels, max_pixels=max_pixels)
model = OVModelForVisualCausalLM.from_pretrained(model_dir, device="CPU")
if processor.chat_template is None:
    tok = AutoTokenizer.from_pretrained("D:/LLMs/qwen2.5_3b")
    processor.chat_template = tok.chat_template
image = cv.imread("D:/pedestrian.png")
question = "how many persons in the image?"
messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "image",
                "image": "D:/pedestrian.png",
            },
            {"type": "text", "text": question},
        ],
    }
]
# Preparation for inference
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",
)

QWen2.5-VL 零样本的图像分类与内容检测演示

Image

QWen2.5-VL OCR识别演示

Image

OpenVINO+QWen2.5-VL大模型部署真香。

Logo

为开发者提供丰富的英特尔开发套件资源、创新技术、解决方案与行业活动。欢迎关注!

更多推荐