7.5.1. 自定义 qconfig¶
自定义 qconfig 要求用户对具体的处理器限制认知清晰,详细了解训练工具的工作原理,详细了解如何通过 qconfig 体现处理器的限制。量化感知训练需要一定的训练成本,qconfig 定义出错可能导致模型无法正常收敛、模型无法编译等问题,因此,对于普通用户不推荐自定义 qconfig。
horizon_plugin_pytorch 采用 PyTorch 提供的 partial function 的方法实现 qcofnig 的定义,关于该方法的使用见官方说明,对该方法不了解的用户在继续阅读之前,请先自行学习该方法。
目前,qconfig 处理两类信息:
activation 的量化信息
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
)