专栏算法工具链hrt_model_exec新增参数说明

hrt_model_exec新增参数说明

芯链情报局2023-03-16
166
0

前言

从J5工具链的1.1.33版本开始,板端工具hrt_model_exec新增了两个参数,分别是dump_intermediate和hybrid_dequantize_process:前者用于dump模型每层的输入输出,是否dump BPU子图内部的输出取决于模型编译时的yaml参数设置;后者用于将模型的int输出反量化成float保存,若输出已经是float则直接保存。

dump_intermediate

基本介绍

该参数可以dump模型每一层的输入数据和输出数据,支持hrt_model_exec的infer和perf两种模式。
可设置的值和对应功能如下表所示:

作用

0

不dump数据

1

数据保存类型为bin,其中BPU节点输出为aligned*数据

2

数据保存类型为bin和txt,其中BPU节点输出为aligned*数据

3

数据保存类型为bin和txt,其中BPU节点输出为valid*数据

*关于aligned和valid的详细说明,可以查看模型输入输出对齐规则解析:
https://developer.horizon.cc/forumDetail/118364000835765837
**作为模型输出节点的BPU节点依然是aligned数据,

使用示例


resnet18.bin

这是resnet18.bin模型的结构图,NV12格式的输入数据首先转换成YUV444格式送入BPU子图执行计算,之后依次经过反量化、Softmax、Reshape共3个CPU节点。在J5板端,可以使用以下命令验证dump_intermediate参数的效果:

执行结束后,同目录下会出现多个.bin文件,BPU子图和CPU节点的输入输出数据均已得到保存。

与layer_out_dump的关联

在模型编译阶段使用的yaml文件中,模型参数组有一个layer_out_dump参数,该参数用于指定混合异构模型是否保留输出BPU子图中间层值的能力,默认为False。若设置为True,则使用dump_intermediate时,BPU子图内部每个节点的输出数据都会被保存下来。

与环境变量对比

J5板端的环境变量_HB_DNN_DUMP_INTERMEDIATE_同样能起到dump数据的效果,使用方式如下:

该环境变量和dump_intermediate参数都会受到yaml配置文件中layer_out_dump参数的影响,但二者的使用场景存在差异:环境变量在运行自己编写的代码调用模型推理时起作用,而dump_intermediate参数用于hrt_model_exec的infer和perf功能。需要注意的是,二者互不干扰,配置一个并不会影响另一个的效果。

hybrid_dequantize_process

基本介绍

混合异构模型的BPU子图往往会有反量化节点,为了算法模型部署的整体性能更优,我们经常会在yaml文件中配置remove_node_type: "Dequantize"进行移除,并将反量化操作融合进后处理中。这样编译出的bin模型没有反量化节点,会给精度验证带来困难。然而,虽然反量化节点被删除,但反量化节点的信息依然会被保留。hybrid_dequantize_process参数适用于这类删去了反量化节点的bin模型,可以反量化整型输出数据并保存。
该参数只支持hrt_model_exec的infer模式,使用时需要同时配置enable_dump=true以dump模型的输入输出数据。
若设置hybrid_dequantize_process=true,则反量化整型输出数据,将所有输出按float类型保存为txt文件,其中模型输出为valid数据,支持配置dump_txt_axis参数控制换行规则和dump_precision参数控制小数点位数(这两个参数的使用说明可查阅J5工具链手册5.5.2章节),需要注意的是,该功能只适用于输出维度是四维的模型。
若设置hybrid_dequantize_process=false,则直接保存模型输出的aligned数据,不做任何处理。

使用示例


resnet18_modified.bin

这是resnet18_modified.bin模型的结构图,模型尾部原有的反量化、Softmax、Reshape算子均已被删除。在J5板端,可以使用以下代码验证hybrid_dequantize_process参数的效果:

执行结束后,同目录下会出现两个新文件:

打开txt文件,保存的float数据共有1000行,对应了模型的1000个分类输出。

一致性验证

接下来对以上数据的正确性进行验证,我们针对resnet18.bin模型,只删除尾部的Softmax和Reshape算子,保留Dequantize算子,现在模型结构图如下:

resnet18_dequantize.bin

之后运行如下命令:

打开生成的txt文件,查看保存数据,与上一步生成的保存数据完全相同。

至此,一致性验证完成,配置hybrid_dequantize_process参数保存的float数据正确。

算法工具链
征程5杂谈
评论0
0/1000