以下提供了改善训练结果的一些技巧:
- 尽可能加载预训练的浮点权重作为初始值,以启动量化感知训练。虽然可以利用随机初始值从头开始训练,但这将增加训练复杂性且更耗时。
- 如果加载预训练的浮点权重,则必须对网络参数和量化器参数分别使用不同的初始学习率策略和学习率下降策略。总体上,对网络参数必须设置较小的学习率,对量化器参数则须设置较大的学习率。
model = qat_processor.trainable_model() param_groups = [{ 'params': model.quantizer_parameters(), 'lr': 1e-2, 'name': 'quantizer' }, { 'params': model.non_quantizer_parameters(), 'lr': 1e-5, 'name': 'weight' }] optimizer = torch.optim.Adam(param_groups)
- 对于优化器的选择,请避免使用 torch.optim.SGD,因为此优化器可能阻止训练收敛。AMD 建议使用 torch.optim.Adam 或 torch.optim.RMSprop 及其变体。