基于-6B 部署本地私有化
一、开源模型
1、-6B介绍
2、-6B 有如下特点
3、-6B 也有相当多已知的局限和不足
二、系统部署
1、硬件需求
2、系统环境
操作系统: 7.6/ (内存:32G)
显卡配置:2x 8G (共16G显存)
3.8.13 (版本不要高于3.10,否则有些依赖无法下载,像 2.4.2在高版本还不支持)
# 安装Python3.8所需依赖
sudo yum -y install gcc zlib zlib-devel openssl-devel
# 下载源码
wget https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tgz
# 解压缩
tar -zxvf Python-3.8.13.tgz
# 编译配置,注意:不要加 --enable-optimizations 参数
./configure --prefix=/usr/local/python3
# 编译并安装
make && make install
3、部署 6B
3.1下载源码
直接下载-6B
git下载 git clone
3.2安装依赖
进入-6B目录
使用 pip 安装依赖:pip -r .txt,其中 库版本推荐为 4.27.1,但理论上不低于 4.23.1 即可。
此外,如果需要在 cpu 上运行量化后的模型,还需要安装 gcc 与 。多数 Linux 发行版默认已安装。对于 ,可在安装 TDM-GCC 时勾选 。 测试环境 gcc 版本为 TDM-GCC 10.3.0, Linux 为 gcc 11.3.0
3.3下载模型
从 Face Hub 下载
可以手动下载
git下载 git clone
将模型下载到本地之后,将以上代码中的 THUDM/-6b 替换为你本地的 -6b 文件夹的路径,即可从本地加载模型;
在-6b文件下创建一个model文件夹放模型文件
3.4代码调用
可以通过如下代码调用 -6B 模型来生成对话:
模型的实现仍然处在变动中。如果希望固定使用的模型实现以保证兼容性,可以在 的调用中增加 =”v1.1.0″ 参数
>>> from transformers import AutoTokenizer, AutoModel
>>> tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", 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)
3.5低成本部署
模型量化
默认情况下,模型以 FP16 精度加载,运行上述代码需要大概 13GB 显存。如果你的 GPU 显存有限,可以尝试以量化方式加载模型,使用方法如下:
# 按需修改,目前只支持 4/8 bit 量化
model = .(“THUDM/-6b”, =True).(8).half().cuda()
进行 2 至 3 轮对话后,8-bit 量化下 GPU 显存占用约为 10GB,4-bit 量化下仅需 6GB 占用。随着对话轮数的增多,对应消耗显存也随之增长,由于采用了相对位置编码,理论上 -6B 支持无限长的 -,但总长度超过 2048(训练长度)后性能会逐渐下降。
模型量化会带来一定的性能损失,经过测试,-6B 在 4-bit 量化下仍然能够进行自然流畅的生成。使用 GPT-Q 等量化方案可以进一步压缩量化精度/提升相同量化精度下的模型性能,欢迎大家提出对应的 Pull 。
量化过程需要在内存中首先加载 FP16 格式的模型,消耗大概 13GB 的内存。如果你的内存不足的话,可以直接加载量化后的模型,INT4 量化后的模型仅需大概 5.2GB 的内存:
# INT8 量化的模型将”THUDM/-6b-int4″改为”THUDM/-6b-int8″
model = .(“THUDM/-6b-int4”, =True).half().cuda()
量化模型的参数文件也可以从这里手动下载。
3.6CPU 部署
如果你没有 GPU 硬件的话,也可以在 CPU 上进行推理,但是推理速度会更慢。使用方法如下(需要大概 32GB 内存)
model = .(“THUDM/-6b”, =True).float()
如果你的内存不足,可以直接加载量化后的模型:
# INT8 量化的模型将”THUDM/-6b-int4″改为”THUDM/-6b-int8″
model = .(“THUDM/-6b-int4”,=True).float()
如果遇到了报错 Could not find ‘.dll’ 或者 : : (MacOS) ,请从本地加载模型
3.7多卡部署
如果你有多张 GPU,但是每张 GPU 的显存大小都不足以容纳完整的模型,那么可以将模型切分在多张GPU上。首先安装 : pip ,然后通过如下方法加载模型:
from utils
model = (“THUDM/-6b”, =2)
即可将模型部署到两张 GPU 上进行推理。你可以将 改为你希望使用的 GPU 数。默认是均匀切分的,你也可以传入 参数来自己指定
四、系统启动
4.1网页版 Demo
首先安装 :pip ,然后运行仓库中的 .py:
.py
程序会运行一个 Web ,并输出地址。在浏览器中打开输出的地址即可使用。最新版 Demo 实现了打字机效果,速度体验大大提升。注意,由于国内 的网络访问较为缓慢,启用 demo.queue().(share=True, =True) 时所有网络会经过 服务器转发,导致打字机体验大幅下降,现在默认启动方式已经改为 share=False,如有需要公网访问的需求,可以重新修改为 share=True 启动
4.2命令行 Demo
运行仓库中 .py:
.py
程序会在命令行中进行交互式的对话,在命令行中输入指示并回车即可生成回复,输入 clear 可以清空对话历史,输入 stop 终止程序
4.2API部署
首先需要安装额外的依赖 pip ,然后运行仓库中的 api.py:
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"
}
4.3部署中常见问题
问题1、torch.cuda.: CUDA out of
很明显,显存不足,建议切换到-6b-int4或者-6b-int4
torch.cuda.: CUDA out of
问题2、”: is not “
这个错误通常是由于缺少或损坏的 CUDA 库文件引起的。要解决这个问题,需要安装 CUDA :
Toolkit
sudo yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo
sudo yum clean all
sudo yum -y install nvidia-driver-latest-dkms
sudo yum -y install cuda