Caffe 使用多GPU

由于在ubuntu中使用caffe的程序时,都使用.sh文件,该文件中常见的命令为:

./build/tools/caffe train --solver=examples/testXXX/solver.prototxt

当电脑中有多个GPU时,默认使用GPU0。如果想使用其他的GPU,可以将该文件内容修改如下:

./build/tools/caffe train --solver=examples/testXXX/solver.prototxt --gpu 2

 注意,caffe中默认编号从0开始,因而–GPU 2的意思是使用第3个GPU。

如果要使用多个GPU,可以使用如下命令:

./build/tools/caffe train --solver=examples/testXXX/solver.prototxt --gpu 0,1,2,3

则使用0,1,2,3这4个GPU。

如果要使用所有的GPU,可使用如下命令:

./build/tools/caffe train --solver=examples/testXXX/solver.prototxt --gpu all

注意,使用的GPU越多,开始初始化时时间越久。

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

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

所以相同时间内,多GPU 能够训练更多的数据。

2. Batch_size 选择的问题

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

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

Reference

猜你喜欢

转载自blog.csdn.net/u011808673/article/details/84060698