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