ubuntu22.04CPU部署ChatGLM笔记

news/2024/11/16 12:03:09/

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


http://www.ppmy.cn/news/470595.html

相关文章

高性能通信库——nanomsg(含交叉编译)

一、nanomsg介绍 NanoMsg是一个Socket的通讯库&#xff0c;使用C语言编写实现的&#xff0c;这样就可以适用于多种操作系统&#xff0c;而且几乎不需要什么依赖&#xff0c;可扩展并且能易于使用。Nanomsg提供了几种常见的通信模式 &#xff08; 也称为“可扩展性协议” &#…

UWB定位的两种解法

UWB(Ultra-Wideband)技术是一种短脉冲无线电技术(短脉冲意味着信号的带宽很大&#xff0c;因此称为超宽带)&#xff0c;其应用非常广泛&#xff0c;其中之一就是室内定位&#xff0c;通过计算信号传播的时间差&#xff0c;可以得到标签和基站之间的距离,如果有足够多的基站&…

无法安装打印机驱动或者扫描仪驱动

安装驱动失败&#xff0c;尝试使用驱动精灵修复相关的系统驱动&#xff0c;修复后顺利安装打印驱动

扫描机驱动备份

扫描机型号驱动下载地址KODAK i2400&#xff0c;i2420&#xff0c;i2600&#xff0c;i2620https://resources.kodakalaris.com/docimaging/drivers/i2000March2018/InstallSoftware_i2000_v5.1.exeKODAK ScanMate i1150https://resources.kodakalaris.com/docimaging/drivers/i…

扫描器s-scan下载安装功能应用

扫描器&#xff0c;s-scan 配置&#xff0c;扫描网段&#xff0c;扫描什么&#xff0c;扫描原理&#xff0c;扫描地址&#xff0c;端口等&#xff0c;软件怎么用 参数设置 点击"设置"菜单&#xff0c;选择"扫描参数"或者直接点击工具栏的蓝色按钮进入扫…

驱动开发:内核特征码扫描PE代码段

在笔者上一篇文章《驱动开发&#xff1a;内核特征码搜索函数封装》中为了定位特征的方便我们封装实现了一个可以传入数组实现的SearchSpecialCode定位函数&#xff0c;该定位函数其实还不能算的上简单&#xff0c;本章LyShark将对特征码定位进行简化&#xff0c;让定位变得更简…

【操作系统】设备驱动

本文为学习李治军老师《操作系统原理、实现与实践》第八章的总结&#xff0c;主要讲述显示器、键盘设备驱动。 参考资料&#xff1a; 哈工大李治军老师操作系统mooc视频&#xff1b;实践项目解析。 第八章 设备驱动 设备驱动的基本原理 外设工作原理 从CPU开始&#xff1a;…

UOS上扫描仪驱动笔记

之前自己总结了打印机驱动以及打印连接协议等等&#xff0c;但对扫描仪一直没怎么注意&#xff0c;一是客户扫描仪用的少&#xff0c;二是遇到的客户扫描仪都能正常驱动&#xff0c;下载个扫描易就搞定了&#xff0c;尤其是很多一体机官网也带了驱动&#xff0c;但实际上现在的…