我的模型有多快?

原文链接:https://machinethink.net/blog/how-fast-is-my-model/

在移动设备上进行深度学习时,模型预测能力有多好并不是唯一的考虑因素。你还需要考虑:

  • 空间占用:单个模型的参数文件要占用多大空间
  • 运行时内存占用:在iPad和iPhone上,GPU会使用大部分的RAM,留下部分。如果模型全部使用了,该应用程序会被操作系统终止
  • 运行速度:特别是在处理实时视频或大型图像时(如果模型需要几秒钟来处理一张图像,你可能会更好地使用云服务)
  • 耗电情况:设备耗电快热得快

衡量一个模型速度的最好方法是连续运行多次,并取平均耗时。您测量任何一次运行的时间可能会有相当大的误差范围–CPU或GPU可能正忙于执行其他任务(例如绘制屏幕)–但当您对多次运行进行平均时,这将显著缩小该误差。

在开始训练模型之前,先对模型的运行状况进行理论分析是非常有用的,因为训练成本很高。

案例分析

我的一个客户最近用MobileNetV2层替换了他们模型中的MobileNetV1层。V2使用的计算量比V1少很多,所以你会认为这种变化会使模型的速度快很多(模型中有很多额外的层,但这些层没有改变)。仅管修改之后的模型参数变少了,但效果可能并不会提升。

原因分析

1、计算量

我们常用 FLOPs(floating point operations per second,每秒浮点运算数)来衡量模型的速度;还有MACCs (multiply-accumulate operations), 也叫MADDs.(矩阵运算-乘加运算)

由于MACC操作有n次乘法和n-1次加法,乘加执行(2n - 1)FLOPS。所以一个MACC大概是FLOPS的二倍。

由于乘积累加运算是否普遍,在计算机中MACC是一个指令。

不同层的MACC计算方法
  • 全卷积层
  • 激活函数
  • 卷积层
  • 深度可分离层
  • 批量归一化(Batch normalization)
  • 其它层(池化层)

2、内存消耗

计算量只是整个其中一个评估因素。一个更重要的影响因素是内存带宽。目前的计算机结构下,单次内存访问比单次运算慢得多的多。

您刚刚看到这些神经网络执行了大量计算,但是它们执行多少次内存访问?

对于每一层,设备需要:

  • 从主内存中读取输入向量 / feature map
  • 计算点积ーー也包括从主存储器读取图层的权重
  • 将输出向量或 feature map 写回主内存

内存读取相对于计算量是十分耗时的。

2.1 权重的内存占用
2.2 feature map和中间结果的内存占用
2.3 融合Fusion

这一节的意思是,像 ReLU 这样比较简单的运算,如果不做优化,在计算时近乎是从输入到输出做了一次拷贝。计算可以认为不耗时间,但内存访问还是有消耗的,所以可以把这一步同卷积层的计算合成,从而节省了一轮内存读写

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值