Dataloader异常卡死或报错

问题描述:

使用pytorch训练网络加载数据当num_workers>0时,训练一轮并验证后,训练第二轮时卡在for循环那里取不到数据。num_worders=0就没有问题。但效率慢。
pytorch 1.7.1 不报任何错误
pytorch 1.11.0 会报DataLoader worker (pid 22479) is killed by signal: Segmentation fault.
如果在pytorch 1.7.1追踪代码,发现卡在python3.7/site-packages/torch/utils/data/_utils/worker.py中的198行data = fetcher.fetch(index)

Dataloader异常卡死或报错_第1张图片
之前用mxnet的时候也出现过训练到一半的时候突然就卡在那个地方不报错也不退出。就是显卡使用率0%,不知道是不是同样的问题。
这个问题困扰了好久,因为用num_workers=0就没有问题,所以一直没有解决。


原因分析:

这几天实在受不了。经过各种谷歌,终于让我找到了解决方法。
看下你的Dataset类里,__gititem__(self,item)方法内是不是用了opencv做图像处理。如果是这就是原因了,opencv的多线程和python的多线程相互干扰了。


解决方案:

import cv2
cv2.setNumThreads(0)

你可能感兴趣的:(人工智能-神经网络算法,神经网络,Dataloader,pytorch,num_workers)