首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用CPU和GPU训练模型速度和内存

用CPU和GPU训练模型速度和内存
EN

Stack Overflow用户
提问于 2017-05-03 14:19:19
回答 3查看 2.4K关注 0票数 2

我正在尝试使用通过https://github.com/silicon-valley-data-science/RNN-Tutorial生成的数据集(大约340000个带有转录本的小wav音频样本)来训练在数据集中发现的模型。

当我和GPU一起训练的时候,训练进行得比较快,但是我不能把batch_train_size设置在25以上而不达到OOM。

当我使用CPU进行训练时,训练要慢得多,但我可以轻松地将batch_train_size设置为250 (可能高达700,但尚未尝试)。

我搞不懂GPU上的小批量限制会如何影响培训质量,或者如果提高批次数量可能会抵消这种影响…

也就是说,10000年代有25个样品,500个年代有500个?

GPU是GTX 1060和6Gb内存,CPU是双Xeon2630l v4 (1.7Ghz处的2*10个超线程核)和128 6Gb内存。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-03 22:02:27

我用卷积神经网络对一个项目中的批次大小进行了实验,发现了一些有趣的东西:批大小是一个正则化器。

我有一个网络(在本例中是卷积的,但重点转到您的情况下),并且我有一个小的和大的数据集。

对网络中的20多个参数进行了全面的超参数搜索,包括批量大小、L2正则化、退出、卷积参数、完全连通层中的神经元等。

当我有小数据集(成千上万个样本中的10个)时,超参数搜索更倾向于对L2和退出进行正则化,这些值在验证集上产生了更好的结果。它也倾向于更低的批次大小。

当我有一个大型数据集(数百万个样本)时,数据集本身就足够大,以免过度拟合。超参数搜索更有利于更低的L2正则化和丢失(实际上选择了98%的保持丢失概率)。而这一次,它倾向于一个大的批量。

这是出乎意料的,我还没有看到太多的文献将批大小作为正则化参数,但是在这些实验中,结果对我来说是非常清楚的。

因此,就您的观点而言,这可能会产生很小的差别,但是您可能可以使用其他正则化技术进行补偿。通过更快的训练和测试更多的超参数组合,您将获得更多的里程,而不是只关注批处理大小和牺牲运行大量实验的能力。

票数 2
EN

Stack Overflow用户

发布于 2017-05-03 19:23:43

当您有一个大的批大小,您可以有一个更好的梯度估计,反之亦然,小批大小。然而,一些噪音梯度并不总是坏的。它们帮助网络摆脱(可能)糟糕的局部极小值,或者换句话说,它给优化器一个机会探索其他局部极小值,这可能更好。据我所知,不存在知道最佳批次大小的愚蠢方法。经验法则是考虑批次大小在32到128之间,但这同样取决于应用程序、您正在使用的GPU的数量等等。

关于速度,我的猜测是,GPU总是会赢,即使批量大小小20倍。您可以通过简单地测量处理一定数量的样本(而不是批次)所需的时间来计时。如果您观察到批处理大小正在影响您的验证精度和收敛性,那么您可能会考虑转向CPU。

底线:做以上的测试,但从我可以得到的信息,我会说去与GPU的培训。

票数 1
EN

Stack Overflow用户

发布于 2018-02-19 13:52:11

本论文研究了批量大小与学习率的关系。它们并没有降低学习速度,而是以同样的因素增加了批处理的大小。

在相同的训练周期后,它达到了等价的测试精度,但参数更新较少,导致了更大的并行性和更短的训练时间。

简而言之,如果使用更大的批次大小,则可以使用更大的学习速率来减少培训时间。

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

https://stackoverflow.com/questions/43762679

复制
相关文章

相似问题

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