OpenPPL / ppq

PPL Quantization Tool (PPQ) is a powerful offline neural network quantization tool.
Apache License 2.0
1.56k stars 236 forks source link

量化表有几层的scale值完全相等 #500

Closed Nusselder9 closed 1 year ago

Nusselder9 commented 1 year ago

志佬你好!

我在使用PPQ对带有swish激活的模型进行量化时,发现有几层的scale值完全相等:

"input.12": 40.95763882994652, "input.20": 40.95763882994652, "onnx::Mul_144": 40.95763882994652, "onnx::Add_145": 40.95763882994652, "onnx::Concat_146": 40.95763882994652, "input.24": 40.95763882994652,

为了清楚的展示着几层的位置,我以onnxruntime为目标平台导出的onnx如下图:

image

我的问题有两个:

我用tensorrt官方提供的calibration方式,导出的量化表中,这几层的calib是不相同的。请问为什么ppq这几层的scale值是相等的?

Nusselder9 commented 1 year ago

我好像找到了答案passive operation fusion

For passive operation fusion, PPQ will keep the input and the output variable share a same scale for passive operations.

我的问题只剩下:为什么tensorrt官方提供的calibration方式,导出的量化表中,这几层的calib是不相同的?

(我理解的ppq之所模拟operation fusion,就是为了和部署后端平台如trt保持一致,但是trt给出的calibration table里这些层的calib值是不同的。这好像和ppq不太一样?)

ZhangZhiPku commented 1 year ago

啊你这个 quant linear 和 dequant linear,它的scale就应该是一样的,跟passive operation fusion没啥关系。 但是你导出的量化表 "input.12": 40.95763882994652, "input.20": 40.95763882994652, "onnx::Mul_144": 40.95763882994652, "onnx::Add_145": 40.95763882994652, "onnx::Concat_146": 40.95763882994652, "input.24": 40.95763882994652, 这些应该是ppq帮你做了fusion。