SyncBatchNorm
-
class torch.nn.modules.batchnorm.SyncBatchNorm(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True, process_group=None, device=None, dtype=None, *, bias=True)[исходный код] -
Применяет пакетную нормализацию к N-мерному входному тензору.
N-мерный вход представляет собой мини-пакет [N-2]-мерных входных данных с дополнительным измерением каналов, как описано в статье Пакетная нормализация: ускорение обучения глубоких сетей за счёт уменьшения внутреннего ковариативного сдвига .
Среднее значение и стандартное отклонение вычисляются отдельно для каждого измерения по всем мини-пакетам в одних и тех же группах процессов. и — обучаемые векторы параметров размера
C(гдеC— размер входных данных). По умолчанию элементы выбираются из распределения , а элементы устанавливаются равными 0. Стандартное отклонение вычисляется с помощью смещённой оценки, эквивалентнойtorch.var(input, correction=0).Также по умолчанию во время обучения этот слой сохраняет скользящие оценки вычисленных среднего значения и дисперсии, которые затем используются для нормализации во время оценки. Скользящие оценки сохраняются с коэффициентом
momentum, равным по умолчанию 0.1.Если
track_running_statsустановлено вFalse, этот слой не сохраняет скользящие оценки, а во время оценки вместо этого использует статистики мини-пакета.Примечание
Этот аргумент
momentumотличается от аргумента, используемого в классах оптимизаторов, и от общепринятого понятия импульса. Математически правило обновления скользящих статистик здесь имеет вид , где — оценённая статистика, а — новое наблюдаемое значение.Поскольку пакетная нормализация выполняется для каждого канала в измерении
C, вычисляя статистики по срезам(N, +), обычно этот метод называют объёмной пакетной нормализацией или пространственно-временной пакетной нормализацией.В настоящее время
SyncBatchNormподдерживает толькоDistributedDataParallel(DDP) с одним графическим процессором на процесс. Используйтеtorch.nn.SyncBatchNorm.convert_sync_batchnorm(), чтобы преобразовать слойBatchNorm*DвSyncBatchNormперед обёртыванием сети в DDP.- Параметры:
-
- num_features (int) – для ожидаемого входного тензора размера
-
eps (float) – значение, добавляемое к знаменателю для численной устойчивости. По умолчанию:
1e-5 -
momentum (float | None) – значение, используемое для вычисления running_mean и running_var. Можно задать
Noneдля вычисления накопительного скользящего среднего (то есть простого среднего). По умолчанию: 0.1 -
affine (bool) – логическое значение: если установлено в
True, у этого модуля есть обучаемые аффинные параметры. По умолчанию:True -
track_running_stats (bool) – логическое значение: если установлено в
True, модуль отслеживает скользящие среднее значение и дисперсию; если установлено вFalse, модуль не отслеживает эти статистики и инициализирует буферы статистикrunning_meanиrunning_varзначениемNone. Если эти буферы имеют значениеNone, модуль всегда использует статистики мини-пакета как в режиме обучения, так и в режиме оценки. По умолчанию:True - process_group (Any | None) – синхронизация статистик выполняется отдельно в каждой группе процессов. По умолчанию синхронизация выполняется во всём мире
-
bias (bool) – если установлено в
False, слой не будет обучать аддитивное смещение (актуально, только еслиaffineравноTrue). По умолчанию:True
- Размерность:
-
- Вход:
- Выход: (такая же размерность, как у входа)
Примечание
Синхронизация статистик пакетной нормализации выполняется только во время обучения, то есть синхронизация отключается, когда
model.eval()установлено или еслиself.trainingв противном случае равноFalse.Примеры:
>>> # With Learnable Parameters >>> m = nn.SyncBatchNorm(100) >>> # creating process group (optional) >>> # ranks is a list of int identifying rank ids. >>> ranks = list(range(8)) >>> r1, r2 = ranks[:4], ranks[4:] >>> # Note: every rank calls into new_group for every >>> # process group created, even if that rank is not >>> # part of the group. >>> process_groups = [torch.distributed.new_group(pids) for pids in [r1, r2]] >>> process_group = process_groups[0 if dist.get_rank() <= 3 else 1] >>> # Without Learnable Parameters >>> m = nn.BatchNorm3d(100, affine=False, process_group=process_group) >>> input = torch.randn(20, 100, 35, 45, 10) >>> output = m(input) >>> # network is nn.BatchNorm layer >>> sync_bn_network = nn.SyncBatchNorm.convert_sync_batchnorm(network, process_group) >>> # only single gpu per process is currently supported >>> ddp_sync_bn_network = torch.nn.parallel.DistributedDataParallel( >>> sync_bn_network, >>> device_ids=[args.local_rank], >>> output_device=args.local_rank)
-
classmethod convert_sync_batchnorm(module, process_group=None)[исходный код] -
Преобразует все слои
BatchNorm*Dмодели в слоиtorch.nn.SyncBatchNorm.- Параметры:
-
-
module (nn.Module) – модуль, содержащий один или несколько слоёв
BatchNorm*D - process_group (необязательно) – группа процессов, в рамках которой выполняется синхронизация; по умолчанию — весь мир
-
module (nn.Module) – модуль, содержащий один или несколько слоёв
- Возвращает:
-
Исходный
moduleс преобразованными слоямиtorch.nn.SyncBatchNorm. Если исходныйmoduleявляется слоемBatchNorm*D, вместо него будет возвращён новый объект слояtorch.nn.SyncBatchNorm.
Пример:
>>> # Network with nn.BatchNorm layer >>> module = torch.nn.Sequential( >>> torch.nn.Linear(20, 100), >>> torch.nn.BatchNorm1d(100), >>> ).cuda() >>> # creating process group (optional) >>> # ranks is a list of int identifying rank ids. >>> ranks = list(range(8)) >>> r1, r2 = ranks[:4], ranks[4:] >>> # Note: every rank calls into new_group for every >>> # process group created, even if that rank is not >>> # part of the group. >>> process_groups = [torch.distributed.new_group(pids) for pids in [r1, r2]] >>> process_group = process_groups[0 if dist.get_rank() <= 3 else 1] >>> sync_bn_module = torch.nn.SyncBatchNorm.convert_sync_batchnorm(module, process_group)
-
forward(input)[исходный код] -
Выполняет прямой проход.
- Тип возвращаемого значения:
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.nn.modules.batchnorm.SyncBatchNorm.html