Qwen2.5-vl本地批量推理教程(非建立服务器请求API)

最近想看看qwen-vl系列在本地到底是怎么部署的,但是在csdn上找到的代码都是将qwen-vl弄成一个服务器的形式来调试的,因此还有点不适应,终于找到了一个例子,我放到下面:

from transformers import AutoProcessor
from vllm import LLM, SamplingParams
from qwen_vl_utils import process_vision_info

MODEL_PATH = "Qwen/Qwen2.5-VL-7B-Instruct"

# Initialize the LLM with multimodal capabilities
llm = LLM(
    model=MODEL_PATH,
    limit_mm_per_prompt={"image": 10, "video": 10},
)

# Define generation parameters
sampling_params = SamplingParams(
    temperature=0.1,
    top_p=0.001,
    repetition_penalty=1.05,
    max_tokens=256,
    stop_token_ids=[],
)

# Example message with video content
video_messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": [
            {"type": "text", "text": "Please summarize this video"},
            {
                "type": "video", 
                "video": "https://example.com/video.mp4",
                "total_pixels": 20480 * 28 * 28, 
                "min_pixels": 16 * 28 * 28
            }
        ]
    },
]

# Process the message
processor = AutoProcessor.from_pretrained(MODEL_PATH)
prompt = processor.apply_chat_template(
    video_messages,
    tokenize=False,
    add_generation_prompt=True,
)
image_inputs, video_inputs, video_kwargs = process_vision_info(
    video_messages, return_video_kwargs=True
)

# Prepare multimodal data for vLLM
mm_data = {}
if image_inputs is not None:
    mm_data["image"] = image_inputs
if video_inputs is not None:
    mm_data["video"] = video_inputs

# Create input for vLLM
llm_inputs = {
    "prompt": prompt,
    "multi_modal_data": mm_data,
    "mm_processor_kwargs": video_kwargs,
}

# Generate response
outputs = llm.generate([llm_inputs], sampling_params=sampling_params)
generated_text = outputs[0].outputs[0].text

print(generated_text)

突然发现,这个就是qwen2.5-vl官方仓库的例子啊……

上面的例子只给出了单条数据的处理,下面我将给出多条数据一起推理的参考代码:

# 假设我们已经加载好模型和 processor 了,加载的流程和前面的代码一样
# 后面的代码中,模型是变量 model,processor 就是变量 processor
# 还有 image_paths 和 user_query_ls 两个没有给出的变量,里面就是两个列表,分别放着image路径和给模型的指令

# 预处理部分,和前面一样,不过每次处理多个数据
messages = [
    [
        {
            "role": "system",
            "content": "You are a helpful assistant.",
        },
        {
            "role": "user",
            "content": [
                {"type": "image", "image": image_paths[i]},  # 如果是video,还需要对应的修改
                {"type": "text", "text": user_query_ls[i]},
            ],
        }
    ] for i in range(len(indexes))
]

# Preparation for batch inference
texts = [
    processor.apply_chat_template(msg, tokenize=False, add_generation_prompt=True)
    for msg in messages
]

image_inputs, video_inputs = process_vision_info(messages)

mm_data = [
    {
        "image": image_inputs[i] if image_inputs is not None else None,
        # "video": video_inputs[i] if video_inputs is not None else None,  # 这里因为我没有用video,就注释掉了,如果有video输入,还是要给出的
    } for i in range(len(texts))
]

llm_inputs_ls = [
    {
        "prompt": texts[i],
        "multi_modal_data": mm_data[i],
    } for i in range(len(texts))
]

outputs = model.generate(
    llm_inputs_ls,
    sampling_params=SamplingParams(
        max_tokens=10240,
        temperature=0.1,
        top_p=0.95,
        # top_k=40,
    ),
    use_tqdm=False,
)

output_texts = [
    output.outputs[0].text for output in outputs
]

我看到有人说即使输入一批数据,qwen2.5-vl在vllm中也是一条一条处理的:https://github.com/QwenLM/Qwen2.5-VL/issues/882

这也是为啥qwen2.5-vl建议使用服务器的方式来进行数据的处理。

所以说,之后我也得这么做了,使用服务器的方式来调用模型。

参考链接:

https://deepwiki.com/QwenLM/Qwen2.5-VL/5.3-vllm-deployment#local-inference-with-vllm

https://github.com/QwenLM/Qwen2.5-VL?tab=readme-ov-file#deployment

### Qwen2.5-VLQwen2.5-Instruct 的区别 #### 架构设计上的差异 Qwen2.5-VL 系列相较于 Qwen2.5-Instruct,在模型架构上有显著的不同。Qwen2.5-VL 针对多模态任务进行了优化,其网络结构被进一步简化以增强对时间与空间尺度的感知能力[^1]。这种改进使得 Qwen2.5-VL 更适合处理涉及图像、视频以及其他复杂数据形式的任务。 相比之下,Qwen2.5-Instruct 主要专注于纯文本输入场景下的指令跟随性能提升。它通过强化训练来提高对话理解和生成质量,适用于自然语言处理中的问答、翻译以及代码生成等领域。 #### 性能表现的区别 由于上述架构调整,Qwen2.5-VL 在运行效率方面有所改善,并且能够在多项视觉语言综合评测指标上取得优异成绩,甚至优于某些国际知名竞品(如 GPT-4o-mini)。而 Qwen2.5-Instruct 则更侧重于文字交互体验流畅度和准确性方面的突破。 ### 应用场景对比分析 #### 多模态领域应用-Qwen2.5-VL 对于需要融合多种感官信息的应用场合来说,比如自动驾驶辅助系统开发过程中需要用到的道路环境识别功能;或者医疗健康监测设备里涉及到的人体生理参数可视化展示部分,则可以优先考虑采用具备更强时空理解力特性的 Qwen2.5-VL 模型来进行技术支持。 以下是基于 vLLM 平台部署该版本的具体操作方法示例: ```bash HF_HUB_ENABLE_HF_TRANSFER=1 huggingface-cli download Qwen/Qwen2.5-VL-7B-Instruct ``` 启动服务端口监听命令如下所示: ```python import vllm from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-VL-7B-Instruct") model = vllm.LLM("Qwen/Qwen2.5-VL-7B-Instruct", tokenizer=tokenizer) # Start the server with a specific port number. server = model.start_server(port=8090) ``` #### 文本处理方向适用-Qwen2.5-Instruct 当项目需求集中于文档摘要提取、情感倾向判断或是创意写作支持等方面时,那么选择经过专门调校过的 Qwen2.5-Instruct 将会更加合适一些。这类应用场景通常只需要依赖高质量的语言表达能力和逻辑推理技巧即可满足业务目标要求[^2]。 例如可以通过以下方式加载并初始化这个特定用途定制化后的实例对象用于实际生产环境中: ```python from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer model_name_or_path = 'Qwen/Qwen2.5-Instruct' tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path) text_generator = pipeline('text-generation', model=model, tokenizer=tokenizer) result = text_generator("Write an article about artificial intelligence.", max_length=500)[0]['generated_text'] print(result) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_62488776

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值