Dataloader异常卡死或报错

本文探讨了使用PyTorch训练时遇到的问题,当num_workers大于0时,数据加载卡顿。经排查发现,OpenCV的多线程与Python引发冲突。解决方案是通过设置OpenCV线程数为0。作者分享了这个技术难题的解决办法,有助于提高训练效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

使用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)


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


原因分析:

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


解决方案:

import cv2
cv2.setNumThreads(0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值