Chinese_CLIP为CLIP模型的中文版本,使用大规模中文数据进行训练(~2亿图文对),开源链接提供了5个模型规模,本文档以 clip_cn_vit-b-16 为例介绍离线推理步骤。
参考实现:
url=https://github.com/OFA-Sys/Chinese-CLIP.git
commit_id=2c38d03557e50eadc72972b272cebf840dbc34ea
参考配置:
clip_cn_vit-b-16
输入数据
输入数据 | 大小 | 数据类型 | 数据排布格式 |
---|---|---|---|
image | ${bs} x 3 x 224 x 224 | FLOAT32 | NCHW |
txt | ${bs} x 512 | INT32 | ND |
输出数据
输出数据 | 大小 | 数据类型 | 数据排布格式 |
---|---|---|---|
output | ${bs} x 512 | FLOAT32 | ND |
该模型需要以下插件与驱动
表 1 版本配套表
配套 | 版本 | 环境准备指导 |
---|---|---|
固件与驱动 | 24.1.RC2 | Pytorch框架推理环境准备 |
CANN(+ MindIE) | 8.0.RC3 | - |
Python | 3.8.17 | - |
PyTorch | 1.11.0 | - |
说明:Atlas 300I Duo 推理卡请以CANN版本选择实际固件与驱动版本。 | \ | \ |
说明:由于模型性能优化需要,需要安装与CANN包版本配套的MindIE。
获取本仓源码。
git clone https://gitee.com/ascend/ModelZoo-PyTorch.git
cd ModelZoo-PyTorch/ACL_PyTorch/built-in/foundation_models/Chinese_CLIP
获取第三方源码。
# 请按顺序执行如下命令
git clone https://github.com/OFA-Sys/Chinese-CLIP.git
cd Chinese-CLIP
git reset --hard 2c38d03557e50eadc72972b272cebf840dbc34ea
pip3 install -r requirements.txt
# 修改第三方源码推理适配部分
patch -p2 < ../cn_clip.patch
pip3 install -e .
cd ..
安装离线推理所需依赖。
pip3 install -U pip && pip3 install -r requirements.txt
注意:onnxsim版本必须大于等于0.4.x。
请访问msit代码仓,根据readme文档进行工具安装。可只安装需要的组件:benchmark surgeon,其他组件为可选安装。安装完成后使用msit check all
,刚才安装的组件下显示OK说明安装成功
设置环境变量。
export PYTHONPATH=${PYTHONPATH}:$(pwd)/Chinese-CLIP/cn_clip
模型转换。
使用PyTorch将模型权重文件.pth转换为.onnx文件,再使用ATC工具将.onnx文件转为离线推理模型文件.om文件。
获取权重文件。
mkdir models
下载权重文件 clip_cn_vit-b-16.pt 置于 models 目录下
获取数据集。 下载cifar-100数据集
mkdir -p ./Chinese-CLIP/data/datasets
在dataset文件夹中解压缩
导出onnx文件。
使用 Chinese-CLIP/cn_clip/deploy/pytorch_to_onnx.py 导出onnx文件。
python3 Chinese-CLIP/cn_clip/deploy/pytorch_to_onnx.py \
--model-arch ViT-B-16 \
--pytorch-ckpt-path ./models/clip_cn_vit-b-16.pt \
--save-onnx-path ./models/vit-b-16 \
--context-length 512 \
--convert-text \
--convert-vision
运行成功后,使用models目录下生成的 vit-b-16.txt.fp32.onnx 和 vit-b-16.img.fp32.onnx 文件进行后续操作。
使用 onnx-simplifier 简化 onnx 模型。
文本模型
# export bs=24
onnxsim models/vit-b-16.txt.fp32.onnx models/vit-b-16.txt.fp32.bs${bs}.sim.onnx --overwrite-input-shape "text:${bs},512"
图像模型
# export bs=24
onnxsim models/vit-b-16.img.fp32.onnx models/vit-b-16.img.fp32.bs${bs}.sim.onnx --overwrite-input-shape "image:${bs},3,224,224"
使用 opt_onnx.py 优化 onnx 模型。
文本模型
# export bs=24
python3 opt_txt_onnx.py models/vit-b-16.txt.fp32.bs${bs}.sim.onnx models/vit-b-16.txt.fp32.bs${bs}.opt.onnx
图像模型
# export bs=24
python3 opt_img_onnx.py \
--input_file models/vit-b-16.img.fp32.bs${bs}.sim.onnx \
--output_file models/vit-b-16.img.fp32.bs${bs}.opt.onnx \
--model_config vit_base_patch16_224 \
--use_flashattention
使用ATC工具将ONNX模型转OM模型。
配置环境变量。
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/mindie/set_env.sh
说明: 该脚本中环境变量仅供参考,请以实际安装环境配置环境变量。详细介绍请参见《CANN 开发辅助工具指南 (推理)》。
执行命令查看芯片名称(${chip_name})。
npu-smi info
#该设备芯片名为Ascend310P3 (自行替换)
回显如下:
+-------------------|-----------------|------------------------------------------------------+
| NPU Name | Health | Power(W) Temp(C) Hugepages-Usage(page) |
| Chip Device | Bus-Id | AICore(%) Memory-Usage(MB) |
+===================+=================+======================================================+
| 0 310P3 | OK | 15.8 42 0 / 0 |
| 0 0 | 0000:82:00.0 | 0 1074 / 21534 |
+===================+=================+======================================================+
| 1 310P3 | OK | 15.4 43 0 / 0 |
| 0 1 | 0000:89:00.0 | 0 1070 / 21534 |
+===================+=================+======================================================+
执行ATC命令。
# 例如 export bs=24 && export chip_name=310P3
atc --framework=5 \
--model=models/vit-b-16.txt.fp32.bs${bs}.opt.onnx \
--output=models/vit-b-16.txt.bs${bs} \
--input_format=ND \
--input_shape="text:${bs},512" \
--soc_version=Ascend${chip_name} \
--log=error \
--optypelist_for_implmode="Gelu" \
--op_select_implmode=high_performance \
--fusion_switch_file=fuse.cfg
# 例如 export bs=24 && export chip_name=310P3
atc --framework=5 \
--model=models/vit-b-16.img.fp32.bs${bs}.opt.onnx \
--output=models/vit-b-16.img.bs${bs} \
--input_format=NCHW \
--input_shape="image:${bs},3,224,224" \
--soc_version=Ascend${chip_name} \
--log=error \
--optypelist_for_implmode="Sigmoid" \
--op_select_implmode=high_performance \
--enable_small_channel 1
运行成功后,在 models 目录下生成 vit-b-16.img.bsbs.om和vit−b−16.txt.bs{bs}.om 离线模型文件。
开始推理验证。
安装ais_bench推理工具。
请访问ais_bench推理工具代码仓,根据readme文档进行工具安装。
数据集精度验证
# 精度测试脚本仅支持bs24场景
cd Chinese-CLIP
export vision_om=../models/vit-b-16.img.bs24.om
export text_om=../models/vit-b-16.txt.bs24.om
bash run_scripts/zeroshot_eval.sh 0 data cifar-100 ViT-B-16 RoBERTa-wwm-ext-base-chinese ../models/clip_cn_vit-b-16.pt ${text_om} ${vision_om}
cd ..
得到数据集精度 top1: 64.04%
性能验证。
纯推理性能测试命令如下:
# export bs=24
python3 -m ais_bench --model models/vit-b-16.txt.bs${bs}.om --loop 50
# export bs=24
python3 -m ais_bench --model models/vit-b-16.img.bs${bs}.om --loop 50
调用ACL接口推理计算,模型纯推理性能数据参考如下数据。
芯片型号 | Input Shape | 单次推理耗时 |
---|---|---|
300I Pro | 24 x 512 | 103ms |
芯片型号 | Batch Size | 单次推理耗时 |
---|---|---|
300I Pro | 24 | 39ms |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。