非均匀量化是在均匀量化的基础上,挑选部分量化台阶作为量化后的值,如均匀量化到8比特后,使用共256个([-128, 127]之间的整数)台阶数值,可挑选其中的32个数值来表示量化后的值。
模型在昇腾AI处理器上推理时,“memory bound(用于识别AICore执行算子计算过程中是否存在Memory瓶颈)”问题会导致性能无法提升,而使用非均匀量化对模型的权重进行压缩后(ATC工具将om模型转换为json文件后,会携带权重压缩特性),可以提高压缩率,从而解决“memory bound”问题的层。
非均匀量化后,如果精度仿真模型在原始PyTorch环境中推理精度不满足要求,则需要不断调整非均匀量化配置文件config.json中的参数,调整方法请参见手动调优。量化示例请参见获取更多样例>resnet101。
非均匀量化支持量化的层以及约束如下:
量化方式 |
支持的层类型 |
约束 |
备注 |
---|---|---|---|
非均匀量化 |
torch.nn.Conv2d |
padding_mode为zeros |
- |
torch.nn.Conv3d |
dilation_d为1,dilation_h/dilation_w >= 1 |
- |
|
torch.nn.Linear |
仅支持带bias规格的非均匀量化,且Shape必须为两维 |
- |
详细流程说明如下:
非均匀量化过程中,会根据融合json文件,获取原始模型中哪些层支持weight压缩,然后重新生成非均匀量化的部署模型和量化配置文件。