QConfig¶
- class QConfig(weight_observer, act_observer, weight_fake_quant, act_fake_quant)[源代码]¶
一个配置类,指示如何对
QATModule
的activation
和weight
进行量化。有关详细用法,请参见set_qconfig
.- 参数
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 以避免溢出。