量化是指对模型的权重(weight)和数据(activation)进行低比特处理,让最终生成的网络模型更加轻量化,从而节省网络模型存储空间、降低传输时延、提高计算效率,达到性能提升与优化的目标。您可以通过调用aclgrphCalibration接口对非量化的Graph进行自动量化。
量化前会对模型中的某些结构做算子融合,融合后图结构得到优化,从而提升网络推理性能。具体支持的融合功能请参见支持的融合功能。
支持量化的层及约束请参考支持量化的层及约束。
1 2 3 |
#include "amct/acl_graph_calibration.h" #include "amct/acl_calibration_configs.h" #include "amct/amct_error_code.h" |
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); |
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/”路径。