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

Qwen2.5-VL实现本地AWQ量化

本文不生产技术,只做技术的搬运工!!

前言

        公开的Qwen2.5-VL模型虽然功能非常强大,但有时面对专业垂直领域的问题往往会出现一些莫名其妙的回复,这时候大家一版选择对模型进行微调,而微调后的模型如果直接部署则显存开销过大,这时就需要执行量化,下面将介绍执行本地AWQ量化的具体流程。

实验环境

        这里作者使用4卡A100(40G)进行Qwen2.5-vl-32B的AWQ量化,首先需要配置python环境

ms-swift

        由于作者没有找到AutoAWQ框架下进行Qwen2.5-VL的量化教程,所以干脆偷懒,使用ms-swift进行量化

conda create -n ms-swift python=3.10 -y
conda activate ms-swift
git clone https://github.com/modelscope/ms-swift.git
cd ms-swift
pip install -e '.[all]'

AutoAWQ

git clone https://github.com/casper-hansen/AutoAWQ.git
cd AutoAWQ
pip install -e .

执行量化

CUDA_VISIBLE_DEVICES=0,1,2,3 \
swift export \--model /data/qwen2.5-vl/model-32b/ \--dataset 'AI-ModelScope/alpaca-gpt4-data-zh#500' \'AI-ModelScope/alpaca-gpt4-data-en#500' \--quant_n_samples 256 \--quant_batch_size -1 \--max_length 2048 \--quant_method awq \--quant_bits 4 \--output_dir /data/qwen2.5-vl/model-32b-awq/

VLLM部署

git clone https://github.com/QwenLM/Qwen2.5-VL.git
cd Qwen2.5-VL
conda create -n qwen2.5-vl python=3.11 -y
conda activate qwen2.5-vl
pip install -r requirements_web_demo.txt
pip install flash-attn==2.6.1
pip install vllm==0.7.3
pip install autoawq --no-deps
CUDA_VISIBLE_DEVICES=0,1,2,3 vllm serve /data/qwen2.5-vl/model-32b-awq/ --port 8084 --host 0.0.0.0 --dtype bfloat16 --limit-mm-per-prompt image=5,video=5 --max-model-len 16384 --tensor-parallel-size 4 --gpu-memory-utilization 0.8 --enforce-eager

推理测试

from openai import OpenAI
import time
import base64# Set OpenAI's API key and API base to use vLLM's API server.
openai_api_key = "EMPTY"
openai_api_base = "http://127.0.0.1:8084/v1"client = OpenAI(api_key=openai_api_key,base_url=openai_api_base,
)times = []  # 记录每次调用的时间
image_path = r"/home/workspace/0a8e9a66f39f45989415c102f0ec227a.jpg"
with open(image_path, "rb") as f:encoded_image = base64.b64encode(f.read())
encoded_image_text = encoded_image.decode("utf-8")
base64_qwen = f"data:image;base64,{encoded_image_text}"
for i in range(20):start_time = time.time()  # 开始时间-chat_response = client.chat.completions.create(model="/data/qwen2.5-vl/model-32b-awq/",messages=[{"role": "system", "content": "You are a helpful assistant."},{"role": "user","content": [{"type": "image_url","image_url": {"url": base64_qwen},},{"type": "text", "text": "描述一下这张图像"},],},])end_time = time.time()  # 结束时间elapsed_time = end_time - start_time  # 计算耗时times.append(elapsed_time)  # 添加到列表中print(f"第 {i + 1} 次调用结果: {chat_response.choices[0].message.content}")print(f"第 {i + 1} 次调用耗时: {elapsed_time:.4f} 秒")# 去掉最大值和最小值
if len(times) >= 3:times.remove(max(times))times.remove(min(times))# 计算平均耗时
average_time = sum(times) / len(times) if times else 0
print(f"去掉一个最大值和一个最小值后,平均每次调用耗时: {average_time:.4f} 秒")

备注

        关于VLLM部署的问题,作者发现不管是官方提供的AWQ模型还是自己量化的AWQ模型推理速度都慢于未量化版,目前还没找到原因;另外就是作者的设备使用VLLM部署时7b-awq不需要加--enforce-eager,但是32b-awq和72b-awq都需要加这个参数,目前推测是显存不够,真实原因有待考证。

 


http://www.mrgr.cn/news/96268.html

相关文章:

  • 一些需要学习的C++库:CGAL和Eysshot
  • Spring学习笔记05——Spring Boot的文件结构2(POJO类)
  • C语言学习笔记(抱佛脚版)
  • StarRocks 中 CURRENT_TIMESTAMP 和 CURRENT_TIME 分区过滤问题
  • 基于Spring AI开发本地Jenkins MCP Server服务
  • springboot 实现base64格式wav转码并保存
  • python下载m3u8格式视频
  • 音视频基础知识
  • Linux驱动编程 - UVC驱动分析
  • 计算机二级(C语言)考试高频考点总汇(四)—— 内存管理、文件操作、预处理
  • 【Pandas】pandas Series to_sql
  • 深入理解 Linux 文件权限:从 ACL 到扩展属性,解剖底层技术细节与命令应用
  • VMware 安装 Ubuntu 实战分享
  • Web3.0合约安全:重入攻击防御方案
  • 标准库中有uint32_t类型吗?
  • Retinexformer:基于 Retinex 的单阶段 Transformer 低光照图像增强方法
  • 树莓派超全系列文档--(10)RaspberryOS上使用 Python
  • (UI自动化测试web端)第三篇:元素的常用操作方法_鼠标操作
  • 【AI学习】概念了解
  • 计算机控制系统-达林算法验证