本文正在参与「金石方案」

前语

假如能够本地自己建立一个ChatGPT的话,练习一个归于自己知识库体系的人工智能AI对话体系,那么能够高效的处理应对所属范畴的专业知识,乃至参加职业思想的认识,练习出能够结合职业范畴知识高效产出的AI。这必定是十分高效的生产力东西,且本地布置能够维护个人数据隐私,能够内网建立办公运用也十分的方便。

而对于ChatGLM来说最大的长处便是本地能快速布置且需求资源较比与ChatGPT相当低,还要什么自行车,够用就好。乃至能够在一些功能较高的服务器单点布置,INT4 量化级别下最低只需 6GB 显存。而且我们底子不需求那么宽泛的知识面,只需求垂直一个知识范畴深度就满足应对较多事务场景,故ChatGLM确实是较好的二次开发根底东西。

那么不持续发表意见了,本地布置ChatGLM还是会遇到较多问题,主张各位先弄清楚本地开发环境以及电脑配置再依据我给出的组件兼容表对照,不同的配置和环境需求选用不同的装置策略。当然我也只要一台电脑布置许多情况没遇到也不知道怎么处理,若是我们依据我的文章布置遇到困难请在评论区或许私信奉告我,谢谢各位的支撑。

布置依赖

1.硬件需求

这是ChatGLM的开源项目:github.com/Fanstuck/Ch…

手把手教你搭建自己本地的ChatGLM

2.环境需求

再看依赖文件requirements.txt:

手把手教你搭建自己本地的ChatGLM

许多人这儿就现已开始pip install -r requirements.txt,但是这儿需求注意的是torch下载会出问题,而且大约率下载的会是cpu版别。我这儿不主张直接pip install,对于有GPU的同学来说必定下载GPU版别的torch最优,且不清楚自己cuda的版别下很简单下载的torh和cudnn版别不兼容,所以这儿独自说一下torch该怎么装置适宜的版别。

首要先看一下NVIDIA支撑最高的cuda版别:

cmd输入nvidia-smi就能够看到:

手把手教你搭建自己本地的ChatGLM

这儿显现我的cuda版别为11.7,下载比这低的版别就好了。

但是这儿需求注意cuda版别和torch版别是对应的: pytorch历史版别下载:

pytorch.org/get-started…,只需低于11.7版别的torch都是能够的。

手把手教你搭建自己本地的ChatGLM

若是pip下载time out的下载wheel:download.pytorch.org/whl/torch_s…

模型下载

下载ChatGLM有两种方法,一种是通过transformers直接下载,通过调用代码就能够下载到本地,下载默许本地的目录为:

C:\Users.cache\huggingface\modules\transformers_modules

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()

当然下载太慢的话也能够在Hugging Face Hub里边下载:huggingface.co/THUDM/chatg…

不需求frok直接clone就能够了。版主还供给了不同编译后的版别可供下载,我这边就下载了现已编译后的int4版别,我的内存只要16G且显存128M很低故带不起原生模型。

手把手教你搭建自己本地的ChatGLM

这样的话文件不需求下载到C盘下面,能够自己挑选要下载的目录。 下载完成之后里边供给了两个demo能够测试,需求修改函数AutoTokenizer.from_pretrained中的THUDM/chatglm-6b,也便是pretrained_model_name_or_path更换成你下载chatGLM的目录就能够运用了。

假如你的显存配置有限的话能够挑选以量化方法加载模型,比如:

# 按需修改,目前只支撑 4/8 bit 量化
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).quantize(4).half().cuda()

模型量化会带来必定的功能损失,通过测试,ChatGLM-6B 在 4-bit 量化下仍然能够进行天然流畅的生成。

量化进程需求在内存中首要加载 FP16 格局的模型,耗费大约 13GB 的内存。假如你的内存不足的话,能够直接加载量化后的模型,仅需大约 5.2GB 的内存:

model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).half().cuda()

模型量化会带来必定的功能损失,通过测试,ChatGLM-6B 在 4-bit 量化下仍然能够进行天然流畅的生成。

量化进程需求在内存中首要加载 FP16 格局的模型,耗费大约 13GB 的内存。假如你的内存不足的话,能够直接加载量化后的模型,仅需大约 5.2GB 的内存:

model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).half().cuda()

我这边直接下载的int4模型不需求再加载整个模型了。

假如你没有 GPU 硬件的话,也能够在 CPU 上进行推理,但是推理速度会更慢。运用方法如下,需求大约 32GB 内存:

model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).float()

模型运用

以我的计算机来说往常内存就有

手把手教你搭建自己本地的ChatGLM

11G占用了,运转该模型必定会报OOM,引荐我们把一些暂时不需求的进程杀掉尽可能多的留多点内存再跑模型: 这儿引荐在终端上面运转不要用pycharm,内存更多:

手把手教你搭建自己本地的ChatGLM

运用web_demo.py能够直接在网站上面对话:

手把手教你搭建自己本地的ChatGLM

手把手教你搭建自己本地的ChatGLM
手把手教你搭建自己本地的ChatGLM

我这儿直接OOM了没有办法,我们计算机好点就没问题。