pytorch中num_workers详解
小坑填一下
这个讲的很棒,为了防止网站失效,先搬过来
https://www.cnblogs.com/hesse-summer/
Question
一直很迷,
在给Dataloader设置worker数量(num_worker
)时,到底设置多少合适?这个worker到底怎么工作的?
如果将num_worker
设为0(也是默认值),就没有worker了吗?
worker的使用场景:
from torch.utils.data import DataLoadertrain_loader = DataLoader(dataset=train_data, batch_size=train_bs, shuffle=True, num_worker=4)valid_loader = DataLoader(dataset=valid_data, batch_size=valid_bs, num_worker=4)
Answer
每每轮到dataloader加载数据时:
for epoch in range(start_epoch, end_epoch):for i, data in enumerate(trainloader):
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。num_worker
设置得大,好处是寻batch速度快,因为下一轮迭代的batch很可能在上一轮/上上一轮...迭代时已经加载好了。坏处是内存开销大,也加重了CPU负担(worker加载数据到RAM的进程是CPU复制的嘛)。num_workers
的经验设置值是自己电脑/服务器的CPU核心数,如果CPU很强、RAM也很充足,就可以设置得更大些。如果
num_worker
设为0,意味着每一轮迭代时,dataloader不再有自主加载数据到RAM这一步骤(因为没有worker了),而是在RAM中找batch,找不到时再加载相应的batch。缺点当然是速度更慢。
pytorch中num_workers详解相关推荐
- pytorch实战:详解查准率(Precision)、查全率(Recall)与F1
pytorch实战:详解查准率(Precision).查全率(Recall)与F1 1.概述 本文首先介绍了机器学习分类问题的性能指标查准率(Precision).查全率(Recall)与F1度量,阐 ...
- 函数中{}输出格式详解(C#)
Console.WriteLine()函数中{}输出格式详解(C#) Console.WriteLine()函数的格式一直没怎么注意.今天同事问起Console.WriteLine({0:D3},a) ...
- Java中CAS详解
转载自 Java中CAS详解 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换 ...
- 【转】图形流水线中坐标变换详解:模型矩阵、视角矩阵、投影矩阵
转自:图形流水线中坐标变换详解:模型矩阵.视角矩阵.投影矩阵_sherlockreal的博客-CSDN博客_视角矩阵 图形流水线中坐标变换详解:模型矩阵.视角矩阵.投影矩阵 图形流水线中坐标变换过程 ...
- oracle itl解析,oracle数据块dump文件中ITL详解
oracle数据块dump文件中ITL详解 dump出Oracle block后,可以看到事物槽,包含有事物槽号(ITL),XID,UBA,FLAG,LCK,SCN. 本文主要讨论FLAG标记的规则, ...
- android中getSystemService详解
原文地址:android中getSystemService详解作者:邹斌 http://blog.sina.com.cn/s/blog_71d1e4fc0100o8qr.html http://blo ...
- Oracle中CONCAT详解
Oracle中CONCAT详解 1.什么是CONCAT 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写 ...
- Java中LinkedList详解
Java中LinkedList详解 LinkedList底层是双向链表 单向链表 双向链表 LinkedList新增的方法 主要增加了针对头结点与尾结点进行操作的方法, 即针对第一个元素和最后一个元素 ...
- vue 生命周期的11中方法详解
vue 生命周期的十一中方法详解 vue 生命周期的定义 vue实例 从创建到销毁,也就是说从创建 -> 初始化 数据-> 编译模版 -> 挂载Dom -> 渲染 更新 -&g ...
最新文章
- java datahandler_Java Web Services:使用DataHandler类发送文件
- Open3d学习计划—高级篇 4(多视角点云配准)
- MDX学习笔记(整理) MDX语法
- How web servers work?
- C++输入输出流进制转换
- JSONP的诞生、原理及应用实例
- 文本编辑器_国外程序员最爱的5种文本编辑器
- Android官方开发文档Training系列课程中文版:APP的内存管理
- HTML5营销代理商设计机构网站模板
- output的用法java_JavaI/O:简单的使用BufferedOutputStream和BufferedInputStr
- oracle如何读取到从n行到m行的数据_关系型数据库进阶之查询优化
- 32. PHP Cookies
- iPhone Application Programming Guide, Ch4
- dsp呼吸灯C语言编程,pwm呼吸灯原理及程序分享
- linux锐捷代码_锐捷认证 For Linux
- IBM ECM平台助力泰康人寿集约化经营
- 定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试了Test2,进行测试
- C++实现指针式时钟Sample
- NOPI导出数据,图片形成对比
- COMSOL中电磁场物理场接口中线圈的仿真