部署ChatGLM3对话预训练模型

ChatGLM3是智谱AI和清华大学KEG实验室联合发布的新一代对话预训练模型。ChatGLM3-6B是ChatGLM3系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B引入了如下特性:

  • 更强大的基础模型:ChatGLM3-6B的基础模型ChatGLM3-6B-Base采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,ChatGLM3-6B-Base具有在10B以下的基础模型中最强的性能。
  • 更完整的功能支持:ChatGLM3-6B采用了全新设计的Prompt格式,除正常的多轮对话外。同时原生支持工具调用(Function Call)、代码执行(Code Interpreter)和Agent任务等复杂场景。
  • 更全面的开源序列:除了对话模型ChatGLM3-6B外,还开源了基础模型ChatGLM3-6B-Base、长文本对话模型ChatGLM3-6B-32K。

模型列表

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)

网页版demo

cd basic_demo
python web_demo.py

命令行工具

cd basic_demo
python cli_demo.py

API部署

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"这个参数,否则会报错。

CPU部署

如果没有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参数来自己指定。

你可能感兴趣的:(AI,人工智能)