使用4090显卡部署 Qwen-14B-Chat-Int4

news2024/12/23 2:54:09

使用4090显卡部署 Qwen-14B-Chat-Int4

  • 1. Qwen-Agent 概述
  • 2. Github 地址
  • 3. 创建虚拟环境
  • 4. 安装依赖项
  • 5. 快速使用
  • 6. 启动 web 演示
  • 7. 访问 Qwen

1. Qwen-Agent 概述

通义千问-14B(Qwen-14B) 是阿里云研发的通义千问大模型系列的140亿参数规模的模型。Qwen-14B是基于Transformer的大语言模型, 在超大规模的预训练数据上进行训练得到。预训练数据类型多样,覆盖广泛,包括大量网络文本、专业书籍、代码等。同时,在Qwen-14B的基础上,我们使用对齐机制打造了基于大语言模型的AI助手Qwen-14B-Chat。本仓库为Qwen-14B-Chat的仓库。

2. Github 地址

https://github.com/QwenLM/Qwen

3. 创建虚拟环境

创建虚拟环境,

conda create -n qwen-14b-chat python=3.10 -y
conda activate qwen-14b-chat

安装 pytorch,

pip install torch==2.0.0+cu118 torchvision==0.15.1+cu118 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118

4. 安装依赖项

安装 modelscope,

pip install modelscope>=1.9.1

安装 tiktoken,

pip install tiktoken

安装 transformers_stream_generator,

pip install transformers_stream_generator

安装 auto-gptq 和 optimum,


(可选)另外,推荐安装flash-attention库,以实现更高的效率和更低的显存占用。

pip install packaging
pip uninstall -y ninja && pip install ninja

git clone https://github.com/Dao-AILab/flash-attention; cd flash-attention
# 20231006 时点最新是 flash-attn-2.3.1.post1 版本
pip install flash-attn --no-build-isolation
# 下方安装可选,安装可能比较缓慢。
pip install csrc/layer_norm
pip install csrc/rotary

refer:

  • https://github.com/Dao-AILab/flash-attention
  • https://github.com/Dao-AILab/flash-attention/tree/main/csrc/layer_norm

5. 快速使用

下面我们展示了一个使用 Qwen-14B-Chat-Int4 模型,进行多轮对话交互的样例,

git clone https://github.com/QwenLM/Qwen.git; cd Qwen
python cli_demo.py -c 
cat << EOF > quick_demo.py
from modelscope import AutoModelForCausalLM, AutoTokenizer, snapshot_download
from modelscope import GenerationConfig

model_dir = snapshot_download('Qwen/Qwen-14B-Chat-Int4', revision='v1.0.4')

# Note: The default behavior now has injection attack prevention off.
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)

# use bf16
# model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto", trust_remote_code=True, bf16=True).eval()
# use cpu only
# model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="cpu", trust_remote_code=True).eval()
# use auto mode, automatically select precision based on the device.
model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto", trust_remote_code=True).eval()

# Specify hyperparameters for generation
model.generation_config = GenerationConfig.from_pretrained(model_dir, trust_remote_code=True) # 可指定不同的生成长度、top_p等相关超参

# 第一轮对话 1st dialogue turn
response, history = model.chat(tokenizer, "你好", history=None)
print(response)
# 你好!很高兴为你提供帮助。

# 第二轮对话 2nd dialogue turn
response, history = model.chat(tokenizer, "给我讲一个年轻人奋斗创业最终取得成功的故事。", history=history)
print(response)
# 这是一个关于一个年轻人奋斗创业最终取得成功的故事。
# 故事的主人公叫李明,他来自一个普通的家庭,父母都是普通的工人。从小,李明就立下了一个目标:要成为一名成功的企业家。
# 为了实现这个目标,李明勤奋学习,考上了大学。在大学期间,他积极参加各种创业比赛,获得了不少奖项。他还利用课余时间去实习,积累了宝贵的经验。
# 毕业后,李明决定开始自己的创业之路。他开始寻找投资机会,但多次都被拒绝了。然而,他并没有放弃。他继续努力,不断改进自己的创业计划,并寻找新的投资机会。
# 最终,李明成功地获得了一笔投资,开始了自己的创业之路。他成立了一家科技公司,专注于开发新型软件。在他的领导下,公司迅速发展起来,成为了一家成功的科技企业。
# 李明的成功并不是偶然的。他勤奋、坚韧、勇于冒险,不断学习和改进自己。他的成功也证明了,只要努力奋斗,任何人都有可能取得成功。

# 第三轮对话 3rd dialogue turn
response, history = model.chat(tokenizer, "给这个故事起一个标题", history=history)
print(response)
# 《奋斗创业:一个年轻人的成功之路》
EOF
python quick_demo.py

输出结果如下,

在这里插入图片描述

6. 启动 web 演示

安装依赖,

pip install gradio mdtex2html

修改 web_demo.py,

vi web_demo.py

--- 修改1
#from transformers import AutoModelForCausalLM, AutoTokenizer, snapshot_download
#from transformers.generation import GenerationConfig


# DEFAULT_CKPT_PATH = 'Qwen/Qwen-7B-Chat'

from modelscope import AutoModelForCausalLM, AutoTokenizer
from modelscope import GenerationConfig


DEFAULT_CKPT_PATH = 'Qwen/Qwen-14B-Chat-Int4'
---

--- 修改2
    model_dir = snapshot_download(args.checkpoint_path, revision='v1.0.4')
    tokenizer = AutoTokenizer.from_pretrained(
        # args.checkpoint_path, trust_remote_code=True, resume_download=True,
        model_dir, trust_remote_code=True, resume_download=True,
    )
---

--- 修改3
    model = AutoModelForCausalLM.from_pretrained(
        # args.checkpoint_path,
        model_dir,
        device_map=device_map,
        trust_remote_code=True,
        resume_download=True,
    ).eval()
---

--- 修改4
    config = GenerationConfig.from_pretrained(
        # args.checkpoint_path, trust_remote_code=True, resume_download=True,
        model_dir, trust_remote_code=True, resume_download=True,
    )
---


启动模型服务,通过 -c 参数指定模型版本,

7. 访问 Qwen

现在您可以访问 http://127.0.0.1:8000 来使用 Qwen 了。

在这里插入图片描述

完结!

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

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

相关文章

cartographer(1)-运行

1.下载数据集 #1.下载数据集&#xff1a; mkdir /home/tang/bagfiles#2.开始二维建图 cd /home/tang/carto_ws/cartographer_detailed_comments_ws/install_isolated/source install_isolated/setup.bash rospack profile #新装的包索引地址存在ros的环境里 roslaunch ca…

【Python】读取显示pgm图像文件

文章目录 零. 前言一. pgm基本概念二. pgm基本信息读取三. pgm图像渲染四. 代码优化 零. 前言 这学期要学多媒体信息隐藏对抗&#xff0c;发现其中的图像数据集文件都是pgm文件形式的。虽然是图像文件&#xff0c;但是却不能直接通过图像查看器来打开&#xff0c;上网一搜&…

【有限域除法】二元多项式除法电路原理及C语言实现

二元多项式除法电路原理 例: g ( x ) = x 4 + x 2 + x + 1 g(x)=x^4 + x^2+x+1

C语言-字符串与输入输出

一、字符串 1、字符串简介 在 C 语言中&#xff0c;字符串实际上是使用空字符 \0 结尾的一维字符数组。因此&#xff0c;\0 是用于标记字符串的结束。 空字符&#xff08;Null character&#xff09;又称结束符&#xff0c;缩写 NUL&#xff0c;是一个数值为 0 的控制字符&…

深入了解“注意力”和“变形金刚” -第1部分

一、说明 这是一篇很长的文章&#xff0c;几乎讨论了人们需要了解的有关注意力机制的所有信息&#xff0c;包括自我注意、查询、键、值、多头注意力、屏蔽多头注意力和转换器&#xff0c;包括有关 BERT 和 GPT 的一些细节。因此&#xff0c;我将本文分为两部分。在本文中&#…

【JavaEE】JUC(Java.util.concurrent)常见类

文章目录 前言ReentrantLock原子类线程池信号量CountDownLatch相关面试题 前言 经过前面文章的学习我们大致了解了如何实现多线程编程和解决多线程编程中遇到的线程不安全问题&#xff0c;java.util.concurrent 是我们多线程编程的一个常用包&#xff0c;那么今天我将为大家分…

消息驱动 —— SpringCloud Stream

Stream 简介 Spring Cloud Stream 是用于构建消息驱动的微服务应用程序的框架&#xff0c;提供了多种中间件的合理配置 Spring Cloud Stream 包含以下核心概念&#xff1a; Destination Binders&#xff1a;目标绑定器&#xff0c;目标指的是 Kafka 或者 RabbitMQ&#xff0…

一款支持功能安全车规级 线性PMIC稳压器 NCV4274CDS50R4G 解决方案:高效率、更智能、强功能安全

关于车规级芯片&#xff1a; 关于车规级芯片&#xff08;Automotive Grade Chip&#xff09;&#xff0c;车规级芯片是专门用于汽车行业的芯片&#xff0c;具有高可靠性、高稳定性和低功耗等特点&#xff0c;以满足汽车电子系统的严格要求。这些芯片通常用于车载电子控制单元&…

c++使用ifstream和ofstream报错:不允许使用不完整的类型

学习《C Primer》关于IO库的部分&#xff0c;输入284页的的代码&#xff0c;出现了报错&#xff1a; 不允许使用不完整的类型 原来的代码&#xff1a; #include <iostream> #include <vector> using namespace std;int main(int argc, char **argv) {ifstream in…

如何搭建一个 websocket

环境: NodeJssocket.io 4.7.2 安装依赖 yarn add socket.io创建服务器 引入文件 特别注意: 涉及到 colors 的代码&#xff0c;请采取 console.log() 打印 // 基础老三样 import http from "http"; import fs from "fs"; import { Server } from &quo…

分享几个优秀开源免费管理后台模版,建议收藏!

大家好&#xff0c;我是 jonssonyan 今天和大家分享一些免费开源的后台管理页面&#xff0c;帮助大家快速搭建前端页面。为什么要用模板&#xff1f;道理很简单&#xff0c;原因是方便我们快速开发。我们不应该花太多的时间在页面调整上&#xff0c;而应该把精力放在核心逻辑和…

关于滑块验证码的问题

这里写自定义目录标题 一、超级鹰二、图片验证模拟登录1、页面分析1.1、模拟用户正常登录流程1.2、识别图片里面的文字 2、代码实现 三、滑块模拟登录1、页面分析2、代码实现&#xff08;通过对比像素获取缺口位置&#xff09; 四、openCV1、简介2、代码3、案例 五、selenium 反…

Vue中如何进行数据库操作与数据持久化

在Vue中进行数据库操作与数据持久化 Vue.js作为一个流行的JavaScript框架&#xff0c;通常用于构建前端应用程序&#xff0c;但它本身并不提供数据库操作或数据持久化的功能。数据库操作通常由后端服务器处理&#xff0c;而Vue负责呈现和交互。然而&#xff0c;您可以使用Vue与…

P1-Python编辑器的选择和安装

1、Python编辑器的选择、安装及配置&#xff08;PyCharm、Jupyter&#xff09; PyCharm的安装&#xff1a; https://www.jetbrains.com/pycharm/PyCharm的配置&#xff1a; 1、创建新的项目 2、导入本地已有的Pytorch anaconda环境 配置环境中问题&#xff1a; https://bl…

Kitchen Racks

厨房置物架 完美&#xff01;&#xff01;&#xff01;

【车载开发系列】S19/HEX/BIN文件解析

【车载开发系列】S19/HEX/BIN文件解析 【车载开发系列】S19/HEX/BIN文件解析 【车载开发系列】S19/HEX/BIN文件解析一. 文件烧录原理二. 为什么要文件解析三. BIN格式文件1&#xff09;bin格式优点2&#xff09;bin格式缺点 四. S-record概述五. S19&#xff0c;MOT&#xff0c…

ExoPlayer架构详解与源码分析(3)——Timeline

系列文章目录 ExoPlayer架构详解与源码分析&#xff08;1&#xff09;——前言 ExoPlayer架构详解与源码分析&#xff08;2&#xff09;——Player 文章目录 系列文章目录前言Timeline单文件或者点播流媒体文件播放列表或者点播流列表有限可播的直播流无限可播的直播流有多个P…

机器学习---RBM、KL散度、DBN

1. RBM 1.1 BM BM是由Hinton和Sejnowski提出的一种随机递归神经网络&#xff0c;可以看做是一种随机生成的 Hopfield网络&#xff0c;是能够通过学习数据的固有内在表示解决困难学习问题的最早的人工神经网络之 一&#xff0c;因样本分布遵循玻尔兹曼分布而命名为BM。BM由二…

平台项目列表页实现(二)

这里写目录标题 一、顶部盒子设计1. 顶部盒子包含项目列表和添加项目、退出登录2个按钮 二、项目列表盒子设计三、添加项目盒子设计四、退出登录功能实现五、路由导航守卫实现六、展示项目信息七、bug修复1、当项目名称太长或者项目负责人太长&#xff0c;需要一行展示&#xf…

一文详解动态链表和静态链表的区别

1、引言 本文主要是对动态链表和静态链表的区别进行原理上的讲解分析&#xff0c;先通过对顺序表和动态链表概念和特点的原理性介绍&#xff0c;进而引申出静态链表的作用&#xff0c;以及其概念。通过这些原理性的概述&#xff0c;最后总结归纳出动态链表和静态链表的区别。本…