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 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐