简介
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运转。
- 检查显卡信息
nvidia-smi
image
上图表明本机显卡的显存为8GB,最高支撑CUDA的版别是11.2。
- 下载装置
cuda-toolkit
东西
在这儿选择不高于上述CUDA的版别。
image
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.py
cli_demo.py
web_demo.py
web_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 终止程序。如下所示:
image
网页版A
pythonweb_demo.py
程序会运转一个 Web Server,并输出地址。在浏览器中翻开输出的地址即可使用。最新版 Demo 实现了打字机效果,速度体会大大提升。注意,因为国内 Gradio 的网络拜访较为缓慢,启用demo.queue().launch(share=True, inbrowser=True)
时一切网络会经过 Gradio 服务器转发,导致打字机体会大幅下降,现在默许启动办法现已改为share=False
,如有需求公网拜访的需求,能够从头修改为share=True
启动。如下所示:
image
网页版B
装置streamlit_chat
模块。
pipinstallstreamlit_chat-ihttps://pypi.douban.com/simple
运转网页。
streamlitrunweb_demo2.py
如下所示:
image
API布置
装置fastapi
uvicorn
模块。
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"
}