megengine.quantization.QConfig¶
- class QConfig(weight_observer, act_observer, weight_fake_quant, act_fake_quant)[源代码]¶
A config class indicating how to do quantize toward
QATModule‘sactivationandweight. Seeset_qconfigfor 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 以避免溢出。属性。
Alias for field number 3
Alias for field number 1
Alias for field number 2
Alias for field number 0
方法
count(value, /)Return number of occurrences of value.
index(value[, start, stop])Return first index of value.