我有相同的数据加载器来向 4 个模型提供数据,每个模型都在单独的 GPU 上加载不同的超参数。我想减少数据加载造成的瓶颈,所以我打算在所有 GPU 上加载由数据加载器准备的同一批,以便它们单独计算并执行反向传播步骤。我已经将数据缓存到 RAM 中以避免在实例化数据加载器时出现磁盘瓶颈。
我在尝试着:
- 将同一批数据发送/广播到N个GPU。我想这只有在我们可以同步/等待所有 GPU 完成一个批次的操作,然后才能继续下一个的情况下才有可能。
- 奖励:一旦一个批次准备好(最多 P 个批次)就预取下一个批次可以帮助确保数据连续流向 GPU,避免等待。
我不想达到:
类似的问题:
- 这个是关于跨多个 GPU 进行 Conv2D 操作
- 这个是关于并行执行不同的 GPU 计算,但我不知道我的问题是否可以用torch.cuda.Stream()解决
- 这个是关于加载不同的模型,但它不处理共享同一个批次。
- 这正是我要问的,但它是 CUDA/PCIe 和 7 年前的。
更新:
我在 Pytorch中发现了一个非常相似的问题,讨论最后有一个使用多处理的正向道具的小例子,但我想知道如何将这种方法扩展到火炬数据加载器。