code: def run(
      self,
      main_address: str,
      main_port: int,
      num_nodes: int,
      node_rank: int,
  ):
      nprocs = (
          torch.cuda.device_count() if torch.cuda.is_available() else 1
      )
      torch.multiprocessing.spawn(
          distributed_train,
          args=(main_address, main_port, num_nodes, node_rank, nprocs),
          nprocs=nprocs,
      )
  
file_path: pytorch-lightning/docs/source-app/levels/basic/hello_components/pt_multinode.py
imports: from lightning.app import LightningWork, LightningApp, CloudCompute
  from lightning.app.components import MultiNode
  import torch
  from torch.nn.parallel.distributed import DistributedDataParallel
label_desc: Use image node_id 1 for calling the PyTorchDistributed obj's underlying member method code with example usage: obj.run(main_address, main_port, num_nodes, node_rank) without return types