/PaddleSlim

PaddleSlim is an open-source library for deep model compression and architecture search.

Primary LanguagePythonApache License 2.0Apache-2.0

PaddleSlim

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

产品动态

  • 🔥 2022.07.01: 发布v2.3.0版本

    • 发布自动化压缩功能

      • 支持代码无感知压缩:用户只需提供推理模型文件和数据,既可进行离线量化(PTQ)、量化训练(QAT)、稀疏训练等压缩任务。
      • 支持自动策略选择,根据任务特点和部署环境特性:自动搜索合适的离线量化方法,自动搜索最佳的压缩策略组合方式。
      • 发布自然语言处理图像语义分割图像目标检测三个方向的自动化压缩示例。
      • 发布X2Paddle模型自动化压缩方案:YOLOv5YOLOv6HuggingFaceMobileNet
    • 升级量化功能

      • 统一量化模型格式
      • 离线量化支持while op
      • 新增7种离线量化方法, 包括HIST, AVG, EMD, Bias Correction, AdaRound等
      • 修复BERT大模型量化训练过慢的问题
    • 支持半结构化稀疏训练

    • 新增延时预估工具

      • 支持预估指定模型在特定部署环境下 (ARM CPU + Paddle Lite) 的推理性能
      • 提供部署环境自动扩展工具,可以自动增加在更多 ARM CPU 设备上的预估工具
      • 支持对稀疏化模型、低比特量化模型的性能预估
      • 提供 SD625、SD710、RK3288 芯片 + Paddle Lite 的预估接口
  • 2021.11.15: 发布v2.2.0版本

    • 支持动态图离线量化功能.
  • 2021.5.20: 发布V2.1.0版本

    • 扩展离线量化方法
    • 新增非结构化稀疏
    • 增强剪枝功能
    • 修复OFA功能若干bug

更多信息请参考:release note

基础压缩功能概览

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

Quantization Pruning NAS Distilling

注:

  • *表示仅支持静态图,**表示仅支持动态图
  • 敏感度裁剪指的是通过各个层的敏感度分析来确定各个卷积层的剪裁率,需要和其他裁剪方法配合使用。

多场景效果展示

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倍。

自动压缩效果展示

image
表3: 自动压缩效果

离线量化效果对比

image
表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

快速开始

快速开始教程是能基于CIFAR10数据集快速运行起来的简单示例,若您是Paddle官方模型套件用户,请直接使用下方的CV模型压缩或者NLP模型压缩中教程。

更多教程

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

推理部署

CV模型压缩

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

NLP模型压缩

API文档

1. 量化训练或者离线量化后的模型体积为什么没有变小?

答:这是因为量化后保存的参数是虽然是int8范围,但是类型是float。这是因为Paddle训练前向默认的Kernel不支持INT8 Kernel实现,只有Paddle Inference TensorRT的推理才支持量化推理加速。为了方便量化后验证量化精度,使用Paddle训练前向能加载此模型,默认保存的Float32类型权重,体积没有发生变换。

2. macOS + Python3.9环境或者Windows环境下, 安装出错, "command 'swig' failed"

答: 请参考PaddlePaddle#1258

许可证书

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

贡献代码

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

技术交流

  • 如果你发现任何PaddleSlim存在的问题或者是建议, 欢迎通过GitHub Issues给我们提issues。

  • 欢迎加入PaddleSlim 微信技术交流群(添加并回复小助手“Slim”)