有时我会遇到一个问题:
OOM when allocating tensor with shape
例如:
OOM when allocating tensor with shape (1024, 100, 160)
1024是我的批号,我不知道剩下的是什么。如果我减少了模型中的批次大小或神经元数量,它就运行得很好。
是否有一种基于模型和GPU内存计算最佳批处理大小的通用方法,这样程序就不会崩溃?
简而言之:我希望在我的模型中尽可能大的批处理大小,这将适合我的GPU内存,不会使程序崩溃。
发布于 2017-10-09 23:33:19
您可以使用以下方法估计最大批次大小:
最大批处理size=可用GPU内存字节/4/(张量的大小+可训练参数)
发布于 2017-10-09 22:27:55
摘自古德费罗等人最近出版的“深度学习”一书,第八章
小型批次的大小通常由以下因素驱动:
在实践中,这通常意味着“以2的幂和越大越好,只要批处理符合您的(GPU)内存”。
您可能还想在Stack Exchange中查阅几个很好的帖子:
请记住Keskar等人的论文。上面的几篇文章引用了“论深度学习的大批次训练:泛化差距与锐利最小”,它得到了其他值得尊敬的深度学习社区的研究人员的一些反对意见。
希望这能帮上忙。
更新(2017年12月):
有一篇由Yoshua Bengio & team,影响SGD最小in的三个因素 (2017年11月)发表的新论文,值得一读,因为它报告了关于学习率与批次大小之间相互作用的新的理论和实验结果。
更新(2021年3月):
令人感兴趣的还有2018年的另一篇论文,深度神经网络小批量训练的再探讨 (h/t to Nicolas ),它违背了更大的、更好的建议,引用了抽象的话:
m=2和m=32之间的小批量大小一直以来都是性能最好的,这与最近提倡使用数千个小批量尺寸的工作形成了鲜明的对比。
发布于 2020-01-26 23:13:24
使用pytorch汇总(pip )或keras (内置)提供的摘要。
例如。
from torchsummary import summary
summary(model)
.....
.....
================================================================
Total params: 1,127,495
Trainable params: 1,127,495
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.02
Forward/backward pass size (MB): 13.93
Params size (MB): 4.30
Estimated Total Size (MB): 18.25
----------------------------------------------------------------
放入批处理中的每个实例都需要在内存中进行完全向前/向后传递,您只需要一次模型。人们似乎更喜欢两个功率的批处理大小,可能是因为gpu上的自动布局优化。
当增加批次大小时,不要忘记线性地增加您的学习速率。
假设我们手头有一个带有16 GB内存的Tesla P100。
(16000 - model_size) / (forward_back_ward_size)
(16000 - 4.3) / 18.25 = 1148.29
rounded to powers of 2 results in batch size 1024
https://stackoverflow.com/questions/46654424
复制相似问题