ChatGLM3-6B 是开源中英双语对话模型 ChatGLM-6B 的第三代版本,关于它的特性,请前往源repo查看:https://huggingface.co/THUDM/chatglm3-6b。本例程对ChatGLM3-6B进行移植,使之能在SOPHON BM1684X上进行推理测试。
该例程支持在V23.07.01(libsophon_0.4.9)及以上的SDK上运行,支持在插有1684X加速卡(SC7系列)的x86主机上运行,也可以在1684X SoC设备(如SE7、SM7、Airbox等)上运行。在SoC上运行需要额外进行环境配置,请参照运行环境准备完成环境部署。
- 支持BM1684X(x86 PCIe、SoC)、BM1688(SoC)
- 支持FP16、INT8、INT4模型编译和推理
- 支持基于SAIL推理的Python例程
- 支持多轮对话
在PCIe上无需修改内存,以下为soc模式相关: 对于1684X系列设备(如SE7/SM7),都可以通过这种方式完成环境准备,使得满足chatGLM3运行条件。首先,在1684x SoC环境上,参考如下命令修改设备内存。
cd /data/
mkdir memedit && cd memedit
wget -nd https://sophon-file.sophon.cn/sophon-prod-s3/drive/23/09/11/13/DeviceMemoryModificationKit.tgz
tar xvf DeviceMemoryModificationKit.tgz
cd DeviceMemoryModificationKit
tar xvf memory_edit_{vx.x}.tar.xz #vx.x是版本号
cd memory_edit
./memory_edit.sh -p #这个命令会打印当前的内存布局信息
./memory_edit.sh -c -npu 7615 -vpu 3072 -vpp 3072 #npu也可以访问vpu和vpp的内存
sudo cp /data/memedit/DeviceMemoryModificationKit/memory_edit/emmcboot.itb /boot/emmcboot.itb && sync
sudo reboot
对于BM1688系列设备(如SE9-16/SM9-16,需要是16GB内存版本),参考如下命令修改设备内存:
cd /data/
mkdir memedit && cd memedit
wget -nd https://sophon-file.sophon.cn/sophon-prod-s3/drive/23/09/11/13/DeviceMemoryModificationKit.tgz
tar xvf DeviceMemoryModificationKit.tgz
cd DeviceMemoryModificationKit
tar xvf memory_edit_{vx.x}.tar.xz #vx.x是版本号
cd memory_edit
./memory_edit.sh -p #这个命令会打印当前的内存布局信息
./memory_edit.sh -c -npu 8192 -vpu 0 -vpp 1024
sudo cp /data/memedit/DeviceMemoryModificationKit/memory_edit/boot.itb /boot/boot.itb && sync
sudo reboot
注意:
- tpu总内存为npu/vpu/vpp三者之和,对BM1684X来说,fp16模型应满足tpu内存 >= 12800 MB,int8应满足tpu内存 >= 7168MB,int4应满足tpu内存 >= 4608MB。对BM1688来说,int4应满足tpu内存>=7000MB。
- 更多教程请参考SoC内存修改工具
该模型目前只支持在1684X上运行,已提供编译好的bmodel。
本例程在scripts
目录下提供了下载脚本download.sh
**注意:**在运行前,应该保证存储空间大于23GB。
# 安装unzip,若已安装请跳过,非ubuntu系统视情况使用yum或其他方式安装
sudo apt install unzip
chmod -R +x scripts/
./scripts/download.sh
执行下载脚本后,当前目录下的文件如下:
├── docs
│ └── ChatGLM3_Export_Guide.md #ChatGLM3 onnx导出和bmodel编译指南
├── models
│ ├── BM1684X #download.sh下载的bmodel
│ | ├── chatglm3-6b_fp16.bmodel
│ | ├── chatglm3-6b_int4.bmodel
│ | └── chatglm3-6b_int8.bmodel
| └── BM1688
| └── chatglm3-6b_int8_2core.bmodel
├── python
│ ├── chatglm3.py #ChatGLM3 python推理脚本
│ ├── README.md #python例程执行指南
│ ├── requirements.txt #python例程的依赖模块
│ └── token_config #download.sh下载的tokenizer
│ ├── tokenization_chatglm.py
│ ├── tokenizer_config.json
│ └── tokenizer.model
├── README.md #ChatGLM3例程指南
├── scripts
│ ├── download.sh #下载脚本
│ └── gen_bmodel.sh #模型编译脚本
└── tools
├── chatglm3-6b #修改过的ChatGLM3源码
│ ├── config.json
│ └── modeling_chatglm.py
└── export_onnx.py #ChatGLM3导出onnx脚本。
此部分请参考ChatGLM3模型导出与编译
这里的测试输入为:"请使用C++写一段冒泡排序算法。"
测试平台 | 测试程序 | 测试模型 | first token latency(s) | token per second(tokens/s) |
---|---|---|---|---|
SE7-32 | chatglm3.py | chatglm3-6b_f16.bmodel | 1.408 | 4.067 |
SE7-32 | chatglm3.py | chatglm3-6b_int8.bmodel | 1.116 | 8.184 |
SE7-32 | chatglm3.py | chatglm3-6b_int4.bmodel | 1.121 | 12.822 |
SE9-16 | chatglm3.py | chatglm3-6b_int4_2core.bmodel | 5.157 | 5.113 |
测试说明:
- 性能测试结果具有一定的波动性,建议多次测试取平均值;
- 这里SE7-32使用的SDK版本是V23.07.01,SE9-16的SDK版本是V1.6;