已解决RuntimeError: CUDA error: invalid device ordinal CUDA kernel errors might be asynchronously repo
下滑查看解决方法
🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇
🎓 博主简介:985高校的普通本硕,曾有幸发表过人工智能领域的 中科院顶刊一作论文,熟练掌握PyTorch框架。
🔧 技术专长: 在CV、NLP及多模态等领域有丰富的项目实战经验。已累计一对一为数百位用户提供近千次专业服务,助力他们少走弯路、提高效率,近一年好评率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编号
-
在终端中运行python程序时设置
CUDA_VISIBLE_DEVICES=1 python main.py
-
在python代码中设置
import os os.environ['CUDA_VISIBLE_DEVICE']='1' # 使用编号为1的显卡
-
在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数量
🤝 期待与你共同进步
🌱 亲爱的读者,非常感谢你每一次的停留和阅读!你的支持是我们前行的最大动力!🙏
🌐 在这茫茫网海中,有你的关注,我们深感荣幸。你的每一次点赞👍、收藏🌟、评论💬和关注💖,都像是明灯一样照亮我们前行的道路,给予我们无比的鼓舞和力量。🌟
📚 我们会继续努力,为你呈现更多精彩和有深度的内容。同时,我们非常欢迎你在评论区留下你的宝贵意见和建议,让我们共同进步,共同成长!💬
💪 无论你在编程的道路上遇到什么困难,都希望你能坚持下去,因为每一次的挫折都是通往成功的必经之路。我们期待与你一起书写编程的精彩篇章! 🎉
🌈 最后,再次感谢你的厚爱与支持!愿你在编程的道路上越走越远,收获满满的成就和喜悦!祝你编程愉快!🎉