专栏算法工具链ptq量化输出数据类型si32,si16是什么原因

ptq量化输出数据类型si32,si16是什么原因

已解决
yy12342024-11-06
114
5

1. 芯片型号:J6

2. 板卡类型:地平线Matrix-6E

3. 天工开物开发包 OpenExplorer 版本:例如 J6_OE_3.0.22

4. 问题定位:模型转换

5. 问题具体描述:j6 ptq量化时打印的节点信息,中间部分算子输出数据类型为si32,如图,出现si32的原因是工具链自动判断si8量化精度不足而使用高精度量化吗?

j5上默认都是int8数据类型的,可以手动指定int16量化,int32运算是j6 bpu新增的支持项吗?

在j6文档中看到可以在量化配置:quant_config中配置:

这个配置的是节点输入数据类型,不包括int32。输入数据类型、输出数据类型、计算的数据精度这三项怎么理解呢?

int16 int32 fp16 fp32都是bpu支持的计算精度吗?

算法工具链
征程6
评论3
0/1000
  • kotei左文亮
    Lv.3

    大部分算子默认使用的int8计算,部分算子支持int16,fp16计算,算子支持范围随着版本发布持续扩充,具体可见《工具链算子支持约束列表》。

    2024-11-06
    0
    2
    • yy1234回复kotei左文亮:

      谢谢,《工具链算子支持约束列表》看过了,还想请教: 打印的Output Data Type是工具链自动根据精度计算的吗?

      算子约束列表中写了算子的输入输出数据类型,算子数据类型基本都是int8 int16少部分int32,而quant_config中可以配置某类或某个节点的计算精度为float32、float16,配置的是节点的输入数据类型。感觉这两个地方内容有冲突。实际上bpu上可以配置某节点浮点运算吗


      2024-11-07
      0
    • kotei左文亮回复yy1234:

      可以这样理解吧,是这样的,如果模型以Conv+ReLU6结尾,那么为了保证模型的整体精度,Conv会默认以int32高精度输出,ReLU/ReLU6则会跑在CPU上。同理,其它尾部可加速算子运行在CPU上也都是默认精度优先选择。不过,地平线支持在yaml文件通过配置quant_config将这些算子运行在BPU上,从而获取更好的性能表现,但会引入一定的精度损失。

      2024-11-08
      0
  • kotei左文亮
    Lv.3

    问题收到

    2024-11-06
    0
    0
  • kotei左文亮
    Lv.3

    由于您长时间未回复此问题就先关闭了,如还有疑问,可再发帖求助。

    2024-11-13
    0
    0