引言
为了更加灵活地支持多种量化配置,J6 PTQ工具链的yaml 校准参数组中新增了quant_config参数,本文将结合应用实例说明此参数的丰富用法。
配置形式
quant_config参数不仅直接支持在yaml中书写配置的dict,还支持配置json文件路径,此json文件由量化配置dict组成。两种方式如下所示:
方式1:
方式2:
但是,如果量化配置较为复杂,在 yaml 中直接写 dict 的方式 2 会显得冗长,建议直接采用方式 1 于 json 文件中进行配置。
quant_config参数解析及配置示例
支持三个粒度的量化配置
quant_config支持在model_config、op_config、node_config三个粒度进行模型量化参数的配置,优先级为
node_config>op_config>model_config。
这3个粒度的详解如下:
model_config
model_config为配置整个模型的量化参数,其二级参数包括all_node_type和model_output_type,详细说明如下:

json配置示例:
op_config
op_config为配置某类算子的量化参数,其二级参数是算子的类型,Conv,MatMul等,详细说明如下:

json配置示例:
node_config
node_config为配置某个具体节点的量化参数,其二级参数是onnx模型中算子的name,详细说明如下:

json配置示例:
应用场景示例
在量化精度调优中,假设存在这样一个模型,即满足以下条件:
全int16量化精度符合预期;
工具默认的全int8精度不符合预期;
在全int8量化下使用精度debug工具后,发现部分算子对激活非常敏感;
在这样的场景下,我们就可以按照敏感度排序,将部分算子配置为int16,那么可以这样配置json文件,如下所示:
注意事项
- 当配置了某个op输入/输出数据类型为int16后,模型转换内部会自动进行op输入输出上下文(context)int16配置的更新和检查。 例如,当配置op_1输入/输出数据类型为int16时,实际上潜在同时指定了op_1的上/下一个op需要支持以int16计算。 对于不支持的场景,hb_compile工具会打印log提示该int16配置组合暂时不被支持并回退到int8计算。
json文件中最后一行的配置不能有逗号,否则工具会报错,如下所示:
错误配置方式:
报错信息:


