一、前言

近期,清华开源了其中文对话大模型的小参数量版本 ChatGLM-6B(GitHub地址:https://github.com/THUDM/ChatGLM-6B)。其不仅可以单卡部署在个人电脑上,甚至 INT4 量化还可以最低部署到 6G 显存的电脑上,当然 CPU 也可以。
随着大语言模型的通用对话热潮展开,庞大的参数量也使得这些模型只能在大公司自己平台上在线部署或者提供 api 接口。所以 ChatGLM-6B 的开源和部署在个人电脑上,都具有重要的意义。
博主测试后发现,对比 huggingface 上其他同参数量的模型来说,ChatGLM-6B 的效果已经是很好的了,更何况它还有 130B 的版本,官网说明(官方博客:https://chatglm.cn/blog)是优于 GPT-3.5 效果的(130B 版本正在内测,博主没有拿到测试资格,所以无法确认)。所以把 ChatGLM-6B 部署在个人电脑或者服务器上还是很好玩的,这个参数量还要什么自行车。

【最新更新】ChatGLM-6B 在 2023/03/19 更新增加了量化后的 INT4 模型,官方直接针对性的量化模型后提供下载。对比原版自己设置量化效果好一些,而且模型大小只有 4G,极大地加快了下载速度。 对于只有 CPU 或者只有 6G 显存的同学,可以直接选择量化后的模型下载和部署,本文单独更新了 ChatGLM-6B-int4 版本的部署教程,在第四章,需要部署的可以直接跳转到第四章,忽略前面的内容。huggingface 地址:https://huggingface.co/THUDM/chatglm-6b-int4

二、下载

  1. 模型文件需要在 huggingface 上进行下载:https://huggingface.co/THUDM/chatglm-6b
    点击【Files and versions】即可下载文件。建议下载到一个新建文件夹中,如大文件夹是 ChatGLM,把模型文件放到 model 文件夹里,整体结构就是 … /ChatGLM/model
  2. 如果模型文件(大于 1G 的)下载速度慢,可以在国内源中单独下载这几个模型文件(其他这个源没有的文件还是需要在 huggingface 上下载):https://cloud.tsinghua.edu.cn/d/fb9f16d6dc8f482596c2/
  3. 下载完成之后确保下图这些文件都在模型文件夹下(例如存放在 … /ChatGLM/model 下):在这里插入图片描述
  4. 到 GitHub 中下载其他环境配置文件和 demo 程序代码。GitHub 地址:https://github.com/THUDM/ChatGLM-6B。下载到 …/ChatGLM/ 这个目录下即可。

三、部署

把模型部署在本地,需要在 Python 环境下安装影响的库,此外还需要针对 GPU 安装相应版本的 cuda 和对应的 Pytorch。之后修改 demo 文件就可以启动运行了。

3.1 配置环境

  1. 安装自己 GPU 对应的 cuda,这个网上教程很多,不再赘述。(如果只有 cpu,则跳过该步骤)
  2. 根据上一步安装的 cuda 版本,下载安装对应版本的 pytorch,网上也有很多教程。(如果只有 cpu,也需要安装 cpu 版的 pytorch)
  3. 上述两步完成后,在 …/ChatGLM/ 目录下打开命令行终端,输入
    pip install -r requirements.txt
    按回车后,pip 就自动下载和安装相关依赖库了。

上述三个步骤完成后,部署的环境就搭建完成了。下面仅需要稍微修改 demo 的代码,或者自己根据 demo 编写程序,就可以开始使用 ChatGLM-6B 了!

3.2 启动 demo 程序

…/ChatGLM/ 目录下有两个 demo 代码:(1)cli_demo.py,直接在命令行中输入进行问答;(2)web_demo.py,利用 gradio 库生成问答网页。

第一个 demo 方便,还可以清除历史记录,但是在命令行(尤其是 Linux 命令行)中容易输入一些奇怪的字符,这会使得程序意外停止;第二个 demo 界面简单,但是不能清除记录,而且如果在没有图形界面的 Linux 系统服务器中使用,需要端口映射到本地电脑,再打开浏览器访问。个人建议,如果有能力,可以自己综合二者的有点自己编写,比如使用 jupyter 就可以很好结合二者,还可以以 markdown 渲染输出,使得代码或者公式更好看。

3.2.1 启动 cli_demo.py

  1. 修改模型路径。编辑 cli_demo.py 代码,修改 5、6 行的模型文件夹路径,将原始的 “THUDM/ChatGLM-6B” 替换为 “model” 即可。
  2. 修改量化版本。如果你的显存大于 14G,则无需量化可以跳过此步骤。如果你的显存只有 6G 或 10G,则需要在第 6 行代码上添加 quantize(4)quantize(8) ,如下:
# 6G 显存可以 4 bit 量化
model = AutoModel.from_pretrained("model", trust_remote_code=True).half().quantize(4).cuda()

# 10G 显存可以 8 bit 量化
model = AutoModel.from_pretrained("model", trust_remote_code=True).half().quantize(8).cuda()
  1. 执行 python 文件即可,可以在命令行终端输入:
    python cli_demo.py
    即可启动 demo,开始使用了!

3.2.2 启动 web_demo.py

  1. 安装 gradio 库,在 ChatGLM 目录下打开命令行终端,输入:
    pip install gradio
    即可安装 demo 所需要的库。
  2. 修改模型路径。编辑 web_demo.py 代码,修改 4、5 行的模型文件夹路径,将原始的 “THUDM/ChatGLM-6B” 替换为 “model” 即可。
  3. 修改量化版本。如果你的显存大于 14G,则无需量化可以跳过此步骤。如果你的显存只有 6G 或 10G,则需要在第 5 行代码上添加 quantize(4)quantize(8) ,如下:
# 6G 显存可以 4 bit 量化
model = AutoModel.from_pretrained("model", trust_remote_code=True).half().quantize(4).cuda()

# 10G 显存可以 8 bit 量化
model = AutoModel.from_pretrained("model", trust_remote_code=True).half().quantize(8).cuda()
  1. 执行 python 文件即可,可以在命令行终端输入:
    python web_demo.py
    即可启动 demo,开始使用了!

四、【最新】ChatGLM-6B-int4 版本教程

ChatGLM-6B-INT4 是 ChatGLM-6B 量化后的模型权重。具体的,ChatGLM-6B-INT4 对 ChatGLM-6B 中的 28 个 GLM Block 进行了 INT4 量化,没有对 Embedding 和 LM Head 进行量化。量化后的模型理论上 6G 显存(使用 CPU 即内存) 即可推理,具有在 嵌入式设备(如树莓派)上运行的可能。

4.1 下载

  1. 打开 ChatGLM-6B 的 GitHub 页面(https://github.com/THUDM/ChatGLM-6B),下载所有文件到文件夹 …/ChatGLM/ 下。
  2. …/ChatGLM/ 下新建文件夹 …/ChatGLM/model 。打开 huggingface 页面(https://huggingface.co/THUDM/chatglm-6b-int4/tree/main),下载 ChatGLM-6B-int4 的 int4 量化过的模型,把所有模型文件下载到 …/model 目录下。
  3. 至此所有文件下载完毕,大文件夹 …/ChatGLM/ 下有 demo 和配置环境的相关代码,且包含小文件夹 …/ChatGLM/modelmodel 文件夹内存放模型相关文件。

4.2 配置环境

  1. 如果没有 6G 显存,需要使用 CPU 运行,模型会根据硬件自动编译 CPU Kernel ,请确保已安装 GCC 和 OpenMP (Linux一般已安装,对于Windows则需手动安装),以获得最佳并行计算能力。
  2. 如果有 6G 显存,则需要安装与显卡版本对应的 cuda,之后再安装与 cuda 版本对应的 pytorch。网上有很多安装 cuda 和 pytorch 的教程,这里不在赘述。(使用 CPU 运行的同学跳过步骤 2)
  3. 安装相关依赖,在 …/ChatGLM/ 目录下打开命令行终端,输入
    pip install -r requirements.txt
    按回车后,pip 就自动下载和安装相关依赖库了。

4.3 启动 demo 程序

本节内容与 3.2 节内容基本相同,参考 3.2 节的部分内容即可,这里不再赘述。请注意:↓↓↓
与 3.2 节不同的是,3.2.1 的步骤 2 和 3.2.2 的步骤 3 直接忽略即可,因为模型已经量化过,不需要重复量化。

五、华为 CodeLab 免费 GPU 平台部署 ChatGLM-6B-int4(CPU版)

5.1 前言

虽然 ChatGLM-6B-int4 模型只需要 6G 内存或显存,但是可能对一些想尝试的同学还是有一定困难。所以这里推荐华为云 ModelArts 平台下的 CodeLab,类似于谷歌的 colab,提供免费的最高 64G 内存 + 16G 显存。在这里插入图片描述

5.2 在 CodeLab 上使用 CPU 部署

  1. 打开 ModelArts 控制台页面,注册账号并登陆。网址:https://console.huaweicloud.com/modelarts/?region=cn-north-4#/dashboard

  2. 找到控制台页面【总览】下方的【开发工具】,点击 CodeLab 下方的【立即体验】。随后会跳转到 CodeLab 页面并开始加载资源。在这里插入图片描述

  3. 导入 ChatGLM-6B 相关代码文件:在加载好的 CodeLab 上方点击【Git】-【Clone a Repository】,在弹出的窗口中输入 https://github.com/THUDM/ChatGLM-6B.git,则 demo 等代码文件就克隆到 CodeLab 了。可以看到在左侧文件管理中多出了 ChatGLM-6B 的文件夹。

  4. 下载 ChatGLM-6B-int4 模型:打开 Huggingface 模型文件页面(https://huggingface.co/THUDM/chatglm-6b-int4/tree/main),分别复制每个文件的下载地址,在 ChatGLM-6B 文件夹下新建 model 文件夹,利用 wget 下载地址 在命令行终端分别把模型文件下载到 model 文件夹中。

  5. 安装相关依赖:命令行中输入指令 pip install protobuf==3.20.0 transformers==4.26.1 icetk cpm_kernels ,即可完成安装。

  6. 运行 demo 代码:双击打开编辑 ChatGLM-6B 文件夹下的 cli_demo.py 文件,把第 5、6 行改为如下形式:

tokenizer = AutoTokenizer.from_pretrained("model", trust_remote_code=True)
model = AutoModel.from_pretrained("model", trust_remote_code=True).float()

随后,在 ChatGLM-6B 下命令行输入 python cli_demo.py 即可运行 demo 程序。

5.3 提示

  1. CodeLab 每过一个小时需要确认一次,否则会停止运行;
  2. CodeLab 每三天需要使用一次,否则资源会被回收,需要重新部署;
  3. 本案例为部署 CPU 进行模型推理,生成速度较慢;大家可以尝试安装 GPU 版 pytorch 进行部署,我尝试的 GPU 版本多多少少有各种问题,所以只出了 CPU 版教程。也希望有 GPU 部署成功的可以留言讨论学习一下;
  4. 上一节步骤 4 下载模型文件可以进一步优化,比如直接在 demo 代码默认 HuggingFace 下载,但是博主这里失败了;
  5. CodeLab 还有其他要求或者文件的重置说明,请自行查阅。

六、小结

经过一段时间对 ChatGLM-6B、文心一言和 ChatGPT 的使用后,前二者在文字对话上与 ChatGPT 差距已经不大了,在代码生成能力上还有一定差距,但是都好过 GPT-3.5。
文心一言在大部分情况下比 ChatGLM-6B 好一些,不过要注意 ChatGLM-6B 只有 60 亿参数,而且可以单卡部署,这已经是很大的进步了,所以我对 ChatGLM 的发展还是非常看好的,官方也说过除了 int4 量化,还会进一步压缩模型。
总的来说,ChatGLM-6B 在同参数量下可以碾压其他对话模型,而且可以部署到个人电脑上,或者用华为的免费 GPU。通过几天的体验,ChatGLM-6B 是对话模型里非常让人惊喜的了,所以推荐大家可以部署玩玩。甚至可以考虑给嵌入式设备部署一波,也期待官方的进一步极致压缩!
最后也祝 ChatGLM 和 文心一言可以进一步加油,最近的体验也感受到官方每天的更新和进步了,说明态度还是非常积极的。

Logo

长江两岸老火锅,共聚山城开发者!We Want You!

更多推荐