基于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
2
3
4
5
cd /etc/yum.repos.d/
mkdir -p backup
mv * backup/
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
yum clean all

安装基础软件包

1
yum install unzip wget tar -y

Miniforge安装

执行以下命令下载Miniforge安装包(Miniforge与Mambaforge已经合并,releases界面的名称为MambaForge)

1
2
cd /root/
wget "https://gh-proxy.org/https://github.com/conda-forge/miniforge/releases/download/24.3.0-0/Mambaforge-24.3.0-0-Linux-x86_64.sh"

执行以下命令给安装包添加执行权限并启动安装

1
2
chmod +x Mambaforge-24.3.0-0-Linux-x86_64.sh
./Mambaforge-24.3.0-0-Linux-x86_64.sh

安装过程中需要根据提示确认安装信息,可参考以下操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Welcome to Mambaforge 24.3.0-0

In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>> 按回车
......
Do you accept the license terms? [yes|no]
>>> 输入yes回车
......
Mambaforge will now be installed into this location:
/root/mambaforge

- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below

[/root/mambaforge] >>> 直接按回车,或输入自定义安装路径后回车
......
You can undo this by running `conda init --reverse $SHELL`? [yes|no]
[no] >>> 输入yes回车
......
==> For changes to take effect, close and re-open your current shell. <==

Thank you for installing Mambaforge!

根据最后的提示“For changes to take effect, close and re-open your current shell.”,安装完成后需要断开当前shell重新登录服务器,这时可以发现root前面多了(base),输入mamba,有回显表示安装成功

升级pip并切换PyPI源

执行以下命令升级pip并更换PyPI源为阿里云的源

1
2
python -m pip install -i https://mirrors.aliyun.com/pypi/simple --upgrade pip
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple

Git安装

执行以下命令安装Git

1
yum install git -y

执行以下命令下载Git Lfs安装包并解压安装

1
2
3
4
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"
tar -zxf git-lfs-linux-amd64-v3.5.1.tar.gz
cd git-lfs-3.5.1/
./install.sh

执行以下命令,有回显版本信息表示安装成功

1
git lfs version

大模型压缩与部署


创建虚拟环境

执行以下命令创建Python虚拟环境,防止依赖包冲突

1
2
# mamba create -n <venv_name> python=<python_version>
mamba create -n chatglm3 python=3.9

出现以下提示时输入“Y”并回车应用更改

1
Confirm changes: [Y/n] Y

项目创建

执行以下命令创建项目目录,用于存放模型权重和项目代码

1
2
cd ~
mkdir -p chatglm3

项目环境准备

获取项目代码

执行以下命令进入项目目录,然后下载并解压实验代码

1
2
3
cd ~/chatglm3
wget https://certification-data.obs.cn-north-4.myhuaweicloud.com/CHS/HCIA-AI%20Solution/V1.0/chapter6/chatglm3.openvino.zip
unzip chatglm3.openvino.zip

获取模型权重文件

执行以下命令安装ModelScope Library

1
pip install modelscope

执行以下命令进入Python环境

1
python

然后执行以下Python代码下载模型权重

1
2
from modelscope import snapshot_download
model_dir = snapshot_download('ZhipuAI/chatglm3-6b',cache_dir='/root/chatglm3/chatglm3-6b', revision='master')

说明
模型权重下载需要一点时间,耐心等待,当出现“modelscope - INFO - Download model 'ZhipuAI/chatglm3-6b' successfully.”提示信息则表示下载完成

下载完成后执行以下命令退出Python环境

1
exit()

安装项目依赖

执行以下命令进入到代码目录

1
2
cd ~
cd chatglm3/chatglm3.openvino

执行以下命令进入到虚拟环境并安装依赖

1
2
3
4
5
6
# mamba activate <venv_name>
mamba activate chatglm3
pip install wheel setuptools
cd chatglm3.openvino/
pip install -r requirements.txt
pip install sentencepiece

模型转换与压缩

不同的框架对模型格式要求不同,执行以下命令将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 量化精度,int8int4
--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

参考文档