Изначально я думал, что сообщение об ошибке указывает на то, что 'aten::slow_conv3d_forward'
не реализовано в графическом процессоре (CUDA). Но после того, как я посмотрел на вашу сеть, для меня это не имеет смысла, так как Conv3D - очень простой c op, и команда Pytorch должна реализовать это в CUDA.
Затем я немного погрузился в исходный код Обнаружив, что ввод не является тензором CUDA, что вызывает проблему.
Вот рабочий пример:
import torch
from torch import nn
#input is a 64,64,64 3d image batch with 2 channels
class ConvNet(nn.Module):
def __init__(self):
super(ConvNet, self).__init__()
self.layer1 = nn.Sequential(
nn.Conv3d(2, 32, kernel_size=5, stride=1, padding=2),
nn.ReLU(),
nn.MaxPool3d(kernel_size=2, stride=2))
self.layer2 = nn.Sequential(
nn.Conv3d(32, 64, kernel_size=5, stride=1, padding=2),
nn.ReLU(),
nn.MaxPool3d(kernel_size=2, stride=2))
self.drop_out = nn.Dropout()
self.fc1 = nn.Linear(16 * 16*16 * 64, 1000)
self.fc2 = nn.Linear(1000, 2)
# self.softmax = nn.LogSoftmax(dim=1)
def forward(self, x):
# print(out.shape)
out = self.layer1(x)
# print(out.shape)
out = self.layer2(out)
# print(out.shape)
out = out.reshape(out.size(0), -1)
# print(out.shape)
out = self.drop_out(out)
# print(out.shape)
out = self.fc1(out)
# print(out.shape)
out = self.fc2(out)
# out = self.softmax(out)
# print(out.shape)
return out
net = ConvNet()
input = torch.randn(16, 2, 64, 64, 64)
net.cuda()
input = input.cuda() # IMPORTANT to reassign your tensor
net(input)
Помните, что когда вы переводите модель из CPU в GPU, вы можете Вызовите напрямую .cuda()
, но если вы поместите тензор из CPU в GPU, вам нужно будет переназначить его, например, tensor = tensor.cuda()
, вместо того, чтобы просто вызывать tensor.cuda()
. Надеюсь, это поможет.
Вывод:
tensor([[-0.1588, 0.0680],
[ 0.1514, 0.2078],
[-0.2272, -0.2835],
[-0.1105, 0.0585],
[-0.2300, 0.2517],
[-0.2497, -0.1019],
[ 0.1357, -0.0475],
[-0.0341, -0.3267],
[-0.0207, -0.0451],
[-0.4821, -0.0107],
[-0.1779, 0.1247],
[ 0.1281, 0.1830],
[-0.0595, -0.1259],
[-0.0545, 0.1838],
[-0.0033, -0.1353],
[ 0.0098, -0.0957]], device='cuda:0', grad_fn=<AddmmBackward>)