Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

量化 #24

Open
zhangjun opened this issue May 27, 2022 · 7 comments
Open

量化 #24

zhangjun opened this issue May 27, 2022 · 7 comments

Comments

@zhangjun
Copy link
Owner

zhangjun commented May 27, 2022

PaddleSlim量化

image

PaddleSlim主要包含三种量化方法:量化训练(Quant Aware Training, QAT)、动态离线量化(Post Training Quantization Dynamic, PTQ Dynamic)、静态离线量化(Post Training Quantization Static, PTQ Static)。

  • 量化训练 量化训练让模型感知量化运算对模型精度带来的影响,通过finetune训练降低量化误差。
  • 动态离线量化 动态离线量化仅将模型中特定算子的权重从FP32类型映射成INT8/16类型。
  • 静态离线量化 静态离线量化使用少量无标签校准数据,采用KL散度等方法计算量化比例因子。

image

综合对比了模型量化方法的使用条件、易用性、精度损失和预期收益。

image

量化方法 API接口 功能 经典适用场景
在线量化 (QAT) 动态图:paddleslim.QAT; 静态图:paddleslim.quant.quant_aware 通过finetune训练将模型量化误差降到最小 对量化敏感的场景、模型,例如目标检测、分割, OCR
静态离线量化 (PTQ Static) paddleslim.quant.quant_post_static 通过少量校准数据得到量化模型 对量化不敏感的场景,例如图像分类任务
动态离线量化 (PTQ Dynamic) paddleslim.quant.quant_post_dynamic 仅量化模型的可学习权重 模型体积大、访存开销大的模型,例如BERT模型
Embedding量化(Quant Embedding) paddleslim.quant.quant_embedding 仅量化模型的Embedding参数 任何包含Embedding层的模型

静态离线量化(Post Training Quantization Static, PTQ Static)

静态离线量化中,有两种计算量化因子的方法,非饱和量化方法和饱和量化方法。非饱和量化方法计算整个Tensor的绝对值最大值abs_max,将其映射为127。饱和量化方法使用KL散度计算一个合适的阈值T (0<T<mab_max),将其映射为127。一般而言,待量化Op的权重采用非饱和量化方法,待量化Op的激活(输入和输出)采用饱和量化方法 。

@zhangjun
Copy link
Owner Author

@zhangjun
Copy link
Owner Author

量化基础

  • 无损定点化
    无损定点化: 量化误差小于量化精度的一半,称为“无损定点化”。
    最高位符号位+整数位+n位小数位,称为Qn格式,n表示小数点后有n位小数。定点化后1/Qn称为量化精度。
    例: 0.918表示为Q8格式定点数
    0.918 = 0.918*28=235.008,四舍五入取整后等于235
    量化精度为1/28,即以1/28为单位,0.918等于235.008个1/28,定点化后与原0.918的误差为0.008个1/28,小于0.5个1/28,因此是无损定点化。

@zhangjun
Copy link
Owner Author

zhangjun commented Sep 3, 2022

low precision

  • fp16溢出
     batch_norm、softmax、pooling 为防止溢出,需要使用fp32
    

@zhangjun
Copy link
Owner Author

@zhangjun
Copy link
Owner Author

zhangjun commented Mar 31, 2023

TensorRT int8量化

tensorrt量化

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant