精华内容
下载资源
问答
  • 今天小编就为大家分享一篇解决pytorch DataLoader num_workers出现的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • pytorch中Dataloader()中的num_workers设置问题: 如果num_workers的值大于0,要在运行的部分放进__main__()函数里,才不会有错: import numpy as np import torch from torch.autograd import Variable import ...

    pytorch中Dataloader()中的num_workers设置问题:

    如果num_workers的值大于0,要在运行的部分放进__main__()函数里,才不会有错:

    import numpy as np
    import torch
    from torch.autograd import Variable
    import torch.nn.functional
    import matplotlib.pyplot as plt
    import torch.utils.data as Data
    
    
    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,
    )
    
    
    def main():
        for epoch in range(3):
            for step,(batch_x,batch_y) in enumerate(loader):
                # training....
                print('Epoch:',epoch,'| step:',step,'| batch x:',batch_x.numpy(),
                      '| batch y:',batch_y.numpy())
    
    
    if __name__=="__main__":
        main()
    
    
    '''
    
    # 下面这样直接运行会报错:
    
     for epoch in range(3):
         for step,(batch_x,batch_y) in enumerate(loader):
             # training....
              print('Epoch:',epoch,'| step:',step,'| batch x:',batch_x.numpy(),
                      '| batch y:',batch_y.numpy()
    '''
    

     

    展开全文
  • 电脑有10核20线程应该怎么设置torch.utils.data.DataLoader 中 num_workers使得我数据加载最快? 首先来搞定定义:概念核心数与线程数 核心数与线程数 核心:一个CPU具有的物理核心数(物理概念) 线程:是CPU调度和...

    电脑有10核20线程应该怎么设置torch.utils.data.DataLoader 中 num_workers使得我数据加载最快?

    官方指导

    pytorch 官方解释为子进程(subprocesses)的数量

    num_workers (int, optional) – how many subprocesses to use for data loading. 0 means that the data will be loaded in the main process. (default: 0)

    参考
    这里我们就需要搞定几个定义:核心数,线程数和进程

    核心数,线程数和进程

    核心:一个CPU具有的物理核心数(物理概念)
    线程(thread):是CPU调度和分配的基本单位(逻辑概念)。
    一个计算机可以并发(同时)的线程数,等于计算机上的逻辑处理器的个数(CPU个数 *每个CPU核心数 *每个内核线程数)
    进程(process):是操作系统(OS)进行资源(CPU、内存、磁盘、IO、带宽等)分配的最小单位;

    进程和线程的关系

    另一个博客中的介绍:

    进程可以简单理解为一个容器,有自己独立的地址空间,其内部的各个线程共享该地址空间。
    其实严格讲应该是线程能够获得CPU资源,进程对CPU资源的获取也是体现在线程上的。至于CPU内核数,和进程线程没直接关系。操作系统(OS)可以把某个进程部署在某个CPU核上,当然这要取决于系统设计。
    线程是CPU调度和分配的最小单位,操作系统会根据进程的优先级和线程的优先级去调度CPU。一个计算机可以并发(同时)的线程数,等于计算机上的逻辑处理器的个数(CPU个数 *每个CPU核心数 *每个内核线程数)。
    进程、线程是操作系统调度的,进程本身不会负责调度线程。在操作系统看来,线程和进程其实差不多,不同点是线程是迷你的进程,并且进程可以包含多个线程

    详细参考

    简而言之,就是一个进程可以调用多个线程,那num_workers中一个子进程需要多少个线程呢?就不太清楚了,但是可以确定的是能输入的参数一定事小于等于CPU的总线程数20.

    试验

    试验过程中将num_workers设置不同的数值,处理一个batch的时间

    num_workersDuration of one batch
    086
    421
    818
    1017
    2017

    大家品出规律了吗?
    个人推测,一个进程至少需要的线程数并不是确定的,程序可以根据本地硬件的情况自适应的调整调用的线程数。在CPU线程数足够的情况下,可以设置num_workers=四分之一到半线程数,CPU的利用率最高。

    展开全文
  • pytorch中DataLoader的num_workers参数详解与设置大小建议

    千次阅读 多人点赞 2021-04-04 11:50:26
    Q:在给Dataloader设置worker数量(num_worker)时,到底设置多少合适?这个worker到底怎么工作的? train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True,

    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。缺点当然是速度更慢。

    设置大小建议:

    Dataloader的num_worker设置多少才合适,这个问题是很难有一个推荐的值。有以下几个建议:

    1. num_workers=0表示只有主进程去加载batch数据,这个可能会是一个瓶颈。
    2. num_workers = 1表示只有一个worker进程用来加载batch数据,而主进程是不参与数据加载的。这样速度也会很慢。
    3. num_workers>0 表示只有指定数量的worker进程去加载数据,主进程不参与。增加num_works也同时会增加cpu内存的消耗。所以num_workers的值依赖于 batch size和机器性能。
    4. 一般开始是将num_workers设置为等于计算机上的CPU数量
    5. 最好的办法是缓慢增加num_workers,直到训练速度不再提高,就停止增加num_workers的值。

    参数文章:

    1、pytorch中dataloader的num_workers设置 - 康昇的博客 | techkang Blogicon-default.png?t=L9C2https://kangsheng.xyz/2020/07/14/pytorch%E4%B8%ADdataloader%E7%9A%84num_workers%E8%AE%BE%E7%BD%AE/2、【Q&A】pytorch中的worker如何工作的 - 小塞 - 博客园

    展开全文
  • 如果设置num_workers为其他任何一个大于0的整数,也就是使用子进程读取数据时,训练程序会卡住,卡在训练之前,GPU使用率和显存占用率都为0。 解决过程: 由于是多进程就,用print调试大法,定位到是一行opencv...

    问题描述:

    最近在用RFBnet (源码是pytorch的)训练RSNA的比赛数据,除了要修改一点代码支持RSNA的数据集外(打算后续再写个博客),发现在使用dataloader读取数据时,如果设置num_workers为0,也就是用主进程读取数据,模型训练程序运行正常。如果设置num_workers为其他任何一个大于0的整数,也就是使用子进程读取数据时,训练程序会卡住,卡在训练之前,GPU使用率和显存占用率都为0。

     

    解决过程:

    由于是多进程就,用print调试大法,定位到是一行opencv代码的问题,在dataloader子类的__getitem__方法里面调用了

    image_array = cv2.cvtColor(image_array, cv2.COLOR_GRAY2BGR)

    所有子进程的代码都卡在这里了。之前也有遇到过类似的问题,python多进程调用opencv的代码会出现问题。于是就用numpy的concate替代了这个方法

    image_array = np.concatenate([image_array,image_array,image_array],axis=2)

    绕过这个问题就可以正常训练了。

     

    问题探索:

    其实这个问题,我在另外一台机器上是没有遇到了,该机器是python3.6+opencv3.4.2

    遇到问题的环境是docker环境,python3.5+opencv3.2

    我感觉跟opencv的版本可能有关系,等后续训练完成之后把docker里面opencv的版本升级到3.4.2再试一下

    展开全文
  • PyTorch——num_workers参数的设置

    万次阅读 2019-12-03 13:33:24
    在使用DataLoader载入数据时,我们需要对num_workers这个参数进行设置,那么设置成多少比较好呢; 2 DataLoader中num_workers参数的设置 我个人觉得按照CPU的线程数来设置比较好,因为感觉数据载入是一个跟IO读取...
  • 但是在训练的时候遇到了一个问题:每隔num_workers个iteration数据加载都很慢,通过查找资料和代码搞清了这个问题。 背景   设计了一个网络做目标检测,骨干网络是自己diy的因此没有pretrain的模型。而目标检测的...
  • Dataloader中的num_workers设置与docker的shared memory相关问题错误一错误二产生错误的原因解决办法功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个...
  • 1.问题分析 torch.utils.data.DataLoader(image_datasets[x], batch_size=batch_size, shuffle=True, num_workers=NUM_WORKERS, pin_memory=True) 在Pytorch中
  • 占GPU显存的主要是两部分,一是模型网络的加载,而是batch_size大小的设置。模型的加载很难控制(但是考虑到部署的话就要考虑模型加载需要的显存问题了),一般调节batch_size来控制显存的占用(若出现out
  • pytorch DataLoader num_workers 出现的问题

    万次阅读 多人点赞 2018-07-03 10:17:18
    最近在学pytorch,在使用数据分批训练时在导入数据是使用了 DataLoader 在参数num_workers设置上使程序出现运行没有任何响应的结果 ,看看代码 import torch #导入模块 import torch.utils.data as Data BATCH_...
  • nprocs=self.num_processes, args=(model,)) File "/home/vincent/anaconda3/lib/python3.7/site-packages/torch/multiprocessing/spawn.py", line 171, in spawn while not spawn_context.join(): File "/home/...
  • windows num_workers

    2021-09-06 20:29:56
    就是num_workers设置问题,设置为1,cpu那个线程压力太大,所以设置为大点!! 还有一个问题 RuntimeError: CUDA error: an illegal memory access was encountered 这个错误解决 这样来。用了torch....
  • 前段时间,我在调整yolo系列代码的时候,运行代码后,会提示 win页面太小问题,这种问题的解决办法之一就是通过调整 DataLoader的num_workers值的大小来解决,为了进一步了解num_workers到底起了什么作用,这里我查...
  • 测试程序时发现,当DataLoader函数中加载数据时线程数设定大于0时,程序会卡住,但当设定线程数为1(num_workers=0即将用主进程加载数据)时,程序能正常运行,但由于仅单线程的加载致使神经网络在训练时会花将近...
  • Pytorch 初学 ———num_workers问题 运行环境 配置一 cpu:AMD 5600x 内存:32G 硬盘:pm981a pytorch:1.8 CPU版本 系统:windows 10 配置二 cpu:i7 10700k 内存:32G 硬盘:固态(型号未知) pytorch:1.8 GPU版本...
  • Pytorch中num_workers详解

    万次阅读 多人点赞 2020-07-21 10:53:06
    一直很迷,在给Dataloader设置worker数量(num_worker)时,到底设置多少合适?这个worker到底怎么工作的?如果将num_worker设为0(也是默认值),就没有worker了吗? worker的使用场景: from torch.utils.data ...
  • batch total, mean, std, max, min 7.148, 0.893, 0.074, 1.009, 0.726 可见,一共是1000个文件,batch size 128,也就是8个batch,总共耗时7.1s,接下来清除cache, 3、设置num_workers为4 每隔4个batch,要准备4个...
  • 结论速递 在Windows系统中,num_workers参数建议设为0,在Linux系统则不需担心。 1 问题描述 ...有warning message,提示num_workers参数设置不合理,不影响继续运行 /usr/local/lib/python3.7/di
  • pytorch中num_workers详解

    万次阅读 多人点赞 2020-01-15 17:06:02
    一直很迷,在给Dataloader设置worker数量(num_worker)时,到底设置多少合适?这个worker到底怎么工作的?如果将num_worker设为0(也是默认值),就没有worker了吗? worker的使用场景: fro...
  • num_workers的理解

    2020-05-17 22:24:42
    指用来加载数据的子进程。默认值是0,意味只用主进程加载数据。在我实验过程中似乎 1与2 作用一样。越大意味着寻找batch速度越快。
  • PyTorch DataLoader num_workers Test - 加快速度 欢迎来到本期神经网络编程系列。在本集中,我们将看到如何利用...默认情况下,num_workers值被设置为0,0值代表告诉加载器在主进程内部加载数据。 这意味着训练进
  • Testing Values For The num_workers Attribute 要设置此测试,我们将创建一个num_workers值列表以进行尝试。 我们将尝试以下值: 0(默认) 1 2 4 8 16 对于这些值中的每一个,我们将通过尝试以下值来更改批量大小...
  • pytorch中的num_workers和pin_memory

    千次阅读 2019-10-14 16:10:28
    1.dataset:加载的数据集(Dataset对象) ...5.num_workers:使用多进程加载的进程数,0代表不使用多进程 6.collate_fn: 如何将多个样本数据拼接成一个batch,一般使用默认的拼接方式即可 7.pin_...
  • pytorch data.DataLoader 中num_workers的问题

    千次阅读 2020-02-15 12:57:50
    我遇见的问题是: 是num_worker的问题,将 ** num_workers改为0就可以了** 不知道是不是版本的问题,我的是win10+3.7

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,537
精华内容 8,614
关键字:

num_workers如何设置