训练 yolov5 导致 CUDNN_STATUS_NOT_INITIALIZED 错误

Posted

技术标签:

【中文标题】训练 yolov5 导致 CUDNN_STATUS_NOT_INITIALIZED 错误【英文标题】:Training yolov5 causes a CUDNN_STATUS_NOT_INITIALIZED error 【发布时间】:2021-06-06 05:48:59 【问题描述】:

我正在关注this guide,但没有进行任何更改。我正在使用带有深度学习 ami 的 aws 服务器:Deep Learning AMI (Ubuntu 18.04) Version 40.0

我尝试将自定义数据集更改为 coco 数据集和自定义数据集的一小部分。 批量大小似乎无关紧要,CUDA 和其他驱动程序似乎可以工作。

批处理开始训练过程时抛出异常。这是完整的堆栈跟踪:

Logging results to runs/train/exp66
Starting training for 5 epochs...

     Epoch   gpu_mem       box       obj       cls     total   targets  img_size
  0%|                                                                                                                                                                                                                 | 0/22 [00:00<?, ?it/s]
Traceback (most recent call last):
  File "train.py", line 533, in <module>
    train(hyp, opt, device, tb_writer, wandb)
  File "train.py", line 298, in train
    pred = model(imgs)  # forward
  File "/usr/local/lib/python3.8/site-packages/torch/nn/modules/module.py", line 889, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/home/ubuntu/yolov5/models/yolo.py", line 121, in forward
    return self.forward_once(x, profile)  # single-scale inference, train
  File "/home/ubuntu/yolov5/models/yolo.py", line 137, in forward_once
    x = m(x)  # run
  File "/usr/local/lib/python3.8/site-packages/torch/nn/modules/module.py", line 889, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/home/ubuntu/yolov5/models/common.py", line 113, in forward
    return self.conv(torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1))
  File "/usr/local/lib/python3.8/site-packages/torch/nn/modules/module.py", line 889, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/home/ubuntu/yolov5/models/common.py", line 38, in forward
    return self.act(self.bn(self.conv(x)))
  File "/usr/local/lib/python3.8/site-packages/torch/nn/modules/module.py", line 889, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/torch/nn/modules/conv.py", line 399, in forward
    return self._conv_forward(input, self.weight, self.bias)
  File "/usr/local/lib/python3.8/site-packages/torch/nn/modules/conv.py", line 395, in _conv_forward
    return F.conv2d(input, weight, bias, self.stride,
RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED

【问题讨论】:

【参考方案1】:

我不知道为什么,但似乎 torch 1.8 是基于旧版本的 cuda 构建的。 此外,由于 pytorch 有自己的 cuda,它似乎并不关心你的机器上有什么版本。 更改 torch 版本(并匹配兼容的 tochvision)解决了我的问题。

在我的情况下,我做了如下:

    在“requirements.txt”中更改了两行:

火炬==1.7.1

torchvision==0.8.2

    使用 python=3.8 创建全新的 conda 环境 激活环境 修改文件中的安装要求:

$ pip install -r requirements.txt

希望对某人有所帮助:)

【讨论】:

【参考方案2】:

我使用 conda 修复了它,我克隆了图像附带的 pytorch 环境,它运行良好。不过我还是不知道原因。

【讨论】:

【参考方案3】:

我在尝试在脚本中训练 yolov5 时遇到了类似的情况。我发现升级到 torch==1.9.0 和 torchvision==0.10.0 也可以(如果您不想如上所述降级)

【讨论】:

以上是关于训练 yolov5 导致 CUDNN_STATUS_NOT_INITIALIZED 错误的主要内容,如果未能解决你的问题,请参考以下文章

图像识别之Yolov5训练自己的模型

图像识别之Yolov5训练自己的模型

深度学习Yolov5训练意外中断后如何接续训练详解;yolov5中断后继续训练

Yolov5 物体检测训练

博客3:YOLOv5车牌识别实战教程:模型训练与评估

yolov5模型训练流程