文档首页> Atlas 200 DK 开发者套件(1.0.7.alpha)> 模型小型化工具使用指导(Caffe)> FAQ> 量化执行过程中提示“RuntimeError: Cannot find scale_d of layer '**' in record file”
更新时间:2021-03-18 GMT+08:00
分享

量化执行过程中提示“RuntimeError: Cannot find scale_d of layer '**' in record file”

问题描述

量化过程中调用save_model接口保存量化模型时,需要读取calibration阶段计算得到的数据量化参数scale_d,offset_d,如果未能在相应的记录文件中找到对应参数,则无法进行后续量化模型保存动作。因此模型小型化工具会抛出上述错误,并终止流程。

可能原因

保存scale_d和offset_d参数是在用户执行calibration动作时(调用caffe框架执行calibration模型做前向计算时),模型小型化工具在calibration模型中插入的IFMR层做的动作,而IFMR层需要先攒够用户指定batch_num数据后再进行一次量化计算得到scale_d和offset_d。导致RuntimeError: Cannot find scale_d of layer * in record file错误的原因主要分为两类:

  1. 执行caffe做inference错误:该问题可能原因有很多种,例如用户编译的caffe本身有问题,calibration模型存在问题,未能找到相应数据集等等。用户可以通过查看caffe框架本身抛出的异常信息来查看
  2. 用户提供的校准集数据量不满足设置的batch_num所需要的数据量:例如用户仅提供了一个batch的数据用作校准集,但设置了batch_num=2,这样在做calibration过程中,IFMR层未攒满足够的数据,不能执行量化操作,也就未能计算得到scale_d和offset_d,也会触发上述错误。用户可以通过查看IFMR在量化过程中打印的进程信息来排查,IFMR层会显示已经攒的数据量:

    当攒够指定数据量后,会触发量化操作:

    直至出现Do layer * activation calibration success!信息才表示完成了当前层的量化动作。

处理建议

  1. 根据caffe框架抛出的具体错误来相应进行修复。
  2. 适当增加校准集数据量或者降低量化算法batch_num配置(但降低batch_num可能会导致量化后模型精度下降,需要慎重考虑)直至满足校准集数据量大于等于`batch_num`设置。
分享:

    相关文档

    相关产品

close