模型编译及性能评测

(可选)模型修改

在模型编译前,我们也支持对模型进行板端部署相关的修改,常见操作及其API接口如下:

  • 在模型export之后,convert之前:

    1. batch输入拆分:使用 insert_split() 接口。

    2. 模型中插入图像前处理节点:

      a. 需要先将排布调整成NHWC排布以进行后续操作:此过程通过调用 insert_transpose() 接口进行。

      b. 图像归一化:此过程通过调用 insert_image_preprocess() 接口进行。

      c. 色彩转换(板端部署通常为nv12输入):此过程通过调用 insert_image_convert() 接口进行。

      d. 配置为resizer输入,支持基于roi进行抠图和缩放:此过程通过调用 insert_roi_resize() 接口进行。

    3. 调整输入输出数据排布:此过程通过调用 insert_transpose() 接口进行。

  • 在模型convert之后,compile之前,进行算子删除(Quantize/Dequantize/Cast等算子):此过程通过调用 remove_io_op() 接口进行。

模型修改的具体步骤可参考模型修改章节的介绍,以上调用API接口的详细说明您可参考 HBDK Tool API Reference 章节的介绍。

模型编译、性能评测及可视化

测试定点模型精度并确认符合您的要求后,便可以进行模型编译、性能评测和可视化。

注意
  1. 模型性能评测使用的模型,请确保已至少做过一次校准(step 数不限),以保证模型中的统计量符合实际情况,否则会造成性能测试结果不准确。

  2. compile_opt支持配置为0、1、2,等级越高编译出的模型上板执行速度越快,但编译过程会慢,用于性能评测时,建议您设置为默认值2。

  3. 当某个OP的实际计算耗时与理论计算耗时的偏差大于您指定的compile_advice值时,会打印相关log,包括耗时变化的信息、数据对齐前后的shape以及padding比例等信息,单位为微秒。

您可以通过 hb_analyzer工具 完成各阶段hbir模型及hbm模型的性能分析,具体使用方式及报告解读请跳转并参考相应章节。

您也可以通过下面的代码段基于hbm_perf完成性能分析。

import os
from hbdk4.compiler import compile, hbm_perf

hbir_quantized_model = "quantized_model.bc"
model_path = "target_dir"

# 模型编译
compile(
    hbir_quantized_model,
    os.path.join(model_path, "model.hbm"),
    "nash-e",
    opt=2,
    advice=0.0
)

# 模型性能测试
hbm_perf(
    os.path.join(model_path, "model.hbm"),
    output_dir=model_path,
)

成功执行后,会在终端内打印模型FPS等基本信息,同时,在你设置的目录下,会生成该模型的静态性能评估文件:

|-- model.html        # 静态性能评估文件(可读性更好)
|-- model.json        # 静态性能评估文件

您可选择 model.htmlmodel.json 对BPU部分的静态性能数据进行查看。

如果您在调用hbm_perf时,对开发板参数 remote_ip 进行了配置,会远程连接开发板进行性能评估,同样会在当前调用API接口的目录下,生成该模型的性能评估文件。

性能评估文件的指标解读可以参考 仿真性能评估指标解读 章节。 如您发现模型的性能评估结果不能符合您的预期,可以参考 性能调优指导 章节进行性能调优。

上方为开发机端仿真性能评估,如您想进行板端性能实测,可以参考 板端实测模型性能数据 章节的介绍,步骤是一样的。

如果还想要可视化模型,可参考如下:

from hbdk4.compiler import visualize

# 模型可视化
visualize(hbir_quantized_model, "mobilenetv2_cifar10.onnx")

以上调用API接口的详细说明您可参考 HBDK Tool API Reference 章节的介绍。