已解决:RuntimeError: CUDA error: out of memory

1. 检查是否使用了合适版本的torch

print(torch.__version__)  # 1.9.1+cu111
print(torch.version.cuda)  # 11.1
print(torch.backends.cudnn.version())  # 8005
print(torch.cuda.current_device())  # 0
print(torch.cuda.is_available())  # TRUE

2.检查是否显存不足,尝试修改训练的batch size,修改到最小依旧无法解决,然后使用如下命令实时监控显存占用情况

watch -n 0.5 nvidia-smi

 未调用程序时,显存占用的情况为

因此问题在于:程序指定了使用四块GPU,调用前面两块资源的时候是没有问题的,但是第三块被其他小伙伴的程序占用,因此报错。

3. 指定使用的GPU

os.environ['CUDA_VISIBLE_DEVICES'] = "0, 1, 3"
device = torch.device("cuda:0" if torch.cuda.is_available() and not args.no_cuda else "cpu")  # cuda 指定使用GPU设备
model = torch.nn.DataParallel(model, device_ids=[0, 1, 3])  # 指定多GPU并行处理时使用的设备编号

这样就愉快的跑起来了

如果此时需要同时利用剩下的一块的GPU,可以使用如下代码:
 

os.environ['CUDA_VISIBLE_DEVICES'] = "2"
device = torch.device("cuda:2" if torch.cuda.is_available() and not args.no_cuda else "cpu")  # cuda 指定使用GPU设备
model = torch.nn.DataParallel(model, device_ids=[2])  # 指定多GPU并行处理时使用的设备编号

最近发现一个更方便的GPU使用的方法,如果遇上多个脚本需要同时使用GPU跑,可以按照下面的方式使用,在python前面添加指定的GPU编号。

CUDA_VISIBLE_DEVICES=1 python script1.py 
CUDA_VISIBLE_DEVICES=2 python script2.py 

### 回答1: "cuda error: out of memory" 意味着 CUDA(Compute Unified Device Architecture)运行时在 GPU 内存中没有足够的空间来完成当前操作。这可能是由于在 GPU 上加载了太多数据或模型参数,导致 GPU 内存爆满,或者是因为 GPU 内存不够大导致无法加载所需的数据或模型参数。解决方案是,减少需要加载的数据的大小,或者通过删除不需要的变量来释放内存。也可以尝试使用较大的显存或更高级的 GPU。 ### 回答2: 运行时错误:CUDA错误:内存不足 出现“CUDA错误:内存不足”通常表示在使用CUDA加速计算时,程序需要的内存超过了显存容量。GPU显存容量非常有限,当程序要求使用的显存超出了显存容量,系统就会以出错方式反馈。这时候就需要考虑如何有效利用显存,或者增加显存容量,以解决该问题。 要解决此类错误,通常可以采取以下措施: 1. 减小数据集大小 减少数据集的大小,可以减少程序所需要的显存,从而防止该错误的发生。 2. 采用混合精度计算 混合精度计算可以减小存储需求,从而减少显存占用,可以通过调整计算过程中使用的数据类型达到这个目的。 3. 调整batch size batch size的大小对程序所需的显存有很大影响。通常情况下,增加batch size可以利用更多的并行计算,提高程序性能,减少训练时间。但过大的batch size也会导致显存过度占用,从而引发“CUDA错误:内存不足”的错误。 4. 使用更大的GPU 更大显存容量的GPU可以更好的解决这个错误。如果程序需要处理大量数据,可以考虑使用显存较大的GPU。 总之,对于“CUDA错误:内存不足”,可以通过减小数据集大小、采用混合精度计算和调整batch size等方式来减少显存的占用。如果实在无法避免该错误,可以使用更大显存容量的GPU来解决。 ### 回答3: 这个错误通常是因为你的程序试图向GPU分配大于其内存容量的数据,导致内存不足。GPU的内存是非常有限的,因此在编写CUDA程序时需要非常仔细地管理内存,避免出现这种错误。 解决这个错误的方法有以下几种: 1. 调整你的代码,减少GPU内存的占用。例如,你可以优化代码中的算法,采用更少的内存分配方式,以减少GPU内存的使用。或者你也可以尝试使用更小的batch size来降低内存的占用。 2. 增加你的GPU内存。如果你的GPU内存过小,则可以考虑升级GPU,或者添加额外的GPU显存。 3. 分布式训练。如果你的GPU内存确实不足以满足你的需要,那么你可以尝试使用分布式训练的方式来处理数据。这种方式可以将数据分布在多个设备上,以减少单个设备的内存占用。 总之,处理这个错误的关键是要仔细管理GPU内存,避免超出其容量,而采用一些合理的策略来处理内存溢出问题。这样才能保证你的CUDA程序在运行时不会出现错误。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值