Neural network 在Caffe中使用多个具有较大批处理单元大小的GPU时内存不足

Neural network 在Caffe中使用多个具有较大批处理单元大小的GPU时内存不足,neural-network,gpu,caffe,multi-gpu,Neural Network,Gpu,Caffe,Multi Gpu,我现在正在使用8个TITAN Xp GPU对(非常大的型号)进行微调。但是,当我增加批处理大小时,Caffe会出现内存不足错误。以下是我所做的: 首先,在训练阶段,batch_size被设置为40,在单个GPU上可以正常工作。所选GPU的利用率接近100%。 然后,我使用所有8个GPU,将批处理大小增加到128 './build/tools/caffe train -solver mysolver.prototxt -gpu all' 所有GPU都得到了充分利用,如中所示 Caffe给了我以下

我现在正在使用8个TITAN Xp GPU对(非常大的型号)进行微调。但是,当我增加批处理大小时,Caffe会出现内存不足错误。以下是我所做的:

首先,在训练阶段,
batch_size
被设置为40,在单个GPU上可以正常工作。所选GPU的利用率接近100%。 然后,我使用所有8个GPU,将批处理大小增加到128

'./build/tools/caffe train -solver mysolver.prototxt -gpu all'
所有GPU都得到了充分利用,如中所示

Caffe给了我以下错误:

F0906 03:41:32.776806 95655 parallel.cpp:90] Check failed: error ==cudaSuccess (2 vs. 0)  out of memory
*** Check failure stack trace: ***
@     0x7f9a0832995d  google::LogMessage::Fail()
@     0x7f9a0832b6e0  google::LogMessage::SendToLog()
@     0x7f9a08329543  google::LogMessage::Flush()
@     0x7f9a0832c0ae  google::LogMessageFatal::~LogMessageFatal()
@     0x7f9a08abe825  caffe::GPUParams<>::GPUParams()
@     0x7f9a08abefd8  caffe::NCCL<>::NCCL()
@           0x40dc69  train()
@           0x40a8ed  main
@     0x7f9a06abf830  (unknown)
@           0x40b349  _start
Aborted (core dumped)
F0906 03:41:32.776806 95655 parallel.cpp:90]检查失败:错误==cudaSuccess(2对0)内存不足
***检查故障堆栈跟踪:***
@0x7f9a0832995d谷歌::日志消息::失败()
@0x7f9a0832b6e0谷歌::日志信息::发送日志()
@0x7f9a08329543 google::LogMessage::Flush()
@0x7f9a0832c0ae谷歌::LogMessageFatal::~LogMessageFatal()
@0x7f9a08abe825 caffe::GPUParams::GPUParams()
@0x7f9a08abefd8 caffe::NCCL::NCCL()
@0x40dc69列车()
@0x40a8ed干管
@0x7f9a06abf830(未知)
@0x40b349\u启动
中止(堆芯转储)
理论上,我可以用
批量大小=40*8=320
进行训练。(如果我在这里,请告诉我)

那么,我怎样才能充分利用GPU来加速我的模型训练呢?
提前谢谢

使用多个GPU时,不需要增加prototxt中的批处理大小。如果您的批量大小为40,Caffe将分别为每个GPU使用该大小,从而有效地为您提供40*8的批量大小(无需更改任何内容)。

那么,测试如何?如果我有8个GPU,哪一个将用于测试?@Y.C.Sun我相信将使用默认的0 GPU,除非您明确指定使用哪一个。还有一个困惑。如果批量大小为40且使用了8个GPU,则梯度是通过对320个样本进行平均或对每40个样本的8个单独平均梯度进行平均来计算的?梯度在树状拓扑中共享。所以GPU编号0和1将共享梯度(它们将被平均),GPU 2和3将共享,然后这两个平均梯度将再次被平均。(通过使用4个GPU简化案例)明白了!此外,假设训练集有100个样本,我想用2个GPU训练10个时代,最大iter应该设置为10*100/批大小还是10*100/批大小/2?