小坑填一下

这个讲的很棒,为了防止网站失效,先搬过来

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

  1. 每每轮到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。

  2. num_worker设置得大,好处是寻batch速度快,因为下一轮迭代的batch很可能在上一轮/上上一轮...迭代时已经加载好了。坏处是内存开销大,也加重了CPU负担(worker加载数据到RAM的进程是CPU复制的嘛)。num_workers的经验设置值是自己电脑/服务器的CPU核心数,如果CPU很强、RAM也很充足,就可以设置得更大些。

  3. 如果num_worker设为0,意味着每一轮迭代时,dataloader不再有自主加载数据到RAM这一步骤(因为没有worker了),而是在RAM中找batch,找不到时再加载相应的batch。缺点当然是速度更慢。

pytorch中num_workers详解相关推荐

  1. pytorch实战:详解查准率(Precision)、查全率(Recall)与F1

    pytorch实战:详解查准率(Precision).查全率(Recall)与F1 1.概述 本文首先介绍了机器学习分类问题的性能指标查准率(Precision).查全率(Recall)与F1度量,阐 ...

  2. 函数中{}输出格式详解(C#)

    Console.WriteLine()函数中{}输出格式详解(C#) Console.WriteLine()函数的格式一直没怎么注意.今天同事问起Console.WriteLine({0:D3},a) ...

  3. Java中CAS详解

    转载自  Java中CAS详解 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换 ...

  4. 【转】图形流水线中坐标变换详解:模型矩阵、视角矩阵、投影矩阵

    转自:图形流水线中坐标变换详解:模型矩阵.视角矩阵.投影矩阵_sherlockreal的博客-CSDN博客_视角矩阵 图形流水线中坐标变换详解:模型矩阵.视角矩阵.投影矩阵 图形流水线中坐标变换过程 ...

  5. oracle itl解析,oracle数据块dump文件中ITL详解

    oracle数据块dump文件中ITL详解 dump出Oracle block后,可以看到事物槽,包含有事物槽号(ITL),XID,UBA,FLAG,LCK,SCN. 本文主要讨论FLAG标记的规则, ...

  6. android中getSystemService详解

    原文地址:android中getSystemService详解作者:邹斌 http://blog.sina.com.cn/s/blog_71d1e4fc0100o8qr.html http://blo ...

  7. Oracle中CONCAT详解

    Oracle中CONCAT详解 1.什么是CONCAT 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写 ...

  8. Java中LinkedList详解

    Java中LinkedList详解 LinkedList底层是双向链表 单向链表 双向链表 LinkedList新增的方法 主要增加了针对头结点与尾结点进行操作的方法, 即针对第一个元素和最后一个元素 ...

  9. vue 生命周期的11中方法详解

    vue 生命周期的十一中方法详解 vue 生命周期的定义 vue实例 从创建到销毁,也就是说从创建 -> 初始化 数据-> 编译模版 -> 挂载Dom -> 渲染 更新 -&g ...

最新文章

  1. java datahandler_Java Web Services:使用DataHandler类发送文件
  2. Open3d学习计划—高级篇 4(多视角点云配准)
  3. MDX学习笔记(整理) MDX语法
  4. How web servers work?
  5. C++输入输出流进制转换
  6. JSONP的诞生、原理及应用实例
  7. 文本编辑器_国外程序员最爱的5种文本编辑器
  8. Android官方开发文档Training系列课程中文版:APP的内存管理
  9. HTML5营销代理商设计机构网站模板
  10. output的用法java_JavaI/O:简单的使用BufferedOutputStream和BufferedInputStr
  11. oracle如何读取到从n行到m行的数据_关系型数据库进阶之查询优化
  12. 32. PHP Cookies
  13. iPhone Application Programming Guide, Ch4
  14. dsp呼吸灯C语言编程,pwm呼吸灯原理及程序分享
  15. linux锐捷代码_锐捷认证 For Linux
  16. IBM ECM平台助力泰康人寿集约化经营
  17. 定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试了Test2,进行测试
  18. C++实现指针式时钟Sample
  19. NOPI导出数据,图片形成对比
  20. COMSOL中电磁场物理场接口中线圈的仿真

热门文章

  1. PyCharm界面字体放大和缩小
  2. 世界卫生组织国际癌症研究机构致癌物清单
  3. vue动态面包屑导航的使用
  4. [CISCN2019 华东南赛区]Web4
  5. 期货什么是涨跌(期货是看涨还是看跌)
  6. 数据挖掘技术的算法与应用
  7. 漏洞复现 - - - Springboot未授权访问
  8. 关于python使用pip install 安装包,Geany无法找到包的问题
  9. 如何实现微信和淘宝的扫码登录 ?
  10. 医学影像:静息态fmri数据的预处理