Qwen2-VL-7B本地部署和微调

Qwen2-VL-7B本地部署

Qwen2-VL-7B 是阿里巴巴开发的一款多模态大语言模型,属于Qwen2-VL系列的一部分。该模型能够处理文本、图像、多张图像和视频输入,尤其擅长视觉-语言任务,如文档理解、视频问答和复杂的多语言任务。它在多个视觉理解基准测试中表现出色,包括DocVQA和MTVQA。

Qwen2-VL-7B 拥有约70亿参数,支持多种语言,包括中文、英文、日语、韩语、阿拉伯语等。这使得它适用于跨语言场景,尤其在文档、图片和视频的多模态理解方面具有领先的表现。与Qwen系列的其他模型一样,它基于Transformer架构,采用了SwiGLU激活函数和先进的查询注意力机制来提高模型的性能和效率。

本文讲述了关于Qwen2-VL-7B的本地部署

环境配置

关于最基础的python、显卡驱动等简单环境,网上已有许多教程,在这里便不再赘述,以下代码建立在上述环境已经配置好的情况下。

conda create -n qwen2_vl python=3.11 
#使用conda创建虚拟环境,指定python版本为3.11
conda activate qwen2_vl 
#激活虚拟环境,**记得每次使用大模型之前都要激活**
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia 
pip install pillow requests 
#安装所需依赖,下面有对这些依赖的简单介绍
pip install git+https://github.com/huggingface/transformers 
#从huggingface下载transformers
pip install 'accelerate>=0.26.0'
#安装 Accelerate 库,该库提供了一套简化多设备分布式计算的工具和接口,特别适合处理大规模深度学习模型的训练和推理。

PyTorch: 一个开源的深度学习框架,提供动态计算图和自动微分功能,广泛应用于神经网络的构建、训练和推理中。它支持CPU和GPU(CUDA)加速。
TorchVision: PyTorch的一个扩展库,主要用于处理计算机视觉任务,提供常用的图像转换工具、预训练模型和数据加载器,支持加载常见的数据集(如CIFAR、ImageNet等)。
TorchAudio: PyTorch的另一个扩展库,专注于音频处理。它提供了音频数据的加载、转换和模型训练的相关工具,适用于语音识别、音频生成等任务。
PyTorch-CUDA 11.8: 该包指定安装CUDA 11.8版本,用于在NVIDIA GPU上加速PyTorch操作。它确保PyTorch能够利用GPU的计算能力来加速深度学习模型的训练和推理。
Pillow: Pillow 是一个用于图像处理的Python库,是Python Imaging Library (PIL) 的继承和改进版本。它支持多种格式的图像文件处理,如JPEG、PNG、GIF等,常用于图像的打开、操作、保存等功能。Pillow可以执行图像裁剪、旋转、滤镜应用等多种操作。
Requests: Requests 是一个用于发送HTTP请求的Python库,简化了网络请求的处理过程。它提供了简单的API来发送GET、POST、PUT、DELETE等请求,还支持处理会话、Cookies、认证等复杂的HTTP操作,非常适合用于Web抓取、API请求等任务。

上述下载可能会耗费很多时间,因为大多数下载服务器都在国外 ,(唉,卡脖子) 如果实在太慢可以使用国内镜像站,例如huggingface的一个国内镜像站链接

模型下载及运行

以下为 运行代码

# 导入所需的库
from PIL import Image 
import requests 
import torch 
from torchvision import io  # PyTorch的计算机视觉工具包
from typing import Dict  # 用于类型注解
from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor  # Hugging Face的transformers库,用于加载和使用预训练模型

# 加载模型,使用半精度浮点数,自动选择可用设备
model = Qwen2VLForConditionalGeneration.from_pretrained(
    "Qwen/Qwen2-VL-7B-Instruct", torch_dtype="auto", device_map="auto"
)
# 加载处理器,用于预处理输入数据
processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct")

# 设置图像URL
url = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg"
image = Image.open(requests.get(url, stream=True).raw)

# 构建对话结构,包含用户角色、图像和文本提示
conversation = [
    {
        "role": "user",
        "content": [
            {
                "type": "image",
            },
            {"type": "text", "text": "描述这张图."},
        ],
    }
]

# 使用处理器应用聊天模板,生成文本提示
text_prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)

# 预处理输入数据,将文本和图像转换为模型可接受的格式
inputs = processor(
    text=[text_prompt], images=[image], padding=True, return_tensors="pt"
)
inputs = inputs.to("cuda")  # 将输入数据移至GPU(如果可用)

# 使用模型生成输出
output_ids = model.generate(**inputs, max_new_tokens=128)

# 提取生成的新token(去除输入部分)
generated_ids = [
    output_ids[len(input_ids) :]
    for input_ids, output_ids in zip(inputs.input_ids, output_ids)
]

# 解码生成的token为可读文本
output_text = processor.batch_decode(
    generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True
)

# 打印生成的文本
print(output_text)

但是由于huggingface的服务器在国外,可能会出现连接不上的情况,此时就需要我们在本地下载好模型并在python文件里面指定路径。可以使用上述国内镜像站 下载Qwen2-VL-7B-Instruct
文件内具体操作是将

model = Qwen2VLForConditionalGeneration.from_pretrained(
    "Qwen/Qwen2-VL-7B-Instruct",
     torch_dtype="auto",
      device_map="auto"
)
processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct")

改为下载到本地的模型的路径

model = Qwen2VLForConditionalGeneration.from_pretrained(
    "/path/to/local/model",#改为你本地的下载路径
    torch_dtype="auto",
     device_map="auto"
)
processor = AutoProcessor.from_pretrained("/path/to/local/model")#改为你本地的下载路径

此时就可以运行这个文件,使用Qwen2-VL-7B在本地推理了

python test.py #运行你的文件

![Qwen2-VL运行示例

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值