AssertionError:Torch 未在启用 CUDA 的情况下编译
Posted
技术标签:
【中文标题】AssertionError:Torch 未在启用 CUDA 的情况下编译【英文标题】:AssertionError: Torch not compiled with CUDA enabled 【发布时间】:2019-05-29 13:35:30 【问题描述】:来自https://pytorch.org/
要在 MacOS 上安装 pytorch,说明如下:
conda install pytorch torchvision -c pytorch
# MacOS Binaries dont support CUDA, install from source if CUDA is needed
为什么要在不启用 cuda 的情况下安装 pytorch?
我问的原因是我收到错误:
----------------------------------- ---------------------------- AssertionError Traceback(最近调用 最后)在() 78 # 预测 = 输出.data.max(1)[1] 79 ---> 80 输出 = 模型(torch.tensor([[1,1]]).float().cuda()) 81 预测 = output.data.max(1)[1] 82
~/anaconda3/lib/python3.6/site-packages/torch/cuda/init.py _lazy_init() 第159章 160“无法在分叉的子进程中重新初始化 CUDA。” + msg) --> 161 _check_driver() 162 火炬._C._cuda_init() 第163章
~/anaconda3/lib/python3.6/site-packages/torch/cuda/init.py _check_driver() 73 定义_check_driver(): 74 如果没有属性(torch._C,'_cuda_isDriverSufficient'): ---> 75 raise AssertionError("Torch 未在启用 CUDA 的情况下编译") 76 如果不是 torch._C._cuda_isDriverSufficient(): 77 如果torch._C._cuda_getDriverVersion() == 0:
尝试执行代码时:
x = torch.tensor([[0,0] , [0,1] , [1,0]]).float()
print(x)
y = torch.tensor([0,1,1]).long()
print(y)
my_train = data_utils.TensorDataset(x, y)
my_train_loader = data_utils.DataLoader(my_train, batch_size=2, shuffle=True)
# Device configuration
device = 'cpu'
print(device)
# Hyper-parameters
input_size = 2
hidden_size = 100
num_classes = 2
learning_rate = 0.001
train_dataset = my_train
train_loader = my_train_loader
pred = []
for i in range(0 , model_iters) :
# Fully connected neural network with one hidden layer
class NeuralNet(nn.Module):
def __init__(self, input_size, hidden_size, num_classes):
super(NeuralNet, self).__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_size, num_classes)
def forward(self, x):
out = self.fc1(x)
out = self.relu(out)
out = self.fc2(out)
return out
model = NeuralNet(input_size, hidden_size, num_classes).to(device)
# Loss and optimizer
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
# Train the model
total_step = len(train_loader)
for epoch in range(num_epochs):
for i, (images, labels) in enumerate(train_loader):
# Move tensors to the configured device
images = images.reshape(-1, 2).to(device)
labels = labels.to(device)
# Forward pass
outputs = model(images)
loss = criterion(outputs, labels)
# Backward and optimize
optimizer.zero_grad()
loss.backward()
optimizer.step()
:.4f'.format(epoch+1, num_epochs, i+1, total_step, loss.item()))
output = model(torch.tensor([[1,1]]).float().cuda())
要修复这个错误,我需要从源代码安装 pytorch 并安装 cuda 吗?
【问题讨论】:
"为什么要在不启用 cuda 的情况下安装 pytorch?" :那些没有支持 CUDA 的 GPU 的人可能想要。你是Mac平台的吗?如果是这样,您确定您的 Mac 中安装了支持 CUDA 的 GPU 吗?很明显,如果您按照您的指示(通过 conda)安装,那么您的 pytorch 没有启用 CUDA。这将与断言错误一致。同样令人费解的是,为什么您在 pytorch 脚本中指定了device = 'cpu'
,而且:output = model(torch.tensor([[1,1]]).float().cuda())
@RobertCrovella 感谢罗伯特。我错误地认为为了运行 pyTorch 代码需要 CUDA,因为我也没有意识到 CUDA 不是 PyTorch 的一部分。为了编写在 CPU 和 GPU 之间交叉兼容的代码,我需要包含/排除 .cuda() 吗?
@blue-sky。删除任何 cuda() 并改用device
来实现这种兼容性。
详细说明:您需要使用.to(device)
而不是.cuda()
。根据“设备”的值,可以使用 GPU。通常这样做是这样的:device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
.
【参考方案1】:
总结和扩展cmets:
CUDA 是 Nvidia 专有(显然未经许可)技术,允许在 GPU 处理器上进行通用计算。 很少有 Macbook Pro 配备支持 Nvidia CUDA 的 GPU。看看here,看看你的 MBP 是否有 Nvidia GPU。然后,查看表here,看看那个GPU是否支持CUDA iMac、iMac Pro 和 Mac Pro 也是如此。 因此,在 MacOS 上默认安装 PyTorch 时不支持 CUDA这个 PyTorch github 问题提到很少有 Mac 有 Nvidia 处理器:https://github.com/pytorch/pytorch/issues/30664
如果您的 Mac 确实有支持 CUDA 的 GPU,那么要在 MacOS 上使用 CUDA 命令,您需要使用正确的命令行选项从源代码重新编译 pytorch。
【讨论】:
您需要使用正确的命令行选项从源代码重新编译 pytorch。 这是什么意思?以上是关于AssertionError:Torch 未在启用 CUDA 的情况下编译的主要内容,如果未能解决你的问题,请参考以下文章
torch报错AssertionError: Torch not compiled with CUDA enabled解决方法 torch适配CUDA降版本选择gpu版本最终方案
AssertionError: Torch not compiled with CUDA enabled
解决 AssertionError Torch not compiled with CUDA enabled
java.lang.AssertionError:Cassandra守护程序未在超时内启动
如何解决AssertionError:.accepted_renderer未在django和ajax中的Response上设置