在分布式计算中,world size 和 rank 是多少?
In distributed computing, what are world size and rank?
我通读了 some documentation and example code,最终目标是为分布式计算编写脚本(运行宁 PyTorch),但这些概念让我感到困惑。
假设我们有一个带有 4 个 GPU 的节点,我们希望 运行 在这 4 个 GPU 上运行我们的脚本(即每个 GPU 一个进程)。在这种情况下,rank world size 和 rank 是多少?我经常找到对世界大小的解释:作业中涉及的进程总数,所以我假设在我们的例子中是四个,但是排名呢?
为了进一步解释,另一个具有多个节点和多个 GPU 的示例也很有用。
我在学习torch.distributed
的时候,也被那些名词搞糊涂了。以下是根据我自己的理解和API文档,如有错误请指正。
我觉得group
首先应该理解正确。可以认为是"group of processes"或"world",通常一个job对应一个group。 world_size
是这个group
中的进程数,也就是参与job的进程数。 rank
是 group
.
中每个进程的唯一 ID
因此在您的示例中,world_size
是 4,进程的 rank
是 [0,1,2,3]
。
有时,我们也可以有local_rank
参数,它表示一个进程中的GPU id。例如rank=1
和local_rank=1
,表示第二个进程中的第二个GPU。
这些概念与并行计算有关。了解一些有关并行计算的知识会很有帮助,例如 MPI.
您可以将 world
视为包含分布式训练的所有过程的组。通常,每个 GPU 对应一个进程。 world
中的进程可以相互通信,这就是为什么你可以分布式训练你的模型并仍然获得正确的梯度更新。所以 world size 就是你训练的进程数,通常是你用于分布式训练的 GPU 数。
Rank
是给一个进程唯一的ID,让其他进程知道如何识别某个特定的进程。 Local rank是单个节点运行ning进程的唯一本地ID,这是我和@zihaozhihao的观点不同的地方。
举个具体的例子吧。假设我们 运行 在 2 个服务器或节点中进行训练,每个服务器或节点有 4 个 GPU。世界大小为4*2=8。进程的排名将为 [0, 1, 2, 3, 4, 5, 6, 7]
。在每个节点中,本地排名将为 [0, 1, 2, 3]
.
我还写了一篇关于 MPI 集合体和基本概念的 post。 link 是 here.
我通读了 some documentation and example code,最终目标是为分布式计算编写脚本(运行宁 PyTorch),但这些概念让我感到困惑。
假设我们有一个带有 4 个 GPU 的节点,我们希望 运行 在这 4 个 GPU 上运行我们的脚本(即每个 GPU 一个进程)。在这种情况下,rank world size 和 rank 是多少?我经常找到对世界大小的解释:作业中涉及的进程总数,所以我假设在我们的例子中是四个,但是排名呢?
为了进一步解释,另一个具有多个节点和多个 GPU 的示例也很有用。
我在学习torch.distributed
的时候,也被那些名词搞糊涂了。以下是根据我自己的理解和API文档,如有错误请指正。
我觉得group
首先应该理解正确。可以认为是"group of processes"或"world",通常一个job对应一个group。 world_size
是这个group
中的进程数,也就是参与job的进程数。 rank
是 group
.
因此在您的示例中,world_size
是 4,进程的 rank
是 [0,1,2,3]
。
有时,我们也可以有local_rank
参数,它表示一个进程中的GPU id。例如rank=1
和local_rank=1
,表示第二个进程中的第二个GPU。
这些概念与并行计算有关。了解一些有关并行计算的知识会很有帮助,例如 MPI.
您可以将 world
视为包含分布式训练的所有过程的组。通常,每个 GPU 对应一个进程。 world
中的进程可以相互通信,这就是为什么你可以分布式训练你的模型并仍然获得正确的梯度更新。所以 world size 就是你训练的进程数,通常是你用于分布式训练的 GPU 数。
Rank
是给一个进程唯一的ID,让其他进程知道如何识别某个特定的进程。 Local rank是单个节点运行ning进程的唯一本地ID,这是我和@zihaozhihao的观点不同的地方。
举个具体的例子吧。假设我们 运行 在 2 个服务器或节点中进行训练,每个服务器或节点有 4 个 GPU。世界大小为4*2=8。进程的排名将为 [0, 1, 2, 3, 4, 5, 6, 7]
。在每个节点中,本地排名将为 [0, 1, 2, 3]
.
我还写了一篇关于 MPI 集合体和基本概念的 post。 link 是 here.