vllm 部署 Qwen2.5-VL-7B-Instruct 识别程序(docker版)
vllm 部署 Qwen2.5-VL-7B-Instruct-AWQ
( 基于 docker )
作者项目不允许部署 Qwen2.5-VL-7B-Instruct 非量化版,因为作者目前是 4090 48G 魔改过的,
上面已经跑了一个ollama程序,导致显存只剩下了20G不到,
如果是 24 G 内存,可以跑 Qwen2.5-VL-7B-Instruct 非量化版,操作一样
目前作者环境如下:
驱动 | CUDA | 显卡型号 | 显卡块数 |
---|---|---|---|
560.35.03 | 12.6.1 | 4090 48G | 8 |
下载模型
modelscope download --model Qwen/Qwen2.5-VL-7B-Instruct-AWQ --local_dir /data/qwen2.5/Qwen2.5-VL-7B-Instruct-AWQ
开始配置
docker 配置
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.cloudmessage.top",
"https://kfp63jaj.mirror.aliyuncs.com",
"https://j47dskil.mirror.aliyuncs.com"
],
"ipv6": false,
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
},
"default-runtime": "nvidia",
"data-root": "/data/docker"
}
docker 安装 vllm
###镜像比较大16G多,还是先拉下来再运行
docker pull vllm/vllm-openai:latest
运行 程序
docker run --runtime nvidia --gpus "device=0" --name vllm-qwen2.5-vl-7b_AWQ \
-v /data/qwen2.5:/data/qwen2.5 \
-v /data/vllm_cache:/root/.cache/vllm \
-p 8110:8000 \
-e CUDA_VISIBLE_DEVICES=0 \
-d vllm/vllm-openai:latest \
--model /data/qwen2.5/Qwen2.5-VL-7B-Instruct-AWQ \
--dtype float16 \
--block-size 16 \
--use-v2-block-manager \
--max-num-batched-tokens 8192 \
--max-num-seqs 32
--gpus "device=0" # 指定显卡,0是第一块,1是第二块
--name vllm-qwen2.5-vl-7b_AWQ \ # docker 容器名称
-v /data/qwen2.5:/data/qwen2.5 \ # 模型存放目录
-v /data/vllm_cache:/root/.cache/vllm \ # vllm 目录
-p 8110:8000 \ # 映射端口
-e CUDA_VISIBLE_DEVICES=0 \ #强制容器仅使用 GPU 设备 0,因为容器中只能看到一块显卡
-d vllm/vllm-openai:latest \ # 指定镜像
--model /data/qwen2.5/Qwen2.5-VL-7B-Instruct-AWQ \ # 指定模型
--dtype float16 \ # 混合精度推理
--block-size 16 \ # KV缓存块大小
--use-v2-block-manager \ # 新版显存管理器
--max-num-batched-tokens 8192 \ # 最大批处理tokens(4096-16384)
--max-num-seqs 32 最大并发请求数
测试程序
# 创建虚拟环境
conda create -n qwenvl python=3.11 -y
conda activate qwenvl
vim vllm_ocr.py
import base64
import time # 导入time模块
from openai import OpenAI
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
# 初始化 OpenAI 客户端
client = OpenAI(
base_url="http://192.168.3.164:8110/v1",
api_key="NOT_NEED"
)
# 本地图片路径
image_path = "1744184033544.jpg"
# 编码图片
base64_image = encode_image(image_path)
# 记录开始时间
start_time = time.time()
response = client.chat.completions.create(
model="/data/qwen2.5/Qwen2.5-VL-7B-Instruct-AWQ",
# 仔细分析图片中的内容后,请以HTML结构化(含所有非表格文字)完整输出。\n注意:不需要 <style>标签
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "完整输出图中所有相关文字"},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}",
},
},
],
}
],
max_tokens=4096,
)
# 计算耗时
elapsed_time = time.time() - start_time
print(response.choices[0])
print(f"\n请求耗时: {elapsed_time:.2f}秒") # 打印耗时,保留两位小数
python vllm_ocr.py
docker ps -a
docker logs -f vllm-qwen2.5-vl-7b_AWQ
1744184033544.jpg 图片内容如下