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","."]
code: def __init__(
      self,
      accelerator: Optional["pl.accelerators.Accelerator"] = None,
      parallel_devices: Optional[List[torch.device]] = None,
      cluster_environment: Optional[ClusterEnvironment] = None,
      checkpoint_io: Optional[CheckpointIO] = None,
      precision_plugin: Optional[Precision] = None,
      ddp_comm_state: Optional[object] = None,
      ddp_comm_hook: Optional[Callable] = None,
      ddp_comm_wrapper: Optional[Callable] = None,
      model_averaging_period: Optional[int] = None,
      process_group_backend: Optional[str] = None,
      timeout: Optional[timedelta] = default_pg_timeout,
      start_method: Literal[
          "popen", "spawn", "fork", "forkserver"
      ] = "popen",
      **kwargs: Any,
  ) -> None:
      super().__init__(
          accelerator=accelerator,
          parallel_devices=parallel_devices,
          cluster_environment=cluster_environment,
          checkpoint_io=checkpoint_io,
          precision_plugin=precision_plugin,
      )
      log.debug(f"{self.__class__.__name__}: initializing DDP strategy")
      self._forward_redirection = _DDPForwardRedirection()
      self._num_nodes = 1
      self._ddp_kwargs = kwargs
      self._ddp_comm_state = ddp_comm_state
      self._ddp_comm_hook = ddp_comm_hook
      self._ddp_comm_wrapper = ddp_comm_wrapper
      self._model_averaging_period = model_averaging_period
      self._model_averager: Optional[ModelAverager] = None
      self._process_group_backend: Optional[str] = process_group_backend
      self._timeout: Optional[timedelta] = timeout
      self._start_method = start_method
  
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 1 to create a new DDPStrategy object from inherited base classes: ParallelStrategy with example: obj = DDPStrategy(accelerator, parallel_devices, cluster_environment, checkpoint_io, precision_plugin, ddp_comm_state, ddp_comm_hook, ddp_comm_wrapper, model_averaging_period, process_group_backend, timeout, start_method)