赞
踩
近期,清华开源了其中文对话大模型的小参数量版本 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
把模型部署在本地,需要在 Python 环境下安装影响的库,此外还需要针对 GPU 安装相应版本的 cuda 和对应的 Pytorch。之后修改 demo 文件就可以启动运行了。
pip install -r requirements.txt
上述三个步骤完成后,部署的环境就搭建完成了。下面仅需要稍微修改 demo 的代码,或者自己根据 demo 编写程序,就可以开始使用 ChatGLM-6B 了!
在 …/ChatGLM/ 目录下有两个 demo 代码:(1)cli_demo.py,直接在命令行中输入进行问答;(2)web_demo.py,利用 gradio 库生成问答网页。
第一个 demo 方便,还可以清除历史记录,但是在命令行(尤其是 Linux 命令行)中容易输入一些奇怪的字符,这会使得程序意外停止;第二个 demo 界面简单,但是不能清除记录,而且如果在没有图形界面的 Linux 系统服务器中使用,需要端口映射到本地电脑,再打开浏览器访问。个人建议,如果有能力,可以自己综合二者的有点自己编写,比如使用 jupyter 就可以很好结合二者,还可以以 markdown 渲染输出,使得代码或者公式更好看。
# 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()
python cli_demo.py
pip install gradio
# 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()
python web_demo.py
ChatGLM-6B-INT4 是 ChatGLM-6B 量化后的模型权重。具体的,ChatGLM-6B-INT4 对 ChatGLM-6B 中的 28 个 GLM Block 进行了 INT4 量化,没有对 Embedding 和 LM Head 进行量化。量化后的模型理论上 6G 显存(使用 CPU 即内存) 即可推理,具有在 嵌入式设备(如树莓派)上运行的可能。
pip install -r requirements.txt
本节内容与 3.2 节内容基本相同,参考 3.2 节的部分内容即可,这里不再赘述。请注意:↓↓↓
与 3.2 节不同的是,3.2.1 的步骤 2 和 3.2.2 的步骤 3 直接忽略即可,因为模型已经量化过,不需要重复量化。
虽然 ChatGLM-6B-int4 模型只需要 6G 内存或显存,但是可能对一些想尝试的同学还是有一定困难。所以这里推荐华为云 ModelArts 平台下的 CodeLab,类似于谷歌的 colab,提供免费的最高 64G 内存 + 16G 显存。
打开 ModelArts 控制台页面,注册账号并登陆。网址:https://console.huaweicloud.com/modelarts/?region=cn-north-4#/dashboard
找到控制台页面【总览】下方的【开发工具】,点击 CodeLab 下方的【立即体验】。随后会跳转到 CodeLab 页面并开始加载资源。
导入 ChatGLM-6B 相关代码文件:在加载好的 CodeLab 上方点击【Git】-【Clone a Repository】,在弹出的窗口中输入 https://github.com/THUDM/ChatGLM-6B.git
,则 demo 等代码文件就克隆到 CodeLab 了。可以看到在左侧文件管理中多出了 ChatGLM-6B 的文件夹。
下载 ChatGLM-6B-int4 模型:打开 Huggingface 模型文件页面(https://huggingface.co/THUDM/chatglm-6b-int4/tree/main),分别复制每个文件的下载地址,在 ChatGLM-6B 文件夹下新建 model 文件夹,利用 wget 下载地址
在命令行终端分别把模型文件下载到 model 文件夹中。
安装相关依赖:命令行中输入指令 pip install protobuf==3.20.0 transformers==4.26.1 icetk cpm_kernels
,即可完成安装。
运行 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 程序。
经过一段时间对 ChatGLM-6B、文心一言和 ChatGPT 的使用后,前二者在文字对话上与 ChatGPT 差距已经不大了,在代码生成能力上还有一定差距,但是都好过 GPT-3.5。
文心一言在大部分情况下比 ChatGLM-6B 好一些,不过要注意 ChatGLM-6B 只有 60 亿参数,而且可以单卡部署,这已经是很大的进步了,所以我对 ChatGLM 的发展还是非常看好的,官方也说过除了 int4 量化,还会进一步压缩模型。
总的来说,ChatGLM-6B 在同参数量下可以碾压其他对话模型,而且可以部署到个人电脑上,或者用华为的免费 GPU。通过几天的体验,ChatGLM-6B 是对话模型里非常让人惊喜的了,所以推荐大家可以部署玩玩。甚至可以考虑给嵌入式设备部署一波,也期待官方的进一步极致压缩!
最后也祝 ChatGLM 和 文心一言可以进一步加油,最近的体验也感受到官方每天的更新和进步了,说明态度还是非常积极的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。