报错:CUDA kernel errors might be asynchronously reported at some other API call ..."/>
【debug】mmseg工程训练报错:CUDA kernel errors might be asynchronously reported at some other API call ...
🚀Debug专栏
其他debug记录请参考上方【debug专栏】
目录
🚀Debug专栏
🍀🍀背景
🔔🔔详细报错
🍭🍭原因分析
🌻🌻解决步骤
1.报错详细信息定位
2.可能报错1:num_class设置不对
3.可能报错2:模型输出尺寸不对
🌷🌷总结
整理不易,欢迎一键三连!!!
送你们一条美丽的--分割线--
🍀🍀背景
训练mmesg工程,报错CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
🔔🔔详细报错
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
🍭🍭原因分析
报错说是CUDA 内核错误,翻译过来是:可能会在其他一些 API 调用中异步报告,因此下面的堆栈跟踪可能不正确。
🌻🌻解决步骤
那既然是报错说CUDA在其他地方有被占用的情况,那就先关闭其他程序中的cuda占用,再执行。
1.报错详细信息定位
首先这种模糊的报错信息难以定位到是什么具体的报错代码位置,所以我们要打印更详细的报错说明,找到报错的代码位置。给代码开始位置添加一下两行:
import os
os.environ['CUDA_LAUNCH_BLOCKING'] = '1'
这时候报错会定位到实际位置,大家对症下药解决即可。
2.可能报错1:num_class设置不对
检查自己的数据集label对应的值是否有超过num_class的值,比如num_class=3的数据集,label应该为[0,1,2],不应该出现除这三个值以外的值。
3.可能报错2:模型输出尺寸不对
通常模型的输入尺寸为3是不会变的,但是输出尺寸的channel应该为num_class的大小,因此,此处是最容易忘记改的,本人就是。。。
记得将模型的out_channel改为num_class!!!
🌷🌷总结
一般python代码的报错还是比较人性化,翻译过来就能知道大概的报错原因,如果报错原因比较模糊,难以定位的话,可以尝试通过在主函数第一行增加代码os.environ['CUDA_LAUNCH_BLOCKING'] = '1'来打印详细的报错信息,然后再根据详细报错进行定位代码修改。
这次的经验告诉我们CUDA kernel errors的报错大概率是因为out_channel和num_class不对应。
整理不易,欢迎一键三连!!!
送你们一条美丽的--分割线--
🌷🌷🍀🍀🌾🌾🍓🍓🍂🍂🙋🙋🐸🐸🙋🙋💖💖🍌🍌🔔🔔🍉🍉🍭🍭🍋🍋🍇🍇🏆🏆📸📸⛵⛵⭐⭐🍎🍎👍👍🌷🌷
更多推荐
【debug】mmseg工程训练报错:CUDA kernel errors might be asynchronously reported at some o
发布评论