gpt4 book ai didi

python - PyTorch 数据加载器中的 "number of workers"参数实际上是如何工作的?

转载 作者:太空狗 更新时间:2023-10-29 21:41:22 31 4
gpt4 key购买 nike

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

最佳答案

  1. num_workers>0 时,只有这些 worker 会检索数据,主进程不会。因此,当 num_workers=2 时,您最多有 2 个工作人员同时将数据放入 RAM,而不是 3 个。
  2. 好吧,我们的 CPU 通常可以毫无问题地运行大约 100 个进程,而且这些工作进程无论如何都不是特别的,所以拥有比 cpu 内核更多的工作进程是可以的。但它有效率吗?这取决于您的 cpu 核心对于其他任务的忙碌程度、cpu 速度、硬盘速度等。简而言之,它很复杂,因此将 worker 设置为核心数量是一个很好的经验法则,仅此而已。
  3. 没有。请记住,DataLoader 不只是从 RAM 中当前可用的内容中随机返回,它使用 batch_sampler 来决定下一个要返回的批处理。每个批处理都分配给一个工作人员,主进程将等待,直到指定的工作人员检索到所需的批处理。

最后要澄清的是,DataLoader 的工作不是将任何内容直接发送到 GPU,您为此显式调用了 cuda()

编辑:不要在 Dataset__getitem__() 方法中调用 cuda(),请查看@psarka 的评论推理

关于python - PyTorch 数据加载器中的 "number of workers"参数实际上是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53998282/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com