手把手教你本地CPU环境部署清华大模型ChatGLM-6B,利用量化模型,本地即可开始智能聊天,达到ChatGPT的80%

news/2024/11/23 15:51:58/

大家好,我是微学AI,今天教你们本地CPU环境部署清华大ChatGLM-6B模型,利用量化模型,每个人都能跑动大模型。ChatGLM-6B是一款出色的中英双语对话模型,拥有超过62亿个参数,可高效地处理日常对话场景。与GLM-130B模型相比,ChatGLM-6B在对话场景处理能力方面表现更加卓越。此外,在使用体验方面,ChatGLM-6B采用了模型量化技术和本地部署技术,为用户提供更加便利和灵活的使用方式。值得一提的是,该模型还能够在单张消费级显卡上顺畅运行,速度较快,是一款非常实用的对话模型。

ChatGLM-6B是清华开发的中文对话大模型的小参数量版本,目前已经开源了,可以单卡部署在个人电脑上,利用 INT4 量化还可以最低部署到 6G 显存的电脑上,在 CPU 也可以运行起来的。

项目地址:mirrors / THUDM / chatglm-6b · GitCode

第1步:下载:

git clone https://gitcode.net/mirrors/THUDM/chatglm-6b.git

第2步:进入ChatGLM-6B-main目录下,安装相关依赖

pip install -r requirements.txt

其中 torch安装CPU版本即可。

第3步:打开ChatGLM-6B-main目录的web_demo.py文件,源代码:

from transformers import AutoModel, AutoTokenizer
import gradio as gr
import mdtex2htmltokenizer = 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()

这个是在GPU版本下的代码,现在改为CPU版本下的代码:

from transformers import AutoModel, AutoTokenizer
import gradio as gr
import mdtex2htmltokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).float()
model = model.eval()

模型下载改成THUDM/chatglm-6b-int4,也就是int4量化版本。模型量化到int4是一种将神经网络模型中的参数从浮点数格式调整为4位精度的整数格式的技术,可以显著提高硬件设备的效率和速度,并且适用于需要在低功耗设备上运行的场景。

INT4量化的预训练文件下载地址:https://huggingface.co/THUDM/chatglm-6b-int4/tree/main

 第4步:kernel的编译

CPU版本的安装还需要安装好C/C++的编译环境。这里大家可以安装TDM-GCC。

下载地址:https://jmeubank.github.io/tdm-gcc/,大家选择选取TDM-GCC 10.3.0 release下载安装。特别注意:安装的时候在选项gcc选项下方,勾选openmp,这个很重要,踩过坑,直接安装的话后续会报错。

 安装完在cmd中运行”gcc -v”测试是否成功即可。

安装gcc的目的是为了编译c++文件,quantization_kernels.cquantization_kernels_parallel.c

 quantization_kernels.c文件:

void compress_int4_weight(void *weight, void *out, int n, int m)
{for(int i=0;i<n*m;i++){(*(unsigned char*)(out)) = ((*(unsigned char*)(weight)) << 4);weight += sizeof(char);(*(unsigned char*)(out)) |= ((*(unsigned char*)(weight)) & 15);weight += sizeof(char);out += sizeof(char);}
}void extract_int8_weight_to_float(void *weight, void *scale_list, void *out, int n, int m)
{for(int i=0;i<n;i++)for(int j=0;j<m;j++)(*(float*)(out + sizeof(float) * (i * m + j))) = (*(float*)(scale_list + sizeof(float) * i)) * (*(char*)(weight + sizeof(char) * (i * m + j)));
}void extract_int4_weight_to_float(void *weight, void *scale_list, void *out, int n, int m)
{for(int i=0;i<n;i++){for(int j=0;j<m;j++){(*(float*)(out)) = (*(float*)(scale_list)) * ((*(char*)(weight)) >> 4);out += sizeof(float);(*(float*)(out)) = (*(float*)(scale_list)) * (((char)((*(unsigned char*)(weight)) << 4))>> 4);out += sizeof(float);weight += sizeof(char);}scale_list += sizeof(float);}
}

以上C++程序对于每个8位的输入权重值,都会被压缩成一个4位的输出权重值,并存储到指定的输出数组中。这种权重量化方式可以有效减小模型的内存占用,提高模型的推理速度。

 第5步:运行web_demo.py文件

注意如果大家在运行中遇到了错误提示,说明两个文件编译出问题。我们可以手动去编译这两个文件:即在上面下载的D:..\chatglm-6b-int4本地目录下进入cmd,运行两个编译命令:

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

没有报错说明运行成功,目录下看到下面两个新的文件:quantization_kernels_parallel.soquantization_kernels.so。说明编译成功,后面我们手动载入,这里要多加一行代码

model = model.quantize(bits=4, kernel_file="D:..\\chatglm-6b-int4\\quantization_kernels.so")

如果原来代码没有错可以去掉这行。

 第6步:web_demo.py文件运行成功

 出现地址就大功告成了。

 第7步:测试问题

1.鲁迅和周树人是同一个人吗?

ChatGLM的结果:

 ChatGPT的结果:

 2.树上9只鸟,用枪打掉1只,还剩几只?

ChatGLM的结果:

 ChatGPT的结果:

ChatGLM在某些中文问题和常识问题上超过ChatGPT,但是总体上是不如ChatGPT,他在总结任务上,代码编写上不如ChatGPT,总体达到ChatGPT的80%左右,可以做简单的任务。


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

相关文章

【软件工程】UML序列图

一.概述 序列图&#xff08;时序图&#xff09;是一种软件工程行化建模方法&#xff0c;用于可视化系统或应用程序中多个对象之间 的交互。在序列图中&#xff0c;每个对象都表示为竖直线&#xff0c;对象之间的消息则表示为水平箭头 从一个对象指向另一个对象。 序列图可以…

好用免费的电脑摄像头录视频软件分享!

案例&#xff1a;如何录制电脑的摄像头&#xff1f; 【这周我需要开一个视频会议&#xff0c;会议十分重要&#xff0c;我希望把它录制下来。有没有小伙伴知道&#xff0c;电脑摄像头如何录制&#xff1f;求一个可以快速上手的方法&#xff01;】 在现如今的数字化时代&#…

TF卡目录显示文件夹变0字节的方法

关于电脑上的目录打不开是什么原因&#xff0c;电脑目录打不开是什么原因这个许多人还不清楚&#xff0c;今天小编来为大家解答目录打不开状况&#xff0c;此刻让好多人一起来瞧瞧吧&#xff01; TF卡目录显示文件夹变0字节的方法 工具/软件&#xff1a;sayRecy 步骤1&#xff…

电信及互联网行业数据安全内控审计建设实践 | 盾见

文|龚磊 伴随数据安全“五法一典”出齐&#xff0c;2021年成为我国数据安全元年。各地、各行业不断加快数据安全政策体系的完善与落地执行。政企机构不断强化数据安全建设&#xff0c;共同助力网络安全行业高景气度维系。 2021年6月&#xff0c;网络安全等保测评报告模板新版发…

备战奥运我

题目描述 奥运会要到了&#xff0c;小明在拼命练习游泳准备参加游泳比赛。 这一天&#xff0c;小明给自己的游泳时间做了精确的计时&#xff08;本题中的计时都按 24 小时制计算&#xff09;&#xff0c;它发现自己从 a 时 b 分一直游泳到当天的 c 时 d 分&#xff0c;请你帮小…

移动云瞄准“一流云商”焕新出发

近期&#xff0c;中国移动发布《2022年度业绩》报告。财报数据显示&#xff1a;移动云收入达503 亿元人民币&#xff0c;同比增长 108.1%&#xff0c;连续三年实现三位数增长&#xff0c;综合实力迈入国内业界第一阵营。 随着数字中国建设的深入推进&#xff0c;政企的数字化转…

【Python】丘比特之箭,一箭穿心,快去发给你心仪的人叭~

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,YOLO领域博主爱笑的男孩。擅长深度学习,活动,YOLO,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个人简…

云HIS(二级医院,乡镇医院,民营医院,标准化HIS医院信息管理系统源码)

传统 HIS&#xff08;基于医院信息系统&#xff09; 和云 HIS&#xff08;基于云计算的医院信息系统&#xff09;各有优缺点&#xff0c;选择哪种系统需要根据具体情况进行权衡。 传统 HIS 系统通常由医院自行开发和维护&#xff0c;适用于医院内部信息化程度较高、数据安全性…