Caffe 多GPU训练问题,以及batch_size 选择的问题

1. 多GPU训练时,速度没有变得更快。

使用多GPU训练时,每个GPU都会运行一个 Caffe 模型的实例。比如当使用 n n n 个GPU训练时,网络会有 n n n 个分身分别在各自的GPU上运行, n n n 个网络中有一个“本尊”叫root_net,root_net除了负责正常的前传反传还负责更新参数,而其它网络只负责前传和反传。大致流程是这样的, n n n 个网络共享一个数据层,数据层读取 n n n 个batch的数据分别送给 n n n 个网络进行前传和反传,然后使用归约的方法将 n n n 个网络计算的梯度累加在root_net上,取平均后由root_net更新网络参数,接着同步 n n n 个网络的参数,数据层再取 n n n 个batch的数据进行下一次迭代。在多个GPU之间实现归约和同步会很耗时,尤其是当两个GPU不在一个multiGpuBoardGroup上的情况,所以整体的时间并没有减少太多。

2. Batch_size 选择的问题

Caffe 多GPU训练问题,以及batch_size 选择的问题_第1张图片

这里的意思就是batchsize和学习率是相关的,如果batchsize减小了X倍,则理论上学习率应增大sqrt(X)倍(当然这是找到最好的batchsize的情况下的),不过Alex还是用了X倍。后面 https://arxiv.org/abs/1404.5997 这个链接的论文还没看,有时间的可以看一下,好像有专门讲到batchsize的设置的。

另外,batchsize最好设置为8的倍数,这样gpu的并行运算效率最高。

Reference

  • http://www.caffecn.cn/?/question/239
  • https://blog.csdn.net/seashell_9/article/details/66973386?utm_source=debugrun&utm_medium=referral

你可能感兴趣的:(Caffe)