num_workers是Dataloader的概念,默认值是0. 是告诉DataLoader实例要使用多少个子进程进行数据加载(和CPU有关,和GPU无关)

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

当num_worker不为0时,每轮到dataloader加载数据时,dataloader一次性创建num_worker个worker,并用batch_sampler将指定batch分配给指定worker,worker将它负责的batch加载进RAM。

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

num_worker小了的情况,主进程采集完最后一个worker的batch。此时需要回去采集第一个worker产生的第二个batch。如果该worker此时没有采集完,主线程会卡在这里等。(这种情况出现在,num_works数量少或者batchsize 比较小,显卡很快就计算完了,CPU对GPU供不应求。)

即,num_workers的值和模型训练快慢有关,和训练出的模型的performance无关

Detectron2的num_workers默认是4

选择最合适的num_workers值

最合适的num_works值与数据集有关

最好是跑代码之前先用这段script跑一下,选择最合适的num_workers值

from time import time
import multiprocessing as mp
import torch
import torchvision
from torchvision import transformstransform = transforms.Compose([torchvision.transforms.ToTensor(),torchvision.transforms.Normalize((0.1307,), (0.3081,))
])trainset = torchvision.datasets.MNIST(root='dataset/',train=True,  #如果为True,从 training.pt 创建数据,否则从 test.pt 创建数据。download=True, #如果为true,则从 Internet 下载数据集并将其放在根目录中。 如果已下载数据集,则不会再次下载。transform=transform
)print(f"num of CPU: {mp.cpu_count()}")
for num_workers in range(2, mp.cpu_count(), 2):  train_loader = torch.utils.data.DataLoader(trainset, shuffle=True, num_workers=num_workers, batch_size=64, pin_memory=True)start = time()for epoch in range(1, 3):for i, data in enumerate(train_loader, 0):passend = time()print("Finish with:{} second, num_workers={}".format(end - start, num_workers))

可以看到,这个服务器24个CPU, 最合适的num_workers值是14

Pytorch dataloader中的num_workers (选择最合适的num_workers值)相关推荐

  1. pytorch中Dataloader()中的num_workers设置问题

    pytorch中Dataloader()中的num_workers设置问题: 如果num_workers的值大于0,要在运行的部分放进__main__()函数里,才不会有错: import numpy ...

  2. PyTorch训练中Dataset多线程加载数据,比Dataloader里设置多个workers还要快

    PyTorch训练中Dataset多线程加载数据,而不是在DataLoader 背景与需求 现在做深度学习的越来越多人都有用PyTorch,他容易上手,而且API相对TF友好的不要太多.今天就给大家带 ...

  3. 【PyTorch训练中Dataset多线程加载数据,比Dataloader里设置多个workers还要快】

    文章目录 一.引言 二.背景与需求 三.方法的实现 四.代码与数据测试 五.测试结果 5.1.Max elapse 5.2.Multi Load Max elapse 5.3.Min elapse 5 ...

  4. [PyTorch]——DataLoader Num_workers

    前段时间,我在调整yolo系列代码的时候,运行代码后,会提示 win页面太小问题,这种问题的解决办法之一就是通过调整 DataLoader的num_workers值的大小来解决,为了进一步了解num_ ...

  5. torch Dataloader中的num_workers

    参考 torch Dataloader中的num_workers - 云+社区 - 腾讯云 考虑这么一个场景,有海量txt文件,一个个batch读进来,测试一下torch DataLoader的效率如 ...

  6. 在实际项目中,如何选择合适的机器学习模型?

    https://blog.csdn.net/gitchat/article/details/78913235 本文来自作者 chen_h 在 GitChat 上分享 「在实际项目中,如何选择合适的机器 ...

  7. Py之scikit-learn:机器学习sklearn库的简介、六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类)、安装、使用方法(实际问题中如何选择最合适的机器学习算法)之详细攻略

    Py之scikit-learn:机器学习sklearn库的简介(组件/版本迭代).六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类).安装.使用方法(实际问题中如何选择最合适的机器学 ...

  8. mysql中辅导方式选择_MYSQL中如何选择合适的数据类型

    数值,典型代表为 tinyint,int,bigint 浮点/定点,典型代表为 float,double,decimal 以及相关的同义词 字符串,典型代表为 char,varchar 时间日期,典型 ...

  9. Pytorch.Dataloader 详细深度解读和微修改源代码心得

    关于pytorch 的dataloader库,使用pytorch 基本都会用到的一个库 今天遇到了一个问题,我在训练的时候,采用batch_size =2 去训练,最终的loss抖动太大了,看得出来应 ...

最新文章

  1. 在任天堂Switch上倒贴30块钱“加班”,我一个程序员还觉得很刺激
  2. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取要注入事件的 View 对象 | 通过反射获取 View 组件的事件设置方法 )
  3. Python小游戏(消消乐)
  4. 京东AI研究院何晓冬:将先进的技术和模型落地到产业
  5. sublime text3 使用SVN插件
  6. 输入一字符串,统计其中有多少个单词(单词之间用空格分隔)(java)
  7. 【Flask模板】include标签
  8. MySQL ALTER TABLE报错Duplicate entry 'xxx' for key 'PRIMARY'解决方法
  9. Oracle静态数据字典
  10. 利用 Web Share API 将网页分享到 App(下)
  11. Kali Linux 安装网易云音乐打不开的解决方法
  12. mysql 5.6 msvcr100_mysql 5.6.46 安装到winserver2012(x64) 遇到 MSVCR100.dll is missing
  13. errors potentially fixable with the `--fix` option报错的解决
  14. Java 高并发之魂
  15. icepdf 将pdf转换为图片
  16. 计算机网络口诀,网线水晶头接法顺序图解分享,这个简单口诀记好了(超实用)...
  17. 手写简易java消息队列
  18. HTML+CSS大作业:购物商城网页设计与实现——手机主题网站
  19. 设备管理器的蓝牙设备卸载了,找不到蓝牙
  20. OBS美颜滤镜插件,美白、瘦脸....

热门文章

  1. dbpedia知识图谱java_一种基于DBpedia的水务领域概念知识图谱构建方法与流程
  2. Android开发之那些好用的数据结构与API(二)
  3. 现代计算机体系结构发明人,cpu的发明人是谁啊?
  4. 宁波大学计算机非全,宁波大学考研:全日制和非全日制的6大区别,很多人不知道...
  5. JavaScript Dom编程艺术学习笔记(第4章)
  6. PT_基本概率公式(减法/加法/乘法/除法(条件概率)/全概率/贝叶斯)@条件概率链式法则@乘法法则
  7. springframework(九)AOP的advices,中规中矩的使用方式
  8. 服装店铺装修有哪些窍门?做好这3点,顾客主动上门
  9. 我的人生就是一次次世界杯串起来的
  10. [附源码]计算机毕业设计JAVA中学学生学籍管理