论坛算法工具链QAT时转换hbm文件时出现问题

QAT时转换hbm文件时出现问题

堇孑2026-08-11
103
7
  1. 芯片型号:J3

  2. 天工开物开发包 OpenExplorer 版本:horizon_xj3_open_explorer_v2.6.4-py38_20240319

  3. 问题定位:模型量化编译hbm文件时报错

  4. 问题具体描述:浮点训练、校准和QAT训练都正常,但在最后做模型量化编译时出现问题,尝试了在convert_fx()前加载qat-last.pt并检查权重,问题没有得到解决,只有将前处理模块和GCM3模块都跳过量化才没有出现报错internal error: max input left shift 6,但仍旧存在问题,想知道问题出在哪里
附件:
算法工具链
技术深度解析征程3
评论3
0/600
  • 堇孑
    Lv.1

    当前GCM3和前处理模块跳过量化能够成功输出hbm文件了,但是是否可以在量化这两个模块条件下完成编译呢

    2026-08-14
    0
    2
    • 金属货机回复堇孑:

      如果最终模型理应开启GCM3和前处理模块那么应该让浮点训练、prepare_fx、校准、QAT、convert_fx和HBM编译必须使用同一套模型结构及开关。不能在校准和 QAT 阶段关闭某个分支,再在编译阶段把该分支重新打开。开启GCM3和前处理需要校准阶段重新执行真实数据校准,重新进行QAT。删除检测头中显示NHWC的permute操作。抱歉这么晚才回复,这个排错复现的工作量有点大🙂

      2026-09-08
      0
    • 费小财回复堇孑:
      可以通过量化这两个模块完成编译,但必须解决数据分布极端导致的 Shift Overflow和算子融合/Layout导致的编译约束冲突。建议优先从修正 Pre-process接入方式和拆分 GCM共享实例入手,再辅以 Observer策略调整
      2026-09-13
      0
  • 金属货机
    Lv.2
    您好,我按照您提供的代码对量化、转换编译流程做了完整复现,现在看来实际上有两个问题:①internal error: max input left shift 6,量化图与最终编译图不一致。②unsupported layout conversion,检测头输出布局处理不正确。
    我先用/0811test/model.hbir重新编译了一下,并没有出现left shift错误,而是出现了unsupported layout conversoin报错,为了继续定位我重新从QAT模型构建计算图,发现只要GCM3或前处理开启其一就会出现left shift报错。
    train_qat_swj.py中实际固定使用了use_gcm3=False和use_preprocessor=False,也就是说校准和QAT阶段生成的计算图没有真正执行GCM3和前处理分支,但在编译的时候两个模块又重新接入到了量化计算图。从qat-lats.pt中的量化参数能看出来与GCM3和Preprocess相关的212个scale全为1.0。而开启GCM3再去执行prepare_fx之后计算图中出现了大量mul,add 等节点,但这些节点在原来的QAT checkpoint 中没有对应的fake-quant和observer状态。也就是说这个checkpoint本身不包含编译需要的量化统计信息。
    2026-09-08
    0
    2
    • 金属货机回复金属货机:
      2026-09-08
      0
    • 金属货机回复金属货机:

      生成的HBM是没有开启GCM3和前处理的状态。(不知道为什么发不了文字,就截图发了)

      2026-09-08
      0
  • 费小财
    Lv.5
    使用 hb_analyzer 查看 .bc模型,找到产生 NHWCW_8W4C输出的算子和期望 NHWC_32W2C输入的算子,在这两个算子之间插入合法的 Transpose节点,或者修改前级算子的配置使其输出兼容的 Layout。
    3.重新编译:修正布局后,重新执行量化编译流程。若布局问题解决后仍报 Shift Error,需检查该层量化范围(Range),可能需要调整该层的 qconfig(如改为 per-channel量化或放宽范围)。
    2026-09-13
    0
    0