简介

ChatGLM2-6B是清华大学开源的一款支撑中英双语的对话言语模型。经过了 1.4T 中英标识符的预练习与人类偏好对齐练习,具有62 亿参数的 ChatGLM2-6B 现已能生成相当符合人类偏好的答复。结合模型量化技术,用户能够在消费级的显卡上进行本地布置(INT4 量化级别下最低只需 6GB 显存)。

使用办法

硬件需求

量化等级 最低GPU(对话) 最低GPU(微调)
FP16(标准) 13GB 14GB
INT8 8GB 9GB
INT4 6GB 7GB

假如没有 GPU 硬件,也能够在 CPU 上进行对话,可是相应速度会更慢。需求大约 32GB 内存。

装置环境

下载仓库
gitclonehttps://github.com/THUDM/ChatGLM2-6B
cdChatGLM2-6B
创立虚拟环境
python-mvenvvenv
激活虚拟环境
  • Windows 体系
venv\Script\activate
  • macOS/Linux 体系
sourcevenv/bin/activate
装置依赖
pipinstall-rrequirements.txt-ihttps://pypi.douban.com/simple

加载模型

默许情况下,程序会自动下载模型。奈何模型太大,网络欠好的情况下花费时间过长。建议提前下载,从本地加载模型。

  • 代码地址
  • 模型地址

将下载的THUDM文件夹放在ChatGLM2-6B文件夹下。文件清单如下所示:

ChatGLM2-6B
│
├──THUDM
│├──chatglm2-6b
││├──MODEL_LICENSE
││├──README.md
││├──config.json
││├──configuration_chatglm.py
││├──modeling_chatglm.py
││├──pytorch_model-00001-of-00007.bin
││├──pytorch_model-00002-of-00007.bin
││├──pytorch_model-00003-of-00007.bin
││├──pytorch_model-00004-of-00007.bin
││├──pytorch_model-00005-of-00007.bin
││├──pytorch_model-00006-of-00007.bin
││├──pytorch_model-00007-of-00007.bin
││├──pytorch_model.bin.index.json
││├──quantization.py
││├──tokenization_chatglm.py
││├──tokenizer.model
││└──tokenizer_config.json
│└──chatglm2-6b-int4
│├──MODEL_LICENSE
│├──README.md
│├──config.json
│├──configuration_chatglm.py
│├──modeling_chatglm.py
│├──pytorch_model.bin
│├──quantization.py
│├──tokenization_chatglm.py
│├──tokenizer.model
│└──tokenizer_config.json

GPU/CPU布置

GPU布置

默许情况下,程序以根据GPU运转。

  1. 检查显卡信息
nvidia-smi

在个人电脑上部署ChatGLM2-6B中文对话大模型

image

上图表明本机显卡的显存为8GB,最高支撑CUDA的版别是11.2。

  1. 下载装置cuda-toolkit东西

在这儿选择不高于上述CUDA的版别。

在个人电脑上部署ChatGLM2-6B中文对话大模型

image

在个人电脑上部署ChatGLM2-6B中文对话大模型

image

按提示装置cuda-toolkit东西。

wgethttps://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run
sudoshcuda_11.2.0_460.27.04_linux.run

运转以下指令,检查cuda是否可用。

python-c"importtorch;print(torch.cuda.is_available());"

回来True则表明可用。

api.pycli_demo.pyweb_demo.pyweb_demo.py等脚本中,模型默许以 FP16 精度加载,运转模型需求大约 13GB 显存。指令如下:

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

假如 GPU 显存有限,能够尝试以量化办法加载模型,使用办法如下:

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

模型量化会带来一定的性能丢失,经过测验,ChatGLM2-6B 在 4-bit 量化下仍然能够进行天然流通的生成。

假如内存不足,能够直接加载量化后的模型:

model=AutoModel.from_pretrained("THUDM/chatglm2-6b-int4",trust_remote_code=True).cuda()
CPU布置

假如没有 GPU 硬件的话,也能够在 CPU 上进行对话,可是对话速度会很慢,需求32GB内存(量化模型需求5GB内存)。使用办法如下:

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

假如内存不足,能够直接加载量化后的模型:

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

在 CPU 上运转量化后的模型,还需求装置 gcc 与 openmp。多数 Linux 发行版默许已装置。关于 Windows ,可在装置TDM-GCC时勾选 openmp。在 MacOS 上请参考这儿。

运转程序

指令行
pythoncli_demo.py

程序会在指令行中进行交互式的对话,在指令行中输入指示并回车即可生成回复,输入 clear 能够清空对话前史,输入 stop 终止程序。如下所示:

在个人电脑上部署ChatGLM2-6B中文对话大模型

image

网页版A
pythonweb_demo.py

程序会运转一个 Web Server,并输出地址。在浏览器中翻开输出的地址即可使用。最新版 Demo 实现了打字机效果,速度体会大大提升。注意,因为国内 Gradio 的网络拜访较为缓慢,启用demo.queue().launch(share=True, inbrowser=True)时一切网络会经过 Gradio 服务器转发,导致打字机体会大幅下降,现在默许启动办法现已改为share=False,如有需求公网拜访的需求,能够从头修改为share=True启动。如下所示:

在个人电脑上部署ChatGLM2-6B中文对话大模型

image

网页版B

装置streamlit_chat模块。

pipinstallstreamlit_chat-ihttps://pypi.douban.com/simple

运转网页。

streamlitrunweb_demo2.py

如下所示:

在个人电脑上部署ChatGLM2-6B中文对话大模型

image

API布置

装置fastapiuvicorn模块。

pipinstallfastapiuvicorn-ihttps://pypi.douban.com/simple

运转API。

pythonapi.py

默许布置在本地的 8000 端口,经过 POST 办法进行调用。

curl-XPOST"http://127.0.0.1:8000"\
-H'Content-Type:application/json'\
-d'{"prompt":"你好","history":[]}'

得到回来值为

{
"response":"你好!我是人工智能助手ChatGLM-6B,很快乐见到你,欢迎问我任何问题。",
"history":[["你好","你好!我是人工智能助手ChatGLM-6B,很快乐见到你,欢迎问我任何问题。"]],
"status":200,
"time":"2023-06-3014:51:00"
}