РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
745 of 769 menu

Функция destroy_process_group

Функция distributed.destroy_process_group завершает работу распределенной группы процессов, созданной с помощью init_process_group. Она освобождает ресурсы, связанные с группой процессов, закрывает сетевые соединения и очищает внутреннее состояние PyTorch. Если группа не была инициализирована, вызов функции не приводит к ошибке. Первым параметром можно указать конкретную группу для завершения, вторым - таймаут ожидания завершения операций.

Синтаксис

torch.distributed.destroy_process_group([group])

Параметры

Функция принимает следующие параметры:

  • group (необязательный) - группа процессов, которая будет завершена. Если параметр не указан, завершается текущая группа по умолчанию (default group).

Пример

Давайте инициализируем распределенную группу на одном процессе (для тестирования) и затем завершим её работу:

import torch import torch.distributed as dist # Инициализация группы для одного процесса dist.init_process_group( backend='gloo', world_size=1, rank=0 ) print(f"Группа инициализирована: {dist.is_initialized()}") # Завершение работы группы dist.destroy_process_group() print(f"Группа завершена: {dist.is_initialized()}")

Результат выполнения кода:

"Группа инициализирована: True" "Группа завершена: False"

Мы инициализируем группу, проверяем её статус через is_initialized, затем завершаем работу группы и снова проверяем статус. После вызова destroy_process_group группа становится неинициализированной.

Пример

Давайте создадим несколько групп и завершим только одну конкретную группу:

import torch import torch.distributed as dist # Инициализация основной группы dist.init_process_group( backend='gloo', world_size=1, rank=0 ) # Создание дополнительной группы new_group = dist.new_group([0]) print(f"Основная группа инициализирована: {dist.is_initialized()}") # Завершаем только дополнительную группу dist.destroy_process_group(new_group) # Основная группа всё ещё активна print(f"Основная группа активна: {dist.is_initialized()}")

Результат выполнения кода:

"Основная группа инициализирована: True" "Основная группа активна: True"

Мы создаём две группы: основную и дополнительную. Затем завершаем только дополнительную группу. Основная группа продолжает существовать, что проверяется через is_initialized.

Пример

Давайте выполним коллективную операцию до и после завершения группы:

import torch import torch.distributed as dist # Инициализация группы для одного процесса dist.init_process_group( backend='gloo', world_size=1, rank=0 ) t = torch.tensor([1, 2, 3, 4, 5]) print(f"До завершения: {t}") # Выполняем операцию all_reduce dist.all_reduce(t, op=dist.ReduceOp.SUM) print(f"После all_reduce: {t}") # Завершаем работу группы dist.destroy_process_group() # Попытка выполнить операцию после завершения вызовет ошибку # dist.all_reduce(t)

Результат выполнения кода:

"До завершения: tensor([1, 2, 3, 4, 5])" "После all_reduce: tensor([1, 2, 3, 4, 5])"

Этот пример демонстрирует, что после завершения группы нельзя вызывать коллективные операции. Если попытаться выполнить all_reduce после вызова destroy_process_group, программа завершится с ошибкой.

Смотрите также

  • функцию init_process_group,
    которая инициализирует распределенную группу процессов
  • функцию is_initialized,
    которая проверяет, инициализирована ли группа
  • функцию get_rank,
    которая возвращает номер текущего процесса в группе
  • функцию new_group,
    которая создает новую подгруппу процессов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить