本地多卡(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.pswp.cn/web/41418.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41418.shtml
英文地址,請注明出處:http://en.pswp.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;成為了物聯網領域的佼佼者。 一、產品概述 桂花網藍牙…

【修仙小伙伴】第1章 天眼計劃

自古以來&#xff0c;人類對于地外文明的探索&#xff0c;就不曾停止過。 而在古代文獻《拾遺記》之中&#xff0c;就有「秦始皇」和所謂「宛渠之民」的對話記載&#xff1a; 始皇好神仙之事&#xff0c;有宛渠之民&#xff0c;乘螺舟而至。 舟形似螺&#xff0c;沉行海底&a…

服務端事件推送——HTTP協議的事件流(EventStream)

背景 最近由于工作要求需要使用Springboot搭建一個流式響應服務&#xff0c;即客戶端發送一次請求&#xff0c;服務端需要多次響應才能返回完整的數據。使用場景就是與chatGPT對話&#xff0c;你問一個問題&#xff0c;頁面會逐字將結果打印出來。 下面我在SpringBoot中可以簡…

使用Ckman部署ClickHouse集群介紹

使用Ckman部署ClickHouse集群介紹 1. Ckman簡介 ClickHouse Manager是一個為ClickHouse數據庫量身定制的管理工具&#xff0c;它是由擎創科技數據庫團隊主導研發的一款用來管理和監控ClickHouse集群的可視化運維工具。目前該工具已在github上開源&#xff0c;開源地址為&…

Leetcode 3213. Construct String with Minimum Cost

Leetcode 3213. Construct String with Minimum Cost 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3213. Construct String with Minimum Cost 1. 解題思路 這一題的話思路上還是比較直接的&#xff0c;就是一個trie樹加一個動態規劃&#xff0c;通過trie樹來快速尋找每一個…

k8s-第七節-ConfigMap Secret

ConfigMap & Secret ConfigMap 數據庫連接地址&#xff0c;這種可能根據部署環境變化的或者其他容器配置選項的包括容器更新或者擴容時可以統一配置 Kubernetes 為我們提供了 ConfigMap&#xff0c;可以方便的配置一些變量。 https://kubernetes.io/zh/docs/concepts/c…

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緩存利用率&#…

Leetcode 3211. Generate Binary Strings Without Adjacent Zeros

Leetcode 3211. Generate Binary Strings Without Adjacent Zeros 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3211. Generate Binary Strings Without Adjacent Zeros 1. 解題思路 這一題比較簡單&#xff0c;用一個遞歸算法即可實現。 2. 代碼實現 給出python代碼實現…

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;監測發現當前較活躍的勒索病毒…

C++多線程學習筆記

創建線程(thread) #include<iostream> #include<thread> using namespace std;// 函數fun&#xff0c;接收一個整型參數并在無限循環中打印遞增的值 void fun(int a) {while(1) {cout << a << "\n"; // 打印自增后的athis_thread::sleep_fo…

應用案例 | 基于物聯網工控屏的工業離心機設備監控系統

案例概況 客戶&#xff1a;博魯班特&#xff08;BROADBENT&#xff09; 應用產品&#xff1a;宏集物聯網工控屏 應用場景&#xff1a;離心機設備監控系統 一、前言 在現代工業生產中&#xff0c;離心機作為關鍵的分離設備&#xff0c;在生產過程中扮演著至關重要的角色。隨…

谷粒商城學習筆記-17-快速開發-逆向工程搭建使用

文章目錄 一&#xff0c;克隆人人開源的逆向工程代碼二&#xff0c;把逆向工程集成到谷粒商城的后臺工程三&#xff0c;以商品服務為例&#xff0c;使用逆向工程生成代碼1&#xff0c;修改逆向工程的配置2&#xff0c;以Debug模式啟動逆向工程3&#xff0c;使用逆向工程生成代碼…

名企面試必問30題(二十四)—— 說說你空窗期做了什么?

回答示例一 在空窗期這段時間&#xff0c;我主要進行了兩方面的活動。 一方面&#xff0c;我持續提升自己的專業技能。我系統地學習了最新的軟件測試理論和方法&#xff0c;深入研究了自動化測試工具和框架&#xff0c;例如 Selenium、Appium 等&#xff0c;并通過在線課程和實…

ISA95-Part4-業務流程的解析與設計思路

MES/MOM系統實現ISA-95標準的業務流程通常遵循以下思路,并包含一系列內容。 一、功能模塊: 1. 需求分析與規劃: - 確定業務流程需求,包括訂單管理、生產調度、庫存控制等,并規劃如何將這些流程與MES/MOM系統集成。 2. 系統集成架構設計: - 設計一個系統集成架構,確保M…

基于B/S模式和Java技術的生鮮交易系統

你好呀&#xff0c;我是計算機學姐碼農小野&#xff01;如果有相關需求&#xff0c;可以私信聯系我。 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;B/S模式、Java技術 工具&#xff1a;Visual Studio、MySQL數據庫開發工具 系統展示 首頁 用戶注冊…