深度学习模型速度估计

Blog:http://machinethink.net/blog/how-fast-is-my-model/ https://www.jianshu.com/p/0a195604c7ad

在移动设备上运行深度学习时,模型预测的准确性并不是唯一要考虑的因素,还需要注意以下问题:

  • 在App发布包中占用的空间——单个模型有能会使你的App下载体积增加几百MB。
  • 运行时占用的内存量——在iPhone和iPad上,GPU可以使用设备中的所有RAM,但是总共也只有几GB,当空闲内存用完时,应用程序会被操作系统终止。
  • 模型运行速度——尤其是在处理实时视频或大图像时(如果模型需要几秒钟来处理单个图像,那么使用云服务可能更好)。
  • 耗电速度——多久会把电池耗干,或使设备热得难以接受。

学术论文的作者通常不担心这些事情。他们可以在有多块GPU的服务器或计算集群上运行他们的模型。但如果您计划将这种模型转换到移动设备上运行,您将需要了解该模型在目标设备上的运行速度以及使用的电池电量。

测量模型速度的最好方法是连续运行多次,并取平均运行时间。单一测量结果可能有相当大的误差——CPU或GPU可能正忙于执行其他任务(例如绘制屏幕)—— 多次运行取平均值,将大大减少该误差。

当然,这假设您已经有了一个可以在设备上运行的模型。

在开始训练模型之前,对您的模型多做一些理论上的分析是非常有价值的,因为训练非常耗费资源。

案例研究:我的一个客户最近用MobileNetV2层替换了他们模型中的MobileNetV1层。V2使用的运算比V1少得多的,所以您可能会认为这种改变会使模型更快(模型中有许多额外的层,但是这些层没有改变)。

在V2中,他们设定depth multiplier值为1.4,这给每层增加了更多的滤波器,但是这仍然导致网络比以前具有更少的参数。即便如此,我还是预感到,V2层的特定配置不会比原来的V1层快很多。

结果证明我的预感是正确的——这个V2模型实际上更慢!在这篇文章中,我将展示为什么会这样,以及如何在理论层面用数学预估时间。

计算

获得模型的速度的一种方法是概括地统计它的计算量。我们通常统计计算量使用FLOPs(浮点运算数),但是这里我们使用MACCs或乘法累加数(multiply-accumulate operations )。

译者注:FLOPS和FLOPs的区别:

  • FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。
  • FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。

注意:在继续之前,我必须指出,单独统计计算数量并不能告诉您需要知道的所有信息。计算计算数量只是为了大致了解模型的计算成本是有用的,但是其他因素,例如内存带宽,通常更重要(稍后我们将进行讨论)。

点积

我们为什么要统计乘法累加(multiply-accumulate)呢?因为神经网络中的很多操作都是点乘,像下面这样:

y = w[0]*x[0] + w[1]*x[1] + w[2]*x[2] + ... + w[n-1]*x[n-1]

这里,w和x是两个向量,结果y是一个标量(单个数字)。

在卷积层或全连接层(现代神经网络中的两种主要层)中,W是层的学习权重,X是层的输入。

Y是层的输出之一。通常一个层会有多个输出,所以我们需要计算许多点积。

我们把 w[0]*x[0]+… 计作一次乘法累加(multiply-accumulate&#

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值