ubuntu22.04CPU部署ChatGLM笔记

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响应速度和运行内存消耗

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值