模型量化编译过程中,hb_compile工具会根据配置文件的具体信息,生成中间阶段onnx模型文件以及仿真上板情况的runtime模型。
使用hb_compile工具对模型进行量化编译时,提供两种模式,快速性能评测模式(开启fast-perf)和传统模型转换编译模式(不开启fast-perf)。
快速性能评测模式开启后,会在转换过程中生成可以在板端运行最高性能的hbm模型,工具内部主要进行以下操作:
如您想使用快速性能评测模式(开启fast-perf),使用方式如下:
--config 参数进行配置。--input-shape 参数配置仅在快速性能评测模式(即开启fast-perf)时生效。如您想使用传统模型转换编译模式(不开启fast-perf),使用方式如下:
| 参数名称 | 参数说明 |
-h, --help | 显示帮助信息并退出。 |
-c, --config | 模型编译的配置文件,为yaml格式,文件名使用.yaml后缀。 |
--fast-perf | 开启fast-perf,开启后,会在转换过程中生成可以在板端运行最高性能的hbm模型,方便您用于后续的模型性能评测。 如您开启了fast-perf,还需要进行如下配置: -m, --model,Caffe或ONNX浮点模型文件。--proto,用于指定Caffe模型prototxt文件。--march,BPU的微架构。使用J6E处理器需设置为nash-e,使用J6M处理器需设置为nash-m。-i, --input-shape,可选参数,指定模型的输入节点的shape信息。使用方式为:
--input-shape可以不做配置,工具会自动读取模型文件中的尺寸信息。但对于动态输入节点而言,如未指定--input-shape,此时工具将仅动态输入节点第一维为[-1, 0, ?]的模型,默认会将动态输入节点的第一维设置为1。 |
编译产生的log文件会储存在命令执行路径下面,名称为 hb_compile.log。
一份完整的配置文件模板如下:
此处配置文件仅作展示,在实际模型配置文件中 caffe_model 与 onnx_model 两种只存在其中之一。
即,要么是Caffe模型,要么是ONNX模型。即 caffe_model + prototxt 或者 onnx_model 二选一。
配置文件主要包含模型参数组、输入信息参数组、校准参数组、编译参数组。在您的配置文件中,每个参数组位置都需要存在,具体参数分为可选和必选,可选参数可以不配置。
以下是具体参数信息,参数会比较多,我们依照上述的参数组次序介绍。可选/必选表示该参数项在配置文件中是否必须进行配置。
| 参数名称 | 参数配置说明 | 可选/必选 |
prototxt | 参数作用:指定Caffe浮点模型的prototxt文件名称。 参数类型:String。 取值范围:模型路径。 默认配置:无。 参数说明:模型为Caffe模型时必须配置。 | Caffe模型必选 |
caffe_model | 参数作用:指定Caffe浮点模型的caffemodel文件名称。 参数类型:String。 取值范围:模型路径。 默认配置:无。 参数说明:模型为Caffe模型时必须配置。 | Caffe模型必选 |
onnx_model | 参数作用:指定ONNX浮点模型的onnx文件名称。 参数类型:String。 取值范围:模型路径。 默认配置:无。 参数说明:模型为ONNX模型时必须配置。 | ONNX模型必选 |
march | 参数作用:指定产出混合异构模型需要支持的平台架构。 参数类型:String。 取值范围: 'nash-e'或'nash-m'。默认配置:无。 参数说明:两个可选配置值依次对应J6E和J6M处理器,根据您使用的平台选择。 | 必选 |
output_model_file_prefix | 参数作用:指定转换产出混合异构模型的名称前缀。 参数类型:String。 取值范围:无。 默认配置: 'model'。参数说明:输出的定点模型文件的名称前缀。 | 可选 |
working_dir | 参数作用:指定模型转换输出的结果的存放目录。 参数类型:String。 取值范围:无。 默认配置: 'model_output'。参数说明:若该目录不存在,则工具会自动创建目录。 | 可选 |
layer_out_dump | 参数作用:指定混合异构模型是否保留输出中间层值的能力。 参数类型:Bool。 取值范围: True、False。默认配置: False。参数说明:输出中间层的值是调试需要用到的手段,常规状态下请不要开启。 注意:请您注意,在layer_out_dump为True时,暂时不支持配置input_source为resizer。 | 可选 |
output_nodes | 参数作用:指定模型的输出节点。 参数类型:String。 取值范围:模型中的节点名称 。 默认配置:无。 参数说明:此参数用于支持您指定节点作为模型输出,设置值需为模型中的具体节点名称。 多个值的配置方法请参考 param_value配置 小节的说明。 | 可选 |
remove_node_type | 参数作用:设置删除节点的类型。 参数类型:String。 取值范围: "Quantize"、 "Transpose"、 "Dequantize"、 "Cast"、 "Reshape"、 "Softmax"。不同类型用;分割。默认配置:无。 参数说明:不设置或设置为空不影响模型转换过程。此参数用于支持您设置待删除节点的类型信息。 被删除的节点必须在模型的开头或者末尾,与模型的输入或输出连接。 注意:设置此参数后,我们会根据您的设置对模型的可删除节点进行匹配,如果您配置的待删除节点类型符合删除条件,即会进行删除,并重复此操作,直到可删除节点不能与配置的节点类型匹配为止。 | 可选 |
remove_node_name | 参数作用:设置删除节点的名称。 参数类型:String。 取值范围:模型中待删除的节点名称,不同类型用 ;分割。默认配置:无。 参数说明:不设置或设置为空不影响模型转换过程。此参数用于支持您设置待删除节点的名称。 被删除的节点必须在模型的开头或者末尾,与模型的输入或输出连接。 注意:设置此参数后,我们会根据您的设置对模型的可删除节点进行匹配,如果您配置的待删除节点名称符合删除条件,即会进行删除,并重复此操作,直到可删除节点不能与配置的节点名称匹配为止。 | 可选 |
debug_mode | 参数作用:保存用于精度debug分析的校准数据。 参数类型:String。 取值范围: "dump_calibration_data"默认配置:无。 参数说明:该参数作用为保存用于精度debug分析的校准数据,数据格式为.npy。该数据通过np.load()可直接送入模型进行推理。若不设置此参数,您也可自行保存数据并使用精度debug工具进行精度分析。 | 可选 |
node_info | 参数作用:支持配置指定op的输入输出数据类型为int16以及强制指定算子在CPU或BPU上运行。
多个值的配置方法请参考 param_value配置。
'OutputType' 不支持指定算子特定输出的 OutputType,配置后对算子的所有输出生效,不支持配置 'OutputType0' 、 'OutputType1' 等。 | 可选 |
| 参数名称 | 参数配置说明 | 可选/必选 |
input_name | 参数作用:指定原始浮点模型的输入节点名称。 参数类型:String。 取值范围:单输入时 "" 或输入节点名称,多输入时 "input_name1; input_name2; input_name3..."。默认配置:无。 参数说明:浮点模型只有一个输入节点情况时可选配置, 多于一个输入节点时必须配置以保证后续类型及校准数据输入顺序的准确性。 多个值的配置方法请参考 param_value配置。 | 单输入时可选 多输入时必选 |
input_type_train | 参数作用:指定原始浮点模型的输入数据类型。 参数类型:String。 取值范围: 'rgb' 、'bgr'、'yuv444'、'gray'、'featuremap'。默认配置: 'featuremap'。参数说明:每一个输入节点都需要配置一个确定的输入数据类型, 存在多个输入节点时,设置的节点顺序需要与 input_name 里的顺序严格保持一致。 多个值的配置方法请参考 param_value配置。 数据类型的选择请参考:转换内部过程解读 部分的介绍。 | 可选 |
input_type_rt | 参数作用:转换后混合异构模型需要适配的输入数据格式。 参数类型:String。 取值范围: 'rgb' 、'bgr'、'yuv444'、'nv12'、'gray'、'featuremap'。默认配置: 'featuremap'。参数说明:这里是指明您需要使用的数据格式。 不要求与原始模型的数据格式一致。 但是需要注意在边缘平台喂给模型的数据是使用这个格式。 每一个输入节点都需要配置一个确定的输入数据类型,存在多个输入节点时,设置的节点顺序需要与 input_name 里的顺序严格保持一致。多个值的配置方法请参考 param_value配置。 数据类型的选择请参考: 转换内部过程解读 部分的介绍。 | 可选 |
input_layout_train | 参数作用:指定原始浮点模型的输入数据排布。 参数类型:String。 取值范围: 'NHWC'、'NCHW'。默认配置:无。 参数说明:每一个输入节点都需要配置一个确定的输入数据排布, 这个排布必须与原始浮点模型所采用的数据排布相同。存在多个输入节点时, 设置的节点顺序需要与 input_name 里的顺序严格保持一致。多个值的配置方法请参考 param_value配置。 什么是数据排布请参考: 转换内部过程解读 部分的介绍。 | 必选 |
input_space_and_range | 参数作用:指定输入数据格式的特殊制式。 参数类型:String。 取值范围: 'regular'、'bt601_video'。默认配置: 'regular'。参数说明:这个参数是为了适配不同ISP输出的yuv420格式, 在相应 input_type_rt 为 nv12 时,该配置才有效,非 nv12 时会报错并退出。
| 可选 |
input_shape | 参数作用:指定原始浮点模型的输入数据尺寸。 参数类型:String。 取值范围:无。 默认配置:无。 参数说明:shape的几个维度以 x 连接,例如 '1x3x224x224'。原始浮点模型只有一个输入节点情况时可以不配置, 工具会自动读取模型文件中的尺寸信息。 配置多个输入节点时,设置的节点顺序需要与 input_name 里的顺序严格保持一致。多个值的配置方法请参考 param_value配置。 | 可选 |
input_batch | 参数作用:指定转换后混合异构模型需要适配的输入batch数量。 参数类型:Int。 取值范围: 1-4096。默认配置: 1。参数说明:输出中间层的值是调试需要用到的手段,常规状态下请不要开启。 这里input_batch为转换后混合异构hbm模型输入batch数量, 但不影响转换后bc的模型的输入batch数量。 此参数不配置时默认为1。 注意:
| 可选 |
separate_batch | 参数作用:设置是否开启独立batch模式。 参数类型:Bool。 取值范围: True、False。默认配置: False。参数说明:此参数不配置时,默认为False,即不开启独立batch模式。 独立batch模式不开启的情况下,输入需要被分配到一个连续的内存区域内。 例如,模型输入为1x3x224x224,input_batch设置为N, 则您需要准备的上板模型输入为Nx3x224x224。 而独立batch模式开启的情况下,内部会对开启此模式的输入节点做拆分, 拆分数量为您通过input_batch指定的数值,您可以针对每个batch单独准备输入, 此模式下不再要求输入必须被分配在连续的内存区域内。 例如,模型输入为1x3x224x224,input_batch设置为N, 此时您需要准备的上板模型输入则为N个1x3x224x224。 | 可选 |
norm_type | 参数作用:在模型中添加的输入数据预处理方法。 参数类型:String。 取值范围: 'data_mean_and_scale'、 'data_mean'、 'data_scale'、 'no_preprocess'。默认配置: 'no_preprocess'。参数说明:
input_name 里的顺序严格保持一致, 多个值的配置方法请参考 param_value配置。配置该参数的影响请参考:转换内部过程解读 部分的介绍。 注意: 当 input_type_rt 配置为featuremap非四维输入时, norm_type只能配置为no_preprocess。 | 可选 |
mean_value | 参数作用:指定预处理方法的图像减去的均值。 参数类型:Float。 取值范围:无。 默认配置:无。 参数说明:当 norm_type 存在 data_mean_and_scale 或 data_mean 时需要配置该参数。对于每一个输入节点而言,存在两种配置方式。 第一种是仅配置一个数值,表示所有通道都减去这个均值; 第二种是提供与通道数量一致的数值(这些数值以空格分隔开), 表示每个通道都会减去不同的均值。 配置的输入节点数量必须与 norm_type 配置的节点数量一致。 如果存在某个节点不需要 mean 处理,则为该节点配置 'None'. 多个值的配置方法请参考 param_value配置。 | 可选 |
scale_value | 参数作用:指定预处理方法的数值scale系数。 参数类型:Float。 取值范围:无。 默认配置:无。 参数说明:当 norm_type 存在 data_mean_and_scale 或 data_scale 时需要配置该参数。对于每一个输入节点而言,存在两种配置方式。 第一种是仅配置一个数值,表示所有通道都乘以这个系数; 第二种是提供与通道数量一致的数值(这些数值以空格分隔开), 表示每个通道都会乘以不同的系数。 配置的输入节点数量必须与 norm_type 配置的节点数量一致。如果存在某个节点不需要 scale 处理,则为该节点配置 'None'.多个值的配置方法请参考 param_value配置。 | 可选 |
input_type_rt/ input_type_train补充说明
地平线的计算平台架构,在设计时为了提升性能,做了两点假设:
假设输入的数据都是int8的量化数据。
摄像头获取到的数据是nv12。
因此,如果您在模型训练时使用rgb(NCHW)输入格式,但是想使这个模型能够高效处理nv12数据,只需要在模型转换时做如下配置:
若您在训练模型时使用gray格式,而实际使用中输入的数据格式为nv12格式,则用户可以将模型转换时的 input_type_rt 及 input_type_train 均配置为 gray,在嵌入式应用开发时仅使用nv12的y通道地址作为输入即可。
除了将输入数据转换为nv12,我们还支持您在训练和runtime infer时使用不同的rgb-order。工具会根据 input_type_rt 和 input_type_train 指定的数据格式自动添加数据转换节点,根据地平线的实际生产经验,并不是任意type组合都是需要的,为了避免您误用,我们只开放了一些固定的type组合如下表(Y为已支持类型,N为暂不支持类型,表格中第一行是 input_type_rt 中支持的类型,第一列是 input_type_train 支持的类型):
| input_type_train \ input_type_rt | nv12 | yuv444 | rgb | bgr | gray | featuremap |
|---|---|---|---|---|---|---|
| yuv444 | Y | Y | N | N | N | N |
| rgb | Y | Y | Y | Y | N | N |
| bgr | Y | Y | Y | Y | N | N |
| gray | N | N | N | N | Y | N |
| featuremap | N | N | N | N | N | Y |
为了配合计算平台对于输入数据类型的要求(int8),减小推理开销,对于 input_type_rt 类型为 rgb(NHWC/NCHW)/bgr(NHWC/NCHW) 的配置,转换工具转换出的模型,其输入数据类型均为 int8。也就是说,对于常规的图像数据,需要-128使用(该操作在API中已自动进行,无需再进行该操作)。
在转换得到的最终产出hbm模型中, input_type_rt 到 input_type_train 是一个内部的过程,您只需要关注 input_type_rt 的数据格式即可。正确理解每种input_type_rt的要求,对于嵌入式应用准备推理数据很重要,以下是对input_type_rt每种格式的说明:
rgb、bgr和gray都是比较常见的图像格式,注意每个数值都采用UINT8表示。
yuv444是一种常见的图像格式,注意每个数值都采用UINT8表示。
nv12是常见的yuv420图像格式,每个数值都采用UINT8表示。
nv12有个比较特别的情况是 input_space_and_range 设置 bt601_video 时,较于常规nv12情况,它的数值范围由[0,255]变成了[16,235],每个数值仍然采用UINT8表示。请注意, bt601_video 仅在 input_type_train 为 bgr 或 rgb 时支持通过 input_space_and_range 进行配置。
featuremap适用于以上列举格式不满足您需求的情况,此type每个数值采用float32表示。例如雷达和语音等模型处理就常用这个格式。
以上 input_type_rt 与 input_type_train 是固化在工具链的处理流程中,如果您非常确定不需要转换,将两个 input_type 设置成一样就可以了,一样的 input_type 会做直通处理,不会影响模型的实际执行性能。
同样的,数据前处理也是固化在流程中,如果您不需要做任何前处理,通过 norm_type 配置关闭这个功能即可,不会影响模型的实际执行性能。
| 参数名称 | 参数配置说明 | 可选/必选 |
cal_data_dir | 参数作用:指定模型校准使用的标定样本的存放目录。 参数类型:String。 取值范围:无。 默认配置:无。 参数说明:目录内校准数据需要符合输入配置的要求。 具体请参考 校准数据准备 部分的介绍。配置多个输入节点时, 设置的节点顺序需要与 input_name 里的顺序严格保持一致。多个值的配置方法请参考 param_value配置。 当calibration_type为 skip 时,cal_data_dir无需配置。 | 可选 |
calibration_type | 参数作用:校准使用的算法类型。 参数类型:String。 取值范围: 'default' 、'mix'、'kl'、'max' 和 'skip'。默认配置: 'default'。参数说明: kl 和 max 都是公开的校准量化算法,其基本原理可以通过网络资料查阅。default 是一个自动搜索的策略,会尝试从系列校准量化参数中获得一个相对效果较好的组合。mix 是一个集成多种校准方法的搜索策略,能够自动确定量化敏感节点,并在节点粒度上从不同的校准方法 中挑选出最佳方法,最终构建一个融合了多种校准方法优势的组合校准方式。建议您先尝试 default,如果最终的精度结果不满足预期,再根据 PTQ模型精度调优 章节的建议配置不同的校准参数。若您只想尝试对模型性能进行验证,但对精度没有要求,则可以尝试 skip 方式进行校准。该方式会使用max+内部生成的随机校准数据进行校准,不需要您准备校准数据,比较适合初次尝试对模型结构进行验证。注意: 使用skip方式时,因其使用max+内部生成的随机校准数据进行校准,得到的模型不可用于精度验证。 | 可选 |
max_percentile | 参数作用:该参数为max校准方法的参数, 用以调整max校准的截取点。 参数类型:Float。 取值范围: 0.5 ~ 1.0。默认配置: 1.0。参数说明:此参数仅在 calibration_type 为 max 时有效,常用配置选项有:0.99999/0.99995/0.99990/0.99950/0.99900。 建议您先尝试 calibration_type 配置 default, 如果最终的精度结果不满足预期,再根据 PTQ模型精度调优 部分建议调整该参数。 | 可选 |
per_channel | 参数作用:控制是否针对featuremap的每个channel进行校准。 参数类型:Bool。 取值范围: True、False。默认配置: False。参数说明: calibration_type 设置非default、非mix时有效。建议您先尝试 default,如果最终的精度结果不满足预期, 再根据 PTQ模型精度调优 章节建议调整该参数。 | 可选 |
optimization | 参数作用:此参数为您提供一些调优可配置选项, 通过该参数可配置不同的模式对模型精度/性能进行调优。 参数类型:String。 取值范围: set_model_output_int8、 set_model_output_int16、 set_{NodeKind}_input_int16、 set_{NodeKind}_output_int16、 set_Softmax_input_int8、 set_Softmax_output_int8、 asymmetric、 bias_correction、 lstm_batch_last。注:此处Nodekind为标准ONNX算子类型写法如Conv,Mul,Sigmoid等(区分大小写)。 具体请参考onnx官方op文档或 工具链算子支持约束列表-ONNX Operator Support List。 默认配置:无。 参数说明:注:具体算子类型的int16支持情况可参考 工具链算子支持约束列表-ONNX Operator Support List。
| 可选 |
quant_config | 参数作用:J6平台支持对一个算子配置多种计算类型,此参数用于支持您配置算子的计算类型,在不同层级配置模型中算子的计算精度,以生成所需混合精度模型。 参数类型:String。 取值范围:json文件路径。 默认配置:无。 参数说明:参数支持从多个层面( model_config、op_config、node_config)对计算精度进行配置,支持多种计算精度数据类型(int8/int16/float16)的配置,详细说明请参考下方quant_config补充说明。 | 可选 |
quant_config补充说明
quant_config支持多个层面对计算精度进行配置:
支持从 model_config、op_config、node_config 三个层面配置计算精度。
配置时三个层面存在优先级关系,配置粒度越小优先级越高,即优先级model_config<op_config<node_config。
当某个节点同时被多个维度配置时,优先级高的维度最终生效。
例如在op_config配置所有Add类型节点为int16计算,在node_config配置Add_2为int8计算,那么最终,Add_2节点为int8计算,其余Add算子int16计算。
quant_config支持多种计算精度数据类型的配置:
支持配置 int8/int16/float16 三种计算精度数据类型,关于这三种数据类型的具体说明如下:
int8:大部分算子的默认量化类型,一般无需您主动进行配置。
int16:请参考下方 int16配置说明。
float16:配置为float16类型时,工具内部将仅配置该算子为float16计算精度类型(不会对float16计算算子上下文算子进行计算广播更新)。
quant_config的json文件各层级参数说明:
| 一级参数 | 二级参数 | 三级参数 | 是否必填 | 说明 |
| model_config | all_node_type | 无 | optional | 一次性将模型中所有节点的输入设为指定类型,可选配置int16/float16。 |
| model_output_type | 无 | optional | 将模型的输出tensor设为指定类型,可选配置int8/int16。 | |
| op_config | NodeKind | type | optional | 配置某一类型的节点的输入数据类型,可选配置int8/int16/float16。 |
| node_config | NodeName | type | optional | 配置指定名称的节点的输入数据类型,可选配置int8/int16/float16。 |
quant_config的json模板配置示例:
如下所示为quant_config的json模板配置示例,包含所有可配置选项,您可参考此模板进行配置。
| 参数名称 | 参数配置说明 | 可选/必选 |
compile_mode | 参数作用:编译策略选择。 参数类型:String。 取值范围: 'latency'、'bandwidth'、'balance'。默认配置: 'latency'。参数说明: latency 以优化推理时间为目标。bandwidth 以优化ddr的访问带宽为目标。balance 平衡优化目标latency和bandwidth,设置为此项需指定balance_factor。如果模型没有严重超过预期的带宽占用,建议您使用 latency 策略。 | 可选 |
balance_factor | 参数作用:当compile_mode被指定为balance时,用于指定balance比率。 参数类型:Int。 取值范围: 0-100。默认配置:无。 参数说明:该参数仅在compile_mode被指定为balance时配套使用, 其余模式下配置不生效。
| 可选 |
core_num | 参数作用:模型运行核心数。 参数类型:Int。 取值范围: 1。默认配置: 1。参数说明:用于配置模型运行在地平线平台的核心数。 | 可选 |
optimize_level | 参数作用:模型编译的优化等级选择。 参数类型:String。 取值范围: 'O0'、'O1'、'O2'。默认配置: 'O0'。参数说明:优化等级可选范围为 O0 ~ O2。O0 不做任何优化, 编译速度最快,优化程度最低。O1 - O2 随着优化等级提高, 预期编译后的模型的执行速度会更快, 但是所需编译时间也会变长。 | 可选 |
input_source | 参数作用:设置上板hbm模型的输入数据来源。 参数类型:String。 取值范围: ddr,pyramid,resizer。默认配置:无,默认会根据input_type_rt的值从可选范围中自动选择:
ddr 表示数据来自内存,pyramid 和 resizer 表示来自处理器上的固定硬件。在具体的工程环境中适配resizer数据源需要调用专有接口, 相关约束条件及说明请您参考 hbDNNRoiInferV2接口说明。 此参数配置有些特殊,例如模型输入名称为 data,数据源为内存(ddr),则此处应该配置值为 {"data": "ddr"}。 | 可选 |
max_time_per_fc | 参数作用:指定模型的每个function call的最大可连续执行时间(单位μs)。 参数类型:Int。 取值范围: 0或1000-4294967295。默认配置: 0。参数说明:编译后的数据指令模型在BPU上进行推理计算时, 它将表现为1个或者多个function-call(BPU的执行粒度)的调用。 取值为0代表不做限制。 该参数用来限制每个function-call最大的执行时间, 模型只有在单个function-call执行完时才有机会被抢占。 详情参见 模型优先级控制 部分的介绍。 注意:
| 可选 |
jobs | 参数作用:设置编译hbm模型时的进程数。 参数类型:Int。 取值范围:机器支持的最大核心数范围内。 默认配置:16。 参数说明:在编译hbm模型时,用于设置进程数。 一定程度上可提高编译速度。 | 可选 |
advice | 参数作用:用于提示模型编译后预估的耗时增加的情况,单位是微秒。 参数类型:Int。 取值范围:自然数。 默认配置:0。 参数说明:模型在编译过程中,工具链内部会进行耗时分析。而实际过程中, 如算子做数据对齐等操作时会导致耗时有所增加,设置该参数后, 当某个OP的实际计算耗时与理论计算耗时的偏差大于您指定的值时,会打印相关log, 包括耗时变化的信息、数据对齐前后的shape以及padding比例等信息。 | 可选 |
具体参数的设置形式为:param_name: 'param_value' ,参数存在多个值时使用 ';' 符号分隔:param_name: 'param_value1; param_value2; param_value3' 。
当模型为多输入模型时,强烈建议您将 input_shape 等参数们显式的写出,以免造成参数对应顺序上的错误。
请注意,如果设置 input_type_rt 为 nv12,则模型的输入尺寸中不能出现奇数。
在模型转换的过程中,模型中的大部分算子都会被量化到int8进行计算,而通过配置 node_info 或 quant_config 参数,
可以详细指定某个op的输入/输出数据类型为int16计算(具体支持的算子范围可参考 工具链算子支持约束列表-ONNX Operator Support List,基本原理如下:
在您配置了某个op输入/输出数据类型为int16后,模型转换内部会自动进行op输入输出上下文(context)int16配置的更新和检查。 例如,当配置op_1输入/输出数据类型为int16时,实际上潜在同时指定了op_1的上/下一个op需要支持以int16计算。 对于不支持的场景,模型转换工具会打印log提示该int16配置组合暂时不被支持并回退到int8计算。