微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我使用相同的数据加载器将数据馈送到4个模型,每个模型在单独的GPU上加载了不同的超参数。我想减少由数据加载引起的瓶颈,因此我打算在所有GPU上加载由数据加载器准备的同一批处理,以便它们分别进行计算并执行反向执行步骤。我已经将数据缓存到RAM中,以避免在实例化数据加载器时出现磁盘瓶颈。

我正在尝试:

  1. 将同一批数据发送/广播到 N 个GPU。我猜只有在我们可以同步/等待所有GPU完成一批操作之前,才有可能,然后再继续进行下一批操作。
  2. 奖励:一批准备就绪(最多P批)后,预取下一批可以帮助确保将数据连续流向GPU,从而避免了等待。

我不是要实现:

  1. Data Parallelism-将大批量分成 N 个部分,并在一个GPU上计算每个部分
  2. Model Parallelism-将大型模型(不适用于一个GPU)的计算拆分为 N 个(或更少)部分,并将每个部分放置在一个GPU上。

类似的问题:

  1. one旨在使Conv2D操作跨越多个GPU
  2. one是关于并行执行不同的GPU计算,但是我不知道我的问题是否可以用torch.cuda.Stream()解决
  3. one是关于加载不同的模型的,但是它并不涉及共享同一批次。
  4. 这个one恰好满足我的要求,但它是CUDA / PCIe以及7年前的产品。

更新:

我发现了一个非常相似的问题in Pytorch discuss,其中最后有一个使用多处理的正向道具的小例子,但是我想知道如何将这种方法扩展到火炬数据加载器上。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。