手工量化
本节详细介绍训练后量化支持的量化层,接口调用流程和示例。
训练后量化支持量化的层以及约束如下,量化过程请参见获取更多样例。
支持的层类型 |
约束 |
备注 |
---|---|---|
MatMul:全连接层 |
transpose_a=False, transpose_b=False,adjoint_a=False,adjoint_b=False |
- |
BatchMatMul/BatchMatMulV2 |
adjoint_a=False,adjoint_b=False |
- |
Conv2D:卷积层 |
- |
weight的输入来源不含有placeholder等可动态变化的节点,且weight的节点类型只能是const。 |
DepthwiseConv2dNative:Depthwise卷积层 |
dilation=1 |
|
Conv2DBackpropInput:反卷积层 |
dilation=1 |
|
AvgPool:平均下采样层 |
- |
- |
接口调用流程
训练后量化接口调用流程如图1所示:
蓝色部分为用户实现,灰色部分为用户调用AMCT提供的API实现,用户在TensorFlow原始网络推理的代码中导入库,并在特定的位置调用相应API,即可实现量化功能。工具使用分为如下两种场景,本手册重点介绍使用NPU在线推理场景。使用TensorFlow CPU推理的详细操作以及sample运行示例请参见《AMCT工具(TensorFlow)》。
- 使用NPU在线推理:
- 用户首先构造TensorFlow的原始模型,然后使用create_quant_config_ascend接口生成量化配置文件。
- 根据TensorFlow模型和量化配置文件,即可调用quantize_model_ascend接口对原始TensorFlow模型进行优化,修改后的模型中包含了量化算法,用户使用该模型借助AMCT提供的数据集和校准集,在NPU环境中进行在线推理,可以得到量化因子。
其中数据集用于在NPU环境中对模型进行推理时,测试量化数据的精度;校准集用来产生量化因子,保证精度。
- 最后用户可以调用save_model_ascend接口保存量化后的模型,该模型可在NPU环境中部署。
- 使用TensorFlow CPU推理:
- 场景1:
- 用户首先构造TensorFlow的原始模型,然后使用create_quant_config接口生成量化配置文件。
- 根据TensorFlow模型和量化配置文件,即可调用quantize_model接口对原始TensorFlow模型进行优化,修改后的模型中包含了量化算法,用户使用该模型借助AMCT提供的数据集和校准集,在TensorFlow CPU环境中进行推理,可以得到量化因子。
其中数据集用于在TensorFlow环境中对模型进行推理时,测试量化数据的精度;校准集用来产生量化因子,保证精度。
- 最后用户可以调用save_model接口保存量化后的模型,该模型可在TensorFlow CPU环境中进行精度仿真。
关于接口的详细说明请参见接口说明。
- 场景2:
如果用户不使用 场景1中的接口,而是用自己计算得到的量化因子以及TensorFlow原始模型,生成量化模型,则需要使用convert_model接口完成相关量化动作。
- 场景1:
调用示例
调用示例请参见快速入门。
父主题: 量化