首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Finetuning深度学习检查失败:错误== cudaSuccess内存不足

Finetuning深度学习检查失败:错误== cudaSuccess内存不足
EN

Stack Overflow用户
提问于 2016-09-02 10:37:00
回答 2查看 1.3K关注 0票数 1

我在深度学习和它的框架方面相对较新。目前,我正在试验Caffe框架,并试图微调Vgg16_places_365。

我使用的是带有4个GPU的Amazone EC2实例g2.8xlarge (每个GPU都有4GB内存)。但是,当我尝试训练我的模型(使用单个GPU)时,我得到了以下错误:

检查失败:错误== cudaSuccess (2比0)内存不足

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

检查失败:错误== cudaSuccess (2比0)内存不足

最初,我将批处理大小设置为50,然后迭代地将其缩减到10 (因为它在batch_size =10时工作)。现在,这个模型正在被训练,我非常肯定它将花费相当长的时间。然而,作为这一领域的新手,我很好奇这个批处理大小与另一个参数之间的关系,例如学习速率、步长,甚至我们在solver.prototxt中指定的最大迭代。

批处理的大小将影响模型的质量(就像精度一样)。如何使用其他参数来提高质量。另外,没有减少批处理大小或扩大我的机器,还有其他方法来解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-02 15:37:18

要回答关于批处理大小、学习速率和最大迭代次数等参数之间的关系的第一个问题,最好阅读有关数学背景的内容。一个很好的起点可能是这个stats.stackexchange问题:对于随机梯度下降,批次大小应该有多大?。答案将简要讨论批次大小与学习率之间的关系(根据您的问题,假设学习速率=逐步大小),并为进一步阅读提供一些参考。

要回答最后一个问题,在您正在细化的数据集上,并且模型(即VGG16)是固定的(即固定大小的输入数据和固定大小的模型),您将很难避免大批大小的内存不足问题。但是,如果您愿意减少输入大小或模型大小,则可以使用更大的批处理大小。取决于您是如何细化的(以及具体的),减少模型大小可能已经通过丢弃学习层或减少完全连接层的数量/大小来实现。

其余的问题,即批次大小对质量/精度的影响有多大,以及其他参数如何影响质量/精度,如果不知道您要解决的具体问题,就很难回答。例如,批次大小对达到的精度的影响可能取决于各种因素,如数据集中的噪声、数据集的维度、数据集的大小以及其他参数,如学习速率(=步长)或动量参数。对于这类问题,我建议使用题名/责任者: by L.,例如,第11章可能提供一些关于选择这些超参数的一般指南(例如批量大小、学习速率等)。

票数 1
EN

Stack Overflow用户

发布于 2016-09-03 04:42:36

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

代码语言:javascript
复制
 build/tools/caffe train --solver=solver.prototxt --gpu=0,1,2,3

但是,如果您正在使用python接口,则还不支持使用多个GPU运行。

我可以指出一些一般性的提示来回答你在批次上的问题:-批次越小,你学习的随机性就越大->训练数据过度拟合的概率越小,不收敛的概率越高。- caffe中的每一次迭代都获取一批数据,向前运行,并以反向传播结束。假设您的培训数据为50'000,您的批次大小为10;那么在1000次迭代中,您的10 000个数据已被输入到网络中。在相同的场景中,如果您的批处理大小为50,在1000次迭代中,您的所有培训数据都会被网络看到。这被称为一个时代。您应该设计您的批处理大小和最大迭代的方式,使您的网络为一定数量的时代进行培训。- caffe中的步长,是计算程序在将学习速率乘以伽玛值之前将运行的迭代次数(如果您已经将您的训练方法设置为“步骤”)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39290339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档