class_docstr: Applies synchronous version of N-dimensional BatchNorm.
  
  In this version, normalization parameters are synchronized across workers during forward pass.
  This is very useful in situations where each GPU can fit a very small number of examples.
  
  See https://pytorch.org/docs/stable/nn.html#batchnorm2d for more details about BatchNorm.
  
  Arguments:
      num_features: number of channels `C` from the shape `(N, C, ...)`
      eps: a value added to the denominator for numerical stability. Default: 1e-5
      momentum: the value used for the running_mean and running_var
          computation. Can be set to `None` for cumulative moving average
          (i.e. simple average). Default: 0.1
      affine: a boolean value that when set to `True`, this module has
          learnable affine parameters. Default: `True`
      track_running_stats: a boolean value that when set to `True`, this
          module tracks the running mean and variance, and when set to `False`,
          this module does not track such statistics and always uses batch
          statistics in both training and eval modes. Default: `True`
  
  .. note:: Only GPU input tensors are supported in the training mode.
class_docstr_tok: ["Applies","synchronous","version","of","N-dimensional","BatchNorm",".","In","this","version",",","normalization","parameters","are","synchronized","across","workers","during","forward","pass",".","This","is","very","useful","in","situations","where","each","GPU","can","fit","a","very","small","number","of","examples",".","See","https",":","\/\/pytorch.org\/docs\/stable\/nn.html","#","batchnorm2d","for","more","details","about","BatchNorm",".","Arguments",":","num_features",":","number","of","channels","`","C","`","from","the","shape","`","(","N",",","C",",","...",")","`","eps",":","a","value","added","to","the","denominator","for","numerical","stability",".","Default",":","1e-5","momentum",":","the","value","used","for","the","running_mean","and","running_var","computation",".","Can","be","set","to","`","None","`","for","cumulative","moving","average","(","i.e",".","simple","average",")",".","Default",":","0.1","affine",":","a","boolean","value","that","when","set","to","`","True","`",",","this","module","has","learnable","affine","parameters",".","Default",":","`","True","`","track_running_stats",":","a","boolean","value","that","when","set","to","`","True","`",",","this","module","tracks","the","running","mean","and","variance",",","and","when","set","to","`","False","`",",","this","module","does","not","track","such","statistics","and","always","uses","batch","statistics","in","both","training","and","eval","modes",".","Default",":","`","True","`","..","note",":",":","Only","GPU","input","tensors","are","supported","in","the","training","mode","."]
code: def _check_input_dim(self, input):
      if input.dim() < 2:
          raise ValueError(
              "expected at least 2D input (got {}D input)".format(
                  input.dim()
              )
          )
  
file_path: horovod/horovod/torch/sync_batch_norm.py
imports: from horovod.torch.mpi_ops import allgather_async, allreduce_async, Sum, size, synchronize
  from packaging import version
  import torch
  from torch.autograd.function import Function
  import torch.nn.functional
  from torch.nn.modules.batchnorm import _BatchNorm
label_desc: Use image node_id 2 for calling the SyncBatchNorm obj's underlying member method code with example usage: obj._check_input_dim(input) without return types