pytorch模型定点化记录

本文介绍了深度学习模型在端侧迁移的定点化过程,包括模型转ONNX、ONNX量化及PC与芯片端对齐。首先,选择适合芯片计算能力的模型并检查支持的算子和层类型。接着,利用量化API进行模型打包和量化,通过数据生成器确保精度。最后,进行模型输出对齐以验证正确性,为优化和部署做好准备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定点化的意义

深度学习模型往端侧迁移时通常受限于芯片的计算能力,PC端训练的模型是浮点型,而芯片端是整型计算,此时就需要做模型定点化

定点化流程

第一步:模型转ONNX
第二步:ONNX打包量化
第三步:PC和芯片端对齐

具体如下:

1. 模型转ONNX

通常芯片厂商会有对应的文档指引,主要关注:支持的最大flops,支持的算子,layer类型,量化的API。

1.1 支持的最大flops

根据芯片所支持的flops选择合适的移动端模型,如Mobilenet,shuffleNetv2等。flops即加乘运算数

1.2 支持的算子

选择了合适的模型后,通常有些芯片不支持模型的一些操作,如transpose,此时就需要手动实现这些算子

1.3 layer 类型

NDK文档中会有所支持的层类型,如果选择的模型中有不支持的层,可以选择做一些替换,如pooling可以用1x1卷积,不同的relu类型

1.4 量化API

做完了1,2,3的准备工作后,通常我们需要把模型转onnx,再通过onnx进行模型打包量化,不同框架转onnx可以查阅对应的官网代码

2. ONNX打包量化

2.1 onnx打包

转完onnx后通常芯片厂商为了减小计算量会进行模型的打包,模型打包主要是进行层合并,如果有不支持的层类型,在执行这一步操作的时候也会有对应的报错提示。

2.2 量化

模型打包完之后接下来就是量化,量化的目的是通过统计训练数据分布找到模型参数的小数位,模型在芯片端计算时,是整型和假除小数位模拟进行浮点运算。量化时需要构造一个数据生成器,数据即训练模型的训练样本。除了统计数据进行量化的方式外,通常也会有定点量化训练的方法,这样得到的量化模型精度更高。

3.对齐

模型打包量化完之后,需要将板子和PC端进行对齐,即同样的输入数据,PC和板子对齐输出,以保证我们打包量化的模型是没问题的。如果这一步没问题,后续我们就可以把重心放在PC端优化模型上,每次优化后再走一遍流程打包量化即可

其他

在模型往端侧迁移的时候,为了保证速度,通常也可以通过查表的方式将一些算子优化运算,牺牲空间换取时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值