本地多卡(3090)部署通义千问Qwen2-72B大模型提速实践:从龟速到够用

最近在做文本风格转化,涉及千万token级别的文本。想用大模型转写,在线的模型一来涉及数据隐私,二来又不想先垫钱再找报销。本地的7-9B小模型又感觉效果有限,正好实验室给俺配了4卡3090的机子,反正也就是做个推理,也不训练不微调,就想试试本地72B大模型能不能跑起来。

先上结论:

  • 模型:Qwen-72B-Chat-Int4
  • 使用2张3090 24G就能跑起来,但是上下文长度在一千汉字左右就会爆显存OOM
  • 使用4张3090 24G也可以跑,上下文长度可以拓展到万字级别
  • 速度:短上下文约10字/s,勉强够用:

下面讲讲怎么做的:

 首先,有博主做了双卡3090部署Qwen2-72B-Int4的教程:

大模型笔记之-Qwen72B-chat-int4部署 |使用双卡3090成功运行_运行qwen-72b-CSDN博客

笔者也是看着该教程跑起来的,但是完全按照该教程会出现很多的问题:比如刚跑起来的时候,推理速度非常慢,大约1token/s,官方文档里面同样模型用A100能做到11.32token/s,完全没道理的。

整体流程:

1. 下载模型

从魔搭社区下载,不需要梯子

from modelscope.hub.snapshot_download import snapshot_downloadmodel_dir = snapshot_download('qwen/Qwen-72B-Chat-Int4')# 在当前目录下创建一个名为model_dir的txt文件,里面包含model_dir变量的内容
with open('model_dir.txt', 'w') as f:f.write(model_dir)

2. 配置环境

笔者cuda driver版本(通过nvidia-smi查看)是12.0,使用cuda runtime版本(通过nvcc -V查看)也应为12.0/12.1,否则后面源码编译flash-attention时会报ptxas版本错误:(以前都是runtime<=driver就行了,现在终于碰见一种情况必须==了)

ptxas *.ptx, line 9; Fatal : Unsupported .version 8.0; current version is ‘7.1’ ptxas fatal

2.1. 基础conda环境

conda安装:

python==3.10

pytorch==2.1.0

pytorch-cuda==12.1

由于conda里面 cuda toolkit / cuda runtime 没有 12.0版本(conda search cudatoolkit最高11.8),所以还得源码编译,但是实验室的服务器咱也没有root权限,所以参考这篇文章中修改路径的做法:不用sudo权限安装cuda10.1_非sudo用户安装cuda-CSDN博客

2.2. Qwen pip依赖

接着就是安装Qwen需要的pip依赖,首先下载Qwen git仓库

git clone https://github.com/QwenLM/Qwen.git

安装pip依赖:

#1.切换至项目目录下
cd Qwen#2.安装项目依赖
pip install -r requirements.txt
#使用镜像源加速 pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/#3.使用web_demo.py 还需要安装web依赖
pip install -r requirements_web_demo.txt

2.3. 安装量化模块auto-gptq

因为我们用Int4量化版本,所以需要安装auto-gptq量化包。在官方指南中,直接使用了pip安装,事后笔者发现这样安装会出现严重问题(事实上,这样子做可能会让推理速度降至1/10,而且还很难排查),在此我们先给出完美方案(参考Auto-GBTQ源码编译):

git clone https://github.com/PanQiWei/AutoGPTQ.git && cd AutoGPTQ
pip install numpy gekko pandas
# 有点小久
pip install -vvv --no-build-isolation -e .

2.4. 安装flash-attention(可选)

flash-attention据悉可以加速模型加载和推理,笔者自己感觉没什么区别。

注意要安装的话需要将cuda runtime(nvcc -V)和cuda driver(nvidia-smi)的版本对齐。

git clone https://github.com/Dao-AILab/flash-attention
cd flash-attention && pip install .
# 下方安装可选,安装可能比较缓慢。
# pip install csrc/layer_norm
# 如果flash-attn版本高于2.1.1,下方无需安装。
# pip install csrc/rotary

3. 运行

Qwen git repo中cli_demo和web_demo均可运行

3.1. 修改DEFAULT_CKPT_PATH

修改DEFAULT_CKPT_PATH为前文1.中model_dir(cli_demo 19行,web_demo 18行)

3.2. 修改device_map为多卡配置

(cli_demo 52行,web_demo 48行):

 2卡参考大模型笔记之-Qwen72B-chat-int4部署 |使用双卡3090成功运行_运行qwen-72b-CSDN博客

4卡:

# 偏向于少分配给卡0,因为在推理时卡0需要承担高负载
device_map = {'transformer.wte': 0, 'transformer.drop': 0, 'transformer.rotary_emb': 0, 'transformer.h.0': 0,'transformer.h.1': 0, 'transformer.h.2': 0, 'transformer.h.3': 0, 'transformer.h.4': 0,'transformer.h.5': 0, 'transformer.h.6': 0, 'transformer.h.7': 0, 'transformer.h.8': 0,'transformer.h.9': 1, 'transformer.h.10': 1, 'transformer.h.11': 1, 'transformer.h.12': 1,'transformer.h.13': 1, 'transformer.h.14': 1, 'transformer.h.15': 1, 'transformer.h.16': 1,'transformer.h.17': 1, 'transformer.h.18': 1, 'transformer.h.19': 1, 'transformer.h.20': 1,'transformer.h.21': 1, 'transformer.h.22': 1, 'transformer.h.23': 1, 'transformer.h.24': 1,'transformer.h.25': 1, 'transformer.h.26': 1, 'transformer.h.27': 1, 'transformer.h.28': 1,'transformer.h.29': 1, 'transformer.h.30': 1, 'transformer.h.31': 1, 'transformer.h.32': 1,'transformer.h.33': 1, 'transformer.h.34': 1, 'transformer.h.35': 1, 'transformer.h.36': 2,'transformer.h.37': 2, 'transformer.h.38': 2, 'transformer.h.39': 2, 'transformer.h.40': 2,'transformer.h.41': 2, 'transformer.h.42': 2, 'transformer.h.43': 2, 'transformer.h.44': 2,'transformer.h.45': 2, 'transformer.h.46': 2, 'transformer.h.47': 2, 'transformer.h.48': 2,'transformer.h.49': 2, 'transformer.h.50': 2, 'transformer.h.51': 2, 'transformer.h.52': 2,'transformer.h.53': 2, 'transformer.h.54': 2, 'transformer.h.55': 2, 'transformer.h.56': 2,'transformer.h.57': 2, 'transformer.h.58': 2, 'transformer.h.59': 2, 'transformer.h.60': 2,'transformer.h.61': 3, 'transformer.h.62': 3, 'transformer.h.63': 3, 'transformer.h.64': 3,'transformer.h.65': 3, 'transformer.h.66': 3, 'transformer.h.67': 3, 'transformer.h.68': 3,'transformer.h.69': 3, 'transformer.h.70': 3, 'transformer.h.71': 3, 'transformer.h.72': 3,'transformer.h.73': 3, 'transformer.h.74': 3, 'transformer.h.75': 3, 'transformer.h.76': 3,'transformer.h.77': 3, 'transformer.h.78': 3, 'transformer.h.79': 3, 'transformer.ln_f': 3,'lm_head': 3}# 也可以用这个
device_map = 'balanced_low_0'

静态负载:

3.3. 修改模型加载方式为AutoGPTQ

web_demo 50-55行

cli_demo 54-59行

model = AutoGPTQForCausalLM.from_quantized(args.checkpoint_path,device_map=device_map,trust_remote_code=True,resume_download=True,# use_marlin=True,).eval()

如果用的是gptq v7.0,会让你用use_marlin:

INFO - You passed a model that is compatible with the Marlin int4*fp16 GPTQ kernel but use_marlin is False. We recommend using `use_marlin=True` to use the optimized Marlin kernels for inference. Example: `model = AutoGPTQForCausalLM.from_quantized(..., use_marlin=True)`.

但是不知道为什么,用了就报错,所以我注释掉了。

加载模型速度对比:


# 加载模型612.5322902202606s
model = AutoGPTQForCausalLM.from_quantized(args.checkpoint_path,device_map=device_map,trust_remote_code=True,resume_download=True,use_marlin=False,).eval()# 加载模型612s
model = AutoModelForCausalLM.from_pretrained(args.checkpoint_path,device_map=device_map,trust_remote_code=True,resume_download=True,use_flash_attn=True).eval()

可以看出加载模型GPTQ快20%,官方文档说GPTQ推理速度也快20%,没实测,但显然和上面的观察结果一致。

3.4. 修改web_demo中的服务器地址,否则局域网无法访问

33行,改IP为0.0.0.0

parser.add_argument("--server-name", type=str, default="0.0.0.0",help="Demo server name.")

4. 关于我是如何发现并把推理速度提升10倍的

最初按照官方文档做完之后,双卡/四卡3090推理速度在1token/s左右,是官方1张A100速度的10%,完全不符合逻辑。本来打算放弃了,突然看到官方文档里有一句话说用AutoGPTQ加载能快20%,于是我就试了试AutoGPTQForCausalLM而不是AutoModelForCausalLM加载模型

model = AutoGPTQForCausalLM.from_quantized()

但是其中给了我警告(AutoModelForCausalLM没有给过这个警告):

意思是我的auto-gptq包没装好,其中的Exllamav2没有安装,这会导致推理显著变慢。

于是我按着gptq主页:AutoGPTQ/AutoGPTQ: An easy-to-use LLMs quantization package with user-friendly apis, based on GPTQ algorithm. (github.com)的教程从源码编译装好了,速度就拉满了。

现在3090多卡速度(10token/s)和官方单张A100速度(10token/s)接近,可以看出其实卡间通讯其实并不是瓶颈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/41418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运维系列.Nginx配置中的高级指令和流程控制

运维专题 Nginx配置中的高级指令和流程控制 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/…

ssrf结合redis未授权getshell

目录 漏洞介绍 SSRF Redis未授权 利用原理 环境搭建 利用过程 rockylinux cron计划任务反弹shell 写公钥免密登录 ubuntu 写公钥免密登录 漏洞介绍 SSRF SSRF&#xff08;server side request forgrey&#xff09;服务端请求伪造&#xff0c;因后端未过滤用户输入&…

桂花网蓝牙网关X1000:引领物联网新时代的智能连接

在物联网技术飞速发展的今天&#xff0c;蓝牙网关作为连接蓝牙设备与互联网的关键设备&#xff0c;其性能与稳定性直接影响到物联网系统的整体运行效果。桂花网蓝牙网关X1000凭借其卓越的性能和广泛的应用场景&#xff0c;成为了物联网领域的佼佼者。 一、产品概述 桂花网蓝牙…

使用Ckman部署ClickHouse集群介绍

使用Ckman部署ClickHouse集群介绍 1. Ckman简介 ClickHouse Manager是一个为ClickHouse数据库量身定制的管理工具&#xff0c;它是由擎创科技数据库团队主导研发的一款用来管理和监控ClickHouse集群的可视化运维工具。目前该工具已在github上开源&#xff0c;开源地址为&…

Angluar 实现pdf页面预览以及编辑

之前用过一个pdf预览的lib&#xff0c;并且还支持在线编辑&#xff0c;和直接下载编辑之后的pdf和直接打印&#xff0c;还不错&#xff0c;记录下 PdfShowcase 首先安装依赖 npm install ngx-extended-pdf-viewer 然后引入 import { NgxExtendedPdfViewerModule } from &q…

硅纪元视角 | 中国电信“星辰大模型·软件工厂”,两分钟完成应用开发,效率飞跃!

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

【数据结构】链表带环问题分析及顺序表链表对比分析

【C语言】链表带环问题分析及顺序表链表对比分析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C语言学习之路 文章目录 【C语言】链表带环问题分析及顺序表链表对比分析前言一.顺序表和链表对比1.1顺序表和链表的区别1.2缓存利用率&#…

Linux基础: 二. Linux的目录和文件

文章目录 二. Linux的目录和文件1.1 目录概要1.2 目录详细说明 二. Linux的目录和文件 1.1 目录概要 command&#xff1a;ls / Linux的文件系统像一棵树一样&#xff0c;树干是根目录&#xff08;/&#xff09;&#xff0c;树枝是子目录&#xff0c;树叶是文件&#xff1b; …

亚信安全发布2024年6月威胁态势,高危漏洞猛增60%

近日&#xff0c;亚信安全正式发布《2024年6月威胁态势报告》&#xff08;以下简称“报告”&#xff09;&#xff0c;报告显示&#xff0c;6月份新增信息安全漏洞 1794个&#xff0c;高危漏洞激增60%&#xff0c;涉及0day漏洞占67.67%&#xff1b;监测发现当前较活跃的勒索病毒…

应用案例 | 基于物联网工控屏的工业离心机设备监控系统

案例概况 客户&#xff1a;博鲁班特&#xff08;BROADBENT&#xff09; 应用产品&#xff1a;宏集物联网工控屏 应用场景&#xff1a;离心机设备监控系统 一、前言 在现代工业生产中&#xff0c;离心机作为关键的分离设备&#xff0c;在生产过程中扮演着至关重要的角色。随…

谷粒商城学习笔记-17-快速开发-逆向工程搭建使用

文章目录 一&#xff0c;克隆人人开源的逆向工程代码二&#xff0c;把逆向工程集成到谷粒商城的后台工程三&#xff0c;以商品服务为例&#xff0c;使用逆向工程生成代码1&#xff0c;修改逆向工程的配置2&#xff0c;以Debug模式启动逆向工程3&#xff0c;使用逆向工程生成代码…

基于B/S模式和Java技术的生鲜交易系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;B/S模式、Java技术 工具&#xff1a;Visual Studio、MySQL数据库开发工具 系统展示 首页 用户注册…

【Java】详解String类中的各种方法

创建字符串 常见的创建字符串的三种方式&#xff1a; // 方式一 String str "hello world"; // 方式二 String str2 new String("hello world"); // 方式三 char[] array {a, b, c}; String str3 new String(array); "hello" 这样的字符串字…

Halcon 产品周围缺口检测

*读取一张图像read_image (Image, 原图.jpg)*获取图像大小get_image_size(Image, Width, Height)*关闭已经打开的窗口dev_close_window ()*打开新窗口dev_open_window(0, 0, Width, Height, black, WindowHandle) //打开指定大小的窗口*对图像进行阈值操作threshold (Image, R…

【链表】【双指针】1、合并两个有序链表+2、分隔链表+3、删除链表的倒数第N个结点+4、链表的中间结点+5、合并两个链表

3道中等2道简单 数组和字符串打算告一段落&#xff0c;正好最近做的几乎都是双指针&#xff0c;所以今天做链表&#xff01; 1、合并两个有序链表&#xff08;难度&#xff1a;简单&#xff09; 该题对应力扣网址 AC代码 思路简单 /*** Definition for singly-linked list.…

万和day01代码分析

将了数据库的多表之间的操作&#xff0c;实际应用到JDBC中去。 一共五张表&#xff0c; info存储的是具体的信息&#xff0c;edu job role 和info都是多对一的关系。 采用的是Java FX&#xff0c;界面采用xml去编写。 项目理解一 在JavaFX中&#xff0c;ObservableList 是一个…

SCI一区TOP|准随机分形搜索算法(QRFS)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;LA Beltran受到分形几何、低差异序列启发&#xff0c;提出了准随机分形搜索算法&#xff08;Quasi-random Fractal Search, QRFS&#xff09;。 2.算法原理 2.1算法思…

【网络安全】实验三(基于Windows部署CA)

一、配置环境 打开两台虚拟机&#xff0c;并参照下图&#xff0c;搭建网络拓扑环境&#xff0c;要求两台虚拟的IP地址要按照图中的标识进行设置&#xff0c;并根据搭建完成情况&#xff0c;勾选对应选项。注&#xff1a;此处的学号本人学号的最后两位数字&#xff0c;1学号100…

Linux 搭建 Kafka 环境 - 详细教程

目录 一. Kafka介绍 1. 应用场景 2. 版本对比 二. Kafka安装 1. 前置环境 &#xff08;1&#xff09;安装JDK 2. 软件安装 &#xff08;3&#xff09;环境变量配置 &#xff08;3&#xff09;服务启动 三. Console测试 基础命令 &#xff08;1&#xff09;列出Kafk…

上网监控软件有哪些?3款实力出众的上网监控软件

为什么需要上网监控软件&#xff1f; 据说&#xff0c;99%的员工上班都会摸鱼&#xff0c;1%的员工上班会窃取公司信息。 所以&#xff0c;因此&#xff0c;监控员工的上网行为是很有必要滴。 总结下来&#xff0c;上网监控软件的作用是&#xff1a; 1.提高生产力&#xff1…