Torch:当数据大小相同时,为什么卷积层比完全连接线性层更慢

时间:2017-12-22 03:17:52

标签: machine-learning neural-network gpu convolution torch

我正在使用 torch7(LUA5.3)来实施一个神经网络训练mnist数据集,但我发现火炬有两个奇怪的问题:
1。当数据大小相同时,卷积层比完全连接的线性层慢 2。 GPU中的卷积层(使用cuda9.0的TITAN X)比CPU中慢;

我做了一些简单的实验来证明:
第一个问题:
(1)当批量大小为500且特征尺寸为784(28 * 28)时,对于完全连接的线性层,输入大小为500 * 784,输出大小为300(我们将其设置为300),需要1.67秒转发数据

picture: 784 * 300 full connected linear layer

(2)使用相同的批量大小,卷积层需要3.07s,input2的大小为500 * 1 * 28 * 28,表示500个图片,1个通道,图片为28 * 28。卷积层有1个输入平面和3个输出平面,内核大小为2 * 2,步长为1,填充为0

picture: convolution layer

对于第二个问题:
(1)在相同的数据大小和神经网络结构下,GPU在CPU中所需的时间比在CPU中需要更多时间:

picture: It takes 11s in GPU however 3.07s in CPU

(2)线性层效果很好,GPU中的时间比在CPU中耗时少

picture: it takes only 0.27s when running full connected linear layer in GPU

然而,很明显卷积层具有较少的权重并且需要较少的计算,我认为它应该比线性层快得多。而且,GPU不应该比CPU慢。

提前致谢

2 个答案:

答案 0 :(得分:0)

对于第一个问题:计算时间不仅取决于输入数据大小。它还取决于权重大小,权重和输入数据之间的操作次数

对于第二个问题

(1)

它在我的电脑上在GPU(GeForce GTX TITAN X)上运行11秒,在CPU(Intel(R)Core(TM)i7-4770 CPU @ 3.40GHz上运行14秒)。

适用于GPU,11s 11s on GPU

适用于CPU,14s 14s on CPU

GPU与nn.SpatialConvolutionMM,8s

如果使用nn.SpatialConvolutionMM,它的运行速度会更快。

when using nn.SpatialConvolutionMM

最后一件事

权重越少并不意味着计算量越少。在计算方面,它意味着加法和乘法的数量。

卷积层花费更多时间的原因在2018-01-11添加

即使计算复杂度低于线性回归,卷积层需要更多时间的原因。我找到了关于卷积层{* 3}}的解释。卷积层会经常复制输入数据,因此可以通过矩阵乘法完成正向操作,但是,我还没有进行任何实验。您是否可以尝试使用数据复制实现卷积操作以验证原因?

答案 1 :(得分:0)

虽然我不知道为什么在GPU中运行卷积层时速度非常慢,但我找到了加速它的方法。 'cudnn'是一款基于NVIDIA CUDNN的火炬包,它可以大大加快卷积层的计算速度。有关详细信息,请参阅here。据我所知,线性层不能加速太多,然而,卷积层讲的是另一个故事