专栏算法工具链模型量化损失

模型量化损失

已解决
yy12342024-08-27
158
7

用户您好,请详细描述您所遇到的问题,详细的描述有助于帮助我们快速定位,解决问题~Thanks♪(・ω・)ノ

1. 芯片型号:J5

2. 天工开物开发包 OpenExplorer 版本: J5_OE_1.1.74

3. 问题定位:模型转换

4. 问题具体描述:您好,请问模型量化损失,通过精度debug已经定位到是softmax,layernorm中敏感算子引起,量化有损失,qat收益也不太大,有什么办法降低量化损失吗。

用的是论坛公开的petr模型,换自己小批量数据训练后浮点与量化后结果比较一致。但用了全量数据训练后量化精度损失比较大。

算法工具链
征程5
评论2
0/1000
  • momo(社区版)
    Lv.4

    hello,在QAT中,可以尝试把敏感算子配置为int16量化,使用plugin封装的int16配置接口,如下:

    配置方法为为在prepare_qat_fx函数中配置“softmax_id”:default_qat_8bit_weight_16bit_act_fake_quant_qconfig,

    2024-09-02
    0
    3
    • momo(社区版)回复momo(社区版):

      参考资料:https://developer.horizon.auto/developerForum?fullPath=/home/community/bbsdetail?bid=527752280233869312

      https://developer.horizon.auto/developerForum?fullPath=/home/community/bbsdetail?bid=177840589839214595

      2024-09-02
      0
    • yy1234回复momo(社区版):
      好的,十分感谢。地平线开发者社区 (horizon.cc) 在这个链接中,文章最后说  如果 QAT 精度正常但 quantized 精度不足,可尝试手动调整查表参数,如 layernorm 和 softmax 均支持手调的参数;这个怎么操作呢?好像没有看到工具链有这种手动调整查表参数工具,手动改查表这种方法是可行的吗
      2024-09-02
      0
    • momo(社区版)回复yy1234:
      目前在手册中看到了 layernorm 可通过 rsqrt_kwargs 属性来控制内部 rsqrt 查表的参数(softmax没看到):

      相关代码路径:docker中/usr/local/lib/python3.8/dist-packages/horizon_plugin_pytorch/-/blob/master/horizon_plugin_pytorch/nn/qat/layernorm.py

      2024-09-03
      0
  • Pipeline
    Lv.2
    2024-08-27
    0
    2
    • yy1234回复Pipeline:

      尝试过文档中部分操作,但在不改模型结构 不牺牲浮点模型性能的情况下,量化后损失依旧太大。想问一下在horizon_plugin_pytorch/nn/quantized/exp.py中 softmax的底层查表是int8吧?需要确认一下这部分我们是不是没有办法修改,不能直接修改为int16或者int32实现,因为仅修改量化工具后,板端推理库没更新也是无法正确运行的甚至无法完成编译。

      2024-08-28
      0
    • momo(社区版)回复yy1234:

      可以参考算子支持列表来配置算子的量化类型,这样能够保证模型的编译和推理成功https://developer.d-robotics.cc/api/v1/fileData/horizon_j5_open_explorer_cn_doc/plugin/source/appendix/operator.html

      2024-09-02
      0