这篇论文主要讨论如何针对CNN做一些GPU矩阵计算的优化。传统CNN计算主要开销是在convolutions, activation function, pooling.
首先,我们看convolution的操作过程:
参数表:
O是输出input feature map,F是filter, D0是input feature map. 从公式看到如果用循环操作,需要7次循环,n,k,p,q4次可独立循环,c,r,s是累加操作的循环。
其次,我们看convolution在GPU上如何实现,文中介绍了三种方法:
第一,最直观的方法是直接实现如上公式,但是这种实现呢需要处理许多的corner case。 文中介绍cuda-convnet2是实现了该种方法,该种方法在不同取值的卷积参数空间效率不一,比如batch size > 128,效率很高,但是如果batch size < 64, 效率比较低。
第二,采用快速傅里叶变换fft,具体怎么做,参见论文Fast training of convolutional networks

本文探讨了如何通过cuDNN优化针对GPU的深度学习,特别是CNN的矩阵计算。主要讨论了三种卷积实现方法:直接实现、FFT以及转化为密集矩阵相乘。文中指出,虽然直接实现和FFT各有优缺点,但caffe采用的密集矩阵相乘方法在大型矩阵中具有较高的浮点运算与数据传输比率,能有效利用GPU缓存,减少内存交通。然而,它需要大量的临时内存,因此采用了分块加载和计算策略来优化。
1万+

被折叠的 条评论
为什么被折叠?



