Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
models
提交
4d3bec4c
M
models
项目概览
PaddlePaddle
/
models
大约 1 年 前同步成功
通知
222
Star
6828
Fork
2962
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
602
列表
看板
标记
里程碑
合并请求
255
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
models
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
602
Issue
602
列表
看板
标记
里程碑
合并请求
255
合并请求
255
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
4d3bec4c
编写于
12月 23, 2019
作者:
J
juncaipeng
提交者:
GitHub
12月 23, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix doc for post_training_quantization, test=develop (#4096)
上级
427fb0f1
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
16 addition
and
4 deletion
+16
-4
PaddleSlim/quant_low_level_api/post_training_quantization.md
PaddleSlim/quant_low_level_api/post_training_quantization.md
+15
-3
PaddleSlim/quant_low_level_api/run_post_training_quanzation.sh
...eSlim/quant_low_level_api/run_post_training_quanzation.sh
+1
-1
未找到文件。
PaddleSlim/quant_low_level_api/post_training_quantization.md
浏览文件 @
4d3bec4c
...
...
@@ -30,7 +30,7 @@
1)
**准备模型和校准数据**
首先,需要准备已经训练好的FP32预测模型,即
`save_inference_model()`
保存的模型。训练后量化读取校准数据进行前向计算,所以需要准备校准数据集。校准数据集应为测试集(或训练集)中具有代表性的一部分,如随机取出的部分数据,这样可以计算得到更加准确的量化比例因子。
样本数据的数量可以是100~500,当然样本数据越多,计算的的量化比例因子越准确
。
首先,需要准备已经训练好的FP32预测模型,即
`save_inference_model()`
保存的模型。训练后量化读取校准数据进行前向计算,所以需要准备校准数据集。校准数据集应为测试集(或训练集)中具有代表性的一部分,如随机取出的部分数据,这样可以计算得到更加准确的量化比例因子。
建议样本数据的数量为100~500
。
2)
**配置校准数据生成器**
...
...
@@ -38,7 +38,7 @@
3)
**调用训练后量化**
机器上安装PaddlePaddle,然后调用PostTrainingQuantization实现训练后量化,以下对api接口进行详细介绍。
机器上安装PaddlePaddle
develop分支编译的whl包
,然后调用PostTrainingQuantization实现训练后量化,以下对api接口进行详细介绍。
```
python
class
PostTrainingQuantization
(
...
...
@@ -52,7 +52,9 @@ class PostTrainingQuantization(
scope
=
None
,
algo
=
"KL"
,
quantizable_op_type
=
[
"conv2d"
,
"depthwise_conv2d"
,
"mul"
],
is_full_quantize
=
False
)
is_full_quantize
=
False
,
is_use_cache_file
=
False
,
cache_dir
=
"./temp_post_training"
)
```
调用上述api,传入训练后量化必要的参数。参数说明:
*
executor:执行模型的executor,可以在cpu或者gpu上执行。
...
...
@@ -66,6 +68,8 @@ class PostTrainingQuantization(
*
algo:计算待量化激活Tensor的量化比例因子的方法。设置为
`KL`
,则使用KL散度方法,设置为
`direct`
,则使用abs max方法。默认为
`KL`
。
*
quantizable_op_type: 需要量化的op类型,默认是
`["conv2d", "depthwise_conv2d", "mul"]`
,列表中的值可以是任意支持量化的op类型。
*
is_full_quantize:是否进行全量化。设置为True,则对模型中所有支持量化的op进行量化;设置为False,则只对
`quantizable_op_type`
中op类型进行量化。目前,支持的量化类型如下:'conv2d', 'depthwise_conv2d', 'mul', "pool2d", "elementwise_add", "concat", "softmax", "argmax", "transpose", "equal", "gather", "greater_equal", "greater_than", "less_equal", "less_than", "mean", "not_equal", "reshape", "reshape2", "bilinear_interp", "nearest_interp", "trilinear_interp", "slice", "squeeze", "elementwise_sub"。
*
is_use_cache_file:是否使用缓存文件。如果设置为True,训练后量化过程中的采样数据会保存到磁盘文件中;如果设置为False,所有采样数据会保存到内存中。当待量化的模型很大或者校准数据数量很大,建议设置is_use_cache_file为True。默认为False。
*
cache_dir:当is_use_cache_file等于True,会将采样数据保存到该文件中。量化完成后,该文件中的临时文件会自动删除。
```
PostTrainingQuantization.quantize()
...
...
@@ -77,6 +81,14 @@ PostTrainingQuantization.save_quantized_model(save_model_path)
```
调用上述接口保存训练后量化模型,其中save_model_path为保存的路径。
**训练后量化支持部分量化功能**
*
方法1:设置quantizable_op_type,则只会对quantizable_op_type中的Op类型进行量化,模型中其他Op类型保持不量化。
*
方法2:构建网络的时候,将不需要量化的特定Op定义在
`skip_quant`
的name_scope中,则可以跳过特定Op的量化,示例如下。
```
python
with
fluid
.
name_scope
(
'skip_quant'
):
pool
=
fluid
.
layers
.
pool2d
(
input
=
hidden
,
pool_size
=
2
,
pool_type
=
'avg'
,
pool_stride
=
2
)
# 不对pool2d进行量化
```
## 2. 训练后量化使用示例
...
...
PaddleSlim/quant_low_level_api/run_post_training_quanzation.sh
浏览文件 @
4d3bec4c
...
...
@@ -17,7 +17,7 @@ python post_training_quantization.py \
--data_path
=
${
samples
}
\
--save_model_path
=
"mobilenetv1_int8_model"
\
--algo
=
"KL"
\
--is_full_quantize
=
Tru
e
\
--is_full_quantize
=
Fals
e
\
--batch_size
=
10
\
--batch_nums
=
10
\
--use_gpu
=
True
\
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录