功能介绍
本节介绍如何通过接口对Graph进行自动量化。
功能介绍
通过调用aclgrphCalibration接口对非量化的Graph进行自动量化。量化过程中会对模型中的某些结构做算子融合,融合后图结构得到优化,从而提升网络推理性能。具体支持的融合功能请参见支持的融合功能。
使用约束
支持量化的层及约束请参考支持量化的层及约束。
调用示例
本章节以Caffe框架网络模型量化为例进行说明。
- 添加头文件。
1 2 3
#include "amct/acl_graph_calibration.h" #include "amct/acl_calibration_configs.h" #include "amct/amct_error_code.h"
- 通过解析或手动构造方式创建Graph对象。
1 2 3 4 5 6
#include "parser/caffe_parser.h" ge::Graph graph("origin"); std::map<ge::AscendString, ge::AscendString> parseOptions; auto ret = ge::aclgrphParseCaffe("./path/to/resnet50.prototxt", "./path/to/resnet50.caffemodel", parseOptions, graph);
- 定义aclgrphCalibration接口所需配置参数。
1 2 3 4
std::map<ge::AscendString, ge::AscendString> quantizeConfigs = {}; quantizeConfigs[ge::AscendString(amct::aclCaliConfigs::INPUT_DATA_DIR)] = ge::AscendString("./path/to/cali_data.bin"); quantizeConfigs[ge::AscendString(amct::aclCaliConfigs::INPUT_SHAPE)] = ge::AscendString("input:16,224,224,3"); quantizeConfigs[ge::AscendString(amct::aclCaliConfigs::SOC_VERSION)] = ge::AscendString("SOC_VERSION"); // SOC_VERSION请配置为实际的昇腾AI处理器型号
如果需要自行控制量化过程,可以使用CONFIG_FILE参数项传入控制量化过程的简易配置文件。配置文件的示例请参考简易配置文件。
CONFIG_FILE参数的配置示例如下:
1
quantizeConfigs[ge::AscendString(amct::aclCaliConfigs::CONFIG_FILE)]=ge::AscendString("./calibration.cfg");
- 调用接口执行量化改图。
1 2 3 4 5
ret = ge::aclgrphCalibration(graph, quantizeConfigs); if (ret != ge::GRAPH_SUCCESS) { return FAILED; } return SUCCESS;
编译上述程序的脚本时需要链接libamctacl.so,并添加链接时动态库的搜索路径${ASCEND_PATH}/compiler/lib64,其中ASCEND_PATH为“Ascend-cann-toolkit安装目录/ascend-toolkit/latest/”路径。
父主题: 自动量化