试试本地搭建AI模型-ChatGLM-6B(4)

上面我们已经完成了,部署所需要的所有环境配置,接下来就开始部署ChatGLM-6B模型吧!

章节

下载官方代码,安装Python依赖的库

首先,我们需要从GitHub上下载ChatGLM的requirements.txt来帮助我们安装依赖的库。

下载地址:github.com/THUDM/ChatG...

下载完成后我们进入项目内,找到requirements.txt,这个文件记录了ChatGLM-6B依赖的Python库及版本。进入cmd,执行以下命令:

复制代码
pip install -r requirements.txt

下载INT4量化后的预训练结果文件

在上述的依赖环境安装完毕之后,大家接下来就要下载预训练结果。

INT4量化的预训练文件下载地址:huggingface.co/THUDM/chatg...

需要注意的是,在GitHub上,官方提供了模型在清华云上的下载地址,但是那个只包含预训练结果文件,即bin文件,但实际上ChatGLM-6B的运行需要模型的配置文件,即config.json等,如下图所示:

因此建议大家全部从HuggingFace上下载所有文件到本地。上述文件全部下载之后保存到本地的一个目录下即可,我们保存在 E:\Desktop\AI\glm-train-data\model

运行ChatGLM-6B模型

01.确认好自己本地模型路径并修改路径格式:

E:\Desktop\AI\glm-train-data\model

02.解决No compiled kernel found问题

模型自动编译会报错,所以我们需要提前手动对模型文件进行编译:

找到我们模型存放的地址,进入cmd执行以下命令(注意:gcc上述文章有介绍):

ini 复制代码
gcc -fPIC -pthread -fopenmp -std=c99 quantization_kernels.c -shared -o quantization_kernels.so
gcc -fPIC -pthread -fopenmp -std=c99 quantization_kernels_parallel.c -shared -o quantization_kernels_parallel.so

如下图所示即为运行成功

大家可以看到多了2个编译后的文件

03.使用cpu运行模型

  • 进入cmd
  • 输入python,进入python环境
  • 执行以下指令(模型路径更换自己的本地路径)
ini 复制代码
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("E:\Desktop\AI\glm-train-data\model", trust_remote_code=True, revision="")
model = AutoModel.from_pretrained("E:\Desktop\AI\glm-train-data\model",trust_remote_code=True, revision="").float()
model = model.quantize(bits=4, kernel_file="E:\Desktop\AI\glm-train-data\model\quantization_kernels.so")
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)

经过漫长的等待后,执行结束!cpu模式训练时间太长,基本可以放弃

04.使用GPU版本运行

上面cuda,torch等环境都是为了GPU版本的运行而准备(注意:提前看自己的显存!)

  • 进入cmd
  • 输入python,进入python环境
  • 执行以下指令(模型路径更换自己的本地路径)
ini 复制代码
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("E:\Desktop\AI\glm-train-data\model", trust_remote_code=True, revision="")
model = AutoModel.from_pretrained("E:\Desktop\AI\glm-train-data\model", trust_remote_code=True, revision="").half().cuda()
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)

很多我们就运行成功啦!

当然也会出现以下情况😭,显存不足!!!!

这种情况只好尝试清理显存占用,如果还不行,就只能使用缓慢的cpu模式调试或者更换机器啦!

  • 查看显存情况 nvidia-smi
  • 释放显存 torch.cuda.empty_cache()
  • 总结

01.GPU显存占用率和存入的数据尺寸成正相关,越大的数据占用显存越多

02.只要使用了GPU,就至少会占x xx M的显存,且这部分显存无法被释放

03.当一块内存不再被变量所引用时,这块内存就由激活内存转为失活内存,但它仍然存在于这个数据队列中

04.当数据队列达到某个阈值时,CUDA会触发垃圾回收机制,清理失活内存

05.运行torch.cuda.empty_cache()可以手动清理失活内存

相关推荐
程序员三藏3 小时前
接口测试及常用接口测试工具总结
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
小二·5 小时前
Python Web 开发进阶实战 :AI 原生数字孪生 —— 在 Flask + Three.js 中构建物理世界实时仿真与优化平台
前端·人工智能·python
Bony-5 小时前
Go语言垃圾回收机制详解与图解
开发语言·后端·golang
hmywillstronger6 小时前
【Rhino】【Python】 查询指定字段并cloud标注
开发语言·python
Amumu121386 小时前
Vue组件化编程
前端·javascript·vue.js
We་ct6 小时前
LeetCode 6. Z 字形变换:两种解法深度解析与优化
前端·算法·leetcode·typescript
dyyx1116 小时前
如何从Python初学者进阶为专家?
jvm·数据库·python
二十雨辰6 小时前
[python]-函数
开发语言·python
CryptoRzz6 小时前
如何高效接入日本股市实时数据?StockTV API 对接实战指南
java·python·kafka·区块链·状态模式·百度小程序
小二·7 小时前
Python Web 开发进阶实战(终章):从单体应用到 AI 原生生态 —— 45 篇技术演进全景与未来开发者生存指南
前端·人工智能·python