在个人电脑上部署ChatGLM2-6B中文对话大模型

news2024/12/28 19:56:26

简介

ChatGLM2-6B 是清华大学开源的一款支持中英双语的对话语言模型。经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,具有62 亿参数的 ChatGLM2-6B 已经能生成相当符合人类偏好的回答。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。

使用方式

硬件需求

量化等级最低GPU(对话)最低GPU(微调)
FP16(标准)13GB14GB
INT88GB9GB
INT46GB7GB

如果没有 GPU 硬件,也可以在 CPU 上进行对话,但是相应速度会更慢。需要大概 32GB 内存。

安装环境

下载仓库
git clone https://github.com/THUDM/ChatGLM2-6B

cd ChatGLM2-6B
创建虚拟环境
python -m venv venv
激活虚拟环境
  • Windows 系统
venv\Script\activate
  • macOS/Linux 系统
source venv/bin/activate
安装依赖
pip install -r requirements.txt -i https://pypi.douban.com/simple

加载模型

默认情况下,程序会自动下载模型。奈何模型太大,网络不好的情况下花费时间过长。建议提前下载,从本地加载模型。

  • 代码地址
  • 模型地址

将下载的 THUDM 文件夹放在 ChatGLM2-6B 文件夹下。文件清单如下所示:

ChatGLM2-6B
│
├── THUDM
│   ├── chatglm2-6b
│   │   ├── MODEL_LICENSE
│   │   ├── README.md
│   │   ├── config.json
│   │   ├── configuration_chatglm.py
│   │   ├── modeling_chatglm.py
│   │   ├── pytorch_model-00001-of-00007.bin
│   │   ├── pytorch_model-00002-of-00007.bin
│   │   ├── pytorch_model-00003-of-00007.bin
│   │   ├── pytorch_model-00004-of-00007.bin
│   │   ├── pytorch_model-00005-of-00007.bin
│   │   ├── pytorch_model-00006-of-00007.bin
│   │   ├── pytorch_model-00007-of-00007.bin
│   │   ├── pytorch_model.bin.index.json
│   │   ├── quantization.py
│   │   ├── tokenization_chatglm.py
│   │   ├── tokenizer.model
│   │   └── tokenizer_config.json
│   └── chatglm2-6b-int4
│       ├── MODEL_LICENSE
│       ├── README.md
│       ├── config.json
│       ├── configuration_chatglm.py
│       ├── modeling_chatglm.py
│       ├── pytorch_model.bin
│       ├── quantization.py
│       ├── tokenization_chatglm.py
│       ├── tokenizer.model
│       └── tokenizer_config.json

GPU/CPU部署

GPU部署

默认情况下,程序以基于GPU运行。

  1. 查看显卡信息
nvidia-smi

在这里插入图片描述

上图表示本机显卡的显存为8GB,最高支持CUDA的版本是11.2。

  1. 下载安装 cuda-toolkit 工具

在 这里 选择不高于上述CUDA的版本。

在这里插入图片描述

在这里插入图片描述

按提示安装 cuda-toolkit 工具。

wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run
sudo sh cuda_11.2.0_460.27.04_linux.run

运行以下命令,查看 cuda 是否可用。

python -c "import torch; print(torch.cuda.is_available());"

返回 True 则表示可用。

api.py cli_demo.py web_demo.py web_demo.py 等脚本中,模型默认以 FP16 精度加载,运行模型需要大概 13GB 显存。命令如下:

model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).cuda()

如果 GPU 显存有限,可以尝试以量化方式加载模型,使用方法如下:

# 按需修改,目前只支持 4/8 bit 量化
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).quantize(4).cuda()

模型量化会带来一定的性能损失,经过测试,ChatGLM2-6B 在 4-bit 量化下仍然能够进行自然流畅的生成。

如果内存不足,可以直接加载量化后的模型:

model = AutoModel.from_pretrained("THUDM/chatglm2-6b-int4",trust_remote_code=True).cuda()
CPU部署

如果没有 GPU 硬件的话,也可以在 CPU 上进行对话,但是对话速度会很慢,需要32GB内存(量化模型需要5GB内存)。使用方法如下:

model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).float()

如果内存不足,可以直接加载量化后的模型:

model = AutoModel.from_pretrained("THUDM/chatglm2-6b-int4",trust_remote_code=True).float()

在 CPU 上运行量化后的模型,还需要安装 gcc 与 openmp。多数 Linux 发行版默认已安装。对于 Windows ,可在安装 TDM-GCC 时勾选 openmp。在 MacOS 上请参考 这里。

运行程序

命令行
python cli_demo.py

程序会在命令行中进行交互式的对话,在命令行中输入指示并回车即可生成回复,输入 clear 可以清空对话历史,输入 stop 终止程序。如下所示:

在这里插入图片描述

网页版A
python web_demo.py

程序会运行一个 Web Server,并输出地址。在浏览器中打开输出的地址即可使用。最新版 Demo 实现了打字机效果,速度体验大大提升。注意,由于国内 Gradio 的网络访问较为缓慢,启用 demo.queue().launch(share=True, inbrowser=True) 时所有网络会经过 Gradio 服务器转发,导致打字机体验大幅下降,现在默认启动方式已经改为 share=False,如有需要公网访问的需求,可以重新修改为 share=True 启动。如下所示:

在这里插入图片描述

网页版B

安装 streamlit_chat 模块。

pip install streamlit_chat -i https://pypi.douban.com/simple

运行网页。

streamlit run web_demo2.py

如下所示:

在这里插入图片描述

API部署

安装 fastapi uvicorn 模块。

pip install fastapi uvicorn -i https://pypi.douban.com/simple

运行API。

python api.py

默认部署在本地的 8000 端口,通过 POST 方法进行调用。

curl -X POST "http://127.0.0.1:8000" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "你好", "history": []}'

得到返回值为

{
  "response":"你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。",
  "history":[["你好","你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。"]],
  "status":200,
  "time":"2023-06-30 14:51:00"
}

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

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

相关文章

亚马逊点击广告有什么好处?

亚马逊点击广告可以带来以下几个好处: 1、增加曝光和可见性:亚马逊点击广告可以将你的产品展示给更多潜在的购买者。通过有针对性的广告活动,你可以提高产品的曝光度,使更多的人看到你的产品。 2、提高点击率和流量:…

Python 代码打包

这里写目录标题 1. pyc打包及重调用2. Cython打包及重调用 1. pyc打包及重调用 该打包方式仅为入门级,反编译后为源代码,毫无安全性 指令转换 python -m py_compile /path/**.py 代码统一转换 单个py文件打包 import py_compile py_file ["/home/…

基于STM32设计的青少年学习监控系统(华为云IOT)

一、设计需求 1.1 项目背景 近几年,我国儿童青少年的近视发生率越来越高,生活中总会看到许多小小年纪就戴着眼镜的小朋友。家长对孩子的用眼时间没有约束,电子产品对孩子眼睛的影响,写字姿势,有的孩子写字时握笔太低,以致整个人趴在桌子上等都是造成孩子近视的重要因素…

c++ freetype 解析可变字体(Variable font)

什么是可变字体 上一篇文章说了 传送门也懒的贴了, 自己去翻吧 前言 我这里不会贴完整的代码 也不会说的那么细,主要提供一些关键点和方法 正文 ‘name’ 表table 解析 TrueType 字体的解析 字体里面有很多的表table 我们需要的family和style 都在这…

C++在线五子棋对战(网页版)项目:websocket协议

目标:认识理解websocket协议、websocket切换过程和websocket协议格式。认识和学会使用websocketpp库常用接口。了解websocketpp库搭建服务器流程,认识和学会使用websocketpp库bin接口,最后使用websocketpp库搭建服务器。 初识websocket WebS…

OJ# 384 敲七

题目描述 ​ 有 N 个人在玩一种“敲7”游戏,游戏的规则是这样的:第 x 个人从 t 开始报数,然后按顺序报数, 当某人报的数是 7 的倍数或数字中含有 7 时,便被淘汰,剩下的人继续报数,直到只剩下一…

【CesiumJS入门】(6)修改3D Tiles(tileset)的位置及高度

前言 在之前一篇博客中【CesiumJS入门】(4)加载3D Tiles并获取tileset,我们成功得加载了3D Tiles数据集,本篇中,将会向大伙儿介绍tileset位置的修改与恢复: 直接上代码了 /** Date: 2023-06-28 19:35:03*…

操作系统OS(二)进程和线程

进程 所谓进程,简单来说是计算机中的各种任务。 进程是程序的一次执行,是操作系统进行资源分配和调度的基本单位。 进程结构PCB 进程结构: 控制块PCB:进程唯一标识 程序段:同一个应用程序的多个进程 数据段&#xf…

Pytorch中的Exponential Moving Average(EMA)

EMA介绍 EMA,指数移动平均,常用于更新模型参数、梯度等。 EMA的优点是能提升模型的鲁棒性(融合了之前的模型权重信息) 代码示例 下面以yolov7/utils/torch_utils.py代码为例: class ModelEMA:""" …

ELK报错no handler found for uri and method [PUT] 原因

执行后提示no handler found for uri and method post,最新版8.2的问题? 原因: index.mapping.single_type: true在索引上 设置将启用按索引的单一类型行为,该行为将在6.0后强制执行。 原 {type} 要改为 _doc,格式如…

优炫软件自主研发再结硕果,共享存储SRAC集群数据库重磅发布

新一轮科技革命重塑全球经济结构,关键核心技术是产业发展的基石,数据库、芯片、操作系统是我国数字技术领域三大卡脖子难题。数据库向下发挥硬件算力,向上使能应用系统,是各行各业业务系统运行的基础,是软件行业皇冠上…

光口的作用及应用场景

在光通信中,交换机是一个非常重要的设备,它的作用是将来自不同设备的数据包进行收发和交换。之前发布的文章我们有了解到交换机的光口是如何配置的,本期文章我们将详细讨论交换机的光口的作用及应用场景。 一、光口的主要作用 交换机的光口…

适合团队人数少,预算低的四种办公室类型

如果团队人数少且预算低,以下是一些在深圳比较适合租赁的办公室类型: 1. 联合办公空间:联合办公空间是一种灵活的办公模式,通常提供共享的办公环境和设施,如会议室、休息区、打印机等。这种模式的办公室租金通常较低&…

Linux下Master-Master Replication Manager for MySQL 双主故障切换

简述: Master-Master Replication Manager for MySQL(MMRM)是一种用于MySQL数据库的主-主复制管理工具。它允许在多个MySQL主机之间建立双向的主-主复制关系,实现数据的同步和高可用性。 工作原理是通过在每个MySQL主机上配置双…

javascript 剪贴板数据

本篇文章将介绍在 JavaScript 中检测粘贴事件上的剪贴板数据。 JavaScript 剪贴板数据 当用户通过浏览器 UI 启动粘贴操作时,将引发粘贴事件。 当光标位于可编辑上下文中时,默认操作是将剪贴板的内容粘贴到光标位置的文档中。 此事件的处理程序可以通过…

性能优化 :删除项目中没有引用关系的文件 useless-files-webpack-plugin

一般此类包不需要安装到项目中,减少node_modules体积(以项目实际情况决定-S/-D) npm i useless-files-webpack-plugin -S然后再vue.config.js中配置 const UselessFile require(useless-files-webpack-plugin) chainWebpack: config > …

KEIL支持中文编辑

默认只支持英文,中文一粘贴就变成问号。怎么办? 菜单:Edit, Configuration 点击Encoding的下拉按钮,选择GB2312.

关于Http Header必须了解的知识

header是发送请求时携带的头部信息。通常一些鉴权的信息:authentication/cookie、响应的数据格式:content-type等等的设置。当然响应的数据也会返回一些头部信息。 Requests Header,请求头信息  Responses Header&…

自动化测试中如何比较颜色

引言 在做Nightwatch自动化测试中,出现需要比较颜色的时候如何来做? 基本的思路是首先需要取到这个element的颜色值,然后跟预期的颜色进行对比。 比如我要取下面这个会话窗口的颜色,选中这个图标,按F12,查…

Java实现office办公文档在线预览(word、excel、ppt、txt等)

文章目录 一、官网下载openOffice 安装包,运行安装(不同系统的安装请自行百度,这里不做过多描述) 二、pom中引入依赖 三、office文件转为pdf流的工具类 四、service层代码 五、controller层代码 office办公文档,如doc…