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

Posted

技术标签:

【中文标题】CUDA 错误:调用 `cublasCreate(handle)` 时出现 CUBLAS_STATUS_ALLOC_FAILED【英文标题】:CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling `cublasCreate(handle)` 【发布时间】:2020-08-11 20:39:51 【问题描述】:

我在 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 的批处理大小运行了相同的代码,但没有收到任何这样的错误。

【问题讨论】:

错误和答案似乎确实表明 GPU 内存已满,并且没有被标准安全协议捕获。当太多(笔记本)python 内核同时使用 GPU 时出现错误。 【参考方案1】:

很有可能存在层不匹配。仔细检查以确保每一层的所有尺寸都一致。

【讨论】:

这并没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review【参考方案2】:

我遇到了这个问题,因为我以错误的顺序将参数传递给 BCELoss 函数。这只有在切换到 CPU 后才变得明显。

【讨论】:

【参考方案3】:

我在 colab 上面对 CUDA error: CUBLAS_STATUS_INTERNAL_ERROR when calling `cublasCreate(handle) 将 pytorch 更新到 1.8.1 解决了这个问题。

【讨论】:

【参考方案4】:

当标签的数量不等于网络的输出通道数,即预测的类数时,我遇到了这个问题。

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

CUDA_LAUNCH_BLOCKING=1 python [YOUR_PROGRAM]

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

【讨论】:

感谢 @HLeb 我使用 CUDA_LAUNCH_BLOCKING=1 运行我的程序,但是它输出 RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling cublasCreate(handle)`` 为什么它输出 CUDA 错误? 这很奇怪。尝试直接在 CPU 上运行,这通常是默认设置。但如果 GPU 优先,可能需要修改您的代码。取决于你在执行什么。【参考方案7】:

首先,尝试在您的 CPU 上运行相同的程序,以检查您的张量形状是否一切正常。

就我而言,一切都很好。由于此错误意味着“cuBLAS 库内的资源分配失败”,我尝试减小批量大小并解决了问题。你说你增加到64,它没有帮助。可以试试 32、8、1 吗?

【讨论】:

【参考方案8】:

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

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

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

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

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

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

This answer 也可能有帮助

【讨论】:

以上是关于CUDA 错误:调用 `cublasCreate(handle)` 时出现 CUBLAS_STATUS_ALLOC_FAILED的主要内容,如果未能解决你的问题,请参考以下文章

cudaError_t 1 : 从 'cublasCreate(&handle_)' 返回“__global__ 函数调用未配置”

调用 Surface 低级 CUDA API 的奇怪错误编译代码

不允许从 __device__ 函数调用 __host__ 函数的 cuda::cub 错误

cuda调用核函数出现 IntelliSense错误:应输入表达式

在 LAMMPS 中的文件“geryon/nvd_timer.h”中调用 Cuda 驱动程序错误 700

RuntimeError:CUDA 错误:仅使用 GPU 调用 `cublasSgemm(handle)` 时出现 CUBLAS_STATUS_EXECUTION_FAILED