pytorch dataloader worker数设置太大可能导致的问题

DataLoader worker (pid ****) is killed by signal: Killed

服务器内存不够,触发OS的保护机制,直接杀死了进程,可以通过增加虚拟内存解决:

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 oflag=append conv=notrunc

RuntimeError: DataLoader worker (pid XXX) is killed by signal: Bus error 

共享内存不足,要么增大共享内存,要么减小worker数

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Windows上使用PyTorch时,DataLoader的num_workers参用于指定在据加载过程中使用的子进程量。它的作用是并行地从磁盘读取据,以加速据的加载和预处理过程。 然而,在Windows操作系统上,由于不支持"fork"机制,因此不能像在Linux或Mac上那样使用多个子进程。在Windows中,PyTorchDataLoader的num_workers参设置为非零值时,会将据加载和预处理的任务放在主进程中执行,而不会使用额外的子进程。 因此,在Windows上使用PyTorch时,无论将num_workers参设置为多少,都只有一个主进程用于据加载和预处理。这导致在Windows上的据加载速度可能会较慢,特别是当据集比较大时。为了加快据加载过程,可以考虑使用较小的batch_size或者使用更快的硬盘存储设备。 总之,在Windows上使用PyTorch时,虽然可以设置num_workers参,但其实际效果与设置为0时相同,即据加载是在主进程中完成的,无法利用多进程来加速据加载过程。 ### 回答2: Windows上使用PyTorchdataloader时,可以设置num_worker来指定据加载的多线程工作。num_worker的作用是控制加载据的并发,即同时加载多少个样本。 在Windows操作系统上,通常建议将num_worker设置为0或1。这是因为Windows的多进程实现与Unix系统上的多进程实现有所不同,其中涉及到一些技术方面的限制和差异。 将num_worker设置为0意味着仅使用主进程加载据,并且不会启动任何额外的工作线程。这是一种简单且可行的方式,当据集规模较小时,可以减少进程间的冲突问题,并提高代码的可移植性。 将num_worker设置为1意味着在主进程之外使用一个额外的工作线程来加载据。这样可以在加载据的同时进行一些前处理操作,但同样不会引入进程间的冲突问题。 需要注意的是,Windows上的多线程工作设置对于每个人的具体情况可能会有所不同。因此,根据实际需求和硬件配置,可以进行一些尝试和调整来选择最佳的num_worker值,以达到性能的最大化和代码的稳定运行。同时,在使用多线程加载据时,还需要确保代码的正确性和线程安全性,以避免潜在的错误和异常情况的发生。 ### 回答3: 在使用PyTorch时,可以使用Dataloader类来加载和预处理据。在Dataloader中有一个参叫做`num_workers`,它用于指定加载据时使用的线程。 `num_workers`参的作用是并行加载据,它决定了有多少个子进程用于据的预处理。使用多个子进程可以加快据加载的速度,特别是当据的预处理操作比较耗时时,使用多个子进程可以提高据加载的效率。 在Windows系统中,由于GIL(全局解释器锁)的存在,多线程并不会真正发挥出并行加载据的效果,因此在Windows上使用`num_workers`参设置多个线程的方法并不能有效提高据加载的速度。相反,设置的`num_workers`越大,对于Windows系统来说,反而可能导致据加载的速度变慢。 解决这个问题的一个方法是使用`torch.multiprocessing`模块中的`set_start_method`函将后端设置为`'spawn'`,这样可以阻止使用fork进程来生成子进程,从而在Windows上实现真正的并行加载据。 总而言之,在Windows系统上,使用`num_workers`参设置多个线程的方法可能不会真正提高据加载的速度。为了充分利用多核处理器的计算能力,可以考虑使用`torch.multiprocessing`模块中的函设置后端并行加载据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值