专栏算法工具链有关QAT莲花感知训练过程中的set_fake_quantize()函数作用

有关QAT莲花感知训练过程中的set_fake_quantize()函数作用

已解决
Vincent2025-01-16
52
2
在量化感知训练过程中模型比常规的浮点模型训练多了prepare,calibration的过程,但是在迭代训练内部有个set_fake_quantize()的函数, set_fake_quantize(qat_model, FakeQuantState.QAT)  ,其作用是什么?
算法工具链
征程6
评论1
0/1000
  • Huanghui
    Lv.5

    你好,这个是是用于控制量化训练过程 校准开关和训练开关的, 校准开关决定是是否更新量化参数,scale, min, max等; 训练开关决定了是否启用伪量化功能让模型感知量化带来的变化; 从代码可以看出,目前 FakeQuantState 的状态有4种:

    QAT该模式下,observer启用 ,scales(缩放因子)会被更新。伪量化启用推理结果会后量化带来的影响,其必须与 model.train() 方法一起使用,才能更新模型的weight;

    CALIBRATION模式下,伪量化关闭,observer打开,只更新 scales,与 model.eval() 方法一起使用来收集信息(如激活的范围)来确定 scales,而不进行训练。

    VALIDATION是验证模式。此时伪量化启用,但observer禁用,scale不会更新。与 model.eval() 方法一起使用,评估使用 scales 进行量化对模型的影响。

    _FLOAT是浮点数模式,不更新任何信息,通常仅供开发人员使用。

    2025-01-16
    0
    1
    • Vincent回复Huanghui:

      好的 谢谢,在量化感知训练中,模型更新的是scale,zeropoint这些,寻找一个最优scale,然后权重更新的是伪结点中的权重值?等训练结束后找出最优scale,然后再更新实际的模型权重吧?

      2025-01-17
      0