我在 Google Colab 中运行我的 PyTorch 深度学习模型时出现以下错误
/usr/local/lib/python3.6/dist-packages/torch/nn/functional.py in linear(input, weight, bias)
1370 ret = torch.addmm(bias, input, weight.t())
1371 else:
-> 1372 output = input.matmul(weight.t())
1373 if bias is not None:
1374 output += bias
RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling `cublasCreate(handle)`
我什至将批量大小从 128 减少到 64,即减少到一半,但我仍然遇到了这个错误。早些时候,我以 128 的批处理大小运行了相同的代码,但没有出现这样的错误。
不,批量大小在这种情况下无关紧要。
最有可能的原因是标签数量和输出单元数量不一致
print(model.fc1(x).size())
这里将在返回之前被模型的最后一个线性层的名称替换fc1
label.size()
等于prediction.size()
即使在解决该问题之后,您也必须重新启动 GPU 运行时(我在使用 Colab GPU 时需要这样做)
这个 GitHub 问题评论 也可能有帮助。
这个错误实际上可能是由于不同的原因造成的。如果可能,建议通过在 CPU 上运行代码来调试 CUDA 错误。如果那不可能,请尝试通过以下方式执行脚本:
CUDA_LAUNCH_BLOCKING=1 python [YOUR_PROGRAM]
这将帮助您获得在堆栈跟踪中引发错误的正确代码行,以便您可以解决它。
减少批量大小对我有效,培训按计划进行。
此错误表示“cuBLAS 库中的资源分配失败”。
减小批量大小为我解决了这个问题。你说你增加到 64 并没有帮助。也可以尝试 32、8、1 等。
此外,尝试在您的 CPU 上运行相同的程序以检查您的张量形状是否一切正常。
这个问题的一个原因可能是标签的数量不等于网络输出通道的数量,即预测的输出类别的数量。调整输出以匹配,它应该可以解决问题。
我有同样的问题,但我不知道原因是什么我知道原因, 我的 NN.module 的最后一行是
self.fc3 = nn.Linear(84, num_classes)
我把我真正的 num_classes 改成了原来的 2 倍 但它并没有改变变量 num_classes 的值,这可能是我在某处输出结果时犯了一个错误。
在我确定了 num_classes 的值后,它就成功了 我建议再次检查模型中的数字
我的模型是将最后一层只有一个神经元的两个类分类。当最后一层在 pytorch 环境中是 nn.Linear(512,1) 时,我遇到了这个问题。但我的标签只是 [0] 或 [1]。我通过添加图层解决了这个问题:nn.sigmoid()
对于大规模数据集,只需删除寺庙变量
for batch_idx, (x, target) in enumerate(train_dataloader):
...
del x,target,loss,outputs
减少具有限制的模型(例如 BERT)的
maximum sequence length
为我解决了这个错误。
此外,我在调整模型的嵌入层大小时也遇到了同样的问题:
model.resize_token_embeddings(NEW_SIZE)
,训练并保存它。
在预测时,当我加载模型时,我需要再次调整嵌入层的大小!