问题描述

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

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

完结撒花

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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐