Parallel processing Pytorch:将同一批数据发送到多个GPU,并分别在每个GPU上执行操作

Parallel processing Pytorch:将同一批数据发送到多个GPU,并分别在每个GPU上执行操作,parallel-processing,pytorch,shared-data,Parallel Processing,Pytorch,Shared Data,我有相同的数据加载器将数据提供给4个模型,每个模型在单独的GPU上加载了不同的超参数。我希望减少数据加载造成的瓶颈,因此我打算在所有GPU上加载dataloader准备的同一批数据,以便它们单独计算并执行backprop步骤。我已经将数据缓存到RAM中,以避免在实例化dataloader时出现磁盘瓶颈 我正在努力: 向N个GPU发送/广播同一批数据。我想只有当我们能够同步/等待所有GPU完成一批的ops,然后才能继续下一批的时候,这才是可能的 好处:一旦一个批次准备就绪(最多P个批次),就可以预

我有相同的数据加载器将数据提供给4个模型,每个模型在单独的GPU上加载了不同的超参数。我希望减少数据加载造成的瓶颈,因此我打算在所有GPU上加载dataloader准备的同一批数据,以便它们单独计算并执行backprop步骤。我已经将数据缓存到RAM中,以避免在实例化dataloader时出现磁盘瓶颈

我正在努力:

  • 向N个GPU发送/广播同一批数据。我想只有当我们能够同步/等待所有GPU完成一批的ops,然后才能继续下一批的时候,这才是可能的
  • 好处:一旦一个批次准备就绪(最多P个批次),就可以预取下一个批次,这有助于确保数据连续流向GPU,避免等待
  • 我不想实现:

  • -将一个大批量分成N个部分,并在一个GPU上计算每个部分
  • -将大型模型(无法安装在一个GPU上)的计算拆分为N个(或更少)部分,并将每个部分放置在一个GPU上
  • 类似问题:

  • 这是关于跨多个GPU执行Conv2D操作
  • 这是关于并行执行不同的GPU计算,但我不知道我的问题是否可以用
  • 这是关于加载不同的模型,但不涉及共享同一批
  • 这正是我要问的,但这是CUDA/PCIe和7年前的产品
  • 更新:


    我发现了一个非常类似的问题,最后有一个小例子使用多处理的forward prop,但我想知道如何将这种方法扩展到torch数据加载程序。

    如果我理解正确,我认为与其在每个GPU上运行不同的模型,更标准的方法是按顺序运行4个模型,每个模型在4个GPU上运行(这里有一个内置在Azure中的超参数调优示例:我认为后者将更容易设置,甚至可能更快。