旷视MegEngine是如何将31*31的大核卷积计算速度提高10倍的

2022-06-08 20:10:45 浏览数 (2)

代码语言:javascript复制
来源:DeepHub IMBA本文约3400字,建议阅读5分钟“大内核的cnn可以胜过小内核的cnn”这可能是今年来对于CNN研究最大的成果了。

2021年提议的Vision Transformer(VIT)已成为计算机视觉深度学习领域的一个有前途的研究主题。随着VIT的研究变得更加深入,一些研究人员受到VIT的大型接收领域的启发,将卷积网络也改造成具有更大的接收场来提高效率。根据有效的接收场(ERF)理论,ERF的大小与内核大小和模型深度的平方根成正比。这意味着通过堆叠层来实现大ERF的有效性不如增加卷积内核大小。因此,研究人员提出了包含大型卷积内核新的CNN结构。该网络可以达到与VIT相同的准确性。“大内核的cnn可以胜过小内核的cnn”这可能是今年来对于CNN研究最大的成果了。

内核带来了更多的计算和参数

CNN中最常见的卷积内核大小是3x3、5x5、7x7。一般情况下如果卷积内核的大小超过9x9就将其确定为“大”。卷积内核的大小增加了n,参数数量和浮点操作(FLOPS)的数量将大约增加n平方。这就是研究人员在探索CNN新结构时首先不考虑大型内核卷积的主要原因。如下图所示,逐通道卷积(又称深度卷积)可以将FLOPs和参数数量减少到密集卷积的1/(输入通道数量)。这就是为什么大多数研究人员将大核卷积设计为深度卷积,这样既可以获得大核卷积的好处,又不需要大幅增加参数和FLOPs。

但是在相同的FLOPs限制下,研究人员发现,他们的大核深度卷积神经网络比传统的网络运行得慢得多。

MegEngine团队发现,通过适当的优化,当内核尺寸越来越大时,深度卷积几乎不需要任何成本。本文就是对他们研究成果的介绍。

如何寻找大核卷积的优化空间?

为了回答这个问题,我们需要将Roofline 模型作为背景。如下图所示,roofline模型用于描述在计算平台的算力和带宽的限制下,程序所能达到的理论性能上界。

roofline模型的示意图,有三个重要概念:

  • 算力:每秒所完成的浮点运算次数,单位为FLOP/s或GFLOP/s
  • 带宽:每秒所完成的内存读取量,单位为Byte/s或GByte/s
  • 计算密度:又称访存比,是算力与带宽的比值,即每字节读取所完成的浮点运算量,单位为FLOP/Byte

“roofline”是指TP对IM的图的形状。设备的理论峰决定了“屋顶”的高度(蓝线)。同时,“屋顶”(红线)的斜率是设备的最大访问带宽。这两条彩色线的连接也分隔两种类型的应用,计算结合和内存结合的瓶颈的分离。

当应用程序的计算密度I超过最大IM时,其性能只能达到计算设备的理论峰值TP。应用程序的最大性能P显然与计算密度I成正比。这种类型的应用程序称为计算绑定。当应用程序的计算密度小于IM时,性能是由设备的最大带宽和计算密度确定的。这种类型的应用程序称为内存绑定。与计算绑定方案相反,增加设备带宽或增加内存绑定应用程序的计算密度可能会导致应用程序性能的线性增加。

针对密集卷积的优化已经达到了瓶颈

到现在为止,很多的研究已经探索对密集卷积的优化技术,包括Direct, im2col/implicit GEMM, Winograd and FFT。

在本文中使用NVIDIA 2080TI GPU作为计算设备在roofline模型的背景下进行分析。该计算设备的L2高速缓存带宽为2.16TB/s,理论峰值性能为4352 FFMA核心 * 1.545 GHz * 2 = 2 = 13.447 tflops。我们假设CUDA中每个线程的输出数据都积累在寄存器中,L1缓存达到100%,同时忽略了写回输出的过程。由于现代计算设备的设计足以在实际卷积计算中同时支持许多耗时的访问操作,还假设L2缓存达到100%,并达到L2缓存的最大带宽。本文使用的卷积输入形状为(n, ic, ih, iw)。内核是(oc, ic, kh, kw),输出是(n, oc, oh, ow)。

im2col/implicit GEMM是最经典的密集卷积优化方法,在im2col转换之后,将卷积转换为一个矩阵乘法问题,其中

0 人点赞