端侧模型性能优化——Flops与访存量的坑

本文分析了一款端侧模型在MBV3-Small-0.75与MBV3-Large-1.0之间的性能差异,指出Flops与性能并非正比,强调了计算密度、访存量和硬件特性的关键作用。通过RoofLine模型揭示推理时间的影响因素,提出在高算力平台优化时应注意访存量而非一味降低Flops。

        故事背景:笔者开发了一个端侧的模型,是在mobilnetV3-small-0.75(Flops:52M)的基础上魔改出来的,其Flops比mbv3-large-1.0(Flops:58M)是低的,但是其在端侧手机GPU上面的初始化时间却高很多,推理时间甚至是后者的两倍,带着这个问题,以及需要优化模型性能的目标,分析并调研了以下的内容。

一、当下比较流行的轻量级模型以及其优化策略

在学术界中,往往使用Flops来评估模型算力,其优化也是针对这一方面来优化的

  • MobileNet:将传统conv替换为DWconv与PWconv,降低Flops,DW+PW = 传统conv,但是所需要的Flops更低,在论文中,V3Flops低于V2,且效果更好一些;
  • octConv: 将传统conv替换为octConv,可以进一步降低Flops,其原理为卷积得到的特征中,存在高频特征与低频特征,而低频特征在卷积时可以降低分辨率,在论文中,ocv-mobilenet其Flops更低,且效果略好一些;
  • GhostNet:将传统conv替换为ghost module,可以降低Flops,其原理特征映射之间的相关性与冗余性,即部分特征可以直接通过对其他特征进行简单的线性变换得到,而不用进行卷积;
  • SkipNet:顾名思义,即认为多层的cnn,是为了解决部分cornercase而设计的,一部分case并不需要走完网络全程,所以可以通过“跳跃”的形式来提高性能;
  • MobileVit:针对Mobile优化的VIT,其为transformer,并非传统cnn,故这里并没有多研究;
  • TineNet: 其主要阐述了一个观点,即在轻量级网络上面,对于模型效果影响最多的因素,主要为分辨率>网络深度>网络宽度。

所以,理论上如果我们对于当前的模型,如果设计为skip-ghost-oct-mobilnet-sod的形式(融合怪哈哈哈),其Flops可以进一步降低;

但是此时笔者想到了另外两个问题:

1、之前兄弟团队基于NAS优化mbv3-large-1.0,其搜索出来的模型Flops优化了50%,性能优化却只有8%~20%之间,功耗优化只有1~2mA(测试平台为三星9815、sm8350,功耗不排除测试误差);

2、学术界mbv3性能和效果都优于mbv2,但是工业界却普遍反馈并非如此,为了验证,我们在一个回归任务上,使用训练集训练mbv2和mbv3(两个都经过imagenet预训练),v2误差比v3低2%,同时v2的性能确实比v3要高。

据此分析,Flops和性能功耗成正相关,但是并不是严格正比的关系;

二、实测不同模型的性能

基于高通8450平台,批跑一批图片,测试结果如下:

mobilnet 模型大小,Flops,op种类,层数等对于初始化以及推理性能的影响

模型类别

当前模型

mbv3-small-1.0

mbv2-1.0

mbv2-0.5

mbv3-large-1.0

Flops 52M 58M 314M 103M 224M
模型大小(float 32,output1~35之间) 4.85M 5.93M 8.46M 2.62M 16M
初始化(无缓存) 1.66s 1.02s 0.656s 0.645s 1.16s<
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值