code: def run(self) -> None:
      # 1. Wait for all works to be started !
      if not all(w.internal_ip for w in self.ws):
          return
  
      # 2. Loop over all node machines
      for node_rank in range(len(self.ws)):
          # 3. Run the user code in a distributed way !
          self.ws[node_rank].run(
              main_address=self.ws[0].internal_ip,
              main_port=self.ws[0].port,
              num_nodes=len(self.ws),
              node_rank=node_rank,
          )
  
          # 4. Stop the machine when finished.
          if self.ws[node_rank].has_succeeded:
              self.ws[node_rank].stop()
  
file_path: pytorch-lightning/src/lightning/app/components/multi_node/base.py
imports: import warnings
  from typing import Any, Type
  from lightning.app.core.flow import LightningFlow
  from lightning.app.core.work import LightningWork
  from lightning.app.structures import List
  from lightning.app.utilities.cloud import is_running_in_cloud
  from lightning.app.utilities.packaging.cloud_compute import CloudCompute
label_desc: Use image node_id 2 for calling the MultiNode obj's underlying member method code with example usage: obj.run() without return types