【问题标题】:CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling `cublasCreate(handle)`CUDA 错误:调用 `cublasCreate(handle)` 时出现 CUBLAS_STATUS_ALLOC_FAILED
【发布时间】: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 时出现错误。

标签: nlp pytorch bert-language-model


【解决方案1】:

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

【讨论】:

【解决方案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 也可能有帮助

            【讨论】:

              猜你喜欢
              • 2021-06-10
              • 2018-09-01
              • 2016-01-02
              • 2018-02-08
              • 1970-01-01
              • 2016-08-20
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多