解决报错RuntimeError: CUDA out of memory
【摘要】
文章目录
一、问题描述二、解决方法Reference
一、问题描述
(work2) andy@gpu-machine:~/deepFM_CTR_beat/model_train$ pyth...
一、问题描述
(work2) andy@gpu-machine:~/deepFM_CTR_beat/model_train$ python beat_deepFM_train.py
开始模型训练:!!!!
Traceback (most recent call last):
File "beat_deepFM_train.py", line 155, in <module>
model = model.to(device)
File "/home/andy/.conda/envs/fun/lib/python3.8/site-packages/torch/nn/modules/module.py", line 907, in to
return self._apply(convert)
File "/home/andy/.conda/envs/fun/lib/python3.8/site-packages/torch/nn/modules/module.py", line 578, in _apply
module._apply(fn)
File "/home/andy/.conda/envs/fun/lib/python3.8/site-packages/torch/nn/modules/module.py", line 578, in _apply
module._apply(fn)
File "/home/andy/.conda/envs/fun/lib/python3.8/site-packages/torch/nn/modules/module.py", line 601, in _apply
param_applied = fn(param)
File "/home/andy/.conda/envs/fun/lib/python3.8/site-packages/torch/nn/modules/module.py", line 905, in convert
return t.to(device, dtype if t.is_floating_point() or t.is_complex() else None, non_blocking)
RuntimeError: CUDA out of memory. Tried to allocate 5.96 GiB (GPU 0; 9.78 GiB total capacity; 1.07 GiB already allocated; 5.81 GiB free; 1.08 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
二、解决方法
- 首先简单粗暴的方法当然是换大显卡或者多卡训练。
- 设置内存条:max_split_size_mb
- 释放无关内存(清空程序占用的无关内存):
if hasattr(torch.cuda, 'empty_cache'):
torch.cuda.empty_cache()
- 1
- 2
- 可能同时间有其他运行的进程,可以通过
taskkill /F /PID <your PID here>
杀死对应的进程。 - 调整bs的技巧:如何设置batchsize
- batchsize过小:每次计算的梯度不稳定,引起训练的震荡比较大,很难收敛。
- batchsize过大可以用下面用法(试过了还不行)
- 更详细的参考:一文读懂 PyTorch 显存管理机制
- 在pytorch官方github的issue
batch_szie参数:
(1)提高了内存利用率,大矩阵乘法并行计算效率提高。
(2)计算的梯度方向比较准,引起的训练的震荡比较小。
(3)跑完一次epoch所需要的迭代次数变小,相同数据量的数据处理速度加快。
缺点:容易内容溢出,想要达到相同精度,epoch会越来越大,容易陷入局部最优,泛化性能差。
batchsize设置:通常10到100,一般设置为2的n次方。
原因:计算机的gpu和cpu的memory都是2进制方式存储的,设置2的n次方可以加快计算速度。
Reference
[1] RuntimeError: CUDA out of memory
文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。
原文链接:andyguo.blog.csdn.net/article/details/125092684
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)