陕煤化工建设集团网站,山东卓创 网站建设,seo网站优化流程,免费制作表白网页大家好#xff0c;我是微学AI#xff0c;今天教你们本地CPU环境部署清华大ChatGLM-6B模型#xff0c;利用量化模型#xff0c;每个人都能跑动大模型。ChatGLM-6B是一款出色的中英双语对话模型#xff0c;拥有超过62亿个参数#xff0c;可高效地处理日常对话场景。与GLM-1…大家好我是微学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_codeTrue)
model AutoModel.from_pretrained(THUDM/chatglm-6b, trust_remote_codeTrue).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_codeTrue)
model AutoModel.from_pretrained(THUDM/chatglm-6b-int4, trust_remote_codeTrue).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.c和quantization_kernels_parallel.c quantization_kernels.c文件
void compress_int4_weight(void *weight, void *out, int n, int m)
{for(int i0;in*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 i0;in;i)for(int j0;jm;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 i0;in;i){for(int j0;jm;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 -stdc99 quantization_kernels.c -shared -o quantization_kernels.so
gcc -fPIC -pthread -fopenmp -stdc99 quantization_kernels_parallel.c -shared -o quantization_kernels_parallel.so
没有报错说明运行成功目录下看到下面两个新的文件quantization_kernels_parallel.so和quantization_kernels.so。说明编译成功后面我们手动载入,这里要多加一行代码
model model.quantize(bits4, kernel_fileD:..\\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%左右可以做简单的任务。