代码之家  ›  专栏  ›  技术社区  ›  floyd

PyTorch的员工数量实际上是如何工作的?

  •  3
  • floyd  · 技术社区  · 6 年前

    1如果 num_workers 是2,这是否意味着它将在RAM中放入2个批次,并将其中1个批次发送给GPU,或者它将3个批次放入RAM,然后将其中1个批次发送给GPU?
    2-当工作人员的数量高于CPU核心的数量时,实际会发生什么?我试过了,效果很好,但它是如何工作的?(我认为我可以选择的最大工人数量是核心数量)
    3 -如果我设置 数字工作者 到3,在培训期间,GPU内存中没有批次,主进程是等待其工作人员读取批次,还是读取单个批次(不等待工作人员)?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Shihab Shahriar Khan    6 年前
    1. 什么时候? num_workers>0 ,只有这些工作人员将检索数据,主进程将不检索数据。因此,当 num_workers=2 您最多有2个工人同时将数据放入RAM,而不是3个。
    2. 我们的CPU通常可以像100个进程一样运行,而这些工作进程在任何情况下都不是特别的,所以拥有比CPU核心更多的工作进程是可以的。但是它是有效的吗?这取决于你的CPU核心在其他任务上有多忙,CPU的速度,硬盘的速度等等。总之,这很复杂,所以将工作人员设置为核心的数量就像一个好的经验法则,而不是别的。
    3. 不。记得 DataLoader 不是随机返回RAM中的可用内容,而是使用 batch_sampler 决定下一批返回哪个批次。每个批次都分配给一个工人,主进程将等待,直到所分配的工人检索到所需的批次。

    最后要澄清的是,这不是 数据阅读器 如果要直接向GPU发送任何内容,则显式调用 cuda() 或者修改 Dataset __getitem__() 方法。