Функция distributed.get_process_group_ranks
Функция distributed.get_process_group_ranks возвращает список рангов всех процессов,
входящих в указанную группу. Эта функция полезна для получения информации о всех участниках
группы, с которой работает текущий процесс. Функция принимает объект группы и возвращает
список целых чисел, соответствующих рангам процессов в этой группе. Порядок рангов в списке
соответствует порядку процессов при создании группы.
Синтаксис
torch.distributed.get_process_group_ranks(group)
Параметры функции:
group (ProcessGroup) - объект группы процессов, полученный через new_group
или distributed.group.WORLD для глобальной группы.
Возвращаемое значение: список Python int с рангами всех процессов в группе.
Пример
Давайте получим ранги всех процессов в глобальной группе (WORLD):
import torch
import torch.distributed as dist
# Инициализация группы процессов (обычно делается при запуске)
dist.init_process_group(backend='gloo')
# Получаем список рангов всех процессов в глобальной группе
ranks = dist.get_process_group_ranks(dist.group.WORLD)
print(f"Ranks in global group: {ranks}")
Результат выполнения кода (пример для 4 процессов):
"Ranks in global group: [0, 1, 2, 3]"
Пример
Давайте создадим подгруппу из процессов с рангами 0 и 2 и получим ранги внутри этой подгруппы:
import torch
import torch.distributed as dist
dist.init_process_group(backend='gloo')
# Создаем подгруппу из процессов с рангами 0 и 2
ranks_to_include = [0, 2]
subgroup = dist.new_group(ranks=ranks_to_include)
# Получаем ранги процессов в созданной подгруппе
if dist.get_rank() in ranks_to_include:
sub_ranks = dist.get_process_group_ranks(subgroup)
print(f"Ranks in subgroup: {sub_ranks}")
Результат выполнения кода для процесса с рангом 0 (или 2):
"Ranks in subgroup: [0, 2]"
Пример
Давайте используем полученный список рангов для выполнения операций с каждым процессом в группе:
import torch
import torch.distributed as dist
dist.init_process_group(backend='gloo')
# Создаем группу из двух процессов: 0 и 1
group = dist.new_group(ranks=[0, 1])
# Получаем список рангов группы
group_ranks = dist.get_process_group_ranks(group)
current_rank = dist.get_rank()
# Проверяем, входит ли текущий процесс в группу
if current_rank in group_ranks:
print(f"Process {current_rank} is in group: {group_ranks}")
# Выполняем операцию для всех процессов группы
if current_rank == group_ranks[0]:
print(f"Process {current_rank} is the first in group")
Результат выполнения кода для процессов 0 и 1:
"Process 0 is in group: [0, 1]"
"Process 0 is the first in group"
"Process 1 is in group: [0, 1]"
Смотрите также
-
функцию
get_rank,
которая возвращает ранг текущего процесса в заданной группе -
функцию
get_world_size,
которая возвращает общее количество процессов в группе -
функцию
get_group_rank,
которая возвращает ранг процесса в группе по его глобальному рангу -
функцию
new_group,
которая создает новую группу процессов из указанных рангов