#gpu #pytorch #multi-gpu
#графический процессор #pytorch #мульти-графический процессор
Вопрос:
Когда я использую несколько графических процессоров
, а также когда я использую .cuda () для тензоров
в середине обучения, я получил следующую ошибку
RuntimeError: binary_op(): expected both inputs to be on same device,
but input a is on cuda:0 and input b is on cuda:7
что означает, что следующее R2
находится на cuda: 7 (не уверен, что R2 включен на cuda: 0 или cuda: 7) и
R1
находится на cuda: 0
таким образом, операция невозможна, потому что они на разных графических процессорах
R2=torch.where(R2<1e-4,torch.Tensor([1e-4]).squeeze().cuda(),R2)
div_R1_R2=torch.div(R1,R2)
Я получаю точно такую же ошибку в следующем коде
жалоба O_img_tc
и R_gt_img_tc
не может быть вычислена
потому что они на разных графических процессорах
R_gt_img_tc=torch.where(
torch.abs(R_gt_img_tc)<1e-4,
torch.Tensor([1e-4]).squeeze().cuda(),R_gt_img_tc)
sha=torch.clamp(torch.div(O_img_tc,R_gt_img_tc),0.0,1.3)[:,0,:,:].unsqueeze(1)
Как это решить, и что я делаю не так?
Что я пробовал:
— Использовать horovod: получил ту же ошибку.
— Проверьте номер графического процессора с помощью dense_O_img_tc.get_device()
и dense_S_gt_img_tc.get_device()
Когда они были похожи на dense_O_img_tc.get_device()
возвращенные 0
, dense_S_gt_img_tc.get_device()
вернулись 7
И я попробовал это
same_cuda=torch.device('cuda:' str(dense_O_img_tc.get_device()))
dense_S_gt_img_tc=torch.where(
torch.abs(dense_S_gt_img_tc)<1e-4,
# Note here that I'm using cuda(same_cuda)
torch.Tensor([1e-4]).squeeze().cuda(same_cuda),dense_S_gt_img_tc)
ref=torch.div(dense_O_img_tc,dense_S_gt_img_tc)
На самом деле это могло решить «проблему с другим графическим процессором»
но использовался только GPU: 0, что привело к полной ошибке GPU: 0.
- Итак, я попытался переместить
dense_O_img_tc
то, что находится на GPU: 0, в сторону GPU: 7 (или в любом месте, где включен dense_S_gt_img_tc, используя dense_S_gt_img_tc.get_device()), я, возможно, получил следующую ошибку незаконного доступа к памяти
RuntimeError: cuda runtime error (77) : an illegal memory access was encountered at /opt/conda/conda-bld/pytorch_1544199946412/work/aten/src/THC/generic/THCTensorMath.cu:238
Комментарии:
1. Если у кого-то возникли трудности с несколькими графическими процессорами на PyTorch, это решение, по крайней мере, для моего случая, discuss.pytorch.org/t/difference-device-error-when-i-use-multiple-gpus-with-creating-new-cuda-tensor/41676