问题描述:

本来是要复现rtdetr的,ultralytics里面内置的一个rtdetr的代码复现了一遍之后,突然不知道为什么脑抽了,想着网上找找有没有rtdetr的官方论文代码,结果还真有,然后就踏上了一条不归路。。。。。。整整3天就为了解决这个问题

错误描述

在配好官方一模一样的环境后,直接pip install -r requirements -i 清华源 安装即可

数据集用的minicoco,和coco的类别等各方面都是一样的,所以只需要根据自己的显卡、显存等硬件设备改一下batch size 和num works就行,我改的是coco_detection.yaml里面的batch size 和num works,但是不管怎么改,都会报段错误或者死机

探索过程

我就很疑惑,一直在想为什么会出现这个问题,我群里xhs上到处找人问,好几个人说是环境配置问题。

我也想了想,总结出来几个点,可能出现的问题:

1、环境配的不对,cuda、pytorch的版本什么的对不上,而且环境也有pip和conda两种方式

2、由于我是刚接手了一个本地服务器,一张单卡的4090,有可能是硬件问题,因为在nvidia-smi -l -2指令的时候,显存并没有被拉爆(但实际就是显存被拉爆了。。后面详细说)

3、有可能是ubuntu系统问题,我在win上跑就可以,就是慢很多

问题解决

关于第一个问题,环境问题:我来来回回创建了好多虚拟环境,配的和官方都是一模一样的torch环境,依旧报错,我甚至用两种不同的方式pip和conda分别配了环境,分配run了代码,结果还是不行,又在win系统里面跑这个代码,发现能跑得起来,但是太慢了,第一个问题pass,肯定不是环境问题了

关于第二个问题:我用指令看其实显示的实时显存并没有被拉爆

关于第三个问题,这个没法解决,感觉进了死胡同,不过‘聪明’的我灵机一动,想着去租一个完全相同配置的服务器跑这个代码试试,哈哈,结果发现传递文件太慢了,后来还是不了了之了

就在我一筹莫展之际,我决定从这个错误着手,网上说报段错误的话,就在运行指令里面加一个,这个指令可以定位到错误位置给出更详细的错误信息

python -X faulthandler your_script.py

这里我试了一下,报出来的错误显示是dataloader有问题

我就全局搜索了一下num works,果不其然,rtdetr的官方pytorch代码,又嵌套了一层dataloader在里面,我根本没有注意到!!!而且这个dataloaer.yaml里面的num-works=4,我的电脑肯定带不起来,最终得出结论还是显存被拉爆了

那么也是我太粗心了,拿到代码太着急了,太想着把代码跑通复现,没有去debug代码,没有去一点一点的看代码段,导致了这个错误

血泪的教训,花了整整三天,发现还是最基础的问题😭,大家不要和我一样

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐