专栏算法工具链J6工具链PTQ quant_config参数解读-1

J6工具链PTQ quant_config参数解读-1

momo(社区版)2024-11-28
239
0

引言

为了更加灵活地支持多种量化配置,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文件,如下所示:

 

注意事项

  1. 当配置了某个op输入/输出数据类型为int16后,模型转换内部会自动进行op输入输出上下文(context)int16配置的更新和检查。 例如,当配置op_1输入/输出数据类型为int16时,实际上潜在同时指定了op_1的上/下一个op需要支持以int16计算。 对于不支持的场景,hb_compile工具会打印log提示该int16配置组合暂时不被支持并回退到int8计算。
  2. json文件中最后一行的配置不能有逗号,否则工具会报错,如下所示:

错误配置方式:

报错信息:

 

算法工具链
社区征文征程6技术深度解析杂谈
评论0
0/1000