如果GPU运算是并行计算的话那么按理来说 batchsize 的增大并不会每一步的计算时间。可是我实际运行tensorflow MNIST 数据集示例 修改batch_size 的结果却是这样的:

循环次数 batch_size 时间

2000 1 6.2032110691070563

2000 2 6.312160968780518

2000 3 6.461185932159424

2000 10 6.871996641159058

2000 20 7.6756696701049805

2000 30 8.525161266326904

2000 40 9.229804515838623

2000 50 10.038037300109863

2000 60 11.120123863220215

2000 100 14.59116268157959

2000 200 23.391196727752686

2000 500 47.28020977973938

求问原因


我认为所谓的GPU并行运算是针对一层卷积操作的。比如,现在有N个通道数为C的卷积核,那么这N个卷积核之间是没有依赖关系的,就可以同时计算出对应的N张特征图。而网路的前一层和后一层之间有依赖关系,前一层的输出是后一层的输入,所以应该不存在并行关系。这一点在Caffe框架下比较明显。


batch_size增大就是计算量变大,就算是再并行运算,计算机的计算量也是有限的,超过计算机的并行计算量肯定增大开销时间。再说了并行运算会有通讯的时间成本,这样的话开销时间也会变大。所以引起开销时间变大的因素有很多!


楼主现在弄明白了吗,我发现我验证时候增大batchsize,总时间差别不大


stackoverflow 上的回答是GPU的并行是指每一个卷积层是并行的,而不是整个batch 里面所有的数据都是一起处理的。 有大神回复一下 是这个样子吗?

Why training speed does not scale with the batch size??

stackoverflow.com图标


问题太专业回答不了


推荐阅读:
相关文章