bubbliiiing / yolov4-pytorch

这是一个YoloV4-pytorch的源码,可以用于训练自己的模型。
MIT License
2.1k stars 615 forks source link

训练中突然停止,也不报错,就一直停在那里 #49

Open wusheng816 opened 4 years ago

wusheng816 commented 4 years ago

第一个epoch就出现这种问题,手动中断训练,再次运行train.py,还是相同的情况,不过每次停止的iter都不一样。

感谢UP的分享!

wusheng816 commented 4 years ago

应该是显存OOM,但我batch_size设成1,input设置为418*418,用的Titan X 12G显卡,还是一直出现这个问题。

bubbliiiing commented 4 years ago

没有道理。12G不可能这样爆显存。。输入应该是416x416吧

wusheng816 commented 4 years ago

相同的数据集(45000张图片,9比1划分训练集和验证集),在ultralytics yolov5x上跑没问题(input_size=640,batch_size=4,使用mosaic数据增强)。

不知道up主有没有拿大批量的数据集来训练过。

bubbliiiing commented 4 years ago

什么错误?

bubbliiiing commented 4 years ago

我训练过COCO

wusheng816 commented 4 years ago

什么错误?

没有错误提示,训练就停在那里,不往下训练了,也不退出,这种情况都是出现在第一个epoch,不过每次的iter都不一样

bubbliiiing commented 4 years ago

显存OOM不会停在那里。会提示错误

bubbliiiing commented 4 years ago

重下一下吧,最近换成了tqdm进度条,看看还有没有错误

wusheng816 commented 4 years ago

显存OOM不会停在那里。会提示错误

好的,等周一上班了再试一下。

wusheng816 commented 4 years ago

跑到第13个epoch爆显存了,input_shape = (416,416),Batch_size = 4.

Epoch 13/25: 60%|██████ | 6080/10125 [25:21<23:04, 2.92it/s, lr=0.000282, step/s=0.306, total_loss=14.1]Traceback (most recent call last): File "D:\anaconda\lib\multiprocessing\queues.py", line 236, in _feed obj = _ForkingPickler.dumps(obj) File "D:\anaconda\lib\multiprocessing\reduction.py", line 51, in dumps cls(buf, protocol).dump(obj) MemoryError Epoch 13/25: 60%|██████ | 6088/10125 [25:40<19:00, 3.54it/s, lr=0.000282, step/s=0.248, total_loss=14.1]

bubbliiiing commented 4 years ago

,你这个是爆内存了。你可以减少num_works

wusheng816 commented 4 years ago

,你这个是爆内存了。你可以减少num_works

num_works设为2一样出错,设成0跑了3个epoch受不了了,训练太慢了

Eliza-and-black commented 4 years ago

训练时,修改Use_Data_Loader = False(原来为True),这个修改会使num_workers,pin_memory参数不再生效,同时将batch_size改小,比如修改为8. 测试时,可以将测试时的batch_size改为原来的1/3或者1/2. 2070S这样设置可以跑,不再无故卡死。

bubbliiiing commented 4 years ago

一般无故卡死是因为多线程读取数据导致内存爆炸,所以大内存很重要,否则就调小num_works

bubbliiiing commented 4 years ago

为0的话 等于Use_Data_Loader = False

Eliza-and-black commented 4 years ago

后来发现,训练时,可以将预训练模型加载在cpu上,num_works拉满,pin_memory=False,调整训练时的batch_size至内存有1G剩余;val时,除batch_size=Batch_size//5,其余参数相同。  这样也可以。

Sencc commented 3 years ago

Use_Data_Loader

请问Use_Data_Loader 这个参数在哪里

bubbliiiing commented 3 years ago

已经取消这个参数了,自动使用pytorch的dataloader

Aning327 commented 1 year ago

我也遇到了相同的问题,我是训练固定轮次就停下,不报错。继续训练,又训练相同轮数停下,已排除显存不够的问题。请各位大佬帮忙看一下如何解决。

alisanissun commented 1 year ago

我也遇到一樣的問題,不知道有沒有人已經解決了。

Esperanto-mega commented 1 year ago

一般无故卡死是因为多线程读取数据导致内存爆炸,所以大内存很重要,否则就调小num_works

你好 请问这种情况导致的内存爆炸能检测到吗 比如使用命令 watch free -h

还是说卡死之后内存会自动被系统释放

Zxtxxx commented 1 year ago

Total Loss: 0.032 || Val Loss: 0.024 Save best model to best_epoch_weights.pth Start Train Epoch 52/200: 94%|▉| 1558/1660 [05:59<00:22, 4.55it/s, loss=0.0319, lr=0.00053 Process finished with exit code -1 我的v7运行到52轮就自动停止了,是什么原因。

yidamyth commented 1 month ago

请问解决吗了,我也出现这个问题。代码中断,不显示任何错误提示。排查了很久都没有找到原因!