下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

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

问题描述

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

2021-05-11 09:29:18,138 - INFO - [AMCT]:[Optimizer]: Do <class 'amct_caffe.optimizer.check_record_scale_offset.CheckRecordScaleOffsetPass'>
2021-05-11 09:29:18,138 - ERROR - [AMCT]:[AMCT]: Cannot find scale_d,offset_d,channels,height,width of layer:Convolution1
2021-05-11 09:29:18,138 - ERROR - [AMCT]:[AMCT]: Check scale and offset record file xx/data/AMCT15_CAFFE_GPU_GPU_FAQ_LEVEL1_TC_001/AMCT15_CAFFE_GPU_GPU_FAQ_LEVEL1_TC_001_record.txt failed
2021-05-11 09:29:18,138 - ERROR - [AMCT]:[AMCT]: There may be something wrong while doing calibration
2021-05-11 09:29:18,138 - ERROR - [AMCT]:[AMCT]: Please check caffe log
Traceback (most recent call last):
  File "test_caffe_faq.py", line 32, in <module>
    main()
  File "test_caffe_faq.py", line 28, in main
    gen_amct_model(case,json_flag = True) 
  File "../caffe_lib/calibration_test/code/gen_amct_model.py", line 102, in gen_amct_model
    save_model(graph, mode, AMCT_PATH+case_name)
  File "xx/amct/lib/python3.7/site-packages/amct_caffe/common/utils/check_params.py", line 43, in wrapper
    return func(*args, **kwargs)
  File "xx/amct/lib/python3.7/site-packages/amct_caffe/quantize_tool.py", line 190, in save_model
    optimizer.do_optimizer(graph)
  File "xx/amct/lib/python3.7/site-packages/amct_caffe/optimizer/graph_optimizer.py", line 60, in do_optimizer
    graph_pass.run(graph)
  File "xx/amct/lib/python3.7/site-packages/amct_caffe/optimizer/check_record_scale_offset.py", line 103, in run
    raise RuntimeError('Check file {} failed.'.format(record_file))
RuntimeError: Check file xx/data/AMCT15_CAFFE_GPU_GPU_FAQ_LEVEL1_TC_001/AMCT15_CAFFE_GPU_GPU_FAQ_LEVEL1_TC_001_record.txt failed.

可能原因

保存scale_d和offset_d参数是在用户执行calibration动作时(调用Caffe框架执行calibration模型做前向计算时),AMCT在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设置。
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词