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 #运行你的文件