ChatGLM
ChatGLM-6B 是一个开源的、支撑中英双语的对话言语模型,根据 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户能够在消费级的显卡上进行本地布置(INT4 量化级别下最低只需 6GB 显存)。
-
官方网站:chatglm.cn/
-
项目地址:github.com/THUDM/ChatG…
-
相关PPT:ChatGLM: 从千亿模型到ChatGPT
-
相关实践:www.heywhale.com/mw/project/…
装置
先clone项目:
git clone https://github.com/THUDM/ChatGLM-6B.git
然后进入项目ChatGLM-6B后,装置需求的环境
pip install -r requirements.txt
其中 transformers
库版本推荐为 4.27.1
,但理论上不低于 4.23.1
即可。
此外,假如需求在 cpu 上运转量化后的模型,还需求装置 gcc
与 openmp
。大都 Linux 发行版默许已装置。对于 Windows ,可在装置 TDM-GCC 时勾选 openmp
。 Windows 测验环境 gcc
版本为 TDM-GCC 10.3.0
, Linux 为 gcc 11.3.0
。在 MacOS 上请参阅 Q1。
下载本地模型
根据自己硬件条件来安排:
量化等级 | 最低 GPU 显存(推理) | 最低 GPU 显存(高效参数微调) |
---|---|---|
FP16(无量化) | 13 GB | 14 GB |
INT8 | 8 GB | 9 GB |
INT4 | 6 GB | 7 GB |
现在模型越大,功能越好,对应的地址有:
- huggingface.co/THUDM/chatg…
- huggingface.co/THUDM/chatg…
- huggingface.co/THUDM/chatg…
这里以fp16为例,不做量化处理。进入huggingface.co/THUDM/chatg…
创立chatglm-6b文件夹并进入
将一切的文件都下载到该文件夹下:
假如是已联网的长途服务器,能够直接经过wget下载,下载链接就是那个下载符号对应的链接:
wget https://huggingface.co/THUDM/chatglm-6b/resolve/main/pytorch_model-00001-of-00008.bin
代码调用
能够经过如下代码调用 ChatGLM-6B 模型来生成对话:
>>> from transformers import AutoTokenizer, AutoModel
>>> tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b-fp16", trust_remote_code=True)
>>> model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
>>> model = model.eval()
>>> response, history = model.chat(tokenizer, "你好", history=[])
>>> print(response)
你好!我是人工智能帮手 ChatGLM-6B,很快乐见到你,欢迎问我任何问题。
>>> response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
>>> print(response)
晚上睡不着可能会让你感到焦虑或不舒服,但以下是一些能够协助你入眠的办法:
1. 制定规则的睡觉时间表:坚持规则的睡觉时间表能够协助你树立健康的睡觉习气,使你更简单入眠。尽量在每天的相同时间上床,并在同一时间起床。
2. 创造一个舒适的睡觉环境:确保睡觉环境舒适,安静,黑暗且温度适合。能够运用舒适的床上用品,并坚持房间通风。
3. 放松身心:在睡前做些放松的活动,例如泡个热水澡,听些轻柔的音乐,阅读一些有趣的书本等,有助于缓解紧张和焦虑,使你更简单入眠。
4. 防止饮用含有咖啡因的饮料:咖啡因是一种刺激性物质,会影响你的睡觉质量。尽量防止在睡前饮用含有咖啡因的饮料,例如咖啡,茶和可乐。
5. 防止在床上做与睡觉无关的作业:在床上做些与睡觉无关的作业,例如看电影,玩游戏或作业等,可能会搅扰你的睡觉。
6. 尝试呼吸技巧:深呼吸是一种放松技巧,能够协助你缓解紧张和焦虑,使你更简单入眠。试着渐渐吸气,坚持几秒钟,然后缓慢呼气。
假如这些办法无法协助你入眠,你能够考虑咨询医师或睡觉专家,寻求进一步的建议。
Demo & API
先承认相关代码的模型文件名是否跟自己下载的模型文件名一致,假如不一致先进行修正。
web_demo.py
假如不一致的话,修正文件名为对应的chatglm-6b
api.py
假如不一致的话,修正文件名为对应的chatglm-6b
cli_demo.py
假如不一致的话,修正文件名为对应的chatglm-6b
web_demo
web_demo是根据gradio开发的,这里能够进一步修正,指定ip和port,便于长途拜访:
输入python web_demo.py
经过一段时间的等候,出现如下图相同的输出就代表运转成功,在浏览器输入地址:http://xxxxxx:xxxxx,就能够愉快地运用chatglm~
api
在命令行输入python api.py
,经过一段时间的运转,出现如下输出,就是运转成功。
依照官网给的示例,
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":"xxxxx"}
能够运用python中的requests库进行拜访,能够把这个代码封装一下完成多轮对话。
import requests
import json
url = 'http://127.0.0.1:8000'
headers = {'Content-Type': 'application/json'}
data = {"prompt": "你好", "history": []}
response = requests.post(url=url, headers=headers, data=json.dumps(data))
response.json()
cli_demo
在命令行输入python cli_demo.py
,经过一段时间的运转,出现如下输出,就是运转成功。
然后就能够在终端和它进行对话,就像运转wei_demo.py相同。
其它设备布置
cpu
假如没有 GPU 硬件的话,也能够在 CPU 上进行推理,但是推理速度会更慢(大约需求 32GB 内存)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).float()
假如内存不足,能够直接加载量化后的模型:
# INT8 量化的模型将"THUDM/chatglm-6b-int4"改为"THUDM/chatglm-6b-int8"
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4",trust_remote_code=True).float()
mac布置
对于搭载了 Apple Silicon 或许 AMD GPU 的Mac,能够运用 MPS 后端来在 GPU 上运转 ChatGLM-6B。需求参阅 Apple 的 官方说明 装置 PyTorch-Nightly。
现在在 MacOS 上只支撑从本地加载模型。将代码中的模型加载改为从本地加载,并运用 mps 后端:
model = AutoModel.from_pretrained("your local path", trust_remote_code=True).half().to('mps')
加载半精度的 ChatGLM-6B 模型需求大约 13GB 内存。内存较小的机器在空余内存不足的情况下会运用硬盘上的虚拟内存,导致推理速度严重变慢。此刻能够运用量化后的模型如 chatglm-6b-int4。由于 GPU 上量化的 kernel 是运用 CUDA 编写的,因此无法在 MacOS 上运用,只能运用 CPU 进行推理。
# INT8 量化的模型将"THUDM/chatglm-6b-int4"改为"THUDM/chatglm-6b-int8"
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4",trust_remote_code=True).float()
为了充沛运用 CPU 并行,还需求单独装置 OpenMP。
多卡布置
假如一台机器有多张 GPU,但是每张 GPU 的显存大小都不足以容纳完好的模型,那么能够将模型切分在多张GPU上。首要装置 accelerate: pip install accelerate
,然后经过如下办法加载模型:
from utils import load_model_on_gpus
model = load_model_on_gpus("THUDM/chatglm-6b", num_gpus=2)
即可将模型布置到两张 GPU 上进行推理。能够将 num_gpus
改为你希望运用的 GPU 数。默许是均匀切分的,也能够传入 device_map
参数来自己指定。
参阅
- github.com/THUDM/ChatG…
- huggingface.co/THUDM/chatg…
- github.com/THUDM/P-tun…
- github.com/hwchase17/l…
- github.com/imClumsyPan…
- github.com/openai/open…
- python.langchain.com/en/latest/g…