【寒武纪(6)】MLU推理加速引擎MagicMind,最佳实践(二)混合精度

混合精度在精度损失范围内实现数倍的性能提升。

支持的量化特性

构建混合精度的流程

构建混合精度的流程如下,支持浮点或半精度编程,以及量化精度编程两种方式。

  • 浮点或半精度 无需提供tensor分布
  • 量化编程需要设置tensor分布。

在这里插入图片描述

网络粒度和算子粒度的设置输入精度和输出数据类型

网络中算子的输入精度和输出数据类型在不做修改时维持原始精度。如果需要修改输入精度和输出的类型,有两种方式:
1、按照网络粒度设置。推荐方法,整个网络所有的算子所使用的输入精度和输出数据类型都设置了。
2、按照算子粒度设置。精细化设置每一个算子使用的输入精度和输出类型。比较灵活但是比较复杂。算子粒度比网络粒度的优先级高,同时设置时,会使用算子粒度。
在这里插入图片描述

网络设置的配置示例:
在这里插入图片描述

算子颗粒度设置示例:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2混合精度编程

基本概念:

  • 整网输入
  • 整网输出
  • 中间层输入
  • 中间层输出
  • const tensor输出

默认情况下

整网输入、整网输出、const tensor 在网络创建时直接指定或者后续更改。
网络中间层输入类型由上一层算子连接关系自动推导,中间层输出类型(除ICastNode可以指定目标类型外)默认为float 32

设置类型

使用INodeSetxxx 后,即使不同的网络层的类型不匹配,MagicMind 会自动完成必要的数据转换。

在这里插入图片描述

一种途径:创建float32 的网络,然后设置INodeSetxxxx偏好。

在这里插入图片描述

第二种途径:改变整网的输入类型,const tensor类型、整网输出类型,结合偏好输入和输出类型,构建全float16网络,减少MagicMind的自动插入数据类型转换Node。在这里插入图片描述

3 量化数据类型

onnx框架量化参数和寒武纪量化参数,以及数值范围Range

在这里插入图片描述

手动设置量化参数

如果用户知道数据的分布范围,可以调用接口,将数据范围手动设置到Range类。

使用校准器获得并设置数据的分布范围

基于浮点模型和样本数据—>计算并设置数据分布范围,并根据滤波器的数据分布特点选择不同的量化粒度。

要求:

  • 提供浮点网络
  • 样本数据

快速生成量化模型并完成部署。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

远端校准

校准器一般运行在本地MLU,(也就是校准需要运行MLU?),可以远程调用MLU。
在这里插入图片描述

校准器会按照给定的设置进行数据动态范围的调整和设置。

量化统计方法

两种方法:线性统计和最小二乘统计(最小二乘仅支持int8)。

量化粒度设置

两种量化设置 per_tensor :按照张量量化,per_axis:按照通道量化。

配置选项:weight_quant_granularity 和 custom_nodes

1weight_quant_granularity 配置除DepthWise卷积外的全局量化粒度

在这里插入图片描述

2custom_nodes 配置DepthWise卷积量化粒度

3custom_nodes 支持“按照节点类型”配置某些类的粒度

4ITensor::SetDynamicRange ITensor::SetDynamicRangPerAxis 配置某算子是否分通道

量化对称性

从量化统计到量化参数计算,支持对称量化和非对称量化。
在这里插入图片描述

舍入模式

在这里插入图片描述

在这里插入图片描述

(正文完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hali_Botebie

文中错误请不吝指正!!!!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值