为什么batch_size 增大会增加每一步的运算时间?
如果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问题太专业回答不了
推荐阅读: