Ожидаемый объект внутреннего процессора, но получил внутренний CUDA для аргумента № 2 «источник» - PullRequest
1 голос
/ 21 июня 2019

Я пробовал другие ответы, но ошибка не удаляется. Отличие от другого вопроса, который я получаю, заключается в том, что последний использованный термин «ошибка» - это « source », который я не нашел ни в одном вопросе. Если возможно, пожалуйста, объясните термин « источник » по ошибке. И работает код без процессора работает нормально.

Я использую Google Colab с включенным графическим процессором.

import torch
from torch import nn
import syft as sy

hook = sy.TorchHook(torch)

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

model = nn.Sequential(nn.Linear(784,256),
                     nn.ReLU(),
                     nn.Linear(256,128),
                     nn.ReLU(),
                     nn.Linear(128,64),
                     nn.ReLU(),
                     nn.Linear(64,10),
                     nn.LogSoftmax(dim = 1))

model = model.to(device)

вывод:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-42-136ec343040a> in <module>()
      8                      nn.LogSoftmax(dim = 1))
      9 
---> 10 model = model.to(device)

3 frames
/usr/local/lib/python3.6/dist-packages/syft/frameworks/torch/hook/hook.py in data(self, new_data)
    368 
    369                 with torch.no_grad():
--> 370                     self.set_(new_data)
    371             return self
    372 

RuntimeError: Expected object of backend CPU but got backend CUDA for argument #2 'source'

1 Ответ

1 голос
/ 21 июня 2019

Эта проблема связана с PySyft. Как вы можете видеть в этом выпуске № 1893 , текущий обходной путь должен быть установлен:

import torch
torch.set_default_tensor_type(torch.cuda.FloatTensor)

сразу после import torch.

Код:

import torch
from torch import nn
torch.set_default_tensor_type(torch.cuda.FloatTensor)  # <-- workaround

import syft as sy
hook = sy.TorchHook(torch)

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(device)

model = nn.Sequential(nn.Linear(784,256),
                     nn.ReLU(),
                     nn.Linear(256,128),
                     nn.ReLU(),
                     nn.Linear(128,64),
                     nn.ReLU(),
                     nn.Linear(64,10),
                     nn.LogSoftmax(dim = 1))

model = model.to(device)
print(model)

Выход:

cuda
Sequential(
  (0): Linear(in_features=784, out_features=256, bias=True)
  (1): ReLU()
  (2): Linear(in_features=256, out_features=128, bias=True)
  (3): ReLU()
  (4): Linear(in_features=128, out_features=64, bias=True)
  (5): ReLU()
  (6): Linear(in_features=64, out_features=10, bias=True)
  (7): LogSoftmax()
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...