Qwen2.5-VL-3B-Instruct 模型部署手册
Qwen2.5-VL-3B-Instruct 模型部署手册

本地部署基于 Qwen2.5-VL-3B-Instruct 模型的 Flask 服务。手册包括环境配置、依赖安装、模型加载和运行服务的步骤,适用于 Windows 系统。
通义千问VL模型可以根据您传入的图片来进行回答。
访问视觉模型可以在线体验图片理解能力。
百炼(Model Studio)
如何使用Qwen-VL模型_大模型服务平台百炼(Model Studio)-阿里云帮助中心
huggingface 上的7b 模型
Qwen/Qwen2.5-VL-7B-Instruct-AWQ at main
github
应用场景
图像问答:描述图像中的内容或者对其进行分类打标,如识别图像中的人物、地点、植物等,并给出对应的描述或标签。
文字识别(OCR):识别图像中的文字,如文档截图、日常图像等,并支持格式化输出文本内容。通义千问VL模型能识别多种语言,如中文、英语、日语、韩语、阿拉伯语、越南语等。
数学题目解答:解答图像中的数学问题,包括题目分析、解题思路及结果等。
内容创作:根据图像内容创作文案或者标题。如根据图像自动生成的社交媒体帖子、广告语或是文章标题。
代码生成:根据前端页面截图生成前端代码,如HTML、CSS和JavaScript的代码,或根据图表信息生成使用图表库的代码,如ECharts、Chart.js等。
本文档指导如何在本地部署一个基于 Qwen2.5-VL-3B-Instruct 模型的 Flask 服务,用于处理文本和图像输入的生成任务。服务支持 GPU 加速(需安装 CUDA 和对应 PyTorch 版本)。
前置条件
硬件要求:
支持 NVIDIA GPU(推荐,至少 8GB 显存)。
足够的磁盘空间(模型文件约 6-8GB,依赖库额外占用空间)。
操作系统:
Windows 或 Linux(以下步骤适用于两者,特殊说明会标注)。
网络要求:
需联网下载模型和依赖库。
安装步骤
1. 安装 Anaconda
下载并安装 Anaconda:
访问 Anaconda 官网 下载最新版本。
根据操作系统安装(Windows/Linux)。
验证安装:
conda --version
输出类似
conda 23.x.x
表示安装成功。
2. 安装 NVIDIA CUDA Toolkit
检查 GPU 支持的 CUDA 版本:
运行以下命令查看驱动支持的最高 CUDA 版本:
nvidia-smi
示例输出:
CUDA Version: 12.2
下载并安装 CUDA Toolkit:
选择与
nvidia-smi
输出匹配或稍低的版本(推荐 11.x 或 12.x)。安装完成后验证:
nvcc --version
输出类似
Cuda compilation tools, release 12.2, V12.2.xxx
表示成功。
安装 cuDNN(可选,推荐):
从 NVIDIA cuDNN 下载与 CUDA 版本匹配的 cuDNN。
解压并将文件复制到 CUDA 安装目录。
3. 创建并激活 Conda 环境
创建新环境:
conda create -n QwenLocaVL python=3.11
激活环境:
conda activate QwenLocaVL
激活后命令行前会出现
(QwenLocaVL)
。
4. 安装 PyTorch(支持 GPU 加速)

根据 CUDA 版本选择 PyTorch:
访问 PyTorch 官网。
根据 CUDA 版本选择安装命令。例如:
CUDA 12.2:
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu122
CUDA 11.8:
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
验证安装:
import torch print(torch.__version__) print(torch.cuda.is_available()) # 应输出 True
5. 安装依赖库
安装 Git
首先,你需要安装 Git:
下载 Git:前往 Git 官网 下载适合你系统的版本(Windows/macOS/Linux)。
安装 Git:运行安装程序,按照默认选项安装即可(重要:勾选 "Add Git to PATH" 选项)。
2. 检查 Git 是否安装成功
安装完成后,重新打开终端(CMD/PowerShell),运行以下命令检查 Git 是否可用:
git --version
在激活的 Conda 环境 (QwenLocaVL)
中执行以下命令:
安装 Transformers 和 Accelerate: 这里有大坑 可以通过
下面任选其一 pip install git+https://github.com/huggingface/transformers accelerate
安装 Qwen-VL-Utils:
Windows:
pip install qwen-vl-utils
Linux:
pip install qwen-vl-utils[decord]
安装其他依赖:
pip install torchvision modelscope
安装 Flask:
pip install flask

6. 配置代码
将以下代码保存为
app.py
:import torch import base64 import io from PIL import Image import requests from flask import Flask, request, jsonify from modelscope import snapshot_download from transformers import Qwen2_5_VLForConditionalGeneration, AutoProcessor from qwen_vl_utils import process_vision_info from flask import json app = Flask(__name__) # 全局变量存储模型和处理器 model = None processor = None def load_model(): """加载模型和处理器""" global model, processor model_dir = snapshot_download('qwen/Qwen2.5-VL-3B-Instruct') model = Qwen2_5_VLForConditionalGeneration.from_pretrained( model_dir, torch_dtype=torch.bfloat16, device_map="auto", ) processor = AutoProcessor.from_pretrained( model_dir, max_pixels=1280 * 28 * 28 ) print("模型加载完成") def process_image_url(image_url): """处理图片URL,返回PIL图像对象""" response = requests.get(image_url) if response.status_code != 200: raise Exception(f"获取图片失败: {response.status_code}") return Image.open(io.BytesIO(response.content)) def process_image_base64(image_base64): """处理Base64编码的图片,返回PIL图像对象""" image_data = base64.b64decode(image_base64) return Image.open(io.BytesIO(image_data)) @app.route('/generate', methods=['POST']) def generate(): """处理生成请求的API端点""" if model is None or processor is None: return jsonify({"error": "模型尚未加载完成"}), 503 try: data = request.json messages = data.get('messages', []) # 处理消息中的图片 for message in messages: if message['role'] == 'user': for i, content in enumerate(message['content']): if content['type'] == 'image': image_data = content['image'] if image_data.startswith('http'): pass else: process_image_base64(image_data) # 准备推理 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", ) inputs = inputs.to(model.device) # 生成回复 max_new_tokens = data.get('max_new_tokens', 128) generated_ids = model.generate(**inputs, max_new_tokens=max_new_tokens) generated_ids_trimmed = [ out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids) ] output_text = processor.batch_decode( generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False ) response_data = {"response": output_text[0]} return app.response_class( response=json.dumps(response_data, ensure_ascii=False), mimetype='application/json' ) except Exception as e: return jsonify({"error": str(e)}), 500 if __name__ == '__main__': print("正在加载模型...") load_model() app.run(host='0.0.0.0', port=5000)
确保代码文件与 Conda 环境一致。
7. 运行服务
在 Conda 环境中运行:
python app.py
输出类似
模型加载完成
和 Flask 服务启动信息:* Running on http://0.0.0.0:5000
测试服务:
使用
curl
或 Postman 发送 POST 请求到http://localhost:5000/generate
。示例请求:
{ "messages": [ { "role": "user", "content": [ {"type": "text", "text": "Describe this image"}, {"type": "image", "image": "https://example.com/image.jpg"} ] } ], "max_new_tokens": 128 }
常见问题排查
模型加载失败:
检查网络连接,确保能访问 Hugging Face 和 ModelScope。
确认磁盘空间足够。
GPU 不可用:
运行
python -c "import torch; print(torch.cuda.is_available())"
检查。确保 CUDA 和 PyTorch 版本匹配。
依赖安装报错:
使用
pip install --upgrade pip
更新 pip。逐个安装依赖,检查具体错误。
注意事项
解释器选择:在 IDE(如 PyCharm/VSCode)中,确保选择 Conda 环境
QwenLocaVL
的 Python 解释器。性能优化:首次加载模型较慢,后续请求会更快。
安全性:仅限本地测试,生产环境需添加认证和防火墙。
完成以上步骤后,你将成功部署一个支持文本和图像输入的 Qwen2.5-VL-3B-Instruct 服务!如有问题,请参考日志或联系技术支持。
希望这份手册对你有帮助!如果需要进一步调整或补充,请告诉我。
