numworkers是加载数据的额外cpu数量(也可以看成额外的进程)。可以理解是:
dataset中的getitem只能得到单个数据, 而numworker设置后是同时加载numwork个数据到RAM中,当需要数据时,不会重新执行getiem的方法,而是直接从RAM取出即可(加快了速度)。
numwork 0 和 1 的区别:
为0的话:执行过程是:主进程取数据-》主进程执行程序-》主进程取数据-》
为1的话:执行过程是:额外进程取数据-》主进程执行程序 主进程执行程序的时候额外进程就可以加载数据了,执行完程序之后可以直接取数据再执行,加快速度。
batchsize 为 1 numworders为2
可以看出,并不是取一个数据就去执行程序,再取数据再执行(这是numworker)为0的情况。数字和损失会一一交替出现;
这里是:
首先取两个数据,然后执行程序,在执行程序的时候2个cpu核又去执行取数据操作,后面的执行程序和取数据是并行的。
batchsize1 num_workers为8
更加明显了:就是首先直接取八个数据,然后送一个进去执行程序,当一个程序没执行完时,其他线程又开始取数据了。相当于取数据对主要程序执行没有影响。