参考:https://blog.csdn.net/Chris_zhangrx/article/details/81348666
1. 怎么设计一个运行效率高效的神经网络
- 图1:ShuffleNetv2与其它算法在不同平台下的复杂度、速度以及准确度对比
-
如图1中的(c)和(d),可以看到相同FLOPs的两个模型,其速度却存在差异。这种不一致主要归结为两个原因,首先影响速度的不仅仅是FLOPs,如内存使用量(memory access cost, MAC),这不能忽略,对于GPUs来说可能会是瓶颈。另外模型的并行程度也影响速度,并行度高的模型速度相对更快。另外一个原因,模型在不同平台上的运行速度是有差异的,如GPU和ARM,而且采用不同的库也会有影响。
-
上图就是表示在 4 种网络都有相近的 FLOPs 但是网络的速度在不同的平台上都不相同。所以仅通过 FLOPs 来衡量不是很准确。因为一些因素并没有考虑进去,一个就是内存访问成本(memory access cost,MAC),例如当框架在执行分组卷积等操作时,运算能力强劲时可能可以忽略,但是在一些计算能力有限的平台上面就无法忽略了;还有一个就是网络的并行化程度,在相同的 FLOPs 下,网络并行化程度更高的网络速度更快。
- 图2:不同模型的运行时间分解
-
一些严重影响速度的因素没有考虑在FLOPs中。比如MAC(memory access cost内存访问成本,计算机在进行计算时候要加载到cache,然后计算,这是需要时间的)。比如分组卷积(group convolution)就会消耗较大的MAC。并行度,如果网络的并行度较高,那么速度就会有显著的提升。
-
计算平台的不同,比如tensor运行的使用会提高计算速度,(但是最近发现,即使通过分解(decomposition)可以减少75%的FLOPs,但是计算速度却便慢了,究其原因是因为最近更新的cudnn加强了对3x3conv计算的优化,3x3卷积并不是1*1卷积计算速度的9倍这么简单)
-
如上图,可以看到相同的网络在不同的平台上各个部分消耗的时间比例也是不一样的(即有些操作对GPU结构友好但是对ARM结构并不友好,反之亦然),所以为了更准确的衡量网络的效率,网络也应该针对自己的目标平台来进行对比和测量。
2. 网络设计准则
- 当输入通道与输出通道比例为 1:1 时, MAC最小,可以使网络的速度更快。
- 分组数越多,MAC 就会越大,网络结构就会越慢。分组数应该根据实际应用的平台谨慎选择。单纯的通过增加分组卷积来增加通道数从而增加精确度是一个不明智的选择。
- 降低网络结构的离散程度(减少分支以及所包含的基本单元)
- 减少 element-wise 操作
网友评论