ChatGLM-6B 本地API调用
简介
本文档介绍如何在本地部署 ChatGLM-6B 模型,并实现类似 GPT3.5 的 API 调用,以便在 Web 端调用本地部署的 ChatGLM-6B ,从给定文本材料中抽取出问答对。
本地大模型: ChatGLM3-6B
任务名称: 用户提问有关旅游的问题,大模型给出具体的旅游信息的推荐。
准备工作
在开始部署之前,请确保满足以下准备工作:
- 操作系统: Windows 或 Ubuntu
- Python 版本: 推荐使用 3.10 或以上版本
- 显卡内存: Nvidia 至少 6GB 可用内存
- transformers 库版本: 4.30.2 或以上
- torch 版本: 2.0 或以上 (GPU 版本)
ChatGLM-6B 本地部署步骤
-
克隆/下载 ChatGLM3 官方代码仓库以及模型
Bash
git clone https://github.com/THUDM/ChatGLM3
ChatGLM Hugging Face 地址:https://huggingface.co/THUDM/chatglm-6b
下载模型到指定路径,默认下载会自动下载到 C 盘:
Python
from modelscope.hub.snapshot_download import snapshot_download model_dir = snapshot_download('ZhipuAI/chatglm3-6b', cache_dir='F:/pretrained_model/chatglm3-6b/', revision='master')
-
创建虚拟环境并安装依赖
Bash
conda create -n <环境名> python=3.10 conda activate <环境名> pip install -r requirements.txt
注意: 不要下载 requirements.txt 里的 torch,为了保证 torch 的版本正确,请严格按照官方文档的说明安装。
-
运行测试代码
在官方代码库里转到
basic_demo
文件夹。运行
cli_demo.py
前请确保替换path_to_downloaded_model
为模型的实际路径。由于我的电脑显存只有 6GB,所以需要进行量化操作,我的只能进行
quantize(4)
,如果你的显存较高也可以quantize(8)
:Python
model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True).quantize(4).cuda() model = model.eval()
然后运行
cli_demo.py
(里面的代码已经有一些变动),等待模型加载完成,如果可以与模型对话则说明你已经成功一大半了。也可以运行其他如web_demo_gradio.py
,实现网页端对话。如果运行成功会出现上述内容。
-
实现 OpenAI 格式的流式 API 部署
先转到
openai_api_demo
文件夹,运行openai_api.py
文件。在运行时会先下载一个 Embedding Model(bge-large-zh-v1.5),等待下载完。
在运行时我遇到一个小问题,因为我的显存较小,只够加载一个 chatglm6b,所以在加载 Embedding Model 我选择用 CPU 加载。
运行
openai_api.py
文件(运行前记得更改模型路径)。当出现下面的界面时,则说明你已经成功了。接着你就可以通过 API 调用你的模型进行问答了。调用时需要
base_url
和api_key
,base_url
为你本机的地址 + v1,api_key
可以为任意值,但不可以为空。Python
from openai import OpenAI # 创建OpenAI聊天 client = OpenAI( base_url="http://127.0.0.1:8000/v1", api_key="xxx" ) # 可以通过下面这种方式给LLM传入“上下文”内容 response = client.chat.completions.create( model="chatglm3-6B", messages=[ {"role": "system", "content": "你不是一个人工智能助手,你现在的身份是小丑。后面所有回答的回答全都要基于“小丑”这个身份."}, {"role": "user", "content": "你能干什么"}, ], stream=False ) # 输出模型回答 print(response.choices[0].message.content)
如果模型可以正常输出,恭喜你,部署完成!