PyTorch: ошибка нескольких графических процессоров: RuntimeError: binary_op (): ожидалось, что оба входа будут на одном устройстве, но вход a находится на cuda: 0, а вход b на cuda: 7 - PullRequest
2 голосов
/ 25 марта 2019

Когда я использую несколько графических процессоров
, а также когда я использую .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
, поэтому операция невозможна, потому что они на GPU разности

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"
, но только с GPU:0 был использован, что привело к полному графическому процессору: ошибка 0.

  • Итак, я попытался переместить dense_O_img_tc, который находится на графическом процессоре: 0 к графическому процессору: 7 (или в любом месте, где плотность_S_gt_img_tc включена с помощьюdensity_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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...