运行时错误:cuDNN 错误:CUDNN_STATUS_NOT_INITIALIZED 使用 pytorch

Edu*_*o H 6 python gpu pytorch

我正在尝试运行一个简单的 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
Run Code Online (Sandbox Code Playgroud)

我试图运行的代码如下:

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

我在带有 CUDA 版本 10.2 的 NVIDIA docker 中运行此代码,我的 GPU 是 RTX 2070

cre*_*ser 25

就我而言,它实际上与 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))
Run Code Online (Sandbox Code Playgroud)

在程序的最开始调用上面的函数解决了我的问题。


小智 7

我也在使用 Cuda 10.2。将 torch 和 torchvision 升级到最新版本(torch-1.8.0 和 torchvision-0.9.0)时,我遇到了完全相同的错误。您使用哪个版本?

我想这不是最好的解决方案,但通过降级到 torch-1.7.1 和 torchvision-0.8.2 它工作得很好。


sat*_*660 7

There is some discussion regarding this here. I had the same issue but using cuda 11.1 resolved it for me.

This is the exact pip command

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