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