PaddleSlim是一个专注于深度学习模型压缩的工具库,提供 低比特量化、知识蒸馏、稀疏化和模型结构搜索 等模型压缩策略,帮助开发者快速实现模型的小型化。
产品动态
- 🔥 2022.08.16:自动化压缩功能升级
| 模型 | Base mAPval0.5:0.95 | ACT量化mAPval0.5:0.95 | 模型体积压缩比 | 预测时延FP32 | 预测时延INT8 | 预测加速比 |
|---|---|---|---|---|---|---|
| PPYOLOE-s | 43.1 | 42.6 | 3.9倍 | 6.51ms | 2.12ms | 3.1倍 |
| YOLOv5s | 37.4 | 36.9 | 3.8倍 | 5.95ms | 1.87ms | 3.2倍 |
| YOLOv6s | 42.4 | 41.3 | 3.9倍 | 9.06ms | 1.83ms | 5.0倍 |
| YOLOv7 | 51.1 | 50.9 | 3.9倍 | 26.84ms | 4.55ms | 5.9倍 |
| YOLOv7-Tiny | 37.3 | 37.0 | 3.9倍 | 5.06ms | 1.68ms | 3.0倍 |
- 支持直接加载ONNX模型和Paddle模型导出至ONNX
- 发布量化分析工具,发布YOLO系列离线量化工具
- 更新YOLO-Series自动化压缩模型库
- 🔥 2022.07.01: 发布v2.3.0版本
-
支持对稀疏化模型、低比特量化模型的性能预估;支持预估指定模型在特定部署环境下 (ARM CPU + Paddle Lite) 的推理性能;提供 SD625、SD710、RK3288 芯片 + Paddle Lite 的预估接口。
-
提供部署环境自动扩展工具,可以自动增加在更多 ARM CPU 设备上的预估工具。
-
统一量化模型格式;离线量化支持while op;修复BERT大模型量化训练过慢的问题。
-
新增7种离线量化方法, 包括HIST, AVG, EMD, Bias Correction, AdaRound等。
-
支持代码无感知压缩:开发者只需提供推理模型文件和数据,既可进行离线量化(PTQ)、量化训练(QAT)、稀疏训练等压缩任务。
-
支持自动策略选择,根据任务特点和部署环境特性:自动搜索合适的离线量化方法,自动搜索最佳的压缩策略组合方式。
-
发布自然语言处理、图像语义分割、图像目标检测三个方向的自动化压缩示例。
-
发布
X2Paddle模型自动化压缩方案:YOLOv5、YOLOv6、YOLOv7、HuggingFace、MobileNet。 -
发布自动化压缩功能
-
升级量化功能
-
支持半结构化稀疏训练
-
新增延时预估工具
历史更新 *
基础压缩功能概览
PaddleSlim支持以下功能,也支持自定义量化、裁剪等功能。
| Quantization | Pruning | NAS | Distilling |
|---|---|---|---|
| * QAT |
- PACT
- PTQ Static
- PTQ Dynamic
- Embedding Quant | * SensitivityPruner
- FPGMFilterPruner
- L1NormFilterPruner
- **L2NormFilterPruner
- *SlimFilterPruner
- *OptSlimFilterPruner | * *Simulate Anneal based NAS
- *Reinforcement Learning based NAS
- **DARTS
- **PC-DARTS
- **Once-for-All
- *Hardware-aware Search | * *FSP
- *DML
- *DK |
注:
- *表示仅支持静态图,**表示仅支持动态图
- 敏感度裁剪指的是通过各个层的敏感度分析来确定各个卷积层的剪裁率,需要和其他裁剪方法配合使用。
多场景效果展示
PaddleSlim在典型视觉和自然语言处理任务上做了模型压缩,并且测试了Nvidia GPU、ARM等设备上的加速情况,这里展示部分模型的压缩效果,详细方案可以参考下面CV和NLP模型压缩方案:
表1: 部分场景模型压缩加速情况
注:
- YOLOv3: 在移动端SD855上加速3.55倍。
- PP-OCR: 体积由8.9M减少到2.9M, 在SD855上加速1.27倍。
- BERT: 模型参数由110M减少到80M,精度提升的情况下,Tesla T4 GPU FP16计算加速1.47倍。
自动压缩效果展示
表3: 自动压缩效果
离线量化效果对比
表2: 多种离线量化方法效果对比
文档教程
版本对齐
| PaddleSlim | PaddlePaddle | PaddleLite |
|---|---|---|
| 1.0.1 | <=1.7 | 2.7 |
| 1.1.1 | 1.8 | 2.7 |
| 1.2.0 | 2.0Beta/RC | 2.8 |
| 2.0.0 | 2.0 | 2.8 |
| 2.1.0 | 2.1.0 | 2.8 |
| 2.1.1 | 2.1.1 | >=2.8 |
| 2.3.0 | 2.3.0 | >=2.11 |
安装
安装最新版本:
pip install paddleslim -i https://pypi.tuna.tsinghua.edu.cn/simple
安装指定版本:
pip install paddleslim==2.3.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
安装develop版本:
git clone https://github.com/PaddlePaddle/PaddleSlim.git & cd PaddleSlim
python setup.py install
验证安装
安装完成后您可以使用 python 或 python3 进入 python 解释器,输入import paddleslim, 没有报错则说明安装成功。
快速开始
快速开始教程是能基于CIFAR10数据集快速运行起来的简单示例,若您是Paddle官方模型套件用户,请直接使用下方的CV模型压缩或者NLP模型压缩中教程。
- 🔥 自动压缩
- 量化训练
- 离线量化
- 结构化剪枝
- 蒸馏
- NAS
更多教程
进阶教程详细介绍了每一步的流程,帮助您把相应方法迁移到您自己的模型上。
- 通道剪裁
- L1NormFilterPruner
- FPGMFilterPruner
- SlimFilterFilterPruner
- OptSlimFilterPruner
- 四种剪裁策略效果对比与应用方法
- 自定义剪裁策略:动态图
- 低比特量化
- 量化训练
- 离线量化 | 离线量化方法解析
- embedding量化
- 三种量化方法介绍与应用
- NAS
- Once-For-All
- SANAS
- RLNAS
- DARTS
- 四种NAS策略介绍和应用
- 蒸馏
- 知识蒸馏示例
推理部署
- Intel CPU量化部署
- Nvidia GPU量化部署
- PaddleLite量化部署
CV模型压缩
本系列教程均基于Paddle官方的模型套件中模型进行压缩,若您不是模型套件用户,更推荐使用快速教程和进阶教程。
- 检测模型压缩
- 剪枝
- 量化训练
- 蒸馏
- 量化训练
- 模型结构搜索
- 剪枝
- 剪枝与蒸馏的结合使用
- 卷积层敏感度分析
- PPDetection-YOLOv3 压缩方案
- 压缩方案
- 方法应用-静态图
- 方法应用-动态图
- 分割模型压缩
- 剪枝
- 量化训练
- 蒸馏
- 量化训练
- 模型结构搜索
- 剪枝
- 压缩方案
- 方法应用-静态图
- 方法应用-动态图
- OCR模型压缩
- 剪枝
- 量化训练
- 量化训练
- 剪枝
- 3.5M模型压缩方案
- 压缩方案
- 方法应用-静态图
- 方法应用-动态图
NLP模型压缩
- PaddleNLP-BERT
- ERNIE-ERNIE
API文档
- 动态图
- 静态图
FAQ
1. 量化训练或者离线量化后的模型体积为什么没有变小?
答:这是因为量化后保存的参数是虽然是int8范围,但是类型是float。这是因为Paddle训练前向默认的Kernel不支持INT8 Kernel实现,只有Paddle Inference TensorRT的推理才支持量化推理加速。为了方便量化后验证量化精度,使用Paddle训练前向能加载此模型,默认保存的Float32类型权重,体积没有发生变换。
2. macOS + Python3.9环境或者Windows环境下, 安装出错, "command 'swig' failed"
答: 请参考https://github.com/PaddlePaddle/PaddleSlim/issues/1258
