当前位置:   article > 正文

已解决:RuntimeError: CUDA error: out of memory_torch.cuda.outofmemoryerror: cuda out of memory. t

torch.cuda.outofmemoryerror: cuda out of memory. tried to allocate 14.14 gib

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

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

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

watch -n 0.5 nvidia-smi

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

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

3. 指定使用的GPU

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

这样就愉快的跑起来了

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/538495
推荐阅读
相关标签
  

闽ICP备14008679号