在分布式计算中,世界大小和排名是什么?

Bra*_*roy 11 python distributed-computing python-3.x pytorch

我一直在阅读一些文档示例代码,最终目标是为分布式计算(运行 PyTorch)编写脚本,但这些概念让我感到困惑。

假设我们有一个带有 4 个 GPU 的节点,并且我们希望在这 4 个 GPU 上运行我们的脚本(即每个 GPU 一个进程)。在这种情况下,排名世界大小和排名是多少?我经常找到对世界大小的解释:工作中涉及的进程总数,所以我假设在我们的例子中是四个,但是排名呢?

为了进一步解释,另一个具有多个节点和多个 GPU 的示例也很有用。

jdh*_*hao 12

这些概念与并行计算有关。了解一些并行计算的知识会很有帮助,例如MPI

您可以将其world视为包含分布式训练的所有流程的组。通常,每个 GPU 对应一个进程。中的进程world可以相互通信,这就是为什么您可以分布式训练模型并仍然获得正确的梯度更新。所以世界大小是你训练的进程数,通常是你用于分布式训练的 GPU 数量。

Rank是赋予进程的唯一 ID,以便其他进程知道如何识别特定进程。本地等级是在单个节点中运行的进程的唯一本地 ID,这是我与@zihaozhihao 的不同观点。

让我们举一个具体的例子。假设我们在 2 个服务器或节点上运行我们的训练,每个服务器或节点都有 4 个 GPU。世界大小为 4*2=8。进程的等级将是[0, 1, 2, 3, 4, 5, 6, 7]。在每个节点中,本地排名将为[0, 1, 2, 3]

我还写了一篇关于 MPI 集合和基本概念的文章。链接在这里


zih*_*hao 7

在学习的时候torch.distributed,我也对这些术语感到困惑。以下内容基于我自己的理解和API文档,如有错误请指正。

我认为group应该首先正确理解。它可以被认为是“一组进程”或“世界”,通常一个工作对应一个组。world_size是 this 中的进程数group,也就是参与作业的进程数。rank是 中每个进程的唯一 ID group

所以在你的例子中,world_size是 4 并且rank对于进程来说是[0,1,2,3]

有时,我们也可以有local_rank参数,这意味着一个进程内的 GPU id。例如,rank=1local_rank=1,表示第二个进程中的第二个GPU。