非均匀量化
非均匀量化是在均匀量化的基础上,挑选部分量化台阶作为量化后的值,如均匀量化到8比特后,使用共256个([-128, 127]之间的整数)台阶数值,可挑选其中的32个数值来表示量化后的值。
模型在昇腾AI处理器上推理时,可通过非均匀量化提高权重压缩率(需要与ATC工具配合,编译时使能权重压缩),降低权重传输开销,进一步提升推理性能。
非均匀量化后,如果精度仿真模型在原始ONNX Runtime环境中推理精度不满足要求,可通过调整非均匀量化配置文件config.json中的参数来恢复模型精度,调整方法请参见手动调优。量化示例请参见获取更多样例>>resnet101。
非均匀量化支持量化的层以及约束如下:
量化方式 |
支持的层类型 |
约束 |
---|---|---|
非均匀量化 |
Conv:卷积层 |
dilation为1、group为1、filter维度为4 |
Gemm:广义矩阵乘 |
transpose_a=false,Alpha=Beta=1.0 |
实现流程
详细流程说明如下:
- 参见均匀量化章节获取均匀量化的部署模型和精度仿真模型。
- 参见《ATC工具使用指南》将1中生成的部署模型转换成json文件,该json文件记录了量化后模型的融合信息,同时也携带了支持weight压缩特性层的信息(通过fe_weight_compress字段识别)。
- 如果要进行weight压缩,则参见训练后量化简易配置文件说明章节获取非均匀量化简易配置文件,然后获取2生成的量化后模型的融合json文件进行非均匀量化。
非均匀量化过程中,会根据融合json文件,获取原始模型中哪些层支持weight压缩,然后重新生成非均匀量化的部署模型和量化配置文件。
- 查看非均匀量化后,精度仿真模型在ONNX Runtime环境中推理精度是否满足要求,如果不满足要求,则需要调整非均匀量化配置文件config.json中的参数,然后重新进行非均匀量化,直至满足精度要求。调整方法请参见手动调优。
父主题: 基础量化