返回信息流而且很奇怪的是把模型调小之后,所需要的内存反而更大了?
这是一条镜像帖。来源:北邮人论坛 / iwhisper / #7428119同步于 2024/7/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
IWhisper机器人发帖
算力求问
IWhisper#292
2024/7/26镜像同步16 回复
订阅后,新回复会通过你的通知中心匿名送达。
16 条回复
小东西大二,联系了老师,但是一直是在老师的指导下用kaggle跑代码的(没有用实验室的资源),现在运行了一个比较大的模型,在把批次调整到最小+梯度累积+减小数据集大小/模型大小之后都还是无法解决out of memory的问题,请问这是因为kaggle上白嫖的资源内存真的太小了吗?可以跟老师说借一下实验室的算力资源吗?会解决问题吗[em9]小东西不懂还请学长学姐们指教
关于模型占用的真实显存,可以自己搜索学习一下 这里给你简单概括下,基本可以认为是模型参数量,输入变量,前向传播中所产生的中间变量,以及优化器所需的各阶梯度的总和,也就是说,如果只考虑降低显存占用,减少批次是最核心的,它同时影响了输入变量和中间变量(大头)的大小。以你目前的情况看,如果还想进一步降低占用,只能更换优化器,换成SGD之类,最大限度降低显存。当然,这可能也还是会爆,而且即便不爆,低批次+梯度累积也会导致训练效率低和性能下降,除非你有大量的时间可供浪费,建议还是申请提升算力。如果确实是有意义的科研,对你的成长有帮助,我认为一个好老师不会过于排斥,保险起见,建议先从师兄师姐入手,探探口风,再考虑和老师直接申请
单纯的调节模型尺寸,一般不会出现你所说的情况,因为同一系列模型的框架一般是一样的,只可能是输入变量的尺寸发生了变化,或者是模型框架有改变,比如一些运算导致产生了更多的中间变量。不过鉴于你一直都没跑通,可能是你监控显存时,之前的溢出量过大,导致在前置阶段就崩了,就像上限是10,而你运算了4+7,因此卡在了4。而模型变小后,是在后期才崩,模型运算了3+4+6,因此卡在了7
不客气,还要补充一点,不少超参数也会被算在真实显存中,比如一些参与运算但不计算梯度的辅助变量,比较经典的可以参考一些Transformers变体中的预定Attn mask