Home

Awesome

<p align="center"> <h1 align="center">PaddleSlim</h1> </p> <p align="center"> <a href="./LICENSE"><img src="https://img.shields.io/badge/license-Apache%202-dfd.svg"></a> <a href="https://github.com/PaddlePaddle/PaddleSlim/releases"><img src="https://img.shields.io/github/v/release/PaddlePaddle/Paddle?color=ffa"></a> <a href=""><img src="https://img.shields.io/badge/python-3.6.2+-aff.svg"></a> <a href=""><img src="https://img.shields.io/badge/os-linux%2C%20win%2C%20mac-pink.svg"></a> <a href="https://github.com/PaddlePaddle/PaddleSlim/graphs/contributors"><img src="https://img.shields.io/github/contributors/PaddlePaddle/PaddleSlim?color=9ea"></a> <a href="https://pypi.org/project/PaddleSlim/"><img src="https://img.shields.io/pypi/dm/PaddleSlim?color=9cf"></a> <a href="https://github.com/PaddlePaddle/PaddleSlim/issues"><img src="https://img.shields.io/github/issues/PaddlePaddle/PaddleSlim?color=9cc"></a> <a href="https://github.com/PaddlePaddle/PaddleSlim/stargazers"><img src="https://img.shields.io/github/stars/PaddlePaddle/PaddleSlim?color=ccf"></a> </p>

PaddleSlim是一个专注于深度学习模型压缩的工具库,提供低比特量化、知识蒸馏、稀疏化和模型结构搜索等模型压缩策略,帮助开发者快速实现模型的小型化。

产品动态

<details> <summary>2022.08.16:自动化压缩功能升级</summary>
模型Base mAP<sup>val<br>0.5:0.95ACT量化mAP<sup>val<br>0.5:0.95模型体积压缩比预测时延<sup><small>FP32</small><sup><br><sup>预测时延<sup><small>INT8</small><sup><br><sup>预测加速比
PPYOLOE-s43.142.63.9倍6.51ms2.12ms3.1倍
YOLOv5s37.436.93.8倍5.95ms1.87ms3.2倍
YOLOv6s42.441.33.9倍9.06ms1.83ms5.0倍
YOLOv751.150.93.9倍26.84ms4.55ms5.9倍
YOLOv7-Tiny37.337.03.9倍5.06ms1.68ms3.0倍
</details> <details> <summary>历史更新</summary>

更多信息请参考:release note

</details>

基础压缩功能概览

PaddleSlim支持以下功能,也支持自定义量化、裁剪等功能。

<table> <tr align="center" valign="bottom"> <th><a href="https://github.com/PaddlePaddle/PaddleSlim/blob/release/2.0.0/docs/zh_cn/tutorials/quant/overview.md">Quantization</a></th> <th><a href="https://github.com/PaddlePaddle/PaddleSlim/blob/release/2.0.0/docs/zh_cn/tutorials/pruning/overview.md">Pruning</a></th> <th><a href="https://github.com/PaddlePaddle/PaddleSlim/blob/release/2.0.0/docs/zh_cn/tutorials/nas/overview.md">NAS</a></th> <th><a href="https://github.com/PaddlePaddle/PaddleSlim/tree/release/2.0.0/docs/zh_cn/tutorials">Distilling</a></th> </tr> <tr valign="top"> <td> <ul> <li><a href="docs/zh_cn/api_cn/overview.md#%E5%9C%A8%E7%BA%BF%E9%87%8F%E5%8C%96%E8%AE%AD%E7%BB%83qat">QAT</a></li> <li><a href="docs/zh_cn/api_cn/overview.md#pact">PACT</a></li> <li><a href="docs/zh_cn/api_cn/overview.md#%E9%9D%99%E6%80%81%E7%A6%BB%E7%BA%BF%E9%87%8F%E5%8C%96ptq-static">PTQ Static</a></li> <li><a href="docs/zh_cn/api_cn/overview.md#%E5%8A%A8%E6%80%81%E7%A6%BB%E7%BA%BF%E9%87%8F%E5%8C%96ptq-dynamic">PTQ Dynamic</a></li> <li><a href="docs/zh_cn/api_cn/overview.md#embedding%E9%87%8F%E5%8C%96">Embedding Quant</a></li> </ul> </td> <td> <ul> <li><a href="docs/zh_cn/api_cn/overview.md#%E6%95%8F%E6%84%9F%E5%BA%A6%E5%89%AA%E6%9E%9D">SensitivityPruner</a></li> <li><a href="docs/zh_cn/api_cn/overview.md#fpgm">FPGMFilterPruner</a></li> <li><a href="docs/zh_cn/api_cn/overview.md#l1norm">L1NormFilterPruner</a></li> <li><a href="docs/zh_cn/api_cn/overview.md#l2norm">**L2NormFilterPruner</a></li> <li><a href="docs/zh_cn/api_cn/overview.md#slimfilter">*SlimFilterPruner</a></li> <li><a href="docs/zh_cn/api_cn/overview.md#optslimfilter">*OptSlimFilterPruner</a></li> </ul> </td> <td> <ul> <li><a href="docs/zh_cn/api_cn/overview.md#sanas">*Simulate Anneal based NAS</a></li> <li><a href="docs/zh_cn/api_cn/overview.md#rlnas">*Reinforcement Learning based NAS</a></li> <li><a href="docs/zh_cn/api_cn/overview.md#darts">**DARTS</a></li> <li><a href="docs/zh_cn/api_cn/overview.md#pc-darts">**PC-DARTS</a></li> <li><a href="docs/zh_cn/api_cn/overview.md#once-for-all">**Once-for-All</a></li> <li><a href="docs/zh_cn/api_cn/overview.md#hardware-aware-search">*Hardware-aware Search</a></li> </ul> </td> <td> <ul> <li><a href="docs/zh_cn/api_cn/overview.md#fsp">*FSP</a></li> <li><a href="docs/zh_cn/api_cn/overview.md#dml">*DML</a></li> <li><a href="docs/zh_cn/api_cn/overview.md#dk">*DK</a></li> </ul> </td> </tr> </table>

注:

PaddleSlim在典型视觉和自然语言处理任务上做了模型压缩,并且测试了Nvidia GPU、ARM等设备上的加速情况,这里展示部分模型的压缩效果,详细方案可以参考下面CV和NLP模型压缩方案:

<p align="center"> <img src="docs/images/benchmark.png" height=185 width=849 hspace='10'/> <br /> <strong>表1: 部分场景模型压缩加速情况</strong> </p> <details> <summary>注意事项</summary> </details>

不同压缩方法效果

<details> <summary>自动压缩效果</summary> <p align="center"> <img width="800" alt="image" src="https://user-images.githubusercontent.com/7534971/168805367-f9d1299d-93e3-44d0-84da-870217edeb54.png"/> <br /> <strong>表3: 自动压缩效果</strong> </p> </details> <details> <summary>离线量化效果对比</summary> <p align="center"> <img width="750" alt="image" src="https://user-images.githubusercontent.com/7534971/169042883-9ca281ce-19be-4525-a3d2-c54cea4a2cbd.png"/> <br /> <strong>表2: 多种离线量化方法效果对比</strong> </p> </details>

安装

安装发布版本:

pip install paddleslim

安装develop版本:

git clone https://github.com/PaddlePaddle/PaddleSlim.git & cd PaddleSlim
python setup.py install
PaddleSlimPaddlePaddlePaddleLite
2.0.02.02.8
2.1.02.1.02.8
2.1.12.1.1>=2.8
2.3.02.3.0>=2.11
2.4.02.4.0>=2.11
developdevelop>=2.11

文档教程

模型压缩技术

快速开始

更多教程

进阶教程详细介绍了每一步的流程,帮助您把相应方法迁移到您自己的模型上。

推理部署

CV模型压缩

多场景效果展示

本系列教程均基于Paddle官方的模型套件中模型进行压缩,若您不是模型套件用户,更推荐使用快速教程和进阶教程。

NLP模型压缩

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

许可证书

本项目的发布受Apache 2.0 license许可认证。

贡献代码

我们非常欢迎你可以为PaddleSlim提供代码,也十分感谢你的反馈。

<img title="" src="https://user-images.githubusercontent.com/48054808/157800467-2a9946ad-30d1-49a9-b9db-ba33413d9c90.png" alt="" width="20"> 技术交流

<div align="center"> <img src="https://user-images.githubusercontent.com/54695910/216616669-21fcbcf3-60f3-44ca-938f-9c1fcb0af73f.jpg" width = "225" height = "225" /> </div>