CUDA 错误:调用 `cublasCreate(handle)` 时出现 CUBLAS_STATUS_ALLOC_FAILED

Mr.*_*NLP 18 nlp pytorch bert-language-model

在 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)`
Run Code Online (Sandbox Code Playgroud)

我什至将批量大小从 128 减少到 64,即减少到一半,但仍然出现此错误。早些时候,我以 128 的批量大小运行了相同的代码,但没有收到任何类似的错误。

HLe*_*Leb 11

这个错误实际上可能是由于不同的原因造成的。如果可能,建议通过在 CPU 上运行代码来调试 CUDA 错误。如果这是不可能的,请尝试通过以下方式执行脚本:

CUDA_LAUNCH_BLOCKING=1 python [YOUR_PROGRAM]
Run Code Online (Sandbox Code Playgroud)

这将帮助您获得在堆栈跟踪中引发错误的正确代码行,以便您可以解决它。


小智 10

不,在这种情况下批量大小无关紧要

最可能的原因是标签数量和输出单元数量不一致。

  • 尝试在前向传递中打印最终输出的大小并检查输出的大小

print(model.fc1(x).size())
fc1在返回之前,此处将替换为模型的最后一个线性层的名称

  • 在计算损失之前确保label.size() 等于prediction.size()

即使在解决该问题之后,您也必须重新启动 GPU 运行时(在我使用 colab GPU 的情况下,我需要这样做)

这个答案也可能有帮助


小智 7

减少批量大小对我有用,培训按计划进行。


Ser*_*hiy 6

此错误意味着“cuBLAS 库内资源分配失败”。

减少批量大小为我解决了这个问题。你说你增加到64了,但没有帮助。也可以尝试 32、8、1 等。

另外,尝试在您的 CPU 上运行相同的命令,以检查张量的形状是否一切正常。


小智 6

造成这个问题的原因之一可能是标签的数量不等于网络输出通道的数量,即预测的输出类别的数量。调整输出以匹配,它应该可以解决问题。