pytorch多GPU加速出错

RuntimeError: CUDA out of memory. Tried to allocate 46.00 MiB (GPU 0; 10.76 GiB total capacity; 839.60 MiB already allocated; 24.56 MiB free; 44.40 MiB cached)

这个错误花费了一天半左右的时间,心态差点蹦了,还好有神人指导,坚持下来了。

  1. 错误问题的解决思路

这个问题就是GPU内存不够用了。本人使用的是Linux,2080Ti的服务器,在做视频分类的任务,此时使用单GPU还是多GPU都显示出这个错误。
一开始使用nvidia-smi监控GPU发现显存的使用量很少但是依旧报出该错误,就思考是否是代码写的有bug,排除了数据和网络模型几乎所有的可能,依然没有找到解决方案。
后来,设置一部分数据,监控GPU,发现在使用GPU时,一个episode中数据加载到网络训练后,下一个episode的数据累加了,GPU显示一直在增加,但是GPU会增加到一个最大值然后保持不变(猜测是将所有数据全部加载了,因为做的是小样本前期训练数据并不是一次性加载的),会出现本文的错误,就是最大值超过了GPU的最大显存,后来设置让增加的最大值小于GPU显存极限,错误消失了。

  1. pytorch多GPU加速的可能原理

同时,还发现多GPU加载数据时的可能性。pytorch使用DataParallel实现单机多GPU加速,会将模型复制到加速的GPU上,数据按照batch-size除以加速GPU数量,最后将加速的结果拼接在一起放到第一个GPU上面。实验中使用了两块GPU加速,同时,调用了两次dataloader,第一个dataloader中batch-size的大小设置为10,第二个设置为10,此时两块GPU会达到近似1:1的情况,不出出现本文的问题,当dataloader的batch-size的大小分别设置为5和15时,前一块GPU会比后一块GPU的数量大很多,以至于更快的达到显存的极限,出现了本文的问题。
我认为这两种情况的可能原因是,当加速数据可以平均分配时,会在多GPU合适的进行,但是无法分配时,可能更多的借助于第一块GPU,所以造成第一块更快的达到极限,更有可能显存崩掉。

以上仅是个人看法,如果大家有不同或者更好的见解,欢迎评论,借以学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值