一、 算子约束条件
Matmul算子在j6上,OE3.0.31支持单输入int16量化,OE3.2.0及以后版本支持双int16量化,可以根据实际情况与数据输入范围、输入shape大小,选择精度和性能相对比较优化的量化策略,实际依赖于模型结构与数据范围。
二、 插件版本
Hmct插件为PTQ的转换工具插件,针对OE3.0.31、OE3.2.0、OE3.5.0的量产版本,hmct版本低于2.6.1,可以实际pip list | grep hmct看一下版本,在选择input0-int8、input1-int16量化时,要升级hmct >= 2.6.1,请自己确认版本与量化需求。
三、 实测调优
1. 前置模型结构

关注Matmul的shape与intput, 这个算子当前的shape很大,带来的计算量很大,同时对于前置输入Thresholds,可以看到input0为1.0、input1为10.31,同时input0的shape: 1*6*2585、input1的shape: 1*6*2585*64,如果我们配置input1为int16量化,相对int8量化可以提高精度,相对input0、input1都为int16量化可以降低input0的加载数据量、提升带宽。
2. 分步测试
基础配置:
1
2
对比结果如下:
Matmul量化配置 | 精度 | 性能 |
全int8 | ![]() | ![]() ![]() |
Input0 int16 + input1 int8 | ![]() | ![]() ![]() |
Input0 int8 + input1 int16 | ![]() | ![]() ![]() |
全int16 | ![]() | ![]() ![]() |
四、 说明总结
根据配置和测试,可以看到matmul的配置input1为int16时,量化精度和性能都能有比较好的提升和优化,实际情况请基于自己的模型测试和调优












