PyTorch dataloader中的“worker of worker”参数实际上如何工作?

问题描述 投票:5回答:1

1-如果num_workers为2,这是否意味着它将在RAM中放入2批并将其中1批发送到GPU或者它是否将3批次放入RAM然后将其中1批发送到GPU? 2-当工作人员数量高于CPU核心数时,实际发生了什么?我尝试了它并且工作正常但它是如何工作的?(我认为我可以选择的最大工人数是核心数) 3-如果我将num_workers设置为3并且在训练期间GPU的内存中没有批次,主进程是否等待其工作人员阅读批次或是否读取单个批次(无需等待工作人员)?

python memory-management deep-learning pytorch ram
1个回答
6
投票
  1. num_workers>0,只有这些工人将检索数据,主要过程不会。因此,当num_workers=2你最多有2名工人同时将数据放入RAM而不是3。
  2. 那么我们的CPU通常可以像100个进程一样运行而没有任何问题,而且这些工作进程无论如何都不是特别的,所以拥有比cpu核心更多的工作者是可以的。但它有效吗?这取决于你的cpu核心对于其他任务的繁忙程度,cpu的速度,硬盘的速度等等。总之,它很复杂,因此将工作者设置为核心数量就像是经验法则,仅此而已。
  3. 不。请记住,DataLoader不仅仅是从RAM中现有的内容中随机返回,而是使用batch_sampler来决定接下来要返回的批次。每个批处理都分配给一个工作程序,主进程将等待,直到指定的工作程序检索到所需的批处理。

最后澄清一下,将DataLoader直接发送给GPU,你明确地调用cuda(),或修改Dataset__getitem__()方法不是qazxswpoi的工作。

© www.soinside.com 2019 - 2024. All rights reserved.