基于OpenVINO进行ChatGLM3-6B模型压缩部署
工具与软件介绍
Miniforge是由conda-forge社区维护的轻量级Python环境管理工具,默认集成conda和mamba包管理器,支持多CPU架构且无商业许可限制。与Anaconda相比占用空间更小,同时由于包含Mamba,易用性上会更好。
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,Git LFS是一种开源的Git扩展,用于管理大文件和二进制文件,将它们存储在单独的“LFS存储库”中, 从而让Git存储库保持在一个可管理的规模,本实验Git用于下载模型权重文件。
ChatGLM3是智谱AI和清华大学KEG实验室联合发布的对话预训练模型。ChatGLM3-6B是ChatGLM3系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B引入了更强大的基础模型、更完整的功能支持、更全面的开源系列。
OpenVINO是Intel为深度学习推理而设计的开源工具包。它可以帮助开发者优化模型,提高推理性能,减少模型的内存占用,目前仅支持在Intel设备上使用。
环境信息
| 配置 | 操作系统要求 |
|---|---|
| 4 vCPUs 32GB | CentOS8.0以上 |
环境准备
配置YUM源
执行以下命令切换为阿里云的YUM源
1 | cd /etc/yum.repos.d/ |
安装基础软件包
1 | yum install unzip wget tar -y |
Miniforge安装
执行以下命令下载Miniforge安装包(Miniforge与Mambaforge已经合并,releases界面的名称为MambaForge)
1 | cd /root/ |
执行以下命令给安装包添加执行权限并启动安装
1 | chmod +x Mambaforge-24.3.0-0-Linux-x86_64.sh |
安装过程中需要根据提示确认安装信息,可参考以下操作
1 | Welcome to Mambaforge 24.3.0-0 |
根据最后的提示“For changes to take effect, close and re-open your current shell.”,安装完成后需要断开当前shell重新登录服务器,这时可以发现root前面多了(base),输入mamba,有回显表示安装成功
升级pip并切换PyPI源
执行以下命令升级pip并更换PyPI源为阿里云的源
1 | python -m pip install -i https://mirrors.aliyun.com/pypi/simple --upgrade pip |
Git安装
执行以下命令安装Git
1 | yum install git -y |
执行以下命令下载Git Lfs安装包并解压安装
1 | wget "https://gh-proxy.org/https://github.com/git-lfs/git-lfs/releases/download/v3.5.1/git-lfs-linux-amd64-v3.5.1.tar.gz" |
执行以下命令,有回显版本信息表示安装成功
1 | git lfs version |
大模型压缩与部署
创建虚拟环境
执行以下命令创建Python虚拟环境,防止依赖包冲突
1 | # mamba create -n <venv_name> python=<python_version> |
出现以下提示时输入“Y”并回车应用更改
1 | Confirm changes: [Y/n] Y |
项目创建
执行以下命令创建项目目录,用于存放模型权重和项目代码
1 | cd ~ |
项目环境准备
获取项目代码
执行以下命令进入项目目录,然后下载并解压实验代码
1 | cd ~/chatglm3 |
获取模型权重文件
执行以下命令安装ModelScope Library
1 | pip install modelscope |
执行以下命令进入Python环境
1 | python |
然后执行以下Python代码下载模型权重
1 | from modelscope import snapshot_download |
说明
模型权重下载需要一点时间,耐心等待,当出现“modelscope - INFO - Download model 'ZhipuAI/chatglm3-6b' successfully.”提示信息则表示下载完成
下载完成后执行以下命令退出Python环境
1 | exit() |
安装项目依赖
执行以下命令进入到代码目录
1 | cd ~ |
执行以下命令进入到虚拟环境并安装依赖
1 | # mamba activate <venv_name> |
模型转换与压缩
不同的框架对模型格式要求不同,执行以下命令将Huggingface模型转换为OpenVINO IR模型
1 | python convert.py --model_id /root/chatglm3/chatglm3-6b/ZhipuAI/chatglm3-6b/ --output /root/chatglm3/chatglm3-6b-converted |
| 参数 | 说明 |
|---|---|
--model_id |
模型所在目录路径(绝对路径) |
--output |
转换后保存模型的目录路径(绝对路径) |
(可选)不量化的情况下,运行模型需要12G左右内存,如果内存空间不足或想获得更快的输出,执行以下命令进行模型量化
1 | python quantize.py --model_path /root/chatglm3/chatglm3-6b-converted/ --precision int4 --output /root/chatglm3/chatglm3-6b-int4 |
| 参数 | 说明 |
|---|---|
--model_path |
OpenVINO IR模型所在目录路径(绝对路径) |
--precision |
量化精度,int8或int4 |
--output |
量化后保存模型的目录路径(绝对路径) |
项目运行
执行以下命令运行ChatGLM3机器人
1 | python chat.py --model_path /root/chatglm3/chatglm3-6b-converted --max_sequence_length 4096 --device CPU |
| 参数 | 说明 |
|---|---|
--model_path |
OpenVINO IR模型所在目录路径(绝对路径) |
--max_sequence_length |
输出标记的最大大小 |
--device |
指定运行推理的设备 |
说明
如果执行了模型量化,执行以下命令
1 python chat.py --model_path /root/chatglm3/chatglm3-6b-int4 --max_sequence_length 4096 --device CPU