TinyBERT模型-推理指导
概述
TinyBERT是一种新型的Transformer蒸馏方法,该方法能将大型教师BERT模型中的大量知识有效地萃取到小型学生BERT模型中,在加速推理和减少模型大小的同时保持准确性。
输入输出数据
-
输入数据
输入数据 数据类型 大小 数据排布格式 input RGB_FP32 batchsize x 4 x 84 x 84 NCHW -
输出数据
输出数据 数据类型 大小 数据排布格式 output1 FLOAT32 batchsize x 4 x 51 ND
推理环境准备[所有版本]
-
该模型需要以下插件与驱动
表 1 版本配套表
| 配套 | 版本 | 环境准备指导 |
|---|---|---|
| 固件与驱动 | 22.0.2 | Pytorch框架推理环境准备 |
| CANN | 6.0.0 | - |
| Python | 3.7.5 | - |
| PyTorch | 1.8.0 | - |
快速上手
获取源码
-
获取源码。
git clone https://github.com/huawei-noah/Pretrained-Language-Model ln -s Pretrained-Language-Model/TinyBERT/transformer/ . -
安装依赖。
pip3 install -r requirements.txt
准备数据集
-
获取原始数据集。(解压命令参考tar –xvf *.tar与 unzip *.zip)
本模型将使用到SST-2验证集的dev.tsv文件,通过链接下载,获取成功后重命名为glue_dir/SST-2,放到当前工作目录即可。
-
数据预处理。
bash ./test/preprocess_data.sh输出:input_ids, segment_ids, input_mask三个文件夹各放置872笔数据对应的二进制数据文件。
模型推理
-
模型转换。
使用PyTorch将模型权重文件.pth转换为.onnx文件,再使用ATC工具将.onnx文件转为离线推理模型文件.om文件。
-
获取权重文件。
从TinyBERT说明上获取权重文件包“SST-2_model.zip”,解压至当前目录。
-
导出onnx文件。
pth权重文件转onnx,并对onnx进行简化。
bash ./test/pth2onnx.sh ${bs}注:bs代表批大小。
输出:若执行bash ./test/pth2onnx.sh 1,则生成TinyBERT_bs1.onnx和TinyBERT_sim_bs1.onnx。
-
使用ATC工具将ONNX模型转OM模型。
bash ./test/onnx2om.sh ${bs} ${chip_name}注:bs代表批大小;chip_name代表处理器型号。
输出:若执行bash ./test/onnx2om.sh 1 310P3,则生成TinyBERT_bs1.om。
-
-
开始推理验证。
-
安装ais_bench推理工具。
请访问ais_bench推理工具代码仓,根据readme文档进行工具安装。
-
执行推理。
bash ./test/ais_inference.sh ${bs}注:bs代表批大小。
输出:若执行bash ./test/ais_inference.sh 1,则在当前路径的result文件夹内生成一个新的文件夹,同时在屏幕上打印出性能数据。
-
精度验证。
bash ./test/postprocess_data.sh ${filename}注:filename代表步骤2中新生成文件夹的名字。
输出:若步骤2中在/result路径下新生成的文件夹名为ais_infer_result_bs1,执行命令bash ./test/postprocess_data.sh ais_infer_result_bs1,则会在屏幕上打印出精度数据。
将TinyBERT_sim.onnx上传至T4服务器,测试onnx性能。
trtexec --onnx=TinyBERT_sim_bs${bs}.onnx --workspace=5000 --threads输出:得到GPU下的推理性能。
-
性能验证。
可使用ais_bench推理工具的纯推理模式验证不同batch_size的om模型的性能,参考命令如下:
python3 -m ais_bench --model TinyBERT_bs1.om --loop 1000 --batchsize 1
-
模型推理性能&精度
以下给出以ais_bench作为推理工具的精度及性能数据:
|模型|官网pth精度|300I PRO推理精度|300I PRO性能|T4性能|300I PRO/T4 | ---- | ---- | ----|---- |---- | ---- | ---- | ---- | ---- | |TinyBERT(bs1)|无|92.32|1324.52|972.16|1.36 |TinyBERT(bs4)|无|92.32|3521.31|2850.36|1.24 |TinyBERT(bs8)|无|92.32|5871.86|3325.62|1.77 |TinyBERT(bs16)|无|92.32|8659.63|3415.3590|2.54 |TinyBERT(bs32)|92.6|92.32|10523.35|3746.7130|2.81 |TinyBERT(bs64)|无|92.32|11160.38|4425.89|2.52 |最优bs|92.6|92.32|11160.38|4425.89|2.52
备注:
-
该模型不支持动态shape
-
性能单位:fps/card,精度为百分比
-
bs指batch_size