pytorch GPU cuda 使用 报错 整理

发布于:2024-07-14 ⋅ 阅读:(136) ⋅ 点赞:(0)

1. 使用指定GPU(单卡)

1.1 方法1:os.environ[‘CUDA_VISIBLE_DEVICES’]

os.environ['CUDA_VISIBLE_DEVICES'] = '2'
model = Net().to('cuda')
data = data.to('cuda')

1.2 方法2:torch.device(‘cuda:2’)

device = torch.device('cuda:2')
model = Net().to(device)
data = data .to(device)

1.3 报错1:RuntimeError: CUDA error: invalid device ordinal CUDA kernel errors might be asynchronously reported

解决方法:方法1和方法2不要混着使用

1.4 torch.load报错:RuntimeError: CUDA out of memory…

解决方法:
1)显存不够只能换卡
2)即使使用方法2指定设备,torch.load也默认在0卡(保存卡)上加载。所以,可以使用方法1指定gpu,或torch.load(path, map_location=lambda storage, loc: storage.cuda(2))

2. 使用指定GPU(多卡 DataParallel)

2.1 正常DP使用(未测试)

DP的使用很简单,使用DataParallel将模型包裹住即可,训练代码与单卡一致。
代码:

import torch
from torch.nn import DataParallel
model = Model()
model = DataParallel(model, device_ids = [0, 1])

2.2 pyg中DP的使用

注意:使用torch geometric(pyg)要用torch_geometric.nn里的DataListLoader!!!
代码:

device_ids = [0, 2, 3]
# 需指定主卡,默认是0卡,不指定device会报错:RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:2 and cuda:0!
device = torch.device(f'cuda:{device_ids[0]}')
model = Net() # 输入特征维度,隐藏特征维度,输出特征维度
model = DataParallel(model, device_ids = device_ids)
model.to(device)

网站公告

今日签到

点亮在社区的每一天
去签到