ChatGLM3是智谱AI和清华大学KEG实验室联合发布的新一代对话预训练模型。ChatGLM3-6B是ChatGLM3系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B引入了如下特性:
ChatGLM3-6B
https://huggingface.co/THUDM/chatglm3-6b
ChatGLM3-6B-Base
https://huggingface.co/THUDM/chatglm3-6b-base
ChatGLM3-6B-32K
https://huggingface.co/THUDM/chatglm3-6b-32k
首先需要下载本仓库:
git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3
然后使用 pip 安装依赖:
pip install -r requirements.txt
其中transformers库版本推荐为 4.30.2,torch推荐使用2.0及以上的版本,以获得最佳的推理性能。
可以通过如下代码调用ChatGLM模型来生成对话:
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True, device='cuda')
model = model.eval()
response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
print(response)
cd basic_demo
python web_demo.py
cd basic_demo
python cli_demo.py
ChatGLM3实现了OpenAI格式的流式API部署,可以作为任意基于ChatGPT应用的后端,比如ChatGPT-Next-Web。可以通过运行仓库中的openai_api.py进行部署:
cd openai_api_demo
python openai_api.py
运行openai_api_request.py进行测试
cd openai_api_demo
python openai_api_request.py
使用Curl测试
curl -X POST "http://127.0.0.1:8000/v1/chat/completions" \
-H "Content-Type: application/json" \
-d "{\"model\": \"chatglm3-6b\", \"messages\": [{\"role\": \"system\", \"content\": \"You are ChatGLM3, a large language model trained by Zhipu.AI. Follow the user's instructions carefully. Respond using markdown.\"}, {\"role\": \"user\", \"content\": \"你好,给我讲一个故事,大概100字\"}], \"stream\": false, \"max_tokens\": 100, \"temperature\": 0.8, \"top_p\": 0.8}"
默认情况下,模型以FP16精度加载,运行需要大概13GB显存。如果GPU显存有限,可以尝试以量化方式加载模型,使用方法如下:
4bits 在线量化:
model = AutoModel.from_pretrained("THUDM/chatglm3-6b",trust_remote_code=True).quantize(4).cuda()
模型量化会带来一定的性能损失,经过测试,ChatGLM3-6B 在 4-bit 量化下仍然能够进行自然流畅的生成。
需要注意的是,在使用在线量化时,from_pretrained
接口需要去掉device_map="auto"
这个参数,否则会报错。
如果没有GPU硬件,也可以在CPU上进行推理,但是推理速度会更慢,需要大概32GB内存,使用方法如下:
model = AutoModel.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True).float()
如果有多张 GPU,但是每张GPU的显存大小都不足以容纳完整的模型,那么可以将模型切分在多张GPU上。
首先安装accelerate:
pip install accelerate
然后通过如下方法加载模型:
from utils import load_model_on_gpus
model = load_model_on_gpus("THUDM/chatglm3-6b", num_gpus=2)
即可将模型部署到两张GPU上进行推理。可以将num_gpus改为你希望使用的GPU数,默认是均匀切分的,也可以传入device_map参数来自己指定。