QConfig

class QConfig(weight_observer, act_observer, weight_fake_quant, act_fake_quant)[源代码]

A config class indicating how to do quantize toward QATModule ‘s activation and weight. See set_qconfig for detail usage.

参数
  • weight_observer – 创建 Observer 实例的接口,指定获得权重(weight)的scale和zero_point的方法。

  • act_observer – 类似 weight_observer ,但该observer针对激活。

  • weight_fake_quant – 创建 FakeQuantize 实例来指明如何做 fake_quant 计算的接口。

  • act_observer – 类似 weight_fake_quant ,但针对激活。

实际案例

# Default EMA QConfig for QAT.
ema_fakequant_qconfig = QConfig(
    weight_observer=partial(MinMaxObserver, dtype="qint8_narrow"),
    act_observer=partial(ExponentialMovingAverageObserver, dtype="qint8"),
    weight_fake_quant=partial(FakeQuantize, dtype="qint8_narrow"),
    act_fake_quant=partial(FakeQuantize, dtype="qint8"),
)

每个参数都是一个 class 而不是一个实例。 我们建议使用 functools.partial 来添加 class 的初始化参数,这样就不需要在 set_qconfig 中提供参数。

通常我们给权重设置“窄”范围版本 (比如“qint8_narrow”) 的数值类型,给激活值设置普通版本的类型。比如对以下乘加操作的结果 a * b + c * d ,如果四个变量都是数值类型为 qint8 的 -128,那么乘加之后的结果是 2^15 ,而这会超出 qint32 的表示范围。而权重的计算方式一般都是这种形式,所以需要将最小值缩窄到 -127 以避免溢出。