非均匀量化
非均匀量化是指量化后的数据在某个数值空间中的分布是不均匀的。非均匀量化过程中,会根据待量化数据的概率分布来对均匀量化后的数据分布进一步进行根据目标压缩率(保留数值量/原始量化数值量)的聚类操作。相较于均匀量化,非均匀量化在进一步压缩数据信息量的基础上尽可能的保留高概率分布的数据信息,从而减小压缩后的数据信息丢失。
由于硬件约束,该版本不建议使用非均匀量化的功能,获取不到性能收益。
模型在昇腾AI处理器上推理时,可通过非均匀量化提高权重压缩率(需要与ATC工具配合,通过编译时使能权重压缩),降低权重传输开销,进一步提升推理性能。非均匀量化后,如果精度仿真模型在原始PyTorch环境中推理精度不满足要求,可通过调整非均匀量化配置文件config.json中的参数来恢复模型精度,调整方法请参见手工调优。量化示例请参见获取更多样例。
非均匀量化支持量化的层以及约束如下:
支持的层类型 |
约束 |
备注 |
---|---|---|
torch.nn.Conv2d |
padding_mode为zeros |
- |
torch.nn.Linear |
仅支持带bias规格的非均匀量化,且Shape必须为两维 |
- |
实现流程
详细流程说明如下:
- 参见均匀量化章节获取均匀量化的部署模型和精度仿真模型。
- 参见《ATC工具使用指南》将1中生成的部署模型转换成json文件,该json文件记录了量化后模型的融合信息,同时也携带了支持weight压缩特性层的信息(通过fe_weight_compress字段识别)。
- 如果要进行weight压缩,则参见训练后量化简易配置文件说明章节获取非均匀量化简易配置文件,然后获取2生成的量化后模型的融合json文件进行非均匀量化。
非均匀量化过程中,会根据融合json文件,获取原始模型中哪些层支持weight压缩,然后重新生成非均匀量化的部署模型和量化配置文件。
- 查看非均匀量化后,精度仿真模型在原始ONNX Runtime环境中推理精度是否满足要求,如果不满足要求,则需要调整非均匀量化配置文件config.json中的参数,然后重新进行非均匀量化,直至满足精度要求。调整方法请参见手工调优。
父主题: 手工量化