【已解决】RuntimeError: cuDNN error: CUDNN_STATUS_INTERNAL_ERROR Caught RuntimeError in replica 2 on devi

文章讲述了在使用CUDA并行训练模型时遇到的问题,涉及GPU内存不平衡警告和运行时错误,特别提及了亮机卡的影响。作者发现指定可用GPU解决了问题,同时提供了相关链接以了解亮机卡和同步训练错误的背景。
摘要由CSDN通过智能技术生成

问题描述

        在执行这条训练指令时候出现了这个问题:

python train.py --batch_size 100 --max_epochs 60 --runname train --wm_batch_size 2 --wmtrain

        这个问题的出现是在进行训练的过程中,具体的报错内容如下,我会把对解决问题直接相关的内容标出来,按照这个思路可以把问题解决:

==> Preparing data..
Using CIFAR10 dataset.
Files already downloaded and verified
Files already downloaded and verified
Loading watermark images
==> Building model..
Using CUDA
Parallel training on 3 GPUs.

/home/visionx/anaconda3/envs/waterknn/lib/python3.7/site-packages/torch/nn/parallel/data_parallel.py:32: UserWarning: 
    There is an imbalance between your GPUs. You may want to exclude GPU 2 which
    has less than 75% of the memory or cores of GPU 0. You can do so by setting
    the device_ids argument to DataParallel, or by setting the CUDA_VISIBLE_DEVICES
    environment variable.
  warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))
WM acc:
 [=========================== 50/50 =============================>.]  Step: 17ms | Tot: 969ms | Loss: 2.304 | Acc: 8.000% (8/100)       

Epoch: 0
Traceback (most recent call last):
  File "train.py", line 96, in <module>
    trainloader, device, wmloader)
  File "/home/visionx/project/WatermarkNN/trainer.py", line 48, in train
    outputs = net(inputs)
  File "/home/visionx/anaconda3/envs/waterknn/lib/python3.7/site-packages/torch/nn/modules/module.py", line 1194, in _call_impl
    return forward_call(*input, **kwargs)
  File "/home/visionx/anaconda3/envs/waterknn/lib/python3.7/site-packages/torch/nn/parallel/data_parallel.py", line 171, in forward
    outputs = self.parallel_apply(replicas, inputs, kwargs)
  File "/home/visionx/anaconda3/envs/waterknn/lib/python3.7/site-packages/torch/nn/parallel/data_parallel.py", line 181, in parallel_apply
    return parallel_apply(replicas, inputs, kwargs, self.device_ids[:len(replicas)])
  File "/home/visionx/anaconda3/envs/waterknn/lib/python3.7/site-packages/torch/nn/parallel/parallel_apply.py", line 89, in parallel_apply
    output.reraise()
  File "/home/visionx/anaconda3/envs/waterknn/lib/python3.7/site-packages/torch/_utils.py", line 543, in reraise
    raise exception
RuntimeError: Caught RuntimeError in replica 2 on device 2.
Original Traceback (most recent call last):
  File "/home/visionx/anaconda3/envs/waterknn/lib/python3.7/site-packages/torch/nn/parallel/parallel_apply.py", line 64, in _worker
    output = module(*input, **kwargs)
  File "/home/visionx/anaconda3/envs/waterknn/lib/python3.7/site-packages/torch/nn/modules/module.py", line 1194, in _call_impl
    return forward_call(*input, **kwargs)
  File "/home/visionx/project/WatermarkNN/models/resnet.py", line 192, in forward
    out = F.relu(self.bn1(self.conv1(x)))
  File "/home/visionx/anaconda3/envs/waterknn/lib/python3.7/site-packages/torch/nn/modules/module.py", line 1194, in _call_impl
    return forward_call(*input, **kwargs)
  File "/home/visionx/anaconda3/envs/waterknn/lib/python3.7/site-packages/torch/nn/modules/conv.py", line 463, in forward
    return self._conv_forward(input, self.weight, self.bias)
  File "/home/visionx/anaconda3/envs/waterknn/lib/python3.7/site-packages/torch/nn/modules/conv.py", line 460, in _conv_forward
    self.padding, self.dilation, self.groups)
RuntimeError: cuDNN error: CUDNN_STATUS_INTERNAL_ERROR
You can try to repro this exception using the following code snippet. If that doesn't trigger the error, please include your original repro script when reporting this issue.

import torch
torch.backends.cuda.matmul.allow_tf32 = False
torch.backends.cudnn.benchmark = True
torch.backends.cudnn.deterministic = False
torch.backends.cudnn.allow_tf32 = True
data = torch.randn([34, 3, 32, 32], dtype=torch.float, device='cuda', requires_grad=True)
net = torch.nn.Conv2d(3, 64, kernel_size=[3, 3], padding=[1, 1], stride=[1, 1], dilation=[1, 1], groups=1)
net = net.cuda().float()
out = net(data)
out.backward(torch.randn_like(out))
torch.cuda.synchronize()

ConvolutionParams 
    memory_format = Contiguous
    data_type = CUDNN_DATA_FLOAT
    padding = [1, 1, 0]
    stride = [1, 1, 0]
    dilation = [1, 1, 0]
    groups = 1
    deterministic = false
    allow_tf32 = true
input: TensorDescriptor 0x7f10b8457930
    type = CUDNN_DATA_FLOAT
    nbDims = 4
    dimA = 34, 3, 32, 32, 
    strideA = 3072, 1024, 32, 1, 
output: TensorDescriptor 0x7f10b84593b0
    type = CUDNN_DATA_FLOAT
    nbDims = 4
    dimA = 34, 64, 32, 32, 
    strideA = 65536, 1024, 32, 1, 
weight: FilterDescriptor 0x7f10b84e3880
    type = CUDNN_DATA_FLOAT
    tensor_format = CUDNN_TENSOR_NCHW
    nbDims = 4
    dimA = 64, 3, 3, 3, 
Pointer addresses: 
    input: 0x130f600000
    output: 0x1313c00000
    weight: 0x1310e00000

原因分析和解决

        其实我们在分析上面的问题可以看出来,主要在于这三部分:

1、Using CUDA
Parallel training on 3 GPUs.warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))
2、RuntimeError: Caught RuntimeError in replica 2 on device 2.
3、RuntimeError: cuDNN error: CUDNN_STATUS_INTERNAL_ERROR
You can try to repro this exception using the following code snippet. If that doesn't trigger the error, please include your original repro script when reporting this issue.

        在解决问题的过程中我一般会从最后一个开始找起,但是gpt给出了这样的答复: 

错误消息表明出现了cuDNN(CUDA深度神经网络库)的内部错误。这可能是由于各种原因引起的,如CUDA/cuDNN不兼容的版本、内存分配问题或硬件问题。

为了解决这个问题,您可以尝试以下步骤:

  1. 检查CUDA/cuDNN版本:确保您使用的CUDA和cuDNN版本彼此兼容,并与您的GPU驱动程序兼容。通常可以在CUDA和cuDNN的文档或发布说明中找到兼容性信息。

  2. 更新驱动程序:确保您的GPU驱动程序是最新的。有时更新驱动程序可以解决兼容性问题。

  3. 内存分配:检查您的GPU是否有足够的内存执行操作。如果内存不足,可能会遇到cuDNN错误。尝试减少批量大小或使用较小的模型,看看错误是否仍然存在。

  4. 硬件问题:如果上述步骤都无法解决问题,可能是您的GPU存在硬件问题。在这种情况下,您可能需要对硬件进行故障排除或更换。

  5. 可重现的示例:如果仍然遇到错误,请尝试创建一个最小化的可重现示例,以便能够一致地触发错误。这将有助于更有效地诊断问题,并从社区或支持渠道寻求帮助。

如果上述步骤都无法解决问题,您可能需要从CUDA/cuDNN论坛或支持渠道寻求进一步的帮助,因为问题可能特定于您的环境或配置。

        显然这样是解决不了任何问题的,因为我在跑其他程序的时候就没有问题,所以上面这些问题肯定是没有出现的。

        再接着再看上一个错误,给出的答复是这样的,但同样也不知道怎么解决。

这个错误表明在第二个副本上的第二个设备上捕获到了运行时错误。通常,这种类型的错误可能由多种原因引起,包括但不限于:

  1. 代码错误:您的代码中可能存在逻辑错误、类型错误或语法错误,导致运行时错误。

  2. 数据问题:数据格式不正确、数据丢失或损坏等问题可能导致程序出错。

  3. 环境配置:依赖项版本不兼容、环境变量设置不正确或硬件配置问题可能导致运行时错误。

  4. 资源限制:内存不足、GPU显存不足或其他资源限制可能导致程序无法正常运行。

  5. 并行问题:在多线程或多进程环境中,竞态条件、死锁或同步问题可能导致运行时错误。

为了解决这个问题,您可以尝试以下步骤:

  1. 查看错误信息:仔细阅读错误信息,并尝试理解其中提到的问题。

  2. 排查代码:检查您的代码,特别是与错误相关的部分。确保代码逻辑正确,并且没有明显的错误。

  3. 检查数据:检查您的输入数据,确保其格式正确,并且数据完整且没有损坏。

  4. 环境配置:检查您的环境配置,包括依赖项版本、环境变量和硬件配置。确保它们与程序的要求相匹配。

  5. 资源管理:确保您的程序不会耗尽系统资源,如内存和显存。您可以尝试减小数据集大小、降低模型复杂度或限制并行度。

  6. 日志记录:在代码中添加适当的日志记录,以便更好地理解程序的执行流程和问题发生的位置。

如果您无法解决问题,建议尝试创建一个最小化的可重现示例,并从社区或支持渠道寻求帮助。提供足够的上下文信息和错误堆栈跟踪通常会有助于他人更好地理解问题并提供帮助。

        但有趣的一件事情是,当我把这个程序放到服务器上去跑的时候就完全没有问题。 

        那会是什么问题呢?这个我注意到了这两部分,一个是3,但另一个是2,这是为什么呢?好像是因为有亮机卡的存在的原因,众所周知,亮机卡几乎无计算能力。而服务器能跑的一个主要原因也是因为在这里边没有亮机卡。

1、Using CUDA
Parallel training on 3 GPUs.warnings.warn(imbalance_warn.format(device_ids[min_pos], device_ids[max_pos]))
2、RuntimeError: Caught RuntimeError in replica 2 on device 2.

         那这就好解决了,只要我指定可使用的GPU就可以了。

CUDA_VISIBLE_DEVICES="0,1" python train.py --batch_size 100 --max_epochs 60 --runname train --wm_batch_size 2 --wmtrain

        这样操作完之后,果然解决了。

 

 

相关内容

        亮机卡是什么?icon-default.png?t=N7T8http://www.dnpz.net/DIYzhuanqu/DIYyinanzazheng/5731.html

        为什么同步训练会出错?icon-default.png?t=N7T8https://blog.csdn.net/weixin_42001089/article/details/122733667

完结撒花

        我该怎么去活,才能获得做人的尊严???

  • 31
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
在使用深度学习框架进行训练或推理时,有时会遇到 cuDNN error: CUDNN_STATUS_INTERNAL_ERROR 错误。这个错误通常是由于cuDNN库与GPU驱动或深度学习框架之间的不兼容性或配置问题引起的。以下是一些解决方法: 1. 更新cuDNN库和GPU驱动程序:首先,确保你使用的cuDNN库和GPU驱动程序是兼容的。你可以从NVIDIA官方网站下载最新版本的cuDNN库和GPU驱动程序,并按照官方文档进行安装。 2. 检查深度学习框架版本:确保你使用的深度学习框架版本与cuDNN库兼容。有时,更新深度学习框架版本可以解决这个问题。 3. 检查CUDA版本:确保你的CUDA版本与cuDNN库兼容。cuDNN库通常需要与特定版本的CUDA配套使用。你可以在cuDNN的官方文档中找到与你的CUDA版本兼容的cuDNN版本。 4. 检查硬件兼容性:确保你的GPU与cuDNN库兼容。有时,某些旧的GPU可能不支持最新版本的cuDNN库。你可以在cuDNN的官方文档中查找与你的GPU兼容的cuDNN版本。 5. 检查环境变量和路径设置:确保你正确设置了cuDNN库的环境变量和路径。你可以按照cuDNN的官方文档中的说明进行设置。 6. 重新编译深度学习框架:如果以上方法都没有解决问题,你可以尝试重新编译深度学习框架。按照深度学习框架的官方文档中的说明重新编译框架,并确保正确链接cuDNN库。 请注意,以上方法可能需要根据你的具体情况进行调整。如果问题仍然存在,建议查阅深度学习框架和cuDNN库的官方文档,或者在相关的论坛或社区寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值