体验 ChatGLM-6B
- 1. 什么是 ChatGLM-6B
- 2. Github 地址
- 3. 安装 Miniconda3
- 4. 创建虚拟环境
- 5. 安装 ChatGLM-6B
- 6. 启动 ChatGLM-6B
- 7. 访问 ChatGLM-6B
- 8. API部署
- 9. 命令行部署
- 10. 其他,修改使用显存大小
1. 什么是 ChatGLM-6B
ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答,更多信息请参考我们的博客。
不过,由于 ChatGLM-6B 的规模较小,目前已知其具有相当多的局限性,如事实性/数学逻辑错误,可能生成有害/有偏见内容,较弱的上下文能力,自我认知混乱,以及对英文指示生成与中文指示完全矛盾的内容。请大家在使用前了解这些问题,以免产生误解。更大的基于 1300 亿参数 GLM-130B 的 ChatGLM 正在内测开发中。
2. Github 地址
https://github.com/THUDM/ChatGLM-6B
3. 安装 Miniconda3
下载 Conda 安装脚本,
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
运行安装脚本,
bash Miniconda3-latest-Linux-x86_64.sh
按提示操作。当提示是否初始化 Conda 时,输入 “yes”,
安装完成后,关闭当前终端并打开新终端,这将激活 Conda,
sudo su - root
更新 Conda 至最新版本,
conda update conda
添加必要的 Conda 通道以获取更多软件包,
conda config --add channels conda-forge
conda config --add channels defaults
测试是否安装成功,
conda list
如果显示 Conda 及其内部包的列表,则说明安装成功。
4. 创建虚拟环境
conda create -n chatglm python==3.10.4
conda activate chatglm
5. 安装 ChatGLM-6B
git clone --recursive https://github.com/THUDM/ChatGLM-6B; cd ChatGLM-6B
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple streamlit
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple streamlit-chat
6. 启动 ChatGLM-6B
streamlit run web_demo2.py
7. 访问 ChatGLM-6B
使用浏览器打开 http://localhost:8501/
,
问它一个问题,清华大学在哪?
8. API部署
先需要安装额外的依赖,
pip3 install fastapi uvicorn
然后运行仓库中的 api.py,
python3 api.py
默认部署在本地的 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"
}
9. 命令行部署
运行仓库中 cli_demo.py,
python cli_demo.py
程序会在命令行中进行交互式的对话,在命令行中输入指示并回车即可生成回复。
输入 clear
可以清空对话历史,输入 stop
终止程序。
10. 其他,修改使用显存大小
默认情况下,模型以 FP16 精度加载,运行上述代码需要大概 13GB 显存。如果你的 GPU 显存有限,可以尝试以量化方式加载模型,使用方法如下:
vi web_demo2.py
--- 按需修改,目前只支持 4/8 bit 量化
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).quantize(8).half().cuda()
---
进行 2 至 3 轮对话后,8-bit 量化下 GPU 显存占用约为 10GB,4-bit 量化下仅需 6GB 占用。随着对话轮数的增多,对应消耗显存也随之增长,由于采用了相对位置编码,理论上 ChatGLM-6B 支持无限长的 context-length,但总长度超过 2048(训练长度)后性能会逐渐下降。
模型量化会带来一定的性能损失,经过测试,ChatGLM-6B 在 4-bit 量化下仍然能够进行自然流畅的生成。
量化过程需要在内存中首先加载 FP16 格式的模型,消耗大概 13GB 的内存。如果你的内存不足的话,可以直接加载量化后的模型,INT4 量化后的模型仅需大概 5.2GB 的内存:
# INT8 量化的模型将"THUDM/chatglm-6b-int4"改为"THUDM/chatglm-6b-int8"
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).half().cuda()
完结!