ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答
为了方便方便我们测试,我们需要进行本地化部署,本教程将进行linux服务器端进行部署,进行三种形式的部署,webui界面,命令行方式,api调用的方式,方便大家多种方式进行使用
网页端demo
命令行demo
api调用
一 .webui部署教程
1 先下载代码
git clone https://github.com/Akegarasu/ChatGLM-webui
2 使用anaconda安装虚拟环境
python版本3.10.6
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 --extra-index-url https://download.pytorch.org/whl/cu117
pip install --upgrade -r requirements.txt
cuda版本根据自己的显卡来选择,我是使用的3090
3 启动命令
python webui.py
下面的几个参数比较重要
–model-path: chatglm6b模型的地址,建议自己下载,不要使用默认的参数,会自动吓到cache里面,多机器部署的时候很麻烦
–listen: 监听端口
–port: 访问的端口号
–share: 是否使用gradio进行部署,建议不用开启
–precision: fp32(CPU only), fp16, int4(CUDA GPU only), int8(CUDA GPU only) 使用精度,根据自己部署设备的显存来选,int4占用的显存小一点
–cpu: use cpu
启动完就可以用了
二 .命令行部署
1 下载代码
git clone https://github.com/THUDM/ChatGLM-6B.git
2 使用anaconda创建虚拟环境
使用 pip 安装依赖:pip install -r requirements.txt,其中 transformers 库版本推荐为 4.27.1,但理论上不低于 4.23.1 即可。
3 启动命令
运行仓库中 cli_demo.py:
python cli_demo.py
程序会在命令行中进行交互式的对话,在命令行中输入指示并回车即可生成回复,输入 clear 可以清空对话历史,输入 stop 终止程序。
三 .api调用方式
1 下载代码
git clone https://github.com/imClumsyPanda/ChatGLM-6B-API.git
2 使用anaconda创建虚拟环境
使用 pip 安装依赖:pip install -r requirements.txt,其中 transformers 库版本推荐为 4.26.1,但理论上不低于 4.23.1 即可。
首先需要安装额外的依赖 pip install fastapi uvicorn
3 启动命令
Linux 系统请运行 chatglm_api.py
chatglm_api 脚本正常运行后,可以通过如下代码调用 ChatGLM-6B 模型来生成对话:
import requests
user_msg, history = “你好”, []
resp = requests.post(f"http://127.0.0.1:8080/predict?user_msg={user_msg}“, json=history)
if resp.status_code == 200:
response, history = resp.json()[“response”], resp.json()[“history”]
print(response)
你好?!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。
user_msg = “晚上睡不着该怎么办”
resp = requests.post(f"http://127.0.0.1:8080/predict?user_msg={user_msg}”, json=history)
if resp.status_code == 200:
response, history = resp.json()[“response”], resp.json()[“history”]
print(response)
晚上睡不着可能会让你感到焦虑或不舒服,但以下是一些可以帮助你入睡的方法:
返回数据
如果这些方法无法帮助你入睡,你可以考虑咨询医生或睡眠专家,寻求进一步的建议。
默认部署在本地的 8000 端口,通过 POST 方法进行调用
curl -X POST "http://127.0.0.1:8000" \
-H 'Content-Type: application/json' \
-d '{"prompt": "你好", "history": []}'
得到的返回值为
{
"response":"你好?!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。",
"history":[["你好","你好?!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。"]],
"status":200,
"time":"2023-03-23 21:38:40"
}
四 低成本部署
模型量化
默认情况下,模型以 FP16 精度加载,运行上述代码需要大概 13GB 显存。如果你的 GPU 显存有限,可以尝试以量化方式加载模型,使用方法如下:
# 按需修改,目前只支持 4/8 bit 量化
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).quantize(4).half().cuda()
进行 2 至 3 轮对话后,8-bit 量化下 GPU 显存占用约为 10GB,4-bit 量化下仅需 6GB 占用。随着对话轮数的增多,对应消耗显存也随之增长,由于采用了相对位置编码,理论上 ChatGLM-6B 支持无限长的 context-length,但总长度超过 2048(训练长度)后性能会逐渐下降。
如果你的内存不足的话,可以直接加载量化后的模型,仅需大概 5.2GB 的内存:
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).half().cuda()