Rspress

# #性能评测及调优

完成模型整体的量化编译得到板端部署的hbm模型后，我们既支持先在开发机端预估模型BPU部分的的静态性能，也在板端提供了无需任何代码开发的可执行工具帮助您快速评测模型的动态性能。

## #静态性能评测

- 如您是通过PTQ链路进行模型量化，使用命令行工具，则hb_compile工具编译模型时会默认生成静态性能评估文件（*.html & *.json），同时您也可以通过调用hbm_perf接口进行模型静态性能评测。参考命令如下：

  `from hbdk4.compiler import hbm_perf hbm_perf("model.hbm")`

  成功执行后，会在终端内打印模型FPS等基本信息，同时，在当前调用API接口的目录下，会生成该模型的静态性能评估文件（model.html&model.json）。 如您需要指定静态性能评估文件的路径，可以参考如下命令：

  `from hbdk4.compiler import hbm_perf hbm_perf("model.hbm", output_dir="target_dir")`

  文件中包含四个选项卡，Summary、Temporal Statistics、Layer Details、Timeline，其中：

  1. Summary选项卡提供了编译器预估的模型BPU部分性能。

  2. Temporal Statistics选项卡提供了模型一帧推理时间内的带宽占用情况。

  3. Layer Details选项卡提供了每一层BPU算子的计算量、计算耗时、数据搬运耗时的信息以及编译后layer活跃时间段（不代表该layer执行时间，通常为多个layer交替/并行执行）。

  4. Timeline选项卡提供了模型一帧推理时间内指令集的预估耗时及对应的计算单元的信息。

     Timeline选项卡中包含的一些指标如下：

     - TAE：Tensor Acceleration Engine，是BPU中负责Tensor计算加速的引擎模块。主要负责各种conv计算，也能支持部分Matrix计算。

     - VAE：Vector Acceleration Engine，是BPU中负责Vector计算加速的引擎模块。主要负责神经网络中各种element-wise的运算操作，例如A+B，A*B，LUT计算。

     - AAE：Auxiliary Acceleration Engine，是BPU中负责辅助计算加速的引擎模块。主要负责张量、向量、标量之外的辅助加速，例如Pooling、Resize、Warp等函数计算。

     - TRANS：是BPU中用于处理数据layout变换的计算单元。

     - STORE：表示将数据从内部缓存/寄存器写到内存中（或计算平台外）。

     - LOAD：表示从内存（可能是计算平台外）加载数据到计算平台缓存中。

- 如您是通过QAT链路进行模型量化，则直接调用hbm_perf接口进行模型静态性能评测即可，方法同上方描述。

## #动态性能评测

当模型的静态性能符合预期后，由于Pyramid和Resizer输入模型中存在动态属性，我们还支持进一步使用`hrt_model_exec`工具实测模型的动态性能。参考指令如下：

`hrt_model_exec perf --model_file model.hbm`

对于动态输入，stride的要求为W方向32对齐，详细计算方式可参考UCP—动态输入介绍的相关内容。

假设tensor的输入尺寸valid_shape为(1,112,112,2)，tensor_type=HB_DNN_TENSOR_TYPE_U8，stride= (-1,-1,2,1)，则stride的计算方式如下：

`// stride[3]=sizeof(tensor_type) -> 1 // stride[2]=stride[3]*valid_shape[3] -> 2 // stride[1]=ALIGN_32(stride[2]*valid_shape[2]) -> 2*112=224 // stride[0]=stride[1]*valid_shape[1] -> 224*112=25088 #define ALIGN_32(value) ((value + (32-1)) & ~(32-1))`

例如，Pyramid输入的模型，Y=(1,224,224,1)，UV=(1,112,112,2)，则参考指令如下：

`hrt_model_exec perf --model_file pyramid.hbm --input_stride="50176,224,1,1;25088,224,2,1"`

对于Resizer输入模型，工具内部会进行默认的ROI指定，默认值为[0,0,127,127]，如此默认值无法满足您的模型要求，可以参考如下指令进行指定：

`hrt_model_exec perf --model_file resizer.hbm --input_file=test.jpg,test.jpg,roi.txt --input_img_properties=Y,UV`

roi.txt内通过ROI（Region of Interest）的四个区域边坐标left、top、right、bottom的顺序进行指定，使用空格隔开，如：

`0 0 200 200`

## #性能调优建议

基于上方的性能评测及分析，您可能发现性能结果不及预期，此时可以参考模型性能调优 章节,我们提供的提升模型性能的建议与措施进行调优尝试。

页面目录