ChatGLM官方Github链接 https://github.com/THUDM/ChatGLM-6B
我就是一步步按照官方部署教程完成ChatGLM部署。对于官方文档里面详细描述的部署步骤不进一步赘述。这里主要记录几个自己遇到的问题
1 安装环境及依赖
ChatGLM部署需要安装python, pytorch等环境,为了防止现有电脑里的python环境版本不符合出现问题,我们可以使用anaconda管理多个独立的python环境
这里我们使用占用内存更小的miniconda
下载地址:https://docs.conda.io/en/latest/miniconda.html#linux-installers
Miniconda自带python,注意下载python版本在3.10
下载安装miniconda后,系统默认处于base环境,我们创建新环境名为chatglm
conda create -n chatglm --clone base
conda activate chatglm
官方github里的requirements.txt文件列出了ChatGLM所有依赖及版本,下载官方guthub库到本地后,执行
pip install -r requirements.txt
这里如果下载速度慢可以将pip更换为国内源,这里我选择了清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/
2 下载模型到本地
在官方的原示例中,模型文件由transformer远程下载,速度会非常慢(ChatGLM完整参数文件约20G)。我们可以将模型下载到本地,然后调用本地模型
下载模型实现:
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm-6b
完整模型下载地址
https://cloud.tsinghua.edu.cn/d/fb9f16d6dc8f482596c2/
这里我的电脑性能一般,跑不动完整模型,因此我下载的是int4量化后模型,下载地址如下:
https://cloud.tsinghua.edu.cn/d/674208019e314311ab5c/
将模型参数文件和模型实现放在同一文件夹,用参数文件夹里的ice_text.model覆盖模型实现里的同文件。模型实现里的pytorch_model.bin文件也用参数文件里的进行覆盖。
3 调用模型
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained(“THUDM/chatglm-6b”, trust_remote_code=True)
model = AutoModel.from_pretrained(“THUDM/chatglm-6b”, trust_remote_code=True).half().cuda()
model = model.eval()
response, history = model.chat(tokenizer, “你好”, history=[])
print(response)
你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。
response, history = model.chat(tokenizer, “晚上睡不着应该怎么办”, history=history)
print(response)
晚上睡不着可能会让你感到焦虑或不舒服,但以下是一些可以帮助你入睡的方法:
这是官方给出的调用代码和示例。在我们下载好模型文件后,将里面的"THUDM/chatglm-6b"改为本地模型的地址。另外官方建议指定运行的模型版本。我们在from_pretrained()方法中第二个参数添加revision=“v1.1.0”
4 解决内存不足问题
尽管官方文档上说明ChatGLM int4模型只需要6G的运行内存,但是在运行上一步的模型时我电脑8G的内存依然跑满导致进程被终止。解决该问题一个临时方法是增加电脑分批的swap区域。swap为linux的交换分区,为电脑RAM占满时临时用硬盘空间分配的虚拟内存。这里我在原有2.1G基础上手动分批了额外1.5G的swap后模型可以跑通。
查看当前swap空间
free -m
增加swap文件
sudo fallocate -l <大小> <文件路径>
sudo chmod 600 <文件路径>
启用新swap
sudo mkswap <文件路径>
sudo swapon <文件路径>
在我自己情况下,ChatGLM只有在加载参数文件过程中会占用大量的内存(差不多10G以上),在模型加载完成后占用内存会稳定在6G,但是根据官方文档介绍随着对话增加内存占用也会逐步增加。
由于我电脑没有GPU,我使用CPU运行ChatGLM
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained(“THUDM/chatglm-6b”, trust_remote_code=True)
model = AutoModel.from_pretrained(“THUDM/chatglm-6b”, trust_remote_code=True).float()
model = model.eval()
应该受电脑性能限制,ChatGLM对话生成速度很慢,差不多一分钟只能打几个字。另外在我尝试英文对话时,模型出现了官方说明过的“英文中出现中文问题”。不过我本地部署ChatGLM过程成功。下一步我会尝试一些基于ChatGLM的加速项目以提高ChatGLM响应速度和运行内存消耗