当前位置: 首页 > web >正文

vLLM 推理 Qwen2.5-VL-7B 视频

vLLM 推理 Qwen2.5-VL-7B 视频

flyfish

from transformers import AutoProcessor
# SamplingParams用于设置采样参数
from vllm import LLM, SamplingParams
# 从自定义的qwen_vl_utils模块导入process_vision_info函数,用于处理视觉信息
from qwen_vl_utils import process_vision_infoMODEL_PATH = "/media/Qwen/Qwen25-VL-7B-Instruct/"
video_path ="/media//test/output/1.mp4"# 初始化LLM对象,加载指定路径的模型,并进行相关配置
llm = LLM(model=MODEL_PATH,  # 模型路径gpu_memory_utilization=0.8,  # GPU内存利用率,这里设置为80%tensor_parallel_size=1,  # 张量并行大小,设置为1表示不使用张量并行max_model_len=8192,  # 模型支持的最大输入长度dtype="bfloat16",  # 数据类型,使用bfloat16以减少内存占用enforce_eager=True,  # 强制使用即时执行模式limit_mm_per_prompt={"image": 10, "video": 10},  # 每个提示的多模态数据限制,这里图像和视频最多各10个
)# 定义采样参数,用于控制模型生成文本的方式
sampling_params = SamplingParams(temperature=0.1,  # 温度参数,控制生成文本的随机性,值越小越确定top_p=0.001,  # 核采样的概率阈值,只考虑概率累积和达到该阈值的词repetition_penalty=1.05,  # 重复惩罚因子,用于减少生成文本中的重复内容max_tokens=8192,  # 生成文本的最大长度stop_token_ids=[],  # 停止生成的token ID列表,这里为空表示不设置停止条件
)# 定义视频输入的消息列表,包含系统消息和用户消息
# 系统消息用于给模型提供一些基本的指令或信息
# 用户消息包含文本和视频信息,要求模型描述指定的视频
video_messages = [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": [{"type": "text", "text": "描述这个视频。"},{"type": "video", "video": "file:///" + video_path,  # 视频文件的URL"total_pixels": 20480 * 28 * 28, "min_pixels": 16 * 28 * 28  # 视频的总像素和最小像素信息}]},
]messages = video_messagesprocessor = AutoProcessor.from_pretrained(MODEL_PATH)
# 使用处理器将消息应用到聊天模板中,生成模型的输入提示,不进行分词操作,并添加生成提示
prompt = processor.apply_chat_template(messages,tokenize=False,add_generation_prompt=True,
)
# 调用process_vision_info函数处理消息中的视觉信息,返回图像输入和视频输入,不同的程序版本process_vision_info用法不同
image_inputs, video_inputs = process_vision_info(messages)# 初始化多模态数据字典
mm_data = {}# 如果视频输入不为空,将视频输入添加到多模态数据字典中
if video_inputs is not None:mm_data["video"] = video_inputs# 定义模型的输入字典,包含提示和多模态数据
llm_inputs = {"prompt": prompt,"multi_modal_data": mm_data,
}# 调用LLM对象的generate方法,根据输入和采样参数生成文本
outputs = llm.generate([llm_inputs], sampling_params=sampling_params)
# 从输出结果中提取生成的文本
generated_text = outputs[0].outputs[0].textprint(generated_text)

LLM 参数

模型路径与版本相关参数

  • model:这是一个必需的参数,它指定了要加载的模型的路径或者模型的名称。若提供的是路径,程序会从该路径加载模型;若提供的是名称,程序会尝试从 Hugging Face 的模型库中下载并加载对应的模型。
  • revision:此参数用于指定模型的版本,默认值为 "main"。你可以通过这个参数来选择加载特定版本的模型。

硬件与并行计算相关参数

  • gpu_memory_utilization:该参数表示 GPU 内存的利用率,默认值为 0.9。它的取值范围在 0 到 1 之间,通过调整这个参数可以控制模型加载时使用的 GPU 内存比例。
  • tensor_parallel_size:这个参数用于设置张量并行的大小,默认值为 1。张量并行是一种并行计算技术,通过将模型的张量分割到多个 GPU 上进行计算,从而加速模型的推理过程。
  • max_num_batched_tokens:它指定了每次推理时最大的批处理 token 数量,默认值为 2560。适当调整这个参数可以平衡推理速度和内存使用。
  • swap_space:表示每个 GPU 的交换空间大小(单位为 GB),默认值为 4。当 GPU 内存不足时,会使用交换空间来存储临时数据。

模型运行相关参数

  • dtype:用于指定模型的数据类型,默认值为 "auto"。常见的数据类型包括 "float16""bfloat16" 等,选择合适的数据类型可以在保证模型精度的前提下,减少内存占用。
  • max_model_len:表示模型支持的最大输入长度,默认值为 2048。如果输入的文本长度超过这个值,可能会导致错误或截断输入。
  • quantization:该参数用于指定模型的量化方法,默认值为 None。量化是一种压缩模型的技术,可以减少模型的内存占用和推理时间。
  • enforce_eager:这是一个布尔类型的参数,默认值为 False。当设置为 True 时,会强制使用即时执行模式。

多模态相关参数

  • limit_mm_per_prompt:此参数用于限制每个提示中的多模态数据数量,例如可以设置为 {"image": 10, "video": 10},表示每个提示中图像和视频的最大数量分别为 10。

这里没有传递的参数

  1. Tokenizer 相关参数

    • tokenizer:指定分词器的名称或路径(默认与 model 共用,可单独指定)。
    • tokenizer_mode"auto"(优先使用快速分词器)或 "slow"(强制使用慢速分词器,默认 "auto")。
    • skip_tokenizer_init:跳过分词器初始化(默认 False),需手动提供 prompt_token_ids
    • trust_remote_code:信任远程代码(如 Hugging Face 自定义模型,默认 False,安全相关)。
  2. 量化相关参数

    • quantization:模型量化方法,支持 "awq""gptq""fp8"(实验性),默认 None(不量化,使用 dtype)。
  3. 版本控制参数

    • revision:模型版本(分支、标签、commit ID,默认 None)。
    • tokenizer_revision:分词器版本(同上)。
  4. 硬件与内存参数

    • cpu_offload_gb:CPU 内存用于卸载模型权重(单位 GB,默认 0),牺牲速度换取更大模型支持。
    • max_seq_len_to_capture:CUDA 图支持的最大序列长度,超过则回退到即时模式(默认未指定,需根据模型调整)。
  5. 安全与多模态参数

    • allowed_local_media_path:允许读取本地媒体文件的路径(安全风险,仅可信环境启用),用于多模态输入(如图像、视频)。
  6. 其他参数

    • seed:随机数生成种子(默认 None),控制采样随机性。
    • disable_custom_all_reduce:禁用自定义 AllReduce(分布式训练相关,默认 False)。
    • hf_overrides:覆盖 Hugging Face 模型配置(字典或可调用对象)。
    • compilation_config:模型编译优化配置(整数或字典,默认 None)。

参数分类总结(按功能)

类别参数
模型与分词器model, tokenizer, tokenizer_mode, skip_tokenizer_init, trust_remote_code, revision, tokenizer_revision
分布式与硬件tensor_parallel_size, gpu_memory_utilization, swap_space, cpu_offload_gb, max_seq_len_to_capture, disable_custom_all_reduce
数据类型与量化dtype, quantization
安全与多模态allowed_local_media_path
初始化与配置seed, enforce_eager, hf_overrides, compilation_config

GPU操作执行模式 enforce_eager 参数

CUDA 图(CUDA Graphs)

1. 核心概念

CUDA 图是 NVIDIA 提供的一项技术,用于将一系列 GPU 操作(如张量计算、内存操作等) 捕获并封装为一个可重复执行的“图”。这个图可以在后续执行时作为一个整体提交给 GPU,避免重复的 CPU-GPU 通信开销,从而提升执行效率。

2. 优势
  • 高效性:捕获图后,只需一次 CPU-GPU 通信即可提交整个计算流程,减少内核启动和同步开销,适合 静态、重复的计算模式(如固定输入形状的推理)。
  • 低延迟:对相同或相似的计算任务,执行速度比即时模式更快。
3. 限制
  • 静态性:要求计算流程(如张量形状、操作顺序)在图捕获时完全确定,不支持动态变化(如条件分支、动态形状调整)。
  • 兼容性问题:某些复杂操作(如非确定性操作、动态内存分配)可能无法被 CUDA 图捕获,导致错误或功能失效。

即时模式(Eager Execution)

1. 核心概念

即时模式是指 每条 GPU 操作指令立即执行,无需预先捕获或构建计算图。操作的结果会立即返回给 CPU,流程控制更灵活(如支持动态条件判断、实时调整张量形状)。

2. 特点
  • 灵活性:适合 动态计算场景(如训练过程中动态调整输入、包含条件分支的模型)。
  • 调试友好:操作结果可实时查看,方便调试和开发。
  • 开销较高:每次操作都需要 CPU-GPU 通信和内核启动,重复执行时效率低于 CUDA 图。

enforce_eager=True 的作用与场景

在 VLLM 的 LLM 类中,enforce_eager 参数控制是否强制使用即时模式(禁用 CUDA 图):

  • 默认 False:混合使用 CUDA 图和即时模式。对于固定输入模式的计算(如常规推理),优先使用 CUDA 图提升效率;遇到动态操作时自动切换到即时模式。
  • True强制禁用 CUDA 图,完全使用即时模式。适用于以下场景:
    1. 复杂操作兼容性:当模型包含动态形状、条件分支(如多模态处理中的视频帧动态解码)、自定义 CUDA 内核等,CUDA 图可能无法正确捕获或执行这些操作,导致错误。此时必须启用即时模式以确保功能正常。
    2. 调试需求:即时模式下操作结果可实时验证,方便排查问题。
    3. 动态输入场景:输入数据形状或计算流程在运行时变化(如变长视频处理),CUDA 图的静态特性无法支持。

实际使用中,若模型输入和计算流程完全静态,保持默认 False 可获得更好性能;若遇到动态操作报错,则需启用此参数。

模式优势劣势适用场景
CUDA 图高效、低延迟(静态任务)不支持动态操作固定输入的推理任务(如文本生成)
即时模式灵活、兼容动态操作效率较低(重复任务)动态输入、复杂逻辑、调试场景
http://www.xdnf.cn/news/4346.html

相关文章:

  • 2025最新vmware-17虚拟机安装教程(保姆级,图文讲解,带安装包)
  • 餐饮加盟店如何通过日事清全流程闭环管理实现进度同步与效率升级?
  • 强化学习策略梯度推导
  • 漏洞检测服务费用受哪些因素制约?费用区间是多少?
  • 蓝肽子序列--字符串+最长子序列的dp
  • 从零开始学java--集合类(2)
  • 职业短线交易系统
  • SAM详解2(初级应用)
  • Python入门(一)
  • 数字人驱动方向最新顶会期刊论文收集整理 | AAAI 2025
  • 系统级编程(一):内存的段页式管理
  • x-cmd install | Tuistash - Logstash 实时监控,告别图形界面,高效便捷!
  • VBA之Excel应用第四章第三节:Range对象内容的复制Copy粘贴Paste
  • 根据蓝牙名称自动匹配对应 UI
  • 逻辑越权--水平垂直越权(WEB漏洞)
  • 什么是原子变量
  • Linux死锁实验分析与总结
  • 安卓基础(拖拽)
  • 前端知识-useState
  • 开启健康模式:养身新主张
  • Nginx 安全防护与Https 部署实战
  • 自定义SpringBoot Starter-笔记
  • Element-Plus-X开源程序是Vue3 + Element-Plus 开箱即用的企业级AI组件库前端的解决方案
  • 【言语理解】片段阅读之语句填入(7)
  • LeetCode 1781. 所有子字符串美丽值之和 题解
  • C++编程语言:从高效系统开发到现代编程范式的演进之路
  • python仓库库存管理系统-药房药品库存管理系统
  • 极简RT-Thread入门教程
  • 高等数学第六章---定积分(§6.1元素法6.2定积分在几何上的应用1)
  • XILINX原语之——xpm_fifo_async(异步FIFO灵活设置位宽、深度)