-
Notifications
You must be signed in to change notification settings - Fork 235
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
关于QuantizationStates.PASSIVE_INIT量化配置探讨 #87
Comments
PPQ 使用 QuantizationState 控制量化逻辑,该字段是 TensorQuantizationConfig 中最重要的内容,我们目前支持 12 种量化状态:
其中最常见的量化状态是 INITIAL -> ACTIVATED -> BAKED,大部分量化都遵循这样的状态变迁。在一开始,Quantizer负责为所有 TensorQuantizationConfig 初始化状态,即全部初始化为 INITIAL。而后 Quantizer 负责将 Conv, Gemm 中的 bias 修改为 PASSIVE_INIT 状态,这表明需要 PPQ 对 bias 展开被动定点逻辑,只有bias的量化处于 PASSIVE_INIT 时它的量化参数才会被 input scale * weight scale覆盖,否则bias将执行主动定点逻辑,生成自己的量化参数。 当你修改了此处的状态初始化,如果你将其修改为 INITIAL,则 bias 执行主动定点,会通过 observer 给自己确定一个独立的scale 和 offset,你的推理框架可能会向你报告错误。如果你将其修改为 FP32,则会直接撤销 bias 的定点过程。修改为其他状态可能会造成执行错误。 在 PPQ 中量化是这样发生的:
|
原来是这样,感谢😃 |
想叨扰问一下这个配置是干什么用的:base_quant_config.input_quantization_config[-1].state = QuantizationStates.PASSIVE_INIT
当执行这个语句时,也就是PASSIVE_INIT生效时,最后量化引入的量化噪声非常严重;但不使用这个语句时,量化噪声就几乎没有了。这是为什么呢,,
The text was updated successfully, but these errors were encountered: