Pytorch/MMlab的Dataloader中用pdb进行debug报错

本文探讨了在使用mmdet和mmcls库时,如果设置persistent_workers选项且num_workers等于0导致的单线程调试问题。文章详细解析了问题的成因,并提供了有效的解决方案,帮助开发者优化代码执行效率。
摘要由CSDN通过智能技术生成

pytorch训练框架或MMlab系列这类封装Pytorch的框架(MMdet、MMcls等)在训练中,如果要在dataset相关的pipeline中进行debug,用pdb打断点,很容易触发这样的错误:

bdb.BdbQuit: Caught BdbQuit in DataLoader worker process 0.

这是由于pytorch的Dataloader在多线程的时候不允许debug。因此要做的很简单,把多线程改成单线程,这个参数在mmlab系列通常是config中的workers_per_gpu。即将workers_per_gpu从原本设置的2或者更多改成

workers_per_gpu=0

注意这里不是改成workers_per_gpu=1,因为从这个参数的定义和描述中可以发现:


num_workers (int, optional) – how many subprocesses to use for data loading. 0means that the data will be loaded in the main process. (default: 0

然而在Pytorch>=1.7.0版本时,只改动 workers_per_gpu=0也会报错

 raise ValueError('persistent_workers option needs num_workers > 0')
ValueError: persistent_workers option needs num_workers > 0

这是由于Dataloader有一个新的参数persistent_workers,这个默认为True的参数是为了加快训练速度,在数据加载完并不会关闭worker进程,而是保持现有的worker进程继续进行下一个Epoch的数据加载。当设置为True的时候,要求num_workers>=1 。因此进行debug的话还要把这个参数设置为False,一般在

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值