Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleSlim
提交
d8763558
P
PaddleSlim
项目概览
PaddlePaddle
/
PaddleSlim
1 年多 前同步成功
通知
51
Star
1434
Fork
344
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
53
列表
看板
标记
里程碑
合并请求
16
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleSlim
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
53
Issue
53
列表
看板
标记
里程碑
合并请求
16
合并请求
16
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
d8763558
编写于
4月 02, 2021
作者:
C
cc
提交者:
GitHub
4月 02, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[doc] Refine the docs of quantization (#705)
上级
0b2df6ec
变更
7
显示空白变更内容
内联
并排
Showing
7 changed file
with
60 addition
and
15 deletion
+60
-15
demo/mkldnn_quant/README.md
demo/mkldnn_quant/README.md
+3
-0
demo/quant/deploy/TensorRT/README.md
demo/quant/deploy/TensorRT/README.md
+2
-0
docs/zh_cn/deploy/deploy_cls_model_on_mobile_device.md
docs/zh_cn/deploy/deploy_cls_model_on_mobile_device.md
+2
-0
docs/zh_cn/quick_start/dygraph/dygraph_quant_aware_training_tutorial.md
...ck_start/dygraph/dygraph_quant_aware_training_tutorial.md
+14
-3
docs/zh_cn/quick_start/dygraph/dygraph_quant_post_tutorial.md
.../zh_cn/quick_start/dygraph/dygraph_quant_post_tutorial.md
+12
-0
docs/zh_cn/quick_start/static/quant_aware_tutorial.md
docs/zh_cn/quick_start/static/quant_aware_tutorial.md
+16
-11
docs/zh_cn/quick_start/static/quant_post_static_tutorial.md
docs/zh_cn/quick_start/static/quant_post_static_tutorial.md
+11
-1
未找到文件。
demo/mkldnn_quant/README.md
浏览文件 @
d8763558
...
...
@@ -9,6 +9,9 @@
-
在CPU上转换量化模型:在CPU上使用DNNL库转化量化模型为INT8模型。
-
在CPU上部署预测:在CPU上部署样例并进行预测。
参考资料:
*
PaddleInference Intel CPU部署量化模型
[
文档
](
https://paddle-inference.readthedocs.io/en/latest/optimize/paddle_x86_cpu_int8.html
)
## 1. 准备
#### 安装Paddle和PaddleSlim
...
...
demo/quant/deploy/TensorRT/README.md
浏览文件 @
d8763558
...
...
@@ -8,6 +8,8 @@ NVIDIA TensorRT 是一个高性能的深度学习预测库,适用于Nvidia GPU
-
产出量化模型:使用PaddleSlim量化训练或离线量化得到量化模型。注意模型中被量化的算子的参数值应该在INT8范围内,但是类型仍为float型。
-
在Nvidia GPU上部署预测:在GPU上以INT8类型进行预测部署。
参考资料:
*
PaddleInference NV GPU部署量化模型
[
文档
](
https://paddle-inference.readthedocs.io/en/latest/optimize/paddle_trt.html
)
## 1. 准备环境
...
...
docs/zh_cn/deploy/deploy_cls_model_on_mobile_device.md
浏览文件 @
d8763558
...
...
@@ -4,6 +4,8 @@
Paddle Lite是飞桨轻量化推理引擎,为手机、IOT端提供高效推理能力,并广泛整合跨平台硬件,为端侧部署及应用落地问题提供轻量化的部署方案。
参考资料:
*
PaddleLite部署量化模型
[
文档
](
https://paddle-lite.readthedocs.io/zh/latest/user_guides/quant_aware.html
)
## 1. 准备环境
...
...
docs/zh_cn/quick_start/dygraph/dygraph_quant_aware_training_tutorial.md
浏览文件 @
d8763558
...
...
@@ -6,8 +6,6 @@ PaddleSlim使用的是模拟量化训练方案,一般模拟量化需要先对
下面该教程将以图像分类模型MobileNetV1为例,说明如何快速使用
[
PaddleSlim的模型量化接口
](
)。
> 注意:目前动态图量化训练还不支持有控制流逻辑的模型,如果量化训练中出现Warning,推荐使用静态图量化训练功能。
该示例包含以下步骤:
1.
导入依赖
...
...
@@ -70,6 +68,7 @@ model.evaluate(val_dataset, batch_size=256, verbose=1)
### 4.1 将模型转换为模拟量化模型
当使用普通在线量化时
`weight_preprocess_type`
用默认设置None即可,当需要使用PACT在线量化时,则设置为'PACT'。
```
python
quant_config
=
{
# weight preprocess type, default is None and no preprocessing is performed.
...
...
@@ -82,6 +81,10 @@ quanter = QAT(config=quant_config)
quanter
.
quantize
(
net
)
```
注意:
*
目前PACT在线量化产出的量化模型,使用PaddleLite在ARM CPU上部署时,精度正确,但是使用PaddleInference在NV GPU和Intel CPU上部署时,可能存在精度问题。所以,请合理选择在线量化方法的种类。
*
对于使用动态图QAT量化训练功能的模型,在组网时请不要使用
`paddle.nn.functional.`
下的API。
### 4.2 训练量化模型
在这里我们对量化模型进行finetune训练,我们可以看到量化训练得到的模型与原模型准确率十分接近,代码如下所示:
...
...
@@ -108,4 +111,12 @@ quanter.save_quantized_model(
导出之后,可以在
`path`
路径下找到导出的量化预测模型。
量化预测模型可以使用
`netron`
软件打开,进行可视化查看。该量化预测模型和普通FP32预测模型一样,可以使用PaddleLite和PaddleInference加载预测,具体请参考
`推理部署`
章节。
根据部署业务场景,可以使用PaddleLite将该量化模型部署到移动端(ARM CPU),或者使用PaddleInference将该量化模型部署到服务器端(NV GPU和Intel CPU)。
导出的量化模型相比原始FP32模型,模型体积没有明显差别,这是因为量化预测模型中的权重依旧保存为FP32类型。在部署时,使用PaddleLite opt工具转换量化预测模型后,模型体积才会真实减小。
部署参考文档:
*
部署
[
文档
](
../../deploy/index.html
)
*
PaddleLite部署量化模型
[
文档
](
https://paddle-lite.readthedocs.io/zh/latest/user_guides/quant_aware.html
)
*
PaddleInference Intel CPU部署量化模型
[
文档
](
https://paddle-inference.readthedocs.io/en/latest/optimize/paddle_x86_cpu_int8.html
)
*
PaddleInference NV GPU部署量化模型
[
文档
](
https://paddle-inference.readthedocs.io/en/latest/optimize/paddle_trt.html
)
docs/zh_cn/quick_start/dygraph/dygraph_quant_post_tutorial.md
浏览文件 @
d8763558
...
...
@@ -82,3 +82,15 @@ paddleslim.quant.quant_post_static(
sample_generator
=
train_dataset
,
batch_nums
=
10
)
```
注意,目前离线量化方法还不支持存在控制流OP的模型。
根据部署业务场景,可以使用PaddleLite将该量化模型部署到移动端(ARM CPU),或者使用PaddleInference将该量化模型部署到服务器端(NV GPU和Intel CPU)。
导出的量化模型相比原始FP32模型,模型体积没有明显差别,这是因为量化预测模型中的权重依旧保存为FP32类型。在部署时,使用PaddleLite opt工具转换量化预测模型后,模型体积才会真实减小。
部署参考文档:
*
部署
[
文档
](
../../deploy/index.html
)
*
PaddleLite部署量化模型
[
文档
](
https://paddle-lite.readthedocs.io/zh/latest/user_guides/quant_aware.html
)
*
PaddleInference Intel CPU部署量化模型
[
文档
](
https://paddle-inference.readthedocs.io/en/latest/optimize/paddle_x86_cpu_int8.html
)
*
PaddleInference NV GPU部署量化模型
[
文档
](
https://paddle-inference.readthedocs.io/en/latest/optimize/paddle_trt.html
)
docs/zh_cn/quick_start/static/quant_aware_tutorial.md
浏览文件 @
d8763558
...
...
@@ -21,7 +21,7 @@ paddle.enable_static()
```
## 2. 构建网络
该章节构造一个用于对MNIST数据进行分类的分类模型,选用
`MobileNetV1`
,并将输入大小设置为
`[1, 28, 28]`
,输出类别数为10。
为了方便展示示例,我们在
`paddleslim.models`
下预定义了用于构建分类模型的方法,执行以下代码构建分类模型:
该章节构造一个用于对MNIST数据进行分类的分类模型,选用
`MobileNetV1`
,并将输入大小设置为
`[1, 28, 28]`
,输出类别数为10。为了方便展示示例,我们在
`paddleslim.models`
下预定义了用于构建分类模型的方法,执行以下代码构建分类模型:
...
...
@@ -136,6 +136,7 @@ quant_program = slim.quant.quant_aware(train_program, exe.place, for_test=False)
val_quant_program
=
slim
.
quant
.
quant_aware
(
val_program
,
exe
.
place
,
for_test
=
True
)
```
注意,静态图量化训练方法不支持有控制流OP的模型,请改用动态图量化训练方法。
## 5. 训练和测试量化后的模型
微调量化后的模型,训练一个epoch后测试。
...
...
@@ -156,22 +157,26 @@ test(val_quant_program)
## 6. 保存量化后的模型
在
``4. 量化``
中使用接口
``slim.quant.quant_aware``
接口得到的模型只适合训练时使用,为了得到最终使用时的模型,需要使用
[
slim.quant.convert
](
https://paddleslim.readthedocs.io/zh_CN/latest/api_cn/static/quant/quantization_api.html#convert
)
接口,然后使用
[
fluid.io.save_inference_model
](
https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/static/save_inference_model_cn.html#save-inference-model
)
保存模型。
``float_prog``
的参数数据类型是float32,但是数据范围是int8, 保存之后可使用Paddle executor, PaddleInference predictor 和Paddle-Lite predictor加载执行。
``int8_prog``
的参数数据类型是int8, 保存后可看到量化后模型大小会减小,
**该模型不可以用于预测部署**
。
在
``4. 量化``
中使用接口
``slim.quant.quant_aware``
接口得到的模型只适合训练时使用,为了得到最终使用时的模型,需要使用
[
slim.quant.convert
](
https://paddleslim.readthedocs.io/zh_CN/latest/api_cn/static/quant/quantization_api.html#convert
)
接口,然后使用
[
fluid.io.save_inference_model
](
https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/static/save_inference_model_cn.html#save-inference-model
)
保存模型。
```
python
float_prog
,
int8_prog
=
slim
.
quant
.
convert
(
val_quant_program
,
exe
.
place
,
save_int8
=
Tru
e
)
target_vars
=
[
float_prog
.
global_block
().
var
(
outputs
[
-
1
])]
quant_infer_program
=
slim
.
quant
.
convert
(
val_quant_program
,
exe
.
plac
e
)
target_vars
=
[
quant_infer_program
.
global_block
().
var
(
outputs
[
-
1
])]
paddle
.
static
.
save_inference_model
(
path_prefix
=
'./
inference_model/float
'
,
path_prefix
=
'./
quant_infer_model
'
,
feed_vars
=
[
image
],
fetch_vars
=
target_vars
,
executor
=
exe
,
program
=
float_prog
)
paddle
.
static
.
save_inference_model
(
path_prefix
=
'./inference_model/int8'
,
feed_vars
=
[
image
],
fetch_vars
=
target_vars
,
executor
=
exe
,
program
=
int8_prog
)
```
根据业务场景,可以使用PaddleLite将该量化模型部署到移动端(ARM CPU),或者使用PaddleInference将该量化模型部署到服务器端(NV GPU和Intel CPU)。
保存的量化模型相比原始FP32模型,模型体积没有明显差别,这是因为量化预测模型中的权重依旧保存为FP32类型。在部署时,使用PaddleLite opt工具转换量化预测模型后,模型体积才会真实减小。
部署参考文档:
*
部署
[
简介
](
../../deploy/index.html
)
*
PaddleLite部署量化模型
[
文档
](
https://paddle-lite.readthedocs.io/zh/latest/user_guides/quant_aware.html
)
*
PaddleInference Intel CPU部署量化模型
[
文档
](
https://paddle-inference.readthedocs.io/en/latest/optimize/paddle_x86_cpu_int8.html
)
*
PaddleInference NV GPU部署量化模型
[
文档
](
https://paddle-inference.readthedocs.io/en/latest/optimize/paddle_trt.html
)
docs/zh_cn/quick_start/static/quant_post_static_tutorial.md
浏览文件 @
d8763558
...
...
@@ -140,7 +140,6 @@ paddle.static.save_inference_model(
调用静态离线量化接口,加载文件夹
``'./inference_model'``
训练好的分类模型,并使用10个batch的数据进行参数校正。此过程无需训练,只需跑前向过程来计算量化所需参数。静态离线量化后的模型保存在文件夹
``'./quant_post_static_model'``
下。
```
python
slim
.
quant
.
quant_post_static
(
executor
=
exe
,
...
...
@@ -152,6 +151,7 @@ slim.quant.quant_post_static(
batch_nums
=
10
)
```
注意,目前离线量化方法还不支持存在控制流OP的模型。
加载保存在文件夹
``'./quant_post_static_model'``
下的量化后的模型进行测试,可看到精度和
``3.2 训练和测试``
中得到的测试精度相近,因此静态离线量化过程对于此分类模型几乎无损。
...
...
@@ -162,3 +162,13 @@ quant_post_static_prog, feed_target_names, fetch_targets = paddle.static.load_in
executor
=
exe
)
test
(
quant_post_static_prog
,
fetch_targets
)
```
根据部署业务场景,可以使用PaddleLite将该量化模型部署到移动端(ARM CPU),或者使用PaddleInference将该量化模型部署到服务器端(NV GPU和Intel CPU)。
保存的量化模型相比原始FP32模型,模型体积没有明显差别,这是因为量化预测模型中的权重依旧保存为FP32类型。在部署时,使用PaddleLite opt工具转换量化预测模型后,模型体积才会真实减小。
部署参考文档:
*
部署
[
简介
](
../../deploy/index.html
)
*
PaddleLite部署量化模型
[
文档
](
https://paddle-lite.readthedocs.io/zh/latest/user_guides/quant_aware.html
)
*
PaddleInference Intel CPU部署量化模型
[
文档
](
https://paddle-inference.readthedocs.io/en/latest/optimize/paddle_x86_cpu_int8.html
)
*
PaddleInference NV GPU部署量化模型
[
文档
](
https://paddle-inference.readthedocs.io/en/latest/optimize/paddle_trt.html
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录