训练配置 RTX3090 单卡 24G cuda-11.8 torch-2.0.1
数据集 nuscenes-v1.0mini
前面我们已经对仅only-lidar进行训练,能够顺利跑通Mmdetection3d学习笔记--bevfusion跑通 在nuscenes v1.0-mini数据集上_孔猪猪的男朋友的博客-优快云博客但是在训练lidar-camera融合时就报错。
1.报错一 :分布式训练出错
我先是报的分布式训练出错。理论上我是单卡,即便我调用了分布式训练应该也能查到我的cuda号,我查阅了csdn很多方案,比如在训练前通过添加语句指定cuda使用哪一块来固定,以及在训练时指定参数1,依然没用,最后再查看tools底下的dist_train.sh文件有个gpu项,原来是8,将它改成1即可,就会取消分布式训练。记得dist_test.sh也要改一下,因为它的runner包含了训练和测试部分。
2.报错二 :cuda out of memory
真的很致命这个问题。原论文使用的也是RTX3090 8张卡,每张卡4个Batch。我将lidar-camera的配置文件中的base_batch_size调整为1,依然oom:
就很费解,甚至去学习了一遍swintransformer网络架构 ,想要缩小图片再训练一遍图像权重,但是我的代码能力还是在copy阶段,所以放弃。
然后和群里同样想要训练bevfusion的群友进行讨论,给他看了我的batch_size修改处,结果他跟我说要改lidar_onlyconfig文件下的Batch_size:如下图所示:
原来train_dataloader底下的batch_size为4, 现在改为2 ,就可以训练了。
这是因为lidar-cam通过_base_继承了lidar-only的配置,所以需要通过修改lidar-only的batch_size 才有用。
训练如下:
batch_size=2的时候显存占用情况如下,可想而为4的时候真的狠狠oom了。。。
总结:感觉相同配置下,论文不会oom而Mmdetd/proj下的项目会还是代码的原因。但是小白真的不会修改别人的代码(卡Bug好几天了),尝试过清除缓存,尝试过指令将散落的cuda块统一起来(现在想起来我24576MiB差不多占了23000多,怎么可能有散落的。。)都没有用,还是和群友交流共同找办法有用。跑通了就可以开始学习别人的代码啦!希望对大家有帮助~
----------------------------训练6个epoch结果如下(第七个epoch)开始过拟合--------------------------------
可视化结果显示
可能因为使用的是mini数据集,所以最后的结果精度不是很高~~