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

2023-11-10

简介

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

使用方式

硬件需求

量化等级 最低GPU(对话) 最低GPU(微调)
FP16(标准) 13GB 14GB
INT8 8GB 9GB
INT4 6GB 7GB

如果没有 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":"你好									
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 【微信小程序】小程序仿通讯录功能

    微信小程序模仿通讯录功能需要用到scroll view标签 思路 首先需要获取到你所需要展示的数据样式的高度 这就需要用到微信给我们提供的一个API来完成了 因为小程序是没有DOM树结构的 这个可以去看我的前一篇里面有详细的记载怎么获取想要
  • 带权重的二分类交叉熵bce_loss写法

    原本的bceloss bce loss nn BCELoss size average True 分别给目标0 8 背景0 2 的权重后 def bce loss w input target bce loss nn BCELoss siz
  • Oracle注入——报错注入

    什么是Oracle数据库 Oracle 数据库系统 是美国ORACLE公司 甲骨文 提供的以分布式数据库为核心的一组软件产品 Oracle数据库也是一种关系数据库 此数据库体量较大 一般与jsp网站联合 Oracle 系统表 Oracle中
  • c++ std::enable_shared_from_this作用

    enable shared from this 是什么 std enable shared from this 是一个类模板 用来返回指向当前对象的shared ptr智能指针 在说明它的作用前我们可以看一下如下代码 demo cpp in
  • 【计算机视觉

    文章目录 一 前言 二 常见的库 2 1 scikit image 2 2 NumPy 2 3 SciPy 2 4 PIL Pillow 2 5 OpenCV Python 2 6 SimpleCV 2 7 Mahotas 2 8 Simp
  • Android中,JSON数据取字节数组byte[],string强制转换byte[]

    欲将获取的json数据中的byte字节数组取出 可以先将json中对应的byte 转换成string 再将string转为byte字节数组 并不是直接调用所谓的 String str abcd byte bs str getBytes 如果
  • pyppeteer初次运行需要下载Chromeium无法下载或者下载慢

    最佳解决方案 目前网上最多的其实都是自己手动下载 目前需要 这里进行替换就好了 这里是不需要修改源码的 只要在我们引用之前设置下环境变量就好了 import os DEFAULT DOWNLOAD HOST https npm taobao
  • EasyAVFilter代码示例之将视频点播文件转码成HLS(m3u8+ts)视频点播格式

    以下是一套完整的视频点播功能开发源码 就简简单单几行代码 就可以完成原来ffmpeg很复杂的视频点播转码调用流程 而且还可以集成在自己的应用程序中调用 例如java php cgo c nodejs 不需要再单独一个ffmpeg的进程来调用
  • 随机数产生函数总是产生相同随机数的原因

    1 没有设置随机数种子 下面的程序直接调用rand 函数 结果产生的20个随机数虽然各不相同 但是每次运行得到的20个随机数与上次运行的结果都是一样的 就是因为没有设置随机数种子 虽然程序运行过程中可以产生不同随机数 但是下次运行产生的随机
  • protobuf-gen-lua 编译dll文件

    vs 创建dll空项目 引入protobuf gen lua工程里的pb c文件 修改原程序 1 ifndef WIN32 2 include
  • 机器学习——聚类——密度聚类法——OPTICS

    目录 理论部分 1 1 提出背景 1 2 OPTICS算法 1 2 1 基本概念 1 2 2 算法流程 1 2 3 优点 1 2 4 缺点 1 3 其它算法 代码部分 2 1 自行实现 2 2 sklearn实现 理论部分 1 1 提出背景
  • 33.输入捕获原理与配置

    输入捕获原理与配置 参考资料 STM32Fx开发板 STM32Fx开发指南 HAL库版本 第x章 输入捕获实验 STM32Fxx官方资料 STM32Fxx中文参考手册 第x章 通用定时器 笔记基于正点原子官方视频 视频连接https www
  • Face++人脸识别之情绪识别、视线估计

    1 定义 什么是情绪识别 是指分析识别图片中人脸的各类情绪并返回该人脸在各类不同情绪上的置信度分数 某种情绪的置信度分数越高 则可认为此种情绪与人脸真实情绪越接近 目前 Face 能够识别愤怒 厌恶 恐惧 高兴 平静 伤心 惊喜等七类最重要
  • windows10系统下nextcloud服务的webdav网盘挂载方法

    目录 前言 一 下载挂载服务修复批处理文件 保存到本地并运行 二 复制网盘地址 并挂载网盘 三 webdav网盘挂载成功 前言 许多朋友都有使用过网盘 像比较大的百度网盘 天翼云盘等 但是也有不少小微企业希望搭建企业内部的私有网盘 这就需要
  • 为什么说 Apache APISIX 是最好的 API 网关?

    今天 我们可以通过手机和各种 APP 完成各种各样的事情 比如社交 网购等 这些行为的背后 API 起到了关键的作用 作为 API 的使用者 我们并不关心 API 的稳定 安全和高效 但是通过 API 提供数据服务的企业则需要选择一个合适的
  • 思科模拟器实现Telnet和SSH远程管理

    思科模拟器实现Telnet和SSH远程管理 Telnet实现远程管理 明文传输 安全性不高 SSH实现远程访问 密文传输 前提 1 要保证设备之间能够进 2 设置enable密码 Telnet实现远程管理 明文传输 安全性不高 R0的配置
  • git生成ssh密钥详细步骤

    首先右键点击电脑桌面 点击 git bash here 打开git命令窗口 如果git用户名和邮箱等已经完成配置 则跳过此步骤 直接操作第3条 假如没有配置 继续如下操作 1 在命令窗口配置用户 输入命令 git config global
  • python如何实现监听微信应用新消息通知中心弹窗提醒

    可以使用第三方库如 itchat 来实现对微信应用新消息通知中心弹窗提醒的监听 首先需要安装 itchat 可以使用 pip 安装 pip install itchat 然后可以使用 itchat 提供的相关接口来登录微信 并设置消息处理回
  • OpenStack自动化安装部署实战(附OpenStack实验环境)

    packstack是openstack自动化安装工具 packstack程序中写入了openstack的安装过程 可以自动化对服务器进行openstack软件包的安装 packstack可以在answer file设置安装参数 在安装时 p
  • 在个人电脑上部署ChatGLM2-6B中文对话大模型

    简介 ChatGLM2 6B 是清华大学开源的一款支持中英双语的对话语言模型 经过了 1 4T 中英标识符的预训练与人类偏好对齐训练 具有62 亿参数的 ChatGLM2 6B 已经能生成相当符合人类偏好的回答 结合模型量化技术 用户可以在
Powered by Hwhale