RuntimeError:cuDNN 错误:CUDNN_STATUS_NOT_INITIALIZED 使用 pytorch
Posted
技术标签:
【中文标题】RuntimeError:cuDNN 错误:CUDNN_STATUS_NOT_INITIALIZED 使用 pytorch【英文标题】:RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED using pytorch 【发布时间】:2021-06-09 19:27:34 【问题描述】:我正在尝试运行一个简单的 pytorch 示例代码。使用 CPU 可以正常工作。但是在使用 GPU 时,我收到以下错误消息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 889, in _call_impl
result = self.forward(*input, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/conv.py", line 263, in forward
return self._conv_forward(input, self.weight, self.bias)
File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/conv.py", line 260, in _conv_forward
self.padding, self.dilation, self.groups)
RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED
我尝试运行的代码如下:
import torch
from torch import nn
m = nn.Conv1d(16, 33, 3, stride=2)
m=m.to('cuda')
input = torch.randn(20, 16, 50)
input=input.to('cuda')
output = m(input)
我正在使用 CUDA 10.2 版的 NVIDIA docker 中运行此代码,我的 GPU 是 RTX 2070
【问题讨论】:
一个与您的问题无关的提示。请不要使用 python 关键字作为变量,因为这会导致一些非常丑陋和困难的问题。import torch.cuda
/ torch.cuda.is_available()
?
我在 CUDA 10.2 上遇到了完全相同的问题。你解决了吗?
@GuojunZhang 我用nvidia docker的pytorch容器解决了。
【参考方案1】:
我也在使用 Cuda 10.2。将torch 和torchvision 升级到最新版本(torch-1.8.0 和torchvision-0.9.0)时,我遇到了完全相同的错误。你用的是哪个版本?
我想这不是最好的解决方案,但通过降级到 torch-1.7.1 和 torchvision-0.8.2 就可以了。
【讨论】:
【参考方案2】:关于这个here有一些讨论。我有同样的问题,但使用 cuda 11.1 为我解决了。
这是确切的 pip 命令
pip install torch==1.8.0+cu111 torchvision==0.9.0+cu111 torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html
【讨论】:
【参考方案3】:就我而言,它实际上与 PyTorch/CUDA/cuDNN 版本无关。每当第一次执行卷积时,PyTorch 都会延迟初始化 cuDNN。但是,在我的情况下,没有足够的 GPU 内存来初始化 cuDNN,因为 PyTorch 本身已经将整个内存保存在其内部缓存中。可以在执行第一个卷积之前使用“torch.cuda.empty_cache()”手动释放缓存。更简洁的解决方案是在开始时通过模拟卷积强制 cuDNN 初始化:
def force_cudnn_initialization():
s = 32
dev = torch.device('cuda')
torch.nn.functional.conv2d(torch.zeros(s, s, s, s, device=dev), torch.zeros(s, s, s, s, device=dev))
在程序一开始就调用上述函数为我解决了这个问题。
【讨论】:
【参考方案4】:在我的例子中,这个错误是在尝试估计损失时发生的。 我使用了混合 bce-dice 损失。 事实证明,我的输出是线性的,而不是 sigmoid。 然后我使用下面的 sigmoid 预测并且工作正常。
output = torch.nn.Sigmoid()(output)
loss = criterion1(output, target)
【讨论】:
以上是关于RuntimeError:cuDNN 错误:CUDNN_STATUS_NOT_INITIALIZED 使用 pytorch的主要内容,如果未能解决你的问题,请参考以下文章
RuntimeError: cuDNN error: CUDNN_STATUS_INTERNAL_ERROR
RuntimeError: cudnn RNN backward can only be called in training mode