工具原理及优点
工具原理
昇腾模型压缩工具是基于TensorFlow框架的Python工具包,实现了神经网络模型中Conv+BN融合、Depthwise_Conv+BN融合、Group_conv+BN融合、数据与权重8比特量化的功能,该工具将量化和模型转换分开,实现对模型中可量化层的独立量化,并将量化后的模型存为pb文件。其中量化后的仿真模型可以在CPU或者GPU上运行,完成精度仿真;量化后的部署模型可以部署在昇腾AI处理器上运行,达到提升推理性能的目的。针对本手册,量化后的精度仿真模型和部署模型,合二为一。当前该工具仅支持对FP32数据类型的模型进行量化。
昇腾模型压缩工具运行流程如图4-4所示,蓝色部分为用户实现,灰色部分为用户调用昇腾模型压缩工具提供的API实现,用户在TensorFlow原始网络推理的代码中导入库,并在特定的位置调用相应API,即可实现量化功能。工具使用分为如下场景:
- 基于calibration的量化
- 场景1:
- 用户首先构造TensorFlow的原始模型,然后使用create_quant_config生成量化配置文件。
- 根据TensorFlow模型和量化配置文件,即可调用quantize_model接口对原始TensorFlow模型进行优化,修改后的模型中包含了量化算法,用户使用该模型借助昇腾模型压缩工具提供的数据集和校准集,在TensorFlow环境中进行inference,可以得到量化因子。
其中数据集用于在TensorFlow环境中对模型进行推理时,测试量化数据的精度;校准集用来产生量化因子,保证精度。
- 最后用户可以调用save_model接口保存量化后的模型,该模型即可在TensorFlow环境中进行精度仿真又可以昇腾AI处理器部署。
关于接口的详细说明请参见接口说明。
- 场景2:
如果用户不使用 场景1中的接口,而是用自己计算得到的量化因子以及TensorFlow原始模型,生成量化模型,则需要使用convert_model接口完成相关量化动作。该场景下的量化示例请参见convert_model接口量化示例。
- 场景1:
- 基于retrain的量化
- 用户首先构造TensorFlow的原始模型,然后使用create_quant_retrain_config生成量化配置文件。
- 调用create_quant_retrain_model接口对原始TensorFlow模进行优化,修改后的模型中包含了量化算法,用户使用该模型借助昇腾模型压缩工具提供的数据集和校准集,在TensorFlow模环境中进行retrain,可以得到量化因子。
- 最后用户可以调用save_quant_retrain_model接口保存模型,该模型即可在TensorFlow环境中进行精度仿真又可以昇腾AI处理器部署。
工具实现的融合功能
- Conv+BN融合:昇腾模型压缩工具在量化前会对模型中的"Conv2D+BatchNorm"结构做Conv+BN融合,融合后的"BatchNorm"层会被删除。
- Depthwise_Conv+BN融合:昇腾模型压缩工具在量化前会对模型中的"DepthwiseConv2dNative+BatchNorm"结构做Depthwise_Conv+BN融合,融合后的"BatchNorm"层会被删除。
- Group_conv+BN融合:如果模型中使用"Split+多路Conv2D+ ConcatV2(或Concat)"表示Group_conv,昇腾模型压缩工具在量化前会对模型中"Group_conv+BatchNorm"结构做融合,融合后的"BatchNorm"层会被删除。
BN支持融合的算子类型为FusedBatchNorm, FusedBatchNormV2 和FusedBatchNormV3。
- BN小算子融合为FusedBatchNormV3大算子(BN小算子融合为大算子,只支持BN小算子输入为4维的场景)。昇腾模型压缩工具对tf.keras.layers.BatchNormalization产生的小算子结构的BN进行匹配,并且将匹配到的小算子BN结构替换为大算子的BN结构,具体支持的小算子BN结构的场景如下所示:
- tf.keras.layers.BatchNormalization接口满足:入参fused=False,调用参数inputs, training=False,融合前后网络结构图为:
- tf.keras.layers.BatchNormalization接口满足:入参fused=False, center=False,调用参数inputs, training=False,融合前后网络结构图为:
- tf.keras.layers.BatchNormalization接口满足:入参fused=False, scale=False,调用参数inputs, training=False,融合前后网络结构图为:
- tf.keras.layers.BatchNormalization接口满足:入参fused=False, scale=False, center=False,调用参数inputs, training=False,融合前后网络结构图为:
- tf.keras.layers.BatchNormalization接口满足:入参fused=False,调用参数inputs, training=False,融合前后网络结构图为:
工具优点
- 使用方便,安装工具包即可。
- 接口简单,在用户基于TensorFlow框架的推理脚本基础上,调用API即可完成量化。
- 与硬件配套,生成的量化模型(quantized模型)经过ATC工具转换后可在昇腾AI处理器上实现8比特推理。
- 量化可配置,用户可自行修改量化配置文件,调整量化策略,获取较优的量化结果。