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

Класс ReduceOp

Класс ReduceOp из модуля torch.distributed определяет константы, представляющие различные операции редукции, которые используются в коллективных коммуникациях, таких как all_reduce и reduce. Основные операции включают суммирование (SUM), произведение (PRODUCT), нахождение максимума (MAX), минимума (MIN) и другие.

Класс также предоставляет операцию BAND (побитовое И), BOR (побитовое ИЛИ) и BXOR (побитовое исключающее ИЛИ). Эти операции используются для агрегации данных с нескольких процессов в распределённой среде.

Синтаксис

import torch.distributed as dist # Использование в коллективных операциях dist.all_reduce(tensor, op=dist.ReduceOp.SUM)

Пример

Давайте выполним редукцию суммирования на двух процессах с использованием all_reduce и ReduceOp.SUM:

import torch import torch.distributed as dist # Инициализация процессной группы dist.init_process_group(backend='gloo') rank = dist.get_rank() t = torch.tensor([rank + 1, rank + 2, rank + 3]) # Редукция суммирования dist.all_reduce(t, op=dist.ReduceOp.SUM) if rank == 0: print(t)

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

tensor([4, 6, 8])

Пример

Давайте используем операцию нахождения максимума с ReduceOp.MAX:

import torch import torch.distributed as dist dist.init_process_group(backend='gloo') rank = dist.get_rank() t = torch.tensor([rank * 10 + 1, rank * 10 + 5, rank * 10 + 9]) # Редукция максимума dist.all_reduce(t, op=dist.ReduceOp.MAX) if rank == 0: print(t)

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

tensor([11, 15, 19])

Пример

Давайте используем операцию побитового И с ReduceOp.BAND:

import torch import torch.distributed as dist dist.init_process_group(backend='gloo') rank = dist.get_rank() t = torch.tensor([rank + 1, rank + 2, rank + 3], dtype=torch.int32) # Побитовая редукция И dist.all_reduce(t, op=dist.ReduceOp.BAND) if rank == 0: print(t)

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

tensor([1, 0, 0], dtype=torch.int32)

Пример

Давайте используем операцию ReduceOp.PRODUCT для перемножения тензоров:

import torch import torch.distributed as dist dist.init_process_group(backend='gloo') rank = dist.get_rank() t = torch.tensor([rank + 2, rank + 3, rank + 4]) # Редукция произведения dist.all_reduce(t, op=dist.ReduceOp.PRODUCT) if rank == 0: print(t)

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

tensor([6, 12, 20])

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

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