English | 简体中文
量化是一种流行的模型压缩方法,量化后的模型拥有更小的体积和更快的推理速度.
FastDeploy基于PaddleSlim的Auto Compression Toolkit(ACT), 给用户提供了一键模型自动化压缩的工具. FastDeploy一键模型自动压缩可包含多种策略, 目前主要采用离线量化和量化蒸馏训练.同时, FastDeploy支持部署压缩后的模型, 帮助用户实现推理加速. 本文主要描述量化模型在FastDeploy上的部署.
FastDeploy 多个引擎和硬件支持量化模型部署
当前,FastDeploy中多个推理后端可以在不同硬件上支持量化模型的部署. 支持情况如下:
硬件/推理后端
ONNX Runtime
Paddle Inference
TensorRT
Paddle-TensorRT
CPU
支持
支持
GPU
支持
支持
基于PaddleSlim,目前FastDeploy一键模型自动压缩提供的的量化方法有量化蒸馏训练和离线量化,量化蒸馏训练通过模型训练来获得量化模型,离线量化不需要模型训练即可完成模型的量化。 FastDeploy 对两种方式产出的量化模型均能部署。
两种方法的主要对比如下表所示:
量化方法
量化过程耗时
量化模型精度
模型体积
推理速度
离线量化
无需训练,耗时短
比量化蒸馏训练稍低
两者一致
两者一致
量化蒸馏训练
需要训练,耗时稍高
较未量化模型有少量损失
两者一致
两者一致
使用FastDeploy一键模型自动化压缩工具来量化模型
FastDeploy基于PaddleSlim的Auto Compression Toolkit(ACT), 给用户提供了一键模型自动化压缩的工具,请参考如下文档进行一键模型自动化压缩。
目前, FastDeploy支持自动化压缩,并完成部署测试的模型的Runtime Benchmark和端到端Benchmark如下所示.
Benchmark表格说明:
Runtime时延为模型在各种Runtime上的推理时延,包含CPU->GPU数据拷贝,GPU推理,GPU->CPU数据拷贝时间. 不包含模型各自的前后处理时间.
端到端时延为模型在实际推理场景中的时延, 包含模型的前后处理.
所测时延均为推理1000次后求得的平均值, 单位是毫秒.
INT8 + FP16 为在推理INT8量化模型的同时, 给Runtime 开启FP16推理选项
INT8 + FP16 + PM, 为在推理INT8量化模型和开启FP16的同时, 开启使用Pinned Memory的选项,可加速GPU->CPU数据拷贝的速度
最大加速比, 为FP32时延除以INT8推理的最快时延,得到最大加速比.
策略为量化蒸馏训练时, 采用少量无标签数据集训练得到量化模型, 并在全量验证集上验证精度, INT8精度并不代表最高的INT8精度.
CPU为Intel(R) Xeon(R) Gold 6271C, 所有测试中固定CPU线程数为1. GPU为Tesla T4, TensorRT版本8.4.15.
模型
推理后端
部署硬件
FP32 Runtime时延
INT8 Runtime时延
INT8 + FP16 Runtime时延
INT8+FP16+PM Runtime时延
最大加速比
FP32 mAP
INT8 mAP
量化方式
YOLOv5s
TensorRT
GPU
7.87
4.51
4.31
3.17
2.48
37.6
36.7
量化蒸馏训练
YOLOv5s
Paddle-TensorRT
GPU
7.99
None
4.46
3.31
2.41
37.6
36.8
量化蒸馏训练
YOLOv5s
ONNX Runtime
CPU
176.41
91.90
None
None
1.90
37.6
33.1
量化蒸馏训练
YOLOv5s
Paddle Inference
CPU
213.73
130.19
None
None
1.64
37.6
35.2
量化蒸馏训练
YOLOv6s
TensorRT
GPU
9.47
3.23
4.09
2.81
3.37
42.5
40.7
量化蒸馏训练
YOLOv6s
Paddle-TensorRT
GPU
9.31
None
4.17
2.95
3.16
42.5
40.7
量化蒸馏训练
YOLOv6s
ONNX Runtime
CPU
334.65
126.38
None
None
2.65
42.5
36.8
量化蒸馏训练
YOLOv6s
Paddle Inference
CPU
352.87
123.12
None
None
2.87
42.5
40.8
量化蒸馏训练
YOLOv7
TensorRT
GPU
27.47
6.52
6.74
5.19
5.29
51.1
50.4
量化蒸馏训练
YOLOv7
Paddle-TensorRT
GPU
27.87
None
6.91
5.86
4.76
51.1
50.4
量化蒸馏训练
YOLOv7
ONNX Runtime
CPU
996.65
467.15
None
None
2.13
51.1
43.3
量化蒸馏训练
YOLOv7
Paddle Inference
CPU
995.85
477.93
None
None
2.08
51.1
46.2
量化蒸馏训练
模型
推理后端
部署硬件
FP32 End2End时延
INT8 End2End时延
INT8 + FP16 End2End时延
INT8+FP16+PM End2End时延
最大加速比
FP32 mAP
INT8 mAP
量化方式
YOLOv5s
TensorRT
GPU
24.61
21.20
20.78
20.94
1.18
37.6
36.7
量化蒸馏训练
YOLOv5s
Paddle-TensorRT
GPU
23.53
None
21.98
19.84
1.28
37.6
36.8
量化蒸馏训练
YOLOv5s
ONNX Runtime
CPU
197.323
110.99
None
None
1.78
37.6
33.1
量化蒸馏训练
YOLOv5s
Paddle Inference
CPU
235.73
144.82
None
None
1.63
37.6
35.2
量化蒸馏训练
YOLOv6s
TensorRT
GPU
15.66
11.30
10.25
9.59
1.63
42.5
40.7
量化蒸馏训练
YOLOv6s
Paddle-TensorRT
GPU
15.03
None
11.36
9.32
1.61
42.5
40.7
量化蒸馏训练
YOLOv6s
ONNX Runtime
CPU
348.21
126.38
None
None
2.82
42.5
36.8
量化蒸馏训练
YOLOv6s
Paddle Inference
CPU
352.87
121.64
None
None
3.04
42.5
40.8
量化蒸馏训练
YOLOv7
TensorRT
GPU
36.47
18.81
20.33
17.58
2.07
51.1
50.4
量化蒸馏训练
YOLOv7
Paddle-TensorRT
GPU
37.06
None
20.26
17.53
2.11
51.1
50.4
量化蒸馏训练
YOLOv7
ONNX Runtime
CPU
988.85
478.08
None
None
2.07
51.1
43.3
量化蒸馏训练
YOLOv7
Paddle Inference
CPU
1031.73
500.12
None
None
2.06
51.1
46.2
量化蒸馏训练
模型
推理后端
部署硬件
FP32 Runtime时延
INT8 Runtime时延
INT8 + FP16 Runtime时延
INT8+FP16+PM Runtime时延
最大加速比
FP32 Top1
INT8 Top1
量化方式
ResNet50_vd
TensorRT
GPU
3.55
0.99
0.98
1.06
3.62
79.12
79.06
离线量化
ResNet50_vd
Paddle-TensorRT
GPU
3.46
None
0.87
1.03
3.98
79.12
79.06
离线量化
ResNet50_vd
ONNX Runtime
CPU
76.14
35.43
None
None
2.15
79.12
78.87
离线量化
ResNet50_vd
Paddle Inference
CPU
76.21
24.01
None
None
3.17
79.12
78.55
离线量化
MobileNetV1_ssld
TensorRT
GPU
0.91
0.43
0.49
0.54
2.12
77.89
76.86
离线量化
MobileNetV1_ssld
Paddle-TensorRT
GPU
0.88
None
0.49
0.51
1.80
77.89
76.86
离线量化
MobileNetV1_ssld
ONNX Runtime
CPU
30.53
9.59
None
None
3.18
77.89
75.09
离线量化
MobileNetV1_ssld
Paddle Inference
CPU
12.29
4.68
None
None
2.62
77.89
71.36
离线量化
模型
推理后端
部署硬件
FP32 End2End时延
INT8 End2End时延
INT8 + FP16 End2End时延
INT8+FP16+PM End2End时延
最大加速比
FP32 Top1
INT8 Top1
量化方式
ResNet50_vd
TensorRT
GPU
4.92
2.28
2.24
2.23
2.21
79.12
79.06
离线量化
ResNet50_vd
Paddle-TensorRT
GPU
4.48
None
2.09
2.10
2.14
79.12
79.06
离线量化
ResNet50_vd
ONNX Runtime
CPU
77.43
41.90
None
None
1.85
79.12
78.87
离线量化
ResNet50_vd
Paddle Inference
CPU
80.60
27.75
None
None
2.90
79.12
78.55
离线量化
MobileNetV1_ssld
TensorRT
GPU
2.19
1.48
1.57
1.57
1.48
77.89
76.86
离线量化
MobileNetV1_ssld
Paddle-TensorRT
GPU
2.04
None
1.47
1.45
1.41
77.89
76.86
离线量化
MobileNetV1_ssld
ONNX Runtime
CPU
34.02
12.97
None
None
2.62
77.89
75.09
离线量化
MobileNetV1_ssld
Paddle Inference
CPU
16.31
7.42
None
None
2.20
77.89
71.36
离线量化
模型
推理后端
部署硬件
FP32 Runtime时延
INT8 Runtime时延
INT8 + FP16 Runtime时延
INT8+FP16+PM Runtime时延
最大加速比
FP32 mAP
INT8 mAP
量化方式
ppyoloe_crn_l_300e_coco
TensorRT
GPU
27.90
6.39
6.44
5.95
4.67
51.4
50.7
量化蒸馏训练
ppyoloe_crn_l_300e_coco
Paddle-TensorRT
GPU
30.89
None
13.78
14.01
2.24
51.4
50.5
量化蒸馏训练
ppyoloe_crn_l_300e_coco
ONNX Runtime
CPU
1057.82
449.52
None
None
2.35
51.4
50.0
量化蒸馏训练
NOTE:
TensorRT比Paddle-TensorRT快的原因是在runtime移除了multiclass_nms3算子
模型
推理后端
部署硬件
FP32 End2End时延
INT8 End2End时延
INT8 + FP16 End2End时延
INT8+FP16+PM End2End时延
最大加速比
FP32 mAP
INT8 mAP
量化方式
ppyoloe_crn_l_300e_coco
TensorRT
GPU
35.75
15.42
20.70
20.85
2.32
51.4
50.7
量化蒸馏训练
ppyoloe_crn_l_300e_coco
Paddle-TensorRT
GPU
33.48
None
18.47
18.03
1.81
51.4
50.5
量化蒸馏训练
ppyoloe_crn_l_300e_coco
ONNX Runtime
CPU
1067.17
461.037
None
None
2.31
51.4
50.0
量化蒸馏训练
模型
推理后端
部署硬件
FP32 Runtime时延
INT8 Runtime时延
INT8 + FP16 Runtime时延
INT8+FP16+PM Runtime时延
最大加速比
FP32 mIoU
INT8 mIoU
量化方式
PP-LiteSeg-T(STDC1)-cityscapes
Paddle Inference
CPU
1138.04
602.62
None
None
1.89
77.37
71.62
量化蒸馏训练
模型
推理后端
部署硬件
FP32 End2End时延
INT8 End2End时延
INT8 + FP16 End2End时延
INT8+FP16+PM End2End时延
最大加速比
FP32 mIoU
INT8 mIoU
量化方式
PP-LiteSeg-T(STDC1)-cityscapes
Paddle Inference
CPU
4726.65
4134.91
None
None
1.14
77.37
71.62
量化蒸馏训练