已解决RuntimeError: CUDA error: invalid device ordinal CUDA kernel errors might be asynchronously repo

已解决RuntimeError: CUDA error: invalid device ordinal CUDA kernel errors might be asynchronously repo
 
下滑查看解决方法
在这里插入图片描述

🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇

🎓 博主简介985高校的普通本硕,曾有幸发表过人工智能领域的 中科院顶刊一作论文,熟练掌握PyTorch框架

🔧 技术专长: 在CVNLP多模态等领域有丰富的项目实战经验。已累计一对一为数百位用户提供近千次专业服务,助力他们少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于深度学习、PyTorch、Python相关的实用内容。已发表原创文章500余篇,代码分享次数逾四万次

💡 服务项目:包括但不限于科研入门辅导知识付费答疑以及个性化需求解决

欢迎添加👉👉👉底部微信(gsxg605888)👈👈👈与我交流
          (请您备注来意
          (请您备注来意
          (请您备注来意

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


下滑查看解决方法

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

🌈 引言

  当我们投身于大型项目的代码开发时,错误与异常总是难以避免地会出现。在这篇博客中,我将和大家分享一个因错误使用torch.cuda.set_device()os.environ["CUDA_VISIBLE_DEVICES"]而引发的报错经历。torch.cuda.set_device()是大型项目中用于设置GPU设备编号的函数,而os.environ["CUDA_VISIBLE_DEVICES"]则是我们在日常工作中更常使用的设置方式。当我们在不了解已有设置的情况下,错误地尝试通过os.environ["CUDA_VISIBLE_DEVICES"]来更改GPU设备时(比如当“0”号GPU被其他任务占用时,设置使用GPU编号为1的设备),便有可能触发意料之外的报错。接下来,我将详细解析这一错误的产生原因,并分享如何避免和解决此类问题。

🔍 报错分析

当项目运行到以下代码行时出现报错:

# self.opt.gpu_ids = ["1"]  已知信息
torch.cuda.set_device(self.opt.gpu_ids[0]) # 由已知信息可知   self.opt.gpu_ids[0] <==> "1"

报错信息如下

RuntimeError: CUDA error: invalid device ordinal CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect. For debugging consider passing CUDA_LAUNCH_BLOCKING=1.

报错完整截图
报错
报错的信息告诉我们,编号"1"是无效的设备序号。但我使用的设备属于单机多卡,是有编号为"1"的显卡的。

🛠️ 解决方法

检查报错代码前面执行过的程序,特别是导入第三方库部分,发现利用os库指定了该程序可见的GPU编号及数量,即:

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1"

因此,注释掉os.environ["CUDA_VISIBLE_DEVICES"] = "1"后,重新运行程序,顺利解决bug~

背后的原理:由于设置os.environ["CUDA_VISIBLE_DEVICES"] = "1",因此,代码可见的GPU设备仅有一个(即使实际上可用的有多个)。此时,若执行代码torch.cuda.set_device("1"),由于代码可见的GPU设备仅有一个(编号已重置为0),不存在编号为1的GPU设备 ===> 出现以上报错。
当我们清楚来龙去脉后,解决方案便随之而来👆👆👆


🌈 相关技巧

Pytorch设置GPU编号

  1. 在终端中运行python程序时设置

    CUDA_VISIBLE_DEVICES=1 python main.py
    
  2. 在python代码中设置

    import os
    os.environ['CUDA_VISIBLE_DEVICE']='1' # 使用编号为1的显卡
    
  3. 在python代码中使用函数torch.cuda.set_device设置

    import torch
    torch.cuda.set_device("1")
    

检查GPU是否可用

import torch
torch.cuda.is_available() # 判断是否可以使用gpu计算

显示当前可用的GPU数量

import torch
torch.cuda.device_count()  # 显示gpu数量

🤝 期待与你共同进步

  🌱 亲爱的读者,非常感谢你每一次的停留和阅读!你的支持是我们前行的最大动力!🙏

  🌐 在这茫茫网海中,有你的关注,我们深感荣幸。你的每一次点赞👍、收藏🌟、评论💬和关注💖,都像是明灯一样照亮我们前行的道路,给予我们无比的鼓舞和力量。🌟

  📚 我们会继续努力,为你呈现更多精彩和有深度的内容。同时,我们非常欢迎你在评论区留下你的宝贵意见和建议,让我们共同进步,共同成长!💬

  💪 无论你在编程的道路上遇到什么困难,都希望你能坚持下去,因为每一次的挫折都是通往成功的必经之路。我们期待与你一起书写编程的精彩篇章! 🎉

  🌈 最后,再次感谢你的厚爱与支持!愿你在编程的道路上越走越远,收获满满的成就和喜悦!祝你编程愉快!🎉

参考链接

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

高斯小哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值