问题描述
我使用相同的数据加载器将数据馈送到4个模型,每个模型在单独的GPU上加载了不同的超参数。我想减少由数据加载引起的瓶颈,因此我打算在所有GPU上加载由数据加载器准备的同一批处理,以便它们分别进行计算并执行反向执行步骤。我已经将数据缓存到RAM中,以避免在实例化数据加载器时出现磁盘瓶颈。
我正在尝试:
- 将同一批数据发送/广播到 N 个GPU。我猜只有在我们可以同步/等待所有GPU完成一批操作之前,才有可能,然后再继续进行下一批操作。
- 奖励:一批准备就绪(最多P批)后,预取下一批可以帮助确保将数据连续流向GPU,从而避免了等待。
我不是要实现:
- Data Parallelism-将大批量分成 N 个部分,并在一个GPU上计算每个部分
- Model Parallelism-将大型模型(不适用于一个GPU)的计算拆分为 N 个(或更少)部分,并将每个部分放置在一个GPU上。
类似的问题:
- 此one旨在使Conv2D操作跨越多个GPU
- 这one是关于并行执行不同的GPU计算,但是我不知道我的问题是否可以用torch.cuda.Stream()来解决
- 此one是关于加载不同的模型的,但是它并不涉及共享同一批次。
- 这个one恰好满足我的要求,但它是CUDA / PCIe以及7年前的产品。
更新:
我发现了一个非常相似的问题in Pytorch discuss,其中最后有一个使用多处理的正向道具的小例子,但是我想知道如何将这种方法扩展到火炬数据加载器上。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)