文件最后提交记录最后更新时间
init 4 年前
init 4 年前
!3552 模型整改 !3552 模型整改 3 年前
init 4 年前
init 4 年前
!6851 [Clean Code] 修改芯片型号描述 Merge pull request !6851 from 施康/master 1 年前
init 4 年前
!1289 [宁波大学][高校贡献][PyTorch离线推理][TinyBERT]-初次提交 * fix some bug 3 年前
!1289 [宁波大学][高校贡献][PyTorch离线推理][TinyBERT]-初次提交 * fix some bug 3 年前
init 4 年前
init 4 年前
!1289 [宁波大学][高校贡献][PyTorch离线推理][TinyBERT]-初次提交 * fix some bug 3 年前
README.md

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 -

快速上手

获取源码

  1. 获取源码。

    git clone https://github.com/huawei-noah/Pretrained-Language-Model
    ln -s Pretrained-Language-Model/TinyBERT/transformer/ .
    
  2. 安装依赖。

    pip3 install -r requirements.txt
    

准备数据集

  1. 获取原始数据集。(解压命令参考tar –xvf *.tar与 unzip *.zip)

    本模型将使用到SST-2验证集的dev.tsv文件,通过链接下载,获取成功后重命名为glue_dir/SST-2,放到当前工作目录即可。

  2. 数据预处理。

    bash ./test/preprocess_data.sh
    

    输出:input_ids, segment_ids, input_mask三个文件夹各放置872笔数据对应的二进制数据文件。

模型推理

  1. 模型转换。

    使用PyTorch将模型权重文件.pth转换为.onnx文件,再使用ATC工具将.onnx文件转为离线推理模型文件.om文件。

    1. 获取权重文件。

      TinyBERT说明上获取权重文件包“SST-2_model.zip”,解压至当前目录。

    2. 导出onnx文件。

      pth权重文件转onnx,并对onnx进行简化。

      bash ./test/pth2onnx.sh ${bs}
      

      注:bs代表批大小。

      输出:若执行bash ./test/pth2onnx.sh 1,则生成TinyBERT_bs1.onnx和TinyBERT_sim_bs1.onnx。

    3. 使用ATC工具将ONNX模型转OM模型。

      bash ./test/onnx2om.sh ${bs} ${chip_name}
      

      注:bs代表批大小;chip_name代表处理器型号。

      输出:若执行bash ./test/onnx2om.sh 1 310P3,则生成TinyBERT_bs1.om。

  2. 开始推理验证。

    1. 安装ais_bench推理工具。

      请访问ais_bench推理工具代码仓,根据readme文档进行工具安装。

    2. 执行推理。

      bash ./test/ais_inference.sh ${bs}
      

      注:bs代表批大小。

      输出:若执行bash ./test/ais_inference.sh 1,则在当前路径的result文件夹内生成一个新的文件夹,同时在屏幕上打印出性能数据。

    3. 精度验证。

      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下的推理性能。

    4. 性能验证。

      可使用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