7.5.1. 自定义 qconfig

自定义 qconfig 要求用户对具体的处理器限制认知清晰,详细了解训练工具的工作原理,详细了解如何通过 qconfig 体现处理器的限制。量化感知训练需要一定的训练成本,qconfig 定义出错可能导致模型无法正常收敛、模型无法编译等问题,因此,对于普通用户不推荐自定义 qconfig。

horizon_plugin_pytorch 采用 PyTorch 提供的 partial function 的方法实现 qcofnig 的定义,关于该方法的使用见官方说明,对该方法不了解的用户在继续阅读之前,请先自行学习该方法。

目前,qconfig 处理两类信息:

  1. activation 的量化信息

  2. weight 的量化信息

7.5.1.1. Activation 的量化信息

activation_8bit_fake_quant = FakeQuantize.with_args(
                         observer=MovingAveragePerTensorMinMaxObserver,
                         dtype="qint8",
                         ch_axis=0,
                         averaging_constant=0 # 自定义 observer 的参数
)

7.5.1.2. Weight 的量化信息

weight_8bit_fake_quant = FakeQuantize.with_args(
                         observer=MovingAveragePerChannelMinMaxObserver,
                         dtype="qint8",
                         ch_axis=0,
                         averaging_constant=1 # 自定义 observer 的参数
)

7.5.1.3. QConfig

通过 Qconfig 把 activation 和 weight 的量化信息封装起来,即可得到 qconfig

qat_8bit_qconfig = QConfig(
    activation=activation_8bit_fake_quant, weight=weight_8bit_fake_quant
)