--compression_optimize_conf
功能说明
压缩优化功能配置文件路径以及文件名,通过该参数使能配置文件中指定的压缩优化特性,从而提升网络性能。
关联参数
若通过该参数配置了calibration量化特性,则不能再使用高精度特性,比如不能再通过--precision_mode参数配置force_fp32或must_keep_origin_dtype(原图fp32输入);不能再通过--precision_mode_v2参数配置origin;不能通过--op_precision_mode配置high_precision参数等。在高精度模式下设置量化参数,既拿不到量化的性能收益,也拿不到高精度模式的精度收益。
参数取值
参数值:配置文件路径以及文件名。
参数值格式:路径和文件名:支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、短横线(-)、句点(.)、中文汉字。
参数值约束:
当前仅支持配置如下两种压缩方式,用户根据实际情况决定配置哪种压缩方式:
enable_first_layer_quantization:true calibration: { input_data_dir: ./data.bin,d2.bin input_shape: in:16,16;in1:16,16 config_file: simple_config.cfg infer_soc: xxxxxx infer_aicore_num: 10 infer_device_id: 0 infer_ip: x.x.x.x infer_port: 8000 log: info }
其中:
- enable_first_layer_quantization:用于控制AIPP首层卷积是否进行优化(AIPP会与量化后模型首层卷积CONV2D前的Quant算子进行融合),配置文件中冒号前面表示压缩优化特性名称,冒号后面表示是否使能该特性,true表示使能,false表示不使能,默认不使能。只有Atlas 推理系列产品和Atlas 200/500 A2推理产品支持该特性。
使能enable_first_layer_quantization特性时,只有网络结构中存在AIPP+CONV2D结构,并且在atc命令中将--enable_small_channel参数设置为1时,才有可能获得性能收益。由于量化后的模型存在一定程度上的精度损失,用户根据实际情况决定是否使能该特性。
- calibration:训练后量化,是指在模型训练结束之后进行的量化,对训练后模型中的权重由浮点数(当前支持float32)量化到低比特整数(当前支持int8),并通过少量校准数据基于推理过程对数据(activation)进行校准量化,进而加速模型推理速度。训练后量化简单易用,只需少量校准数据,适用于追求高易用性和缺乏训练资源的场景。训练后量化的样例请单击Link获取。
各参数说明如下,
- input_data_dir:必选配置,模型输入校准数据的bin文件路径。若模型有多个输入,则多个输入的bin数据文件以英文逗号分隔。校准数据集用来计算量化参数,获取校准集时应该具有代表性,推荐使用测试集的子集作为校准数据集。校准数据的bin文件的生成方式可以参考链接。
- input_shape:必选配置,模型输入校准数据的shape信息,例如:input_name1:n1,c1,h1,w1;input_name2:n2,c2,h2,w2,节点中间使用英文分号分隔。
- config_file:可选配置,训练后量化简易配置文件,该文件配置示例以及参数解释请参见简易配置文件。
- infer_soc:必选配置,进行训练后量化校准推理时,所使用的芯片名称,查询方法请参见参数取值。
- infer_aicore_num:可选配置,进行训练后量化校准推理时,使用的AI Core数目;不建议配置,如需配置,则只能配置为默认值,默认值查询方法请参见参数取值。
- infer_device_id:可选配置,进行训练后量化校准推理时所使用昇腾AI处理器设备的ID,默认为0。
- infer_ip:Atlas 200/500 A2推理产品Ascend RC场景必选,NCS软件包所在服务器IP地址。
- infer_port:Atlas 200/500 A2推理产品Ascend RC场景必选,NCS软件包所在服务器端口。
- log:可选配置,设置训练后量化时的日志等级,该参数只控制训练后量化过程中显示的日志级别,默认显示info级别:
- debug:输出debug/info/warning/error/event级别的日志信息。
- info:输出info/warning/error/event级别的日志信息。
- warning:输出warning/error/event级别的日志信息。
- error:输出error/event级别的日志信息。
此外,训练后量化过程中的日志打屏以及日志落盘信息由AMCT_LOG_DUMP环境变量进行控制:- export AMCT_LOG_DUMP=1:日志打印到屏幕,并落盘到当前路径的amct_log_时间戳/amct_acl.log文件中,不保存量化因子record文件和graph文件。
- export AMCT_LOG_DUMP=2:将日志落盘到当前路径的amct_log_时间戳/amct_acl.log文件中,并保存量化因子record文件。
- export AMCT_LOG_DUMP=3:将日志落盘到当前路径的amct_log_时间戳/amct_acl.log文件中,并保存量化因子record文件和graph文件。
为防止日志文件、record文件、graph文件持续落盘导致磁盘被写满,请及时清理这些文件。
如果用户配置了ASCEND_WORK_PATH环境变量,则上述日志、量化因子record文件和graph文件存储到该环境变量指定的路径下,例如ASCEND_WORK_PATH=/home/test,则存储路径为:/home/test/amct_acl/amct_log_{pid}_时间戳。其中,amct_acl模型转换过程中会自动创建,{pid}为进程号。
上述日志文件、record文件、graph文件重新执行量化时会被覆盖,请用户自行进行保存。此外,由于生成的日志文件大小和所要量化模型层数有关,请用户确保ATC工具所在服务器有足够空间:
以量化resnet101模型为例,日志级别设置为INFO,日志文件大小为12KB左右,中间临时文件大小为260MB左右;日志级别设置为DEBUG,日志文件大小为390KB左右,中间临时文件大小为430MB左右。
参数默认值:无。
推荐配置及收益
无
示例
假设压缩优化功能配置文件名称为compression_optimize.cfg,文件内容配置示例如下:
enable_first_layer_quantization:true calibration: { input_data_dir: ./data.bin,d2.bin input_shape: in:16,16;in1:16,16 config_file: simple_config.cfg infer_soc: xxxxxx infer_aicore_num: 10 infer_device_id: 0 infer_ip: x.x.x.x infer_port: 8000 log: info }
将该文件上传到ATC工具所在服务器,例如上传到$HOME/module,使用示例如下:
--compression_optimize_conf=$HOME/module/compression_optimize.cfg
开启量化功能后,模型转换时提示“build_main build graph[infer_graph_info] failed”,请参见开启量化功能,模型转换时提示“build_main build graph[infer_graph_info] failed”。
支持的型号
Atlas 200/300/500 推理产品
Atlas 推理系列产品
Atlas 训练系列产品
Atlas 200/500 A2推理产品
Atlas A2训练系列产品/Atlas 800I A2推理产品
依赖约束
- 使用该参数中的enable_first_layer_quantization特性时,请确保使用的模型是由AMCT进行量化操作后输出的部署模型。
- 使用配置文件中的calibration训练后量化功能时,只支持带NPU设备的安装场景,详细介绍请参见《CANN软件安装指南》手册搭建对应产品环境。
Atlas 200/500 A2推理产品Ascend RC场景,还需要在运行环境上安装NCS软件,并配置密钥证书,请参见NCS安装和启动(运行环境)、配置密钥证书。
- 使用配置文件中的calibration进行训练后量化功能时,ATC工具会调用AMCT量化接口执行相关操作,原理图如下:
图1 训练后量化原理简图