RuntimeError: cuda runtime error (77)

项目场景:

python语言,GPU环境,定义神经网络后,初始化神经网络,训练模型前,cat数据,出现异常:RuntimeError: cuda runtime error (77)
在这里插入图片描述


问题描述:

虚拟试衣项目中,此处外层模型名称:Pix2PixHDModel,嵌套模型:G1,G2,U-net,G3。所以在最外层模型Pix2PixHDModel的forward函数,在处理前向传播过程中,难免会根据嵌套模型或最开始的输入数据,组织内层模型的输入,就像:G1_in = torch.cat([pre_clothes_mask, clothes, all_clothes_label, pose, noise], dim=1),然后遇到非法内存访问的问题。
RuntimeError: cuda runtime error (77) : an illegal memory access was encountered at XXXX:RuntimeError:CUDA运行时错误(77):在以下位置遇到了非法的内存访问.


原因分析与解决方案:

1)问题的分析一:可能是输入cat中进行拼接的各个对象的shape不匹配。
解决方式:查看各个对象的shape:print(248, pre_clothes_mask.shape, clothes.shape, all_clothes_label.shape, pose.shape, noise.shape, ),打印输出:248 torch.Size([1, 1, 256, 192]) torch.Size([1, 3, 256, 192]) torch.Size([1, 14, 256, 192]) torch.Size([1, 18, 256, 192]) torch.Size([1, 1, 256, 192]),发现size没有问题。排除问题一。
2) 问题分析二:可能是拼接的各个对象不再同一类设备上,比如有的数据存在cpu内存上,有的在gpu的内存上。
解决方式:查看各对象的设备:print(248, pre_clothes_mask.device, clothes.device, all_clothes_label.device, pose.device, noise.device, ),打印输出:248 cuda:0 cuda:0 cuda:0 cuda:0 cuda:0,发现device正常,没有问题。排除问题二。
3)问题分析三:可能拼接的各个对象的数据类型不一致。
解决方式:检查各个对象的数据的数据类型:print(248, pre_clothes_mask.type(), clothes.type(), all_clothes_label.type(), pose.type(), noise.type(), ),打印输出:248 torch.cuda.FloatTensor torch.cuda.FloatTensor torch.cuda.FloatTensor torch.cuda.FloatTensor torch.cuda.FloatTensor,发现数据类型一致,没有问题。排除问题三。
4)问题分析四:基于前面三种问题都排除了,那么,还有可能是拼接的各个对象中,有对象的数据元素出现非法值。
解决方法:梳理对象的数据元素,看看是否有非法元素。
首先查看了数据集的正确性:能够正常显示输入如下:人体解析标签label,人物模特image,关键点热图pose,待穿裤子color,该裤子的轮廓数据edge。
在这里插入图片描述
能够正常显示,没有报错,说明数据集没有问题。
在检查数据输入模型前的预处理,预处理后的值正常是否合法。
如果都没有问题,那么可能是报错时定位不准确。在运行前添加:CUDA_LAUNCH_BLOCKING = 1,帮助cuda运行报错正确定位。之后再次排查,正确定位:masked_label = masked_label.scatter_(1, (label_map * (1 - clothes_mask)).data.long().cuda(), 1.0),具体原因是:
在这里插入图片描述
关于scatter_,可以参考此blog
5)以上都没有排查到你的代码具体问题,或没有解决问题。只能尝试换高版本的框架了。

排查bug出现的可能情况,借助问题分析1,2,3,4,5找到问题的原因,对应解决方法,修改bug。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当出现"RuntimeError: CUDA error: initialization error"的错误时,通常是由于CUDA的初始化过程中出现了问题。这可能是由于以下几个原因导致的: 1. GPU驱动程序问题:请确保你的GPU驱动程序已经正确安装并与CUDA版本匹配。如果你的驱动程序过旧或与CUDA不兼容,可能会导致初始化错误。 2. CUDA版本不匹配:请确保你的CUDA版本与你的深度学习框架(如PyTorch或TensorFlow)所需的CUDA版本相匹配。如果版本不匹配,可能会导致初始化错误。 3. 硬件问题:有时候,初始化错误可能与硬件本身有关。请确保你的GPU正确安装并正常工作。 对于解决这个问题,可以尝试以下方法: 1. 更新GPU驱动程序:前往GPU制造商的官方网站,下载并安装最新的GPU驱动程序。 2. 检查CUDA版本:确保你的CUDA版本与深度学习框架所需的版本相匹配。如果不匹配,可以尝试升级或降级CUDA版本。 3. 检查硬件连接:确保你的GPU正确安装并与计算机连接良好。可以尝试重新插拔GPU,确保连接稳定。 4. 检查系统环境变量:确保你的系统环境变量中包含正确的CUDA路径。需要将CUDA的路径添加到PATH环境变量中。 如果以上方法都没有解决问题,那可能是其他更复杂的问题导致的初始化错误。建议咨询深度学习框架的官方论坛或寻求专业人士的帮助来进一步调试和解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【Pytorch】RuntimeError: CUDA error: initialization error](https://blog.csdn.net/LittleSeedling/article/details/127995183)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [关于RuntimeError: Cannot re-initialize CUDA in forked subprocess和CUDA error: initialization error的...](https://blog.csdn.net/Davidietop/article/details/127072346)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柏常青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值