1-如果num_workers
为2,这是否意味着它将在RAM中放入2批并将其中1批发送到GPU或者它是否将3批次放入RAM然后将其中1批发送到GPU?
2-当工作人员数量高于CPU核心数时,实际发生了什么?我尝试了它并且工作正常但它是如何工作的?(我认为我可以选择的最大工人数是核心数)
3-如果我将num_workers
设置为3并且在训练期间GPU的内存中没有批次,主进程是否等待其工作人员阅读批次或是否读取单个批次(无需等待工作人员)?
num_workers>0
,只有这些工人将检索数据,主要过程不会。因此,当num_workers=2
你最多有2名工人同时将数据放入RAM而不是3。DataLoader
不仅仅是从RAM中现有的内容中随机返回,而是使用batch_sampler
来决定接下来要返回的批次。每个批处理都分配给一个工作程序,主进程将等待,直到指定的工作程序检索到所需的批处理。最后澄清一下,将DataLoader
直接发送给GPU,你明确地调用cuda()
,或修改Dataset
的__getitem__()
方法不是qazxswpoi的工作。