专栏算法工具链量化分析结果讲解以及量化配置文件讲解

量化分析结果讲解以及量化配置文件讲解

爱学习的班马2026-04-23
24
1
你好,我在采用OE包3.7.0里面的模型进行量化训练以及量化分析时,有些参数不是很懂,其中get_qconfig_setter中的templates中一开始给全局的都设为int8,怎么后面ModuleNameTemplate(

{

m: {"dtype": qint16, "threshold": 1.1}
for m in int16_max_point_muls
}, # quant int8,固定 scale 方式 1
),
又通过这种配置将一些算子配置为int16呢?这些改变固定算子数据类型的方式是怎么知道修改哪些算子的?

还有通过quant_analysis.py分析得到的分析结果中statistic.txt怎么看?

附件:
算法工具链
技术深度解析征程6
评论1
0/1000
  • 费小财
    Lv.5

    原理:模板的优先级与覆盖机制

    在 QconfigSetter 中,templates 是一个列表,配置是按顺序生效的,后配置的规则会覆盖先配置的规则。

    全局默认配置:

    ModuleNameTemplate({"": qint8}) # 全局默认所有算子输入/输出/权重为 int8

    这行代码设定了“基准线”,即如果没有特殊说明,模型中所有部分都按 INT8 量化。

    特定算子覆盖:

    ModuleNameTemplate(

    {m: {"dtype": qint16, "threshold": 1.1} for m in int16_max_point_muls},

    )

    这行代码遍历 int16_max_point_muls 列表中的算子名称,将它们的量化类型强制修改为 INT16,并指定了固定的阈值(threshold)。由于它在全局配置之后,因此这些特定算子会忽略全局的 INT8 设置,转而使用 INT16。

    关于 threshold 和 Fixed Scale:

    当配置了 threshold 时,量化 scale 不再通过统计观察器(Observer)动态计算,而是固定为:

    scale= threshold/2的(n-1)方

    其中 n 是位宽(INT16 时 n=16)。这种方式常用于对数值范围敏感或物理意义明确的算子,防止因统计偏差导致量化误差过大 [2]。

    2026-04-28
    0
    0