class_docstr: Strategy for multi-process single-device training on one or multiple nodes.
class_docstr_tok: ["Strategy","for","multi-process","single-device","training","on","one","or","multiple","nodes","."]
docstr: Reduces a tensor from several distributed processes to one aggregated tensor.
  
  Args:
      tensor: the tensor to sync and reduce
      group: the process group to gather results from. Defaults to all processes (world)
      reduce_op: the reduction operation. Defaults to 'mean'/'avg'.
          Can also be a string 'sum' to calculate the sum during reduction.
  
  Return:
      reduced value, except when the input was not a tensor the output remains is unchanged
docstr_tok: ["Reduces","a","tensor","from","several","distributed","processes","to","one","aggregated","tensor",".","Args",":","tensor",":","the","tensor","to","sync","and","reduce","group",":","the","process","group","to","gather","results","from",".","Defaults","to","all","processes","(","world",")","reduce_op",":","the","reduction","operation",".","Defaults","to","'mean'\/'avg","'",".","Can","also","be","a","string","'sum","'","to","calculate","the","sum","during","reduction",".","Return",":","reduced","value",",","except","when","the","input","was","not","a","tensor","the","output","remains","is","unchanged"]
code: def reduce(
      self,
      tensor: Tensor,
      group: Optional[Any] = None,
      reduce_op: Optional[Union[ReduceOp, str]] = "mean",
  ) -> Tensor:
      """Reduces a tensor from several distributed processes to one aggregated tensor.
  
      Args:
          tensor: the tensor to sync and reduce
          group: the process group to gather results from. Defaults to all processes (world)
          reduce_op: the reduction operation. Defaults to 'mean'/'avg'.
              Can also be a string 'sum' to calculate the sum during reduction.
  
      Return:
          reduced value, except when the input was not a tensor the output remains is unchanged
  
      """
      if isinstance(tensor, Tensor):
          return _sync_ddp_if_available(
              tensor, group, reduce_op=reduce_op
          )
      return tensor
  
imports: import logging
  from contextlib import nullcontext
  from datetime import timedelta
  from typing import TYPE_CHECKING, Any, Callable, Dict, List, Literal, Optional, Union
  import torch
  import torch.distributed
  from lightning_utilities.core.rank_zero import rank_zero_only
  from torch import Tensor
  from torch.nn import Module
  from torch.nn.parallel.distributed import DistributedDataParallel
  from torch.optim.optimizer import Optimizer
  from typing_extensions import override
  import lightning.pytorch
  from lightning.fabric.plugins import CheckpointIO, ClusterEnvironment
  from lightning.fabric.plugins.collectives.torch_collective import default_pg_timeout
  from lightning.fabric.strategies import _StrategyRegistry
  from lightning.fabric.utilities.distributed import _distributed_is_initialized, _get_default_process_group_backend_for_device, _init_dist_connection, _sync_ddp_if_available
  from lightning.fabric.utilities.distributed import group
  from lightning.fabric.utilities.imports import _IS_WINDOWS
  from lightning.fabric.utilities.optimizer import _optimizers_to_device
  from lightning.fabric.utilities.seed import reset_seed
  from lightning.fabric.utilities.types import ReduceOp
  from lightning.pytorch.core.optimizer import LightningOptimizer
  from lightning.pytorch.overrides.distributed import _register_ddp_comm_hook, _sync_module_states, prepare_for_backward
  from lightning.pytorch.plugins.precision import Precision
  from lightning.pytorch.strategies.launchers import _MultiProcessingLauncher, _SubprocessScriptLauncher
  from lightning.pytorch.strategies.parallel import ParallelStrategy
  from lightning.pytorch.strategies.strategy import TBroadcast, _ForwardRedirection
  from lightning.pytorch.trainer.states import TrainerFn
  from lightning.pytorch.utilities.exceptions import _augment_message
  from lightning.pytorch.utilities.rank_zero import rank_zero_deprecation, rank_zero_info, rank_zero_only
label_desc: Use image node_id 25 for calling the DDPStrategy obj's underlying member method code with example usage: obj.reduce(tensor, group, reduce_op) and returns: tensor, _sync_ddp_if_available