mmengine.dist.gather — mmengine 0.10.7 documentation (original) (raw)

mmengine.dist.gather(data, dst=0, group=None)[source]

Gather data from the whole group to dst process.

Note

Calling gather in non-distributed environment dose nothing and just returns a list containing data itself.

Note

NCCL backend does not support gather.

Note

Unlike PyTorch torch.distributed.gather, gather() in MMEngine does not pass in an empty list gather_list and returns the gather_list directly, which is more convenient. The difference between their interfaces is as below:

Parameters:

Returns:

dst process will get a list of tensor gathering from the whole group. Other process will get a empty list. If in non-distributed environment, just return a list containingdata itself.

Return type:

list[Tensor]

Examples

import torch import mmengine.dist as dist

non-distributed environment

data = torch.arange(2, dtype=torch.int64) data tensor([0, 1]) output = dist.gather(data) output [tensor([0, 1])]

distributed environment

We have 2 process groups, 2 ranks.

data = torch.arange(2, dtype=torch.int64) + 1 + 2 * rank data tensor([1, 2]) # Rank 0 tensor([3, 4]) # Rank 1 output = dist.gather(data) output [tensor([1, 2]), tensor([3, 4])] # Rank 0 [] # Rank 1