经过上面的摸索,我感觉这部分内容跟操作系统的内存管理有点像,所以说计算机的那几门基础课真的很重要,大家都要好好学一学!
当然实际中cuda的显存管理肯定没有那么简单,有兴趣的同学可以继续探究下。
前言训练模型时,一般我们会把模型model,数据data和标签label放到GPU显存中进行加速。但有的时候GPU Memory会增加,有的时候会保持不变,以及我们要怎么清理掉一些用完的变量呢?下面让我们一起来探究下原理吧!pytorch训练只要你把任何东西(无论是多小的tensor)放到GPU显存中,那么你至少会栈1000MiB左右的显存(根据cuda版本,会略有不同)。这部分显存是cuda running时固有配件必须要占掉的显存,你先训练过程汇总也是无法释放的。import torch
如果在python内调用pytorch有可能显存和GPU占用不会被自动释放,此时需要加入如下代码
torch.cuda.empty_cache()
我们来看一下官方文档的说明
Releases all unoccupied cached memory currently held by the caching allocator so that those can be used in other GPU application and visible in nvidia-smi.
empty_cache() doesn’t increase the amount of GPU me
跑模型时出现RuntimeError: CUDA out of memory.错误 查阅了许多相关内容,原因是:GPU显存内存不够
简单总结一下解决方法:
将batch_size改小。
取torch变量标量值时使用item()属性。
可以在测试阶段添加如下代码:
with torch.no_grad(): # 停止自动反向计算梯度
https://wisdomai.xyz/tool/pytorch/archives/2301
https://ptorch.com/news/160.html
作者:菜叶儿掉啦
可以看到cuda驱动等安装没有问题。
进程序去看.cuda()或者.todevice之类代码,看程序确实放在GPU上了,故排除
但是在查看代码是看到这里是一个and,参数args.no_cuda是设置的Flase,所以问题因为在torch.cuda.is_available(),没有获得cuda加速。
查看深度学习环境搭建torch.cuda.is_available()这里返回了
PyTorch 在训练和预测的时候,出现显存一直增加的问题,占用显存越来越多,甚至导致最终出现 out of memory 问题。
1. 显存管理(Memory Management)
Memory management
PyTorch 采用缓存分配器(caching memory allocator) 机制以加速内存分配(memory allocations),使得在不需要设备同步(d...
我想要对一个大批量的数据分批输入模型得到所有的embedding,但是过程进行到中间报 cuda out of memory。经查勘是因为早些的embedding没有及时从cuda中释放内存导致后面的model无法进行forward。
只需要pytorch的tensor.cpu()就可以释放了。
举个例子:
embeddings=[]
for batch in data_loader:
embedding_batch=model(input_data)
embeddings.append(e
Pytorch 训练时有时候会因为加载的东西过多而爆显存,有些时候这种情况还可以使用cuda的清理技术进行修整,当然如果模型实在太大,那也没办法。
使用torch.cuda.empty_cache()删除一些不需要的变量代码示例如下:
output = model(input)
except RuntimeError as exception:
if "out of...
torch.cuda.outofmemoryerror: cuda out of memory,意思是在使用PyTorch深度学习库时,GPU内存不足,无法完成计算。这通常是因为训练的数据集过大或模型过于复杂,导致需要大量的显存来存储计算图和中间计算结果。
为了解决这个问题,可以尝试以下解决方案:
1. 减小batch size:可以适当降低每次训练时的batch size,以减少GPU内存的使用。
2. 减小模型规模:可以减少模型的规模,去掉一些不必要的特征或层。
3. 使用更大的GPU:如果你的电脑配备了多个GPU,可以尝试使用更大的GPU。
4. 使用分布式训练:可以使用多台GPU来分别存储数据和计算图,从而减少单个GPU的负担。
5. 释放不必要的GPU内存:可以使用torch.cuda.empty_cache()方法来释放不必要的GPU内存。
总之,要解决torch.cuda.outofmemoryerror: cuda out of memory问题,需要适当调整模型和训练参数,以使GPU能够更有效地利用内存。