Python Pytork分布式数据是否与不同的GPU速度同步权重?

Python Pytork分布式数据是否与不同的GPU速度同步权重?,python,pytorch,distributed-computing,Python,Pytorch,Distributed Computing,在下面的场景中,有2个GPU,每个GPU的速度明显不同:GPU0比GPU1快约40%。我想对模型进行100k步的训练,通常,如果速度相同,将在相当于50k步的时间内达到 但是,由于GPU的速度不同,当GPU0达到50K步数时,GPU1仅达到30K步数。有效地,该模型已经训练了80k步 实际上,PyTorch的分布式数据会与不同速度的GPU并行工作吗?目前,脚本[A]的运行使得GPU0以其原始速度运行,而无需等待GPU1,因此我想知道任何同步都将如何工作。我在同一个步骤中在每个GPU中打印了模型的

在下面的场景中,有2个GPU,每个GPU的速度明显不同:GPU0比GPU1快约40%。我想对模型进行100k步的训练,通常,如果速度相同,将在相当于50k步的时间内达到

但是,由于GPU的速度不同,当GPU0达到50K步数时,GPU1仅达到30K步数。有效地,该模型已经训练了80k步

实际上,PyTorch的分布式数据会与不同速度的GPU并行工作吗?目前,脚本[A]的运行使得GPU0以其原始速度运行,而无需等待GPU1,因此我想知道任何同步都将如何工作。我在同一个步骤中在每个GPU中打印了模型的参数,它们确实有很大的不同。如果是,同步在哪里工作

在DDP的原始源代码[B]中,似乎在模型的每次向前传递之前都进行了同步。但我不知道为什么在这种情况下,每个GPU中的参数之和会偏离总值的1-2%左右

获取参数值的函数如下所示:

def get_params_sum(net):
    total = 0
    for param in net.parameters():
        total = total + torch.sum(param)

    return total
有没有一种方法可以让GPU0在完成后自动接管GPU1的一些“剩余”训练

[A] 可以在此处找到正在运行的脚本:


[B]

由于DDP在每一步都会完全同步梯度,因此速度较快的GPU0应始终等待速度较慢的GPU1

同步发生在后退一步——allreduce渐变


DDP不是为在异构环境中运行而设计的。你可以考虑将输入除以两个GPU的计算功率,以及

< P>因为DDP在每一步完全同步梯度,较快的GPU0应该总是等待较慢的GPU1。 同步发生在后退一步——allreduce渐变

DDP不是为在异构环境中运行而设计的。您可以考虑将输入除以两个GPU的计算功率,以及