Finetuning Caffe 深度学习检查失败:error == cudaSuccess out of memory

Finetuning Caffe Deep Learning Check failed: error == cudaSuccess out of memory

我对深度学习及其框架比较陌生。目前,我正在试验 Caffe 框架并尝试微调 Vgg16_places_365。

我正在使用 Amazone EC2 实例 g2.8xlarge 和 4 个 GPU(每个有 4 GB 内存)。然而,当我尝试训练我的模型(使用单个 GPU)时,出现了这个错误:

Check failed: error == cudaSuccess (2 vs. 0) out of memory

在我做了一些研究之后,我发现解决这个内存不足问题的方法之一是减少 train.prototxt

中的批处理大小

.

最初,我将批量大小设置为 50,然后反复将其减少到 10(因为它在 batch_size = 10 时有效)。 现在,模型正在训练中,我很确定这将需要很长时间。然而,作为这个领域的新手,我很好奇这个批量大小与另一个参数之间的关系,例如学习率、步长甚至我们在 solver.prototxt.

中指定的最大迭代次数。

批处理的大小对模型质量的影响有多大(比如准确性)。如何使用其他参数来影响质量。另外,不是减少批量大小或扩大我的机器,有没有另一种方法来解决这个问题?

要回答有关批量大小、学习率和最大迭代次数等参数之间关系的第一个问题,您最好阅读数学背景知识。一个好的起点可能是这个 stats.stackexchange 问题:How large should the batch size be for stochastic gradient descent?。答案会简单讨论batch size和learning rate的关系(根据你的问题我假设learning rate = stepsize)同时也提供一些参考供进一步阅读。

要回答你的最后一个问题,在你微调的数据集和固定模型(即 VGG16)(即固定大小的输入数据和固定大小的模型)的情况下,你将很难避免大批量内存不足问题的时间。但是,如果您愿意减小输入大小或模型大小,则可以使用更大的批量大小。根据您微调的方式(和内容),通过丢弃学习层或减少完全连接层的 number/size 可能已经可以减小模型大小。

剩下的问题,即批量大小对 quality/accuracy 的影响有多大以及其他参数对 quality/accuracy 的影响有多大,如果不知道您要解决的具体问题,就很难回答。例如的影响所达到精度的批量大小可能取决于各种因素,例如数据集中的噪声、数据集的维数、数据集的大小以及其他参数,例如学习率(=步长)或动量参数。对于这类问题,我推荐 textbook by Goodfellow et al.,例如第 11 章可能会提供一些关于选择这些超参数(即批大小、学习率等)的一般准则。

另一种解决问题的方法是使用机器上的所有 GPU。如果您的 GPU 上有 4x4=16GB 内存,那就足够了。如果您在命令模式下 运行ning caffe,只需添加 --gpu 参数如下(假设您有 4 个 GPU 索引为默认 0,1,2,3):

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

但是,如果您使用的是 python 界面,运行 尚不支持多个 GPU。

我可以指出一些一般性提示来回答您关于批量大小的问题: - batchsize 越小,你的学习就越随机 --> 训练数据过度拟合的可能性越小;不收敛的概率更高。 - caffe 中的每次迭代都获取一批数据,运行s 向前并以反向传播结束。 - 假设你的训练数据是 50'000,你的 batchsize 是 10;然后在 1000 次迭代中,您的 10'000 个数据已被馈送到网络。同样的场景场景,如果你的batchsize是50,在1000次迭代中,你所有的训练数据都被网络看到了。这称为一个纪元。你应该设计你的 batchsize 和最大迭代次数,使你的网络训练一定数量的 epochs。 - caffe 中的步长,是求解器在将学习率乘以 gamma 值之前 运行 的迭代次数(如果您已将训练方法设置为 "step")。