未验证 提交 fb54e938 编写于 作者: C cc 提交者: GitHub

Update quantization method name, test=develop, test=document_fix (#3758)

上级 7e95c20f
# 模型量化-无校准数据训练后量化 # 模型量化-动态离线量化
本文首先简单介绍无校准数据训练后量化,然后说明产出量化模型,最后阐述量化模型预测。 本文首先简单介绍动态离线量化,然后说明产出量化模型,最后阐述量化模型预测。
## 1 简介 ## 1 简介
无校准数据训练后量化,将模型中特定OP的权重从FP32类型量化成INT8/16类型,可以减小预测模型的大小。使用该量化模型预测,首先将INT8/16类型的权重反量化成FP32类型,然后再进行预测。 动态离线量化,将模型中特定OP的权重从FP32类型量化成INT8/16类型。
该量化模型有两种预测方式:第一种是反量化预测方式,即是首先将INT8/16类型的权重反量化成FP32类型,然后再使用FP32浮运算运算进行预测;第二种量化预测方式,即是预测中动态计算量化OP输入的量化信息,基于量化的输入和权重进行INT8整形运算。
注意,目前PaddleLite仅仅支持第一种反量化预测方式。
使用条件: 使用条件:
* 有训练好的预测模型 * 有训练好的预测模型
使用步骤: 使用步骤:
* 产出量化模型:使用PaddlePaddle调用无校准数据训练后量化接口,产出量化模型 * 产出量化模型:使用PaddlePaddle调用动态离线量化离线量化接口,产出量化模型
* 量化模型预测:使用PaddleLite加载量化模型进行预测推理 * 量化模型预测:使用PaddleLite加载量化模型进行预测推理
优点: 优点:
...@@ -18,11 +22,11 @@ ...@@ -18,11 +22,11 @@
* 权重量化成INT8类型,模型精度会受到影响,模型大小为原始的1/4 * 权重量化成INT8类型,模型精度会受到影响,模型大小为原始的1/4
缺点: 缺点:
* 只可以减小模型大小,不能加快模型推理 * 目前只支持反量化预测方式,主要可以减小模型大小,对特定加载权重费时的模型可以起到一定加速效果
## 2 产出量化模型 ## 2 产出量化模型
因为目前该方法还没有在PaddleSlim中集成,大家可以使用PaddlePaddle调用无校准数据训练后量化接口,得到量化模型。 目前该方法还没有在PaddleSlim中集成,大家可以使用PaddlePaddle调用动态离线量化接口,得到量化模型。
### 2.1 安装PaddlePaddle ### 2.1 安装PaddlePaddle
...@@ -32,9 +36,9 @@ ...@@ -32,9 +36,9 @@
准备已经训练好的FP32预测模型,即 `save_inference_model()` 保存的模型。 准备已经训练好的FP32预测模型,即 `save_inference_model()` 保存的模型。
### 2.3 调用无校准数据训练后量化 ### 2.3 调用动态离线量化
对于调用无校准数据训练后量化,首先给出一个例子。 对于调用动态离线量化,首先给出一个例子。
```python ```python
from paddle.fluid.contrib.slim.quantization import WeightQuantization from paddle.fluid.contrib.slim.quantization import WeightQuantization
...@@ -52,7 +56,7 @@ weight_quant.quantize_weight_to_int(save_model_dir=save_model_dir, ...@@ -52,7 +56,7 @@ weight_quant.quantize_weight_to_int(save_model_dir=save_model_dir,
执行完成后,可以在 `save_model_dir/quantized_model` 目录下得到量化模型。 执行完成后,可以在 `save_model_dir/quantized_model` 目录下得到量化模型。
对于调用无校准数据训练后量化,以下对api接口进行详细介绍。 对于调用动态离线量化,以下对api接口进行详细介绍。
```python ```python
class WeightQuantization(model_dir, model_filename=None, params_filename=None) class WeightQuantization(model_dir, model_filename=None, params_filename=None)
...@@ -85,11 +89,11 @@ WeightQuantization.quantize_weight_to_int(self, ...@@ -85,11 +89,11 @@ WeightQuantization.quantize_weight_to_int(self,
## 3 量化模型预测 ## 3 量化模型预测
目前,对于无校准数据训练后量化产出的量化模型,只能使用PaddleLite进行预测部署。 目前,对于动态离线量化产出的量化模型,只能使用PaddleLite进行预测部署。
很简单,首先使用PaddleLite提供的模型转换工具(opt)将量化模型转换成移动端预测的模型,然后加载转换后的模型进行预测部署。 很简单,首先使用PaddleLite提供的模型转换工具(opt)将量化模型转换成移动端预测的模型,然后加载转换后的模型进行预测部署。
注意,PaddleLite 2.3版本才支持无校准数据训练后量化产出的量化,所以转换工具和预测库必须是2.3及之后的版本。 注意,PaddleLite 2.3版本才支持动态离线量化产出的量化,所以转换工具和预测库必须是2.3及之后的版本。
### 3.1 模型转换 ### 3.1 模型转换
......
# 模型量化-有校准数据训练后量化 # 模型量化-静态离线量化
## 1 简介 ## 1 简介
有校准数据训练后量化,使用少量校准数据计算量化因子,可以快速得到量化模型。使用该量化模型进行预测,可以减少计算量、降低计算内存、减小模型大小。 静态离线量化,使用少量校准数据计算量化因子,可以快速得到量化模型。使用该量化模型进行预测,可以减少计算量、降低计算内存、减小模型大小。
有校准数据训练后量化中,有两种计算量化因子的方法,非饱和量化方法和饱和量化方法。非饱和量化方法计算整个Tensor的绝对值最大值`abs_max`,将其映射为127。饱和量化方法使用KL散度计算一个合适的阈值`T` (`0<T<mab_max`),将其映射为127。一般而言,待量化Op的权重采用非饱和量化方法,待量化Op的激活(输入和输出)采用饱和量化方法 。 静态离线量化中,有两种计算量化因子的方法,非饱和量化方法和饱和量化方法。非饱和量化方法计算整个Tensor的绝对值最大值`abs_max`,将其映射为127。饱和量化方法使用KL散度计算一个合适的阈值`T` (`0<T<mab_max`),将其映射为127。一般而言,待量化Op的权重采用非饱和量化方法,待量化Op的激活(输入和输出)采用饱和量化方法 。
使用条件: 使用条件:
* 有训练好的预测模型 * 有训练好的预测模型
* 有少量校准数据,比如100~500张图片 * 有少量校准数据,比如100~500张图片
使用步骤: 使用步骤:
* 产出量化模型:使用PaddleSlim调用有校准数据训练后量化接口,产出量化模型 * 产出量化模型:使用PaddleSlim调用静态离线量化接口,产出量化模型
* 量化模型预测:使用PaddleLite加载量化模型进行预测推理 * 量化模型预测:使用PaddleLite加载量化模型进行预测推理
优点: 优点:
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
## 2 产出量化模型 ## 2 产出量化模型
大家可以使用PaddleSlim调用有校准数据训练后量化接口,得到量化模型。 大家可以使用PaddleSlim调用静态离线量化接口,得到量化模型。
### 2.1 安装PaddleSlim ### 2.1 安装PaddleSlim
...@@ -37,12 +37,12 @@ ...@@ -37,12 +37,12 @@
### 2.3 配置校准数据生成器 ### 2.3 配置校准数据生成器
有校准数据训练后量化内部使用异步数据读取的方式读取校准数据,大家只需要根据模型的输入,配置读取数据的sample_generator。sample_generator是Python生成器,**必须每次返回单个样本数据**,会用作`DataLoader.set_sample_generator()`的数据源。 静态离线量化内部使用异步数据读取的方式读取校准数据,大家只需要根据模型的输入,配置读取数据的sample_generator。sample_generator是Python生成器,**必须每次返回单个样本数据**,会用作`DataLoader.set_sample_generator()`的数据源。
建议参考[异步数据读取文档](https://www.paddlepaddle.org.cn/documentation/docs/zh/advanced_guide/data_preparing/use_py_reader.html)和本文示例,学习如何配置校准数据生成器。 建议参考[异步数据读取文档](https://www.paddlepaddle.org.cn/documentation/docs/zh/advanced_guide/data_preparing/use_py_reader.html)和本文示例,学习如何配置校准数据生成器。
### 2.4 调用有校准数据训练后量化 ### 2.4 调用静态离线量化
对于调用有校准数据训练后量化,首先给出一个例子,让大家有个直观了解。 对于调用静态离线量化,首先给出一个例子,让大家有个直观了解。
```python ```python
import paddle.fluid as fluid import paddle.fluid as fluid
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册