专栏算法工具链J6工具链对transformer模型进行QAT,如何处理时序

J6工具链对transformer模型进行QAT,如何处理时序

已解决
李俊何?2025-07-10
96
5

芯片信号:j6

大佬们,请教一个问题,可能有一些不成熟的地方,请见谅。
如题,我在对一个transformer的模型进行qat的时候,发现时序那部分改起来颇为复杂,flaot的forward中有一个buffer_length为10的时序循环逻辑,目前我用 导出onnx的forward (不包含时序循环逻辑)成功的生成了calib模型,并且在板端也能够成功跑通,目前calibration之后的精度掉点在10以内,进而想进行qat,但是又绕不开时序部分,所以想向大佬们求助一下。

直接在float模型的forward中加入quant和dequant节点,加载之前的pretrained pth参数,然后做finetuning,然后再将finetuning后的权重信息进行calib,是否能提高精度?

致以崇高的敬意

算法工具链
征程6技术深度解析
评论2
0/1000
  • Huanghui
    Lv.5

    你好,理论上应该是有收益的,QAT的过程中也会weight的范围收敛的更容易量化,这对PTQ也是有益的,但是QAT和PTQ是两套不同的流程,再算子处理策略上也不是完全一样的,尽量不要再qat和ptq之间切换,你使用了qat的流程就使用QAT就好了。

    另外,这里有一篇关于 时序 模型量化的文章,推荐你参考:https://auto-developer.horizon.cc/bloggerdetail?bid=716194941467996160

    2025-07-10
    2
    3
    • 李俊何?回复Huanghui:
      ganbei_org.svg感谢大佬认真解答,我去研究一下
      2025-07-10
      0
    • 默认25184回复Huanghui:
      请教下为什么尽量不要在qat和ptq之间切换?我理解理论上ptq得到的quantized model,如果掉点严重,再回头使用 calib model 进一步 qat 微调也没问题?实践起来具体会有什么不推荐切换使用的原因嘛? (虽然我目前还没实操过这部分) zuoyi_org.svg
      2025-07-11
      0
    • Huanghui回复默认25184:

      一个流程当中不建议QAT与PTQ切换,毕竟这两个他们的量化方式完全不同。PQT里面插入的节点跟QAT插入的节点也不同。所以是不能在一个流程中ptq与qat切换的。要么就是PTQ整个流程走下来,精度不达标,重新用pt模型走QAT流程。

      2025-07-21
      0
  • Jade-self
    Lv.5
    从使用方式看,ptq主要用命令行工具,qat使用python脚本。
    其次,走qat通路进行calib+qat,需要在代码层面进行一些修改适配,有一些学习成本,既然走了这个通路,直接通过工具链提供的几行API接口即可,会比导出onnx速度快的多。
    认一个通路,可以不需要学习两个通路的知识,减少学习代价。
    2025-07-18
    1
    0