首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多个GPU和每个批处理的数据上运行多个派生进程的输入以相同的顺序获得输出?

如何在多个GPU和每个批处理的数据上运行多个派生进程的输入以相同的顺序获得输出?
EN

Stack Overflow用户
提问于 2021-09-28 20:20:35
回答 1查看 63关注 0票数 0

我使用Pytorch分布式数据并行方法,并生成多个进程,每个进程运行在不同的GPU.I上。我使用Pytorch分布式数据采样器和数据加载器将批量输入数据加载到每个进程。我的问题:

  1. 下的引擎,是如何分配数据采样器的,数据加载器是如何制作输入数据的切片的?为了简单起见,假设我们有4个GPU,以及400个输入样本,批次大小为50,那么Pytorch分布式数据采样器(连同数据加载器)是否会使前50个样本转到GPU-0,下50个到GPU -1,下一个50到GPU-2,然后再到GPU-3,然后再再是50到GPU-0,即按GPU设备数量的顺序?还是GPU的顺序来随机选择下一批输入是基于哪个GPU完成了以前的第一批?或者说,先将400个样本分成4部分,然后GPU-0将得到输入数据的前100个样本(每次50个),GPU-1将得到下100个样本(每次50个),因此在这种情况下,on..and -3的第二批启动时间比GPU-0提前,但对于输入数据,GPU-0仍然有前100个样本,GPU-3将有最后100个

2)。我的第二个问题是如何以与输入数据相同的顺序检索输出数据,以便最终的合并输出(将来自所有进程的输出组合在一个数据结构中)与原始输入的顺序相同,并且每个输出对应于正确的输入。

EN

回答 1

Stack Overflow用户

发布于 2021-09-28 21:00:45

  1. 关于DistributedSampler的PyTorch文档没有提供任何关于数据如何在进程和设备之间分布的保证,除了它实际上是跨进程和设备分布的事实之外。您不应该将您的应用程序设计成依赖于外部包的实现细节;否则,您的应用程序可能在更新PyTorch后的某一天突然失败,您将不知道原因(或者可能它一开始就失败了)。如果由于某种原因,您绝对需要以非常特定的方式分发数据,那么您应该推出自己的解决方案。The documentation for DistributedDataParallel建议,如果您使用的是一个带有N个GPU的主机,则应该拆分N个进程,每个进程指定一个GPU。一个简单的解决方案是将进程的级别设置为指定的GPU设备ID;这可以反过来在自定义取样器类中使用,以选择适当的样本索引。
  2. 您可以尝试控制各种分布式进程返回输出的顺序,但这会引入不必要的同步,这将大大降低并行化的目的。一个更好的解决方案是简单地返回任意顺序的输出,然后在事实之后对它们进行排序。如果希望将输出按与输入相同的顺序排序,则只需将每个输入与整数索引相关联(输入0获取索引0,输入1获取索引1,等等)。当返回输出时,还返回相关输入的索引(例如,作为元组)。之后,您只需按其相应的索引对输出进行排序。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69368042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档