pytorch DataLoader的num_workers参数与设置大小的示例分析
这篇文章主要介绍pytorch DataLoader的num_workers参数与设置大小的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
Q:在给Dataloader设置worker数量(num_worker)时,到底设置多少合适?这个worker到底怎么工作的?
train_loader=torch.utils.data.DataLoader(train_dataset, batch_size=batch_size,shuffle=True, num_workers=4)
参数详解:
1、每次dataloader加载数据时:dataloader一次性创建num_worker个worker,(也可以说dataloader一次性创建num_worker个工作进程,worker也是普通的工作进程),并用batch_sampler将指定batch分配给指定worker,worker将它负责的batch加载进RAM。
然后,dataloader从RAM中找本轮迭代要用的batch,如果找到了,就使用。如果没找到,就要num_worker个worker继续加载batch到内存,直到dataloader在RAM中找到目标batch。一般情况下都是能找到的,因为batch_sampler指定batch时当然优先指定本轮要用的batch。
2、num_worker设置得大,好处是寻batch速度快,因为下一轮迭代的batch很可能在上一轮/上上一轮...迭代时已经加载好了。坏处是内存开销大,也加重了CPU负担(worker加载数据到RAM的进程是CPU复制的嘛)。num_workers的经验设置值是自己电脑/服务器的CPU核心数,如果CPU很强、RAM也很充足,就可以设置得更大些。
3、如果num_worker设为0,意味着每一轮迭代时,dataloader不再有自主加载数据到RAM这一步骤(因为没有worker了),而是在RAM中找batch,找不到时再加载相应的batch。缺点当然是速度更慢。
设置大小建议:
1、Dataloader的num_worker设置多少才合适,这个问题是很难有一个推荐的值。有以下几个建议:
2、num_workers=0表示只有主进程去加载batch数据,这个可能会是一个瓶颈。
3、num_workers = 1表示只有一个worker进程用来加载batch数据,而主进程是不参与数据加载的。这样速度也会很慢。
num_workers>0 表示只有指定数量的worker进程去加载数据,主进程不参与。增加num_works也同时会增加cpu内存的消耗。所以num_workers的值依赖于 batch size和机器性能。
4、一般开始是将num_workers设置为等于计算机上的CPU数量
5、最好的办法是缓慢增加num_workers,直到训练速度不再提高,就停止增加num_workers的值。
补充:pytorch中Dataloader()中的num_workers设置问题
如果num_workers的值大于0,要在运行的部分放进__main__()函数里,才不会有错:
importnumpyasnp importtorch fromtorch.autogradimportVariable importtorch.nn.functional importmatplotlib.pyplotasplt importtorch.utils.dataasData BATCH_SIZE=5 x=torch.linspace(1,10,10) y=torch.linspace(10,1,10) torch_dataset=Data.TensorDataset(x,y) loader=Data.DataLoader( dataset=torch_dataset, batch_size=BATCH_SIZE, shuffle=True, num_workers=2, ) defmain(): forepochinrange(3): forstep,(batch_x,batch_y)inenumerate(loader): #training.... print('Epoch:',epoch,'|step:',step,'|batchx:',batch_x.numpy(), '|batchy:',batch_y.numpy()) if__name__=="__main__": main() ''' #下面这样直接运行会报错: forepochinrange(3): forstep,(batch_x,batch_y)inenumerate(loader): #training.... print('Epoch:',epoch,'|step:',step,'|batchx:',batch_x.numpy(), '|batchy:',batch_y.numpy() '''
pytorch的优点
1.PyTorch是相当简洁且高效快速的框架;2.设计追求最少的封装;3.设计符合人类思维,它让用户尽可能地专注于实现自己的想法;4.与google的Tensorflow类似,FAIR的支持足以确保PyTorch获得持续的开发更新;5.PyTorch作者亲自维护的论坛 供用户交流和求教问题6.入门简单
以上是“pytorch DataLoader的num_workers参数与设置大小的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
Pytorch中model.eval()的作用是什么
Pytorch中model.eval()的作用是什么这篇文章主要介...
-
怎么使用pytorch读取数据集
-
pytorch中的view()函数怎么使用
pytorch中的view()函数怎么使用这篇文章主要介绍了pyt...
-
PyTorch中的torch.cat怎么用
PyTorch中的torch.cat怎么用这篇文章主要介绍PyTo...
-
pytorch中的hook机制是什么
pytorch中的hook机制是什么本篇内容介绍了“pytorch...
-
pytorch中的广播语义是什么
pytorch中的广播语义是什么这篇文章主要介绍“pytorch中...
-
PyTorch梯度下降反向传播实例分析
-
python中的Pytorch建模流程是什么
python中的Pytorch建模流程是什么小编给大家分享一下py...
-
pytorch如何实现多项式回归
-
pytorch怎样实现线性回归